打开可以看到如下界面:
打开Burp Suite,输入111后点击提交查询,可以看到如下图所示,将其发至Repeater。
切换至Repeater,进行发送后,可以看到在Response中password=md5($pass,true).
这个时候就想到md5的万能密码。
md5构造万能密码题型: select * from 'admin' where password=md5($pass,true)
- ffifdyop
- 这个点的原理是 ffifdyop 这个字符串被 md5 哈希了之后会变成 276f722736c95d99e921722cf9ed621c,这个字符串前几位刚好是 ‘ or ‘6,而 Mysql 刚好又会吧 hex 转成 ASCII
解释,因此拼接之后的形式是select * from 'admin' where password='' or '6xxxxx'。等价于 or 一个永真式,因此相当于万能密码,可以绕过md5()函数。
此时,输入 ffifdyop 并提交,显示如下:
这个时候直接查看页面源代码,如下图所示。
这是md5弱类型,此时就可以使用 ?a=QNKCDZO&b=240610708
md5弱类型: 特殊的md5:0e在比较的时候会将其视作为科学计数法,所以无论0e后面是什么,0的多少次方还是0。
以下为几个md5()
哈希后值为0e
的字符串:
QNKCDZO 0e830400451993494058024219903391 240610708 0e462097431906509019562988736854 s878926199a 0e545993274517709034328855841020 s155964671a 0e342768416822451524974117254469 s214587387a 0e848240448830537924465865611904 s214587387a 0e848240448830537924465865611904
从上图可以看到,此时是md5强类型,可以使用 param1[]=1¶m2[]=2
md5强类型: 当进行md5加密的双方进行!==强比较的时候,通过科学计数法0e的这种方式无法绕过,它会将比较的双方的值一个一个字符的对比,而不是解析运算为0后进行比较,但是可以通过传入数组的方式来绕过。最后得到flag。