PHP 绕过md5()函数比较

mac2024-10-12  75

存在如下方法:

1、PHP在处理哈希字符串,存在一个缺陷, 它会把以“0e”开头的哈希值解释为“0”,因此,若存在两个数经过哈希后均以“0e”开头,则PHP会判断比较结果为True;

下面给出经过md5()函数哈希后以“0e”开头的字符串:

Stringmd5s1885207154a0e509367213418206700842008763514s1836677006a0e481036490867661113260034900752s1502113478a0e861580163291561247404381396064s1091221200a0e940624217856561557816327384675

测试代码如下:

<?php $v1 = s1885207154a; $v2 = s1836677006a; if(md5($v1) == md5($v2) && $v1 != $v2){ echo('yes'); } else{ echo('no'); } ?>

结果返回“yes”,成功绕过判断

2、md5()函数的希望得到的参数为字符串,但如果遇到数组,将发出警告⚠:PHP Warning: md5() expects parameter 1 to be string,但在判断中会继续执行;

测试代码如下:

<?php $v1[] = 1; $v2[] = 2; if(md5($v1) == md5($v2) && $v1 != $v2){ echo('yes'); } else{ echo('no'); } ?>

结果返回“yes”,同样成功绕过判断

以上两种方法便可对绕过类似这种数字不同,但经md5()函数哈希后值相同的判断。
最新回复(0)