作者:mobiledu2502874455 | 来源:互联网 | 2024-10-27 19:04
本文针对Bugku平台上的“MD5碰撞”挑战进行详细解析。该挑战要求参赛者通过分析MD5哈希函数的碰撞特性,解决页面提示的输入问题。文章首先介绍了靶场链接和题目背景,随后详细描述了解题思路和步骤,包括如何利用已知的MD5碰撞实例来绕过验证机制,最终成功完成挑战。通过本分析,读者可以深入了解MD5算法的安全缺陷及其在实际应用中的潜在风险。
0×00 靶场链接
http://123.206.87.240:9009/md5.php


题目名为md5碰撞,然后页面提示为输入a

不对???
想到之前输入的?id=1之类的难道是要赋值

可能值不太对吧
那就想想MD5碰撞
MD5碰撞
PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。
攻击者可以利用这一漏洞,通过输入一个经过哈希后以”0E”开头的字符串,即会被PHP解释为0,如果数据库中存在这种哈希值以”0E”开头的密码的话,他就可以以这个用户的身份登录进去,尽管并没有真正的密码。
所以就令a=一个哈希后以”0E“开头的字符串即可
QNKCDZO | 0e830400451993494058024219903391 |
s878926199a | 0e545993274517709034328855841020 |
s155964671a | 0e342768416822451524974117254469 |
s214587387a
| 0e848240448830537924465865611904 |
s214587387a | 0e848240448830537924465865611904 |
s878926199a | 0e545993274517709034328855841020 |
s1091221200a | 0e940624217856561557816327384675 |
s1885207154a | 0e509367213418206700842008763514 |
随便试一下就出来了
