龙空技术网

PHP特性攻击之MD5碰撞和strpos判断错误

一个三分球 95

前言:

现在姐妹们对“php的strpos”都比较讲究,你们都想要知道一些“php的strpos”的相关内容。那么小编同时在网上网罗了一些对于“php的strpos””的相关知识,希望姐妹们能喜欢,各位老铁们一起来学习一下吧!

在PHP中,比较俩个值是否相等可以用 == 和 ===

== 比较的时候自动进行类型转换而不改变原来的值,所以存在漏洞的位置往往是==

常见错误用法:

if($input == 1){

敏感类操作;如echo $flag;

}

例题:

if($_GET['a']!=$_GET['b'] && md5($_GET['a'])==md5($_GET['b'])){

echo $flag;

}

可以通过 MD5碰撞或数组形式绕过;

MD5函数返回32位的字符串,若以0e开头,类型转换机制(==)会将它识别为科学计数法 0 ;通过0e开头字符串绕过

s878926199a =》0e545993274517709034328855841020

s155964671a =》0e342768416822451524974117254469

改良版例题:

if($_GET['a']!=$_GET['b'] && md5($_GET['a'])===md5($_GET['b'])){

echo $flag;

}

这时MD5碰撞就不能成功了,在URL地址栏提交 a[]=1&b[]=2 成功绕过,因为当MD5函数的参数为一个数组时,函数会报错

返回NULL值,这样就可以绕过判断。

其他容易判断错误的函数,如strpos

(php4,php5,php7) strpos ---查找字符串首次出现的位置

if(strpos($str1,$str2)==false){

敏感逻辑操作;

}

当 str1 在 str2 开头时,函数的返回值是 0,而 0==false是成立的;

标签: #php的strpos