github编辑

[BJDCTF2020]Easy MD5

[BJDCTF2020]Easy MD5

考点

  • MySQL的md5函数

  • 数组绕过hash

  • 使用fastcoll和tail进行hash碰撞

wp

在返回头可以看到提示

明显就是要绕sql语句了,在MySQL中md5(string,raw)解释如图

可以看到,select * from 'admin' where password=md5($pass,true) 这个语句中的 raw 为 True,即该函数返回 16 位原始二进制格式字符串

举个例子,假设输入的字符串为 x,t=md5(x),y=md5(x,true) x='admin',那么t='21232f297a57a5a743894a0e4a801fc3',对t进行hex解码,就得到了 y='!#/)zW\xa5\xa7C\x89J\x0eJ\x80\x1f\xc3'

本题就是寻找一个字符串,让它的 y 包含 'or' 这样执行的语句就是 select * from 'admin' where password='...'or'...' 这样就绕过了该语句,通过爆破可以得到这个字符串,为 ffifdyop,当然不止一个,还有129581926211651571912466741651878684928

输入后跳转到新页面

在注释看到代码

很简单的一个绕过了,levels91.php?a[]=1&b[]=2 再次跳转到新页面,又是一个简单的md5绕过,同样采取数组绕过

当然,还有一种方案是使用 fastcoll 和 tail 可以解决这些问题

最后更新于