当前位置: 代码迷 >> 综合 >> 【代码审计】buu_[BJDCTF2020]Easy MD5
  详细解决方案

【代码审计】buu_[BJDCTF2020]Easy MD5

热度:82   发布时间:2024-01-19 13:27:10.0

1.使用burp抓包重发,在响应包中看到提示,密码框直接输入ffifdyop,百度搜索md5($pass,true),发现万能密码ffifdyop 

实现md5绕过原因:

"select * from 'admin' where password='".md5($pass,true)."'"

当raw项为true时,数据库会把16进制转为ascii解释,返回的这个原始二进制,不是普通的二进制(0,1),而是'or’6\xc9]\x99\xe9!r,\xf9\xedb\x1c这种。

or后面的句子第一个字母是非0打头的数字符,比如为‘1abc’或者‘-1bde’都会被认为是true。以0开头会认为是false。

这时原来的语句就是:

"select * from 'admin' where password=''or'6蒥欓!r,b' "

该语句or 6,永真

2.进入下一个网页查看源码,发现是一个简单的md5弱绕过,构造数组即可:

http://4cd83477-894d-4dc4-a3c4-6ff6b6c6a96b.node4.buuoj.cn:81/levels91.php?a[]=1&b[]=2

3.得到flag.php的代码,和上面一样使用绕过比较md5的强绕过,只不过这里注意是post传参:

param1[]=1&param2[]=2

总结:

本题比较简单,主要了解md5绕过的万能密码原理

下面解释md5绕过的三种方式:

1.md5加密和0e开头的字符串:

原理:0e开头的会被识别成科学计数法,结果均为0,比较时0=0为true绕过

QNKCDZO  s878926199a  s155964671a  s214587387a  s214587387a

2.数组绕过

原理:md5()函数无法处理,返回null,在强比较里面null=null为true绕过

3.md5碰撞

收集一组相等的字符串:

a=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2
b=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2