Blind SQL Injection
Ici, je ne vais pas me casser la tête à vous apprendre les blind sql injection (peut être une autre fois), je vais seulement vous montrer comment créer un exploit en python pour exploiter ce genre de faille.
Bien sûr on pourrait tout simplement deviner le mot de passe à la main, mais non. Pourquoi faire compliqué quand on peut faire simple.
A la fin de ce tuto, plus jamais vous ne bruteforcerez de mot de passe à la main comme (excusez du langage) un gros con, car on va tout simplement programmer un bruteforceur inteligent qui fera tout à notre place.
Ce dont on aura besoin :
On va partir du fait qu'on a déjà localisé l'url faillible, et on est sûr qu'il y a une injection aveugle dedans. Disons par exemple que l'url cible soit : https://www.monsite.com/script.php?id=2
Si vous vous rappelez de votre cours sur les blind SQL injection vous saurez qu'il y a un résultat affiché pour vrai, et un autre totalement différent pour faux. Nous on a besoin du vrai qui n'apparait pas dans le faux (c'est possible que le vrai apparaisse aussi dans le faux). Nous prendrons par exemple "admin" comme message pour vrai.
Il nous faudra aussi l'ID du password à deviner, en temps normal vous devrez la chercher, mais moi je prendrai par défaut "passwd".
Il ne nous manque plus que la longueur MAX que vous autoriserez pour le pass, disons 50.
Bien, normalement, on a en théorie tout ce qu'il nous faut pour bruteforcer le password maintenant, on passe à la pratique.
Le TP :
Le code comme je l'ai citer plus haut sera du python, python et rien que du python.
On va tout d'abord injecter une requète SQL qui va nous permettre de bruteforcer la longueur du password :
code : sql |
length(passwd) = i -- avec i un compteur qu'on incrémente |
Une fois la longueur du mot de passe trouvée, on va attaquer la partie intéressante qui est le bruteforcing.
Pour ce faire, on va utiliser la requète suivante :
code : sql |
substring(passwd, i, 1) = char(c) -- avec c un entier qu'on incrémente à chaque boucle, i la longueur du pass (i s'incrémante à chaque fois qu'on tombe sur le message "vrai") |
Je pense que vous savez passer des arguments à la ligne de commande en python, car ce sera nécessaire :
code : python |
#!/usr/bin/python main () ; |