password=ffifdyop  

在 PHP5 和 PHP7 中,当两个 md5 进行比较时,若参数是不同的数组,那么 == 和 === 比较的结果均为 True

1.“0E”绕过

常见规则,

1
2
3
$_GET['name'] != $_GET['password']

`MD5($_GET['name']) == MD5($_GET['password'])`

满足上述规则时,可以使用以0E开头的hash值绕过,因为处理hash字符串时,PHP会将每一个以 0E开头的哈希值解释为0,那么只要传入的不同字符串经过哈希以后是以 0E开头的,那么PHP会认为它们相同

下面是一些哈希后0E开头的字符

1
2
3
4
5
6
7
s878926199a

s155964671a

s214587387a

s214587387a

2.数组绕过

$_POST['param1']!==$_POST['param2'] && md5($_POST['param1'])===md5($_POST['param2'])

一道例题

当满足上面的条件时,由于PHP中MD5函数的特性,可以使用数组绕过

md5([1,2]) == md5([3,4]) == NULL

故只要GET方法传入a[]=1&b[]=2即可绕过

3.MD5碰撞

`(string)$_POST[‘param1’]!==(string)$_POST[‘param2’] && md5($_POST[‘param1’])===md5($_POST[‘param2’])

使用MD5碰撞生成 工具 得到hash值相同的不同字符串

先建立两个空文件,然后在终端中输入

.\fastcoll_v1.0.0.5.exe -i .\a.txt .\b.txt -o c.txt d.txt

生成的c.txt 和 d.txt中的字符串就是hash值相等的字符串

== :只比较值

=== :比较值和类型

一.弱比较(MD5函数)==

1
<?php if ($_GET['name'] != $_GET['password'] && MD5($_GET['name']) == MD5($_GET['password'])){ echo "flag"; }

PHP在处理哈希字符串时,它把每一个以“0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以“0E”开头的,PHP会当作科学计数法来处理,也就是0的n次方,得到的值比较的时候都相同。

这种方式只有在弱比较的时候才能使用。

以下值在md5加密后以0E开头:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

- QNKCDZO

- 240610708

- s878926199a

- s155964671a

- s214587387a

- s214587387a

- 0e215962017

以下值在sha1加密后以0E开头:

1
2
3
4
5
6
7
8
9
10
11
12
- aaroZmOk

- aaK1STfY

- aaO8zKZF

- aa3OFF9m

- 0e1290633704

- 10932435112

双重MD5加密后0E开头:

1
2
3
4
5
6

- 7r4lGXCH2Ksu2JNT3BYM

- CbDLytmyGm2xQyaLNhWn

- 770hQgrBOjrcqftrlaZk

还有的时候会限制字符串为纯数字或字母,这些特殊条件的字符串可以自行搜索。

二. 强比较(MD5函数)===

不相等的两个字符串md5后仍然相等

payload:

1
2
3
array1=%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

array2=%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

上面是不相等的两个字符串md5后仍然相等

例题:
https://blog.csdn.net/weixin_52118430/article/details/123855542#:~:text=%E4%BB%80%E4%B9%88%E5%8F%AB%E5%BC%BAmd5%E7%A2%B0%E6%92%9E%EF%BC%9F%20%E4%B8%80%E8%88%AC%E6%AF%94%E8%BE%83%E7%AE%80%E5%8D%95%E7%9A%84%E6%98%AF%E5%83%8F%E8%BF%99%E7%A7%8D%20if%20%28md5%20%28a1%29%20%3D%3D%20md5%28a2%29%29%EF%BC%8C%E6%88%91%E4%BB%AC%E7%A7%B0%E4%B8%BA%E5%BC%B1%E6%AF%94%E8%BE%83%E7%B1%BB%E5%9E%8B%EF%BC%8C%E8%80%8C%E5%83%8F%20if,%E5%92%8C%20%3D%3D%3D%EF%BC%8C%E6%88%91%E4%BB%AC%E5%8F%AF%E4%BB%A5%E8%BF%99%E4%B9%88%E7%90%86%E8%A7%A3%20%3D%3D%20%EF%BC%9A%20%E5%8F%AA%E6%AF%94%E8%BE%83%E5%80%BC%20%3D%3D%3D%20%EF%BC%9A%20%E6%AF%94%E8%BE%83%E5%80%BC%E5%92%8C%E7%B1%BB%E5%9E%8B

1
2
3
array1=%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
array2=%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