欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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
Htlab_Weekly_Ctf_17

上一篇: JAVA基础-变量

下一篇: svn 常用命令