[GXYCTF2019]禁止套娃1

news/2024/5/19 22:15:39 标签: git泄露, ctf, php

提示

  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"><?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头信息


http://www.niftyadmin.cn/n/5247844.html

相关文章

2023年全球软件开发大会(QCon广州站2023)-核心PPT资料下载

一、峰会简介 本次峰会包含&#xff1a;泛娱乐时代的边缘计算与通讯、稳定性即生命线、下一代软件架构、出海的思考、现代数据架构、AGI 与 AIGC 落地、大前端技术探索、编程语言实战、DevOps vs 平台工程、新型数据库、AIGC 浪潮下的企业出海、AIGC 浪潮下的效能智能化、数据…

安全狗创始人CEO陈奋荣获“拔尖人才”称号

近日&#xff0c;中共思明区委人才工作领导小组办公室公布了思明区第九批拔尖人才人选名单。 作为国内云原生安全领导厂商的创始人&CEO&#xff0c;安全狗陈奋入选名单。 厦门服云信息科技有限公司&#xff08;品牌名&#xff1a;安全狗&#xff09;创办于2013年&#xf…

【ET8】3.ET8入门-一个简单示例

XXXComponent 继承Entity&#xff0c;只有成员变量&#xff0c;不包含任何方法&#xff1b; 加ComponentOf标签 /// 组件类父级实体类型约束 /// 父级实体类型唯一的 标记指定父级实体类型[ComponentOf(typeof(parentType)] /// 不唯一则标记[ComponentOf] 目录在Mod…

【Docker二】docker网络模式、网络通信、数据管理、资源控制

目录 一、docker网络模式&#xff1a; 1、概述 2、docker网络实现原理&#xff1a; 3、docker的网络模式&#xff1a; 3.1、bridge模式&#xff1a; 3.2、host模式&#xff1a; 3.3、container模式&#xff1a; 3.4、none模式&#xff1a; 3.5、自定义网络模式&#xf…

LeetCode:1423. 可获得的最大点数(思维题 C++、Java)

目录 1423. 可获得的最大点数 题目描述&#xff1a; 实现代码与解析&#xff1a; 滑动窗口&#xff08;在这题就是个遍历而已&#xff09;&#xff1a; 原理思路&#xff1a; 1423. 可获得的最大点数 题目描述&#xff1a; 几张卡牌 排成一行&#xff0c;每张卡牌都有一个…

喜报 | 英码科技荣获“2023年度广东省知识产权示范企业”荣誉!

近日&#xff0c;广东知识产权保护协会公布了2023年度广东省知识产权示范企业认定的结果&#xff0c;经过严格的评审&#xff0c;英码科技从全省数万家企业中脱颖而出&#xff0c;成功获得“2023年度广东省知识产权示范企业”的荣誉称号。 据悉&#xff0c;广东省知识产权示范企…

Linux驱动开发学习笔记3《新字符设备驱动实验》

目录 一、新字符设备驱动原理 1.分配和释放设备号 2.新的字符设备注册方法 &#xff08;1&#xff09; 字符设备结构 &#xff08;2&#xff09;cdev_init函数 &#xff08;3&#xff09; cdev_add函数 &#xff08;4&#xff09;cdev_del 函数 二、自动创建设备节点 …

“四位一体”引领企业数据治理新模式

数字化时代&#xff0c;数据作为新的生产要素受到了前所未有的关注和重视。 随着企业业务的发展&#xff0c;数据积累越来越多。怎么管理好数据&#xff1f;如何利用好数据&#xff1f;数据价值如何挖掘&#xff1f;成为很多企业面临的难题&#xff01; 面对这些棘手的问题&am…