知识点:
1、MD5(str,true)绕过
当raw项为true时,返回的这个原始二进制不是普通的二进制(0,1),
比如ffifdyop
所以当绕过md5(str,true)时,需要or和单引号或者双引号(或者不需要任何符号)闭合查询
2、普通md5绕过
PHP在处理哈希字符串时,会利用”!=”
或”==”
来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。
"==="
和"!=="
即strict比较符,只有在类型相同时才相等。"==“和”!="即non-strict比较符,会在类型转换后进行比较。
此外0 == 字符
会被认为是正确的,可以绕过验证
常见的md5碰撞字符串网上可以查找到
3、绕过a===b
md5函数处理数组时直接返回null,所以两个参数都为数组类型,就可实现a!==b&&md5(a)===md5(b)
题解
随便输入有提示:
select * from 'admin' where password=md5($pass,true)
构造payload password=ffifdyop
出现另一个页面
构造payload
?a=QNKCDZO&b=s878926199a
出现第三个页面
提交?param1[]=1¶m2[]=2
即可(利用hackbar或burpsuite工具post方式提交)