Htlab_Weekly_Ctf_17
程序员文章站
2022-05-15 09:15:33
...
给你一串代码
进入题目,给了串代码,不过是图片的,没有给文字,整理一下,得到
<?php
include "flag.php";
$_403 = "Access Denied";
$_200 = "Welcome Admin";
if ($_SERVER["REQUEST_METHOD"] != "POST"){
//需要POST方法
die("hetianlab flag is here :biubiubiu");
}if (!isset($_POST["flag"])){
//需要POST一个flag
die($_403);
}foreach ($_GET as $key => $value){
//遍历GET方法所传值
这里假如传的是a=b,下面这个就会变成$a=$b,存在一个变量覆盖了
$$key = $$value;
}foreach ($_POST as $key => $value){
//遍历POST方法所传值
$$key = $value;
}if ($_POST["flag"] !== $flag){
die($_403);
}
echo "This is your flag : ". $flag . "\n";
die($_200);
?>
代码重点在$$key = $$value;
这一句,存在一个变量覆盖,flag是在$flag
这个变量里面,但是POST方法必须传一个flag,等到foreach遍历的时候,$flag
就被重新赋值了,这个时候输出的就不是原来的flag了,但是,下面有个die($_200)
,这里我们可以通过变量覆盖,通过GET方法传入_200=flag
,也就是第一个foreach遍历的时候,变成$_200=$flag
,这个时候原本的_200
的值就被flag
给覆盖了,这个时候die出来的就是flag了,综上,构造payload如图所示,得到flag
推荐阅读