[BJDCTF2020]Mark loves cat(解决githack无法下载源码&&githack无法获取文件)

写在前面

考察知识点:

1. .git泄露

点击这里下载

选择安装路径后

在该文件夹下路径输入cmd,在命令行中输入

python Githack.py 127.0.0.1/.git(你的网址后面有/.git就行)

2.变量覆盖

这里有一题比较简单的变量覆盖题目,可以思考一下

我们并不知道$test是什么,但是有个extract($_GET)可以把我们输入的get传参全部变成变量

那我们就可以在url输入?test=1&gift=1  即可满足输出flag条件

还有一种就是$$x的模式

$x="aaa";
$aaa="123";
那么
$$x="123";
因为$x="aaa";
   $$x=$aaa="123";

有了这些思路就来

解题:

进入页面

发现没有什么功能点,那就先扫一下有没有文件泄露

在githack目录下打开cmd输入

python githack.py url/.git 

 可以获取两个文件:

Githack PS:

有个好坑的地方,刚开始的时候总是下载不到flag.php和index.php

要扫很多次才有可能下载到,可是要是是真实环境,扫了两遍没有可能就真的觉得没有了

于是我进了源码看一下

 把他线程改低一点就可以了,流量不够大就可以不被拒绝访问

就可以下载到源码

flag.php是这样:

<?php

$flag = file_get_contents('/flag');

 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;

我自己做的时候就找到了一种解法,没想到有四种天呐

看到$$就很变量覆盖

最直接的思路就是使用最下面那个echo  $flag

但是要让上面的if条件都不成立而且不覆盖$flag真的是太难了

就转换思路,要知道exit也是一种输出

我们可以让exit里面的内容为$flag就行

我的做法是在这一句

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

上面对$_GET传参和$_POST传参有两种不同的键值分离赋值方法

foreach就是键值分离

比如?flag=aaa

那么$x=flag

       $y=aaa

要让$yds=$flag

那么就要$$x=$yds

这样才能保证yds前面有个$

接下来就是右边$flag

那么就是$y=flag  $$y=$flag

所以就用GET传参

?yds=flag

成功拿到flag

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值