在PHP 5.3版本以上的strcmp()有一个bypass漏洞,在说这个漏洞之前我们先来看一下strcmp()这个函数。
int strcmp ( string $str1 , string $str2 )
(注意该比较区分大小写。)
如果 str1
小于 str2
返回 < 0; 如果 str1
大于 str2
返回 > 0;如果两者相等,返回 0。
测试代码如下:
<?php $password = $_GET['pass']; if (strcmp('websec',$password)){ echo "No!"; } else{ echo "Success!"; } ?>
strcmp()在比较字符串和数组的时候直接返回0,这样通过把目标变量设置成数组就可以绕过该函数的限制
http://127.0.0.1/str.php?pass[]=1