Annonce

Réduire
Aucune annonce.

Je n'arrive pas à m'auto-hacker

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Je n'arrive pas à m'auto-hacker

    Bonjour !

    Je suis entrain de faire un site pour un projet personnel et par envie je voulais voir si je savais me hacker. Bref j'essaie, je n'y arrive pas et pourtant je n'ai fait aucune protection sur mon code.
    Voilà mon code :
    Code PHP:
                         $conn = new PDO("mysql:host=$servername;dbname=mydb"$username$password);
                            
    $conn->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
                            
    $req $conn->query("SELECT `Name` FROM `computers` WHERE `Classrooms_idClassroom` = "$_GET["room"]);
                            
                            while (
    $data $req->fetch())
                            {
                                echo 
    $data;
                                
                            } 
    Donc dans l'url j'essaye de mettre un ' j'obtiens bien une erreur :
    Code HTML:
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1' in C:\xampp\htdocs\poool\computers.php:50 Stack trace: #0 C:\xampp\htdocs\poool\computers.php(50): PDO->query('SELECT `Name` F...') #1 {main} thrown in C:\xampp\htdocs\poool\computers.php on line 50
    Donc qu'est ce que je suis censé mettre dans mon url pour me hacker? Merci !

  • #2
    Bonjour,

    mettre un ' c' est juste pour detecter la presence d'une faille. En l'occurence, tu as eu l'erreur donc ton code est bien faillible (c'etait assez obvious en même temps...).

    Maintenant tu dois l'exploiter cette faille. "Hacker" ca veut rien dire, tu dois avoir un objectif, et l'accomplir.

    Là, tu peux par exemple récupérer tout le contenu de ta base de données, les alterer, les supprimer, que sais-je... Je te laisse regarder les différents tutoriels presents sur le forum si tu ne sais pas comment executer une commande SQL à partir de ta faille.

    Bonne journée..
    Mon blog : http://rootsheep.info

    Commentaire


    • #3
      ton code est en effet minimaliste ...
      Tu injectes directement la variable de ton tableau superglobal _GET, dans ta requête SQL. C'est l'erreur à ne surtout pas faire !

      Il te faut impérativement filtrer ta variable retourné dans le tableau _GET.
      Pour cela, tu as les fonctions des filtres sanitizer de PHP - cherche un de mes posts où j'en parle ...

      Une phase intermédiaire serait de vérifier le type ou que la valeur de la variable soit bien comprise dans un delta de valeur bel et bien attendue, selon tes données. Sinon, out !

      Ensuite, tu prépares ta requête SQL - il y a différement moyen d'utiliser PDO:repare(), tu la "bind" - bindparam", "bindValue", l'une ou l'autre selon ton besoin - , tu l'exécutes, et tu récupères ensuite tes données de ta base.
      (cf : https://secure.php.net/manual/fr/pdo.prepare.php et particulièrement les exemples fournis qui t'aideront à comprendre comment préparer ta requête SQL...)
      C'est d'ailleurs tout cela la puissance d'user de PHP::PDO !
      Et, là de même, si tu n'as pas de correspondance, correcte, c'est direct out la requête, du style "Requête filtrée, va-t-en bad dude!!"
      Dernière modification par _42_, 10 mars 2016, 11h36. Motif: rajout url
      "Un hacker est un justicier du monde libre, du libre partage, de la libre information... "
      Quel slogan !
      Tout un programme ... une sacrée vision ... comme je les aime !

      Commentaire


      • #4
        Je sais que mon code est faillible ahah (je l'ai fait exprès pour essayer de me hacker). Je me suis un peu mal exprimé, j'arrive à exploiter cette faille mais lorsque la faille est censée me retourner les informations j'obtiens ceci
        Notice: Array to string conversion in C:\xampp\htdocs\xxx\kkk.php on line 54
        Et là, je suis bloqué. Dans mon code il y a donc le echo dans la boucle pour afficher le résultat de ma requête. Je l'ai remplacé par un print_r et là, magie ça marche. Cependant je ne comprends pas comment je pourrais passer ce problème sans à avoir modifier mon fichier php.

        Commentaire


        • #5
          La réponse à ta question est dans le message d'erreur, le typage de ta variable data est de type tableau, il faut donc le traiter comme tel ...

          Par exemple:
          Code PHP:
          // Envoi d'une requête
          $req="SELECT `Name` as name FROM `computers` WHERE `Classrooms_idClassroom` = " $_GET["room"];
          $res=$connex->query($req);

          // Traitement des données
          while ($row=$res->fetch(PDO::FETCH_OBJ)) {
              
          //Affichage des données
              
          echo $row->name;
          }

          // Fermeture du curseur
          $res->closeCursor();

          // Déconnexion de la base de données
          $conn=null

          Commentaire

          Chargement...
          X