[GXYCTF2019]禁止套娃1

提示

  1. git泄露
  2. 无参数rce

!!注意需要python3环境

github里dirsearch工具下载位置     ###可能需要开节点才能打开

百度网盘dirsearch下载地址           ###如果github里下载不了可以在网盘下载

提取码sx5d

只给了flag在哪里呢,那么应该就是要让信息收集了

对于我来说做ctf web题我有我自己的信息搜集三件套

  1. 抓包发包查看
  2. 目录扫描
  3. 查看页面源代码

这里在目录扫描的时候发现了git泄露

就像是下面图片方框里的,直接通过浏览器访问可直接下载,说明存在git泄露

这里我使用的是dirsearch来进行扫描的,每次扫buuctf的题时扫描速度太快他会一直报错429,就像下图箭头指向的一样,所以无论使用什么工具去扫描都得限速以及限制每次扫描时间

dirsearch    -u   网站url   -t    每秒扫描多少个     -s    每隔多少秒扫一次

如果想了解更多可以去看这位博主的博客dirsearch使用教程_dirsearch用法-CSDN博客

这里直接用githack把git泄露的源码扒下来

现在开始代码审计

  1. 首先过滤了伪协议我们不能通过伪协议注入后门了
  2. 将传入的字母以及符号替换为空以后如果有;则进入(#这里就已经限定了我们的格式只能是a(b(c()))这样的格式,如果将这些替换为空了还有其他东西比如“;;这样的就不匹配;)
  3. 不能有/et|na|info|dec|bin|hex|oct|pi|log/并且有/i匹配大小写所以不能大小写绕过

所以整体作者想要的思路应该是无参数rce

<?php
include "flag.php";
echo "flag在哪里呢?<br>";
if(isset($_GET['exp'])){
    if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) {
        if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])) {
            if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp'])) {
                // echo $_GET['exp'];
                @eval($_GET['exp']);
            }
            else{
                die("还差一点哦!");
            }
        }
        else{
            die("再好好想想!");
        }
    }
    else{
        die("还想读flag,臭弟弟!");
    }
}
// highlight_file(__FILE__);
?>

首先先来了解两个php函数

getallheaders()

返回所有http头信息,但是他返回的是数组状态的信息,然而它返回的信息需要给eval()来处理,但是eval()只能处理字符串类的信息

implode()

所以这里就要用到这个函数了,这个函数可以直接把getallheaders()返回的数组转换成字符串

这里先使用读取session的方式来做一次(###拓展###最后补充了一个做法,不过没有匹配et的话就可以使用)

  1. 一般php需要启动session才能使用,启动session使用函数session_start()
  2. session是存储在本地的和cookie同理的东西所以我们对于没有做防护的sesseion是可控的
  3. 通过函数session_id()函数来

    session_id() 可以用来获取/设置 当前会话 ID。

    为了能够将会话 ID 很方便的附加到 URL 之后, 你可以使用常量 SID 获取以字符串格式表达的会话名称和 ID

  4. 最后通过highlight_file()来高亮显示文件

最后payload:  highlight_file(session_id(session_start()));

拓展

payload:implode(getallheaders())

发包的同时抓包

这里随便加一个head头,他的值用来执行命令,最后加了\\来注释后面的内容

####有可能php版本不同输出顺序也不同,可以先尝试是从下至上输出还是从上至下输出

这里是从下往上读的,所以夹\\注释掉后面读取的上面的head头信息

  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怪兽不会rap_哥哥我会crash

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值