栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

[BJDCTF2020]Mark loves cat变量覆盖

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[BJDCTF2020]Mark loves cat变量覆盖

首先用dirsearch扫描下目录

由于BUUCTF限制发包量,更改扫描线程

命令:python dirsearch .py -u [url] -e * -t 3 -s 0.2,

扫除/.git泄露

得到两个php文件,kali内githack扫出来但是下载失败了

flag.php

index.php

 $y){
    $$x = $y;
}

foreach($_GET as $x => $y){
    $$x = $$y;
}

foreach($_GET as $x => $y){
    if($_GET['flag'] === $x && $x !== 'flag'){
        exit($handsome);
    }
}

if(!isset($_GET['flag']) && !isset($_POST['flag'])){
    exit($yds);
}

if($_POST['flag'] === 'flag'  || $_GET['flag'] === 'flag'){
    exit($is);
}

echo "the flag is: ".$flag;
?>

分析:

第一个文件,flag.php读取flag并赋值给$flag

第二个文件,index.php文件内foreach语句将提交的get和post参数进行变量覆盖,满足if语句后,输出flag

如果想要输出flag,在绕过if语句的情况下还会被执行变量覆盖,如get传参flag=ganyu,在执行第二句foreach语句后变为$flag=$ganyu,由于$ganyu未赋值,则返回值为空

在满足if语句时,exit会输出其值,利用变量覆盖将exit()函数内的参数用$flag覆盖掉就能输出flag了

这里面有三个if语句,尝试第一个exit处。键名不能有flag,而且又要键名为flag的键值等于其中一个键名,进不去这个判断

方法一:

第二个if语句输出的是$yds变量,那么我们就要通过变量覆盖达到$yds=$flag的效果,在第二个foreach语句中,如果要满足$yds=$flag,那么$x=yds,$y=flag,即get传参yds=flag

 

方法二:

第三个if语句输出的是$is变量,判断条件为$POST['flag'] === 'flag' || $GET['flag'] === 'flag',在第二个foreach语句中,首先是$x=is,$y=flag,带进去就变成了$is=$flag,第二个参数,$x=flag,$y=flag,带进去变成$flag=$flag,即get传参is=flag&flag=flag

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/331226.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号