随便提交都无果,bp抓包:
当password=md5($pass,true)
为真时,就能够select *了,而md5()函数功能如下:
就是说我们输入$pass时,首先会被md5加密,然后会被转换成16字符的二进制格式。这里百度了一下有这么一个字符串(这里也可以直接理解成md5后,mysql自动把md5值当成hex转化成字符串了)
:
ffifdyop
MD5后 | 276f722736c95d99e921722cf9ed621c |
转换成16字符的二进制格式 | 'or’6\xc9]\x99\xe9!r,\xf9\xedb\x1c |
mysql自动解析成string | 'or’6]!r,b |
所以hint里的表达式就会变成:
select * from 'admin' where password=''or'6]!r,b'
当or后面接的是一个数字的话,sql语句就变成:
select * from 'admin' where password=''or true
就能执行sql语句了:
常见的MD5碰撞(https://blog.csdn.net/weixin_44348894/article/details/102955115),数组绕过:
再绕一次就拿到flag了。
参考链接:
https://blog.csdn.net/March97/article/details/81222922