PHP中MD5和sha1绕过方式总结
### 1.0e绕过弱比较(MD5函数漏洞)
PHP在处理哈希字符串时,它把每一个以“0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以“0E”开头的,PHP会当作科学计数法来处理,也就是0的n次方,得到的值比较的时候都相同。
这种方式只有在弱比较的时候才能使用。
以下值在md5加密后以0E开头:
- QNKCDZO
- 240610708
- s878926199a
- s155964671a
- s214587387a
- s214587387a
以下值在sha1加密后以0E开头:
- aaroZmOk
- aaK1STfY
- aaO8zKZF
- aa3OFF9m
- 0e1290633704
- 10932435112
双重MD5加密后0E开头:
- 7r4lGXCH2Ksu2JNT3BYM
- CbDLytmyGm2xQyaLNhWn
- 770hQgrBOjrcqftrlaZk
还有的时候会限制字符串为纯数字或字母,这些特殊条件的字符串可以自行搜索。
1|02.数组绕过
对于php强比较和弱比较:md5(),sha1()函数无法处理数组,如果传入的为数组,会返回NULL,所以两个数组经过加密后得到的都是NULL,也就是相等的。
GET情况下的payload(POST同理):
2|03.MD5碰撞
2|1MD5
比较a,b时将a,b转换为字符串比较,这边就不能用数组了。因为数组转换为字符串时都会变成Array。
因为数组要求构造a和b不同,但是MD5相同,也就是说要求传入两个MD5相同的不同字符串。所以我们只能用MD5碰撞来实现
注意一点,post时一定要urlencode!!!
文件:
linux使用md5collgen碰撞生成两个md5值相同但内容不同的文件
windows可以下载fastcoll,碰撞生成两个md5值相同但内容不同的文件
2|2sha1碰撞:
url:
两个SHA1值相同而不一样(SHA256的值不同)的pdf文件, shattered-1.pdf和shattered-2.pdf
3|04.$a==md5($a)
0e215962017
的 MD5 值也是由 0e 开头,在 PHP 弱类型比较中相等
4|05.NaN 和 INF
NAN和INF,分别为非数字和无穷大,但是var_dump一下它们的数据类型却是double,那么在md5函数处理它们的时候,是将其直接转换为字符串”NAN”和字符串”INF”使用的,但是它们拥有特殊的性质,它们与任何数据类型(除了true)做强类型或弱类型比较均为false,甚至NAN=NAN都是false,但md5('NaN')=md5('NaN')为true。
5|06.截断比较
5|1MD5截断爆破
给出一段md5值要求找到匹配的原码。一般使用爆破脚本:
5|2sha256截断爆破
脚本:
__EOF__

本文链接:https://www.cnblogs.com/dre0m1/p/16062369.html
关于博主:I am a good person
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库