天天看点

Htlab_Weekly_Ctf_17

给你一串代码

进入题目,给了串代码,不过是图片的,没有给文字,整理一下,得到

<?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

Htlab_Weekly_Ctf_17