考点:sql注入(万能密码) 数组绕过md5 md5碰撞
[BJDCTF2020]Easy MD5
-
考点:sql注入(万能密码) 数组绕过md5 md5碰撞
-
只有一个输入框和提交
-
在响应头处找到提示信息
-
查一下md5函数的用法
-
所以sql语句是把密码用16字符二进制比对,试着构造一个万能密码
-
如果通过md5之后返回字符串是’or 1的话,形成一个永真条件,select * from ‘admin’ where password=’ 'or ‘6…’
-
这个可以用ffifdyop绕过
-
ffifdyop 这个字符串被 md5 哈希了之后会变成 276f722736c95d99e921722cf9ed621c,这个字符串前几位刚好是 ’ or ‘6而 Mysql 刚好又会把 hex 转成 ascii 解释,因此拼接之后的形式是 select * from ‘admin’ where password=’’ or ‘6xxxxx’,等价于 or 一个永真式,因此相当于万能密码,可以绕过md5()函数。
-
然后进入新页面
-
在页面源代码中有注释的一个类型比较(MD5碰撞)
-
要求值不等但是md5相等
-
payload:?a[]=QNKCDZO&b[]=s878926199a
-
因为md5转换后只要是0e开头,弱类型比较会认为是科学计数法,但是0e开头无论后面是什么,都等于0,从而绕过
-
然后进入新的页面
-
和刚才的不同,这次md5的比较用的===,md5碰撞就不能用了
-
payload:param1[]=suibianxie1¶m2[]=suibianxie2
-
md5不能处理数组,所如果弄数组传值,那么md5会返回null,null===null从而绕过
-