写在前面
考察知识点:
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