Loading... # 1、背景 参考:https://www.php.net/strcmp,在 PHP>=5.3 中,strcmp 函数用于进行字符串比较,传进的两个参数都应该是字符串,一致时返回 0。 但存在一个绕过逻辑,如果参数 1 或 2 不是字符串,而是数组,此时函数依然会返回 0,这个在上述官方文档中也有说明: ![图片.png](http://47.117.131.13/usr/uploads/2022/03/1772606777.png) ![图片.png](http://47.117.131.13/usr/uploads/2022/03/1921112316.png) 构造 php 页如下: ```php <?php $password= "admin999"; if (strcmp($_GET['password'], $password) == 0) { echo "<pre>yes</pre>"; } else { echo "<pre>no</pre>"; } ?> ``` 传递数组时结果如下,虽然有 Warning 提示,但还是走向了结果一致的逻辑: ![图片.png](http://47.117.131.13/usr/uploads/2022/03/3779120934.png) 这个漏洞在 strncmp 函数同样存在。 # 2、分析 php-src 仓库:https://github.com/php/php-src 待补充…… 最后修改:2022 年 03 月 27 日 10 : 55 PM © 允许规范转载