2025-10-24-web2_hash_WP
十月 24, 2025
web2-hash
据说出自 2020年2月安恒月赛
本文参考 Extrader 大佬的博客 https://www.extrader.top/posts/5d485480/
题目是白盒
代码呈上
1 |
|
绕过逻辑
前四个IF
条件 1:if( $val1 == $val2 ) → 触发 die
- 在 PHP 中,两个不同内容的数组使用 == 比较时结果是 false,即使内容不同。
- 所以:
[1] == [2] → false
条件 2:if( md5($val1) != md5($val2) ) → 要通过必须 md5($val1) == md5($val2)
- PHP 无法对数组进行 md5() 计算,会发出警告并返回 NULL。
- 所以:
NULL != NULL → false
条件 3:if( $val3 == $val4 )
- 同 条件 1
条件 4:if ( md5($val3) !== md5($val4))
- !== 是 强比较(类型 + 值)
- 因为两个 NULL 类型相同,值也相同,所以 !== 为 false
五六个IF
- 分别需要传入三个值
1 | $val5 = (string)@$_POST['val5']; |
传入的内容会被转换为字符串
然后
1 | if( $val5 == $val6 || $val5 == $val7 || $val6 == $val7 ){ |
val5 、 val6、val7 三个内容不能相同,但是三个的MD5值必须严格相同(!== ) 内容和类型都一样
所以必须构造三个MD5相同但内容不同的数据
使用两个工具
- fastcoll
- FastColl 是一个专门用于生成MD5碰撞的著名工具,由Marc Stevens(埃因霍芬理工大学)开发。它可以快速生成两个具有相同MD5哈希值但内容不同的文件。
- tail
- 文件尾部操作工具,拼接文件
1 | E:\Dfile\CTF\Web\MD5>fastcoll_v1.0.0.5.exe -p jlzj1 -o jlzj00 jlzj01 |
这样成功构造了四个文件
检查文件的脚本
1 | import hashlib |
检查结果:
1 | └─$ python check5.py |
这样就能绕过了
传数据的方法:
1 | with open('jlzj00', 'rb') as f: |
最后的绕过
借助大佬的攻击脚本得到
1 | import hashlib |
1 | └─$ python wdf.py |
至此,可以构造完整exp
1 | import requests |
得到flag
1 | you flag:"</span><span style="color: #007700">;<br /> echo </span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #DD0000">'/var/www/html/flag.php'</span><span style="color: #007700">);<br />}</span> |
查看评论