2020/7/08 - [BJDCTF2020]Mark loves cat - git源码泄露/$$变量覆盖


首先用dirsearch扫描一下目录,发现/.git源码泄露,使用githack将源码下载下来,在github里面搜lijiejie的githack,真的很好用,点一大波赞,下面是index.php里有用的内容

<?php

include 'flag.php';

$yds = "dog";
$is = "cat";
$handsome = 'yds';

foreach($_POST as $x => $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;

可以利用yds就是原值为cat的那个

1.这里的判断语句为

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

get或post的其中之一的键为flag就可以了.

2.利用get的值进行变量覆盖,foreach语句为

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

$x => $y似乎是个用来代表键值对的一个形式,例如我们传入?yds=flag就是$x=yds,$y=flag.
然后再向下进行语句就是$yds=$flag,上面有个exit($yds)命令,这就可以输出flag啦.
post的$flag应该可以随便设置值的,只要键为flag就可以了.
就这?就这?

最终payload

get : ?yds=flag
post: $flag=*

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

抒情诗、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值