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

写在前面

考察知识点:

1. .git泄露

点击这里下载

[BJDCTF2020]Mark loves cat(解决githack无法下载源码&&githack无法获取文件)_第1张图片

选择安装路径后

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

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

[BJDCTF2020]Mark loves cat(解决githack无法下载源码&&githack无法获取文件)_第2张图片

[BJDCTF2020]Mark loves cat(解决githack无法下载源码&&githack无法获取文件)_第3张图片

2.变量覆盖

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

[BJDCTF2020]Mark loves cat(解决githack无法下载源码&&githack无法获取文件)_第4张图片

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

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

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

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

有了这些思路就来

解题:

进入页面

[BJDCTF2020]Mark loves cat(解决githack无法下载源码&&githack无法获取文件)_第5张图片

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

在githack目录下打开cmd输入

python githack.py url/.git 

[BJDCTF2020]Mark loves cat(解决githack无法下载源码&&githack无法获取文件)_第6张图片

 可以获取两个文件:

[BJDCTF2020]Mark loves cat(解决githack无法下载源码&&githack无法获取文件)_第7张图片

Githack PS:

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

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

于是我进了源码看一下

[BJDCTF2020]Mark loves cat(解决githack无法下载源码&&githack无法获取文件)_第8张图片

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

就可以下载到源码

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;

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

看到$$就很变量覆盖

最直接的思路就是使用最下面那个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

[BJDCTF2020]Mark loves cat(解决githack无法下载源码&&githack无法获取文件)_第9张图片

成功拿到flag

你可能感兴趣的:(git,web安全,安全)