web105笔记(变量覆盖)

<?php

/*
# -*- coding: utf-8 -*-
# @Author: Firebasky
# @Date:   2020-09-16 11:25:09
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-28 22:34:07

*/

highlight_file(__FILE__);
include('flag.php');
error_reporting(0);
$error='你还想要flag嘛?';
$suces='既然你想要那给你吧!';
foreach($_GET as $key => $value){
    if($key==='error'){
        die("what are you doing?!");
    }
    $$key=$$value;
}foreach($_POST as $key => $value){
    if($value==='flag'){
        die("what are you doing?!");
    }
    $$key=$$value;
}
if(!($_POST['flag']==$flag)){
    die($error);
}
echo "your are good".$flag."\n";
die($suces);

?>
你还想要flag嘛?

这里利用的是变量覆盖,关键点在$$key=$$value,这里把$key的值当作了变量

例如 $key=flag  则$$key=$flag

这里一共有三个变量,$error、$suces和$flag;这里通过die($error)或者die($suces)都可以输出flag,所以有两个payload
第一种:
通过die($error)输出flag,首先我们把$flag的值传给$mm,接着再把$dotast的值传给$error,于是$error的值就是flag,再通过if判断die输出就是flag
例如$flag=ctfshow{xxxxx},?mm=flag,通过第一个for循环,也就是$mm=$flag,$mm=ctfshow{xxxxx},接着再通过第二个for循环,$error=$mm,此时$error=ctfshow{xxxxx}

?mm=flag

post:
error=dotast

第二种:
通过die($suces)输出flag,首先我们把flag的值传给suces变量,接着再把flag的值给置空,已达到下面if条件为0不执行的目的,往下执行,die($suces)即可把flag输出

?suces=flag&flag=

 

posted @ 2025-03-25 11:44  justdoIT*  阅读(10)  评论(0)    收藏  举报