[GXYCTF2019]禁止套娃 1--无参数RCE

前言:

无参数RCE
RCE
hex2bin() 函数把十六进制值的字符串转换为 ASCII 字符。
localeconv() 函数返回一包含本地数字及货币格式信息的数组。
localeconv() 函数会返回以下数组元素:

[decimal_point] - 小数点字符.........

array_flip() 函数用于反转/交换数组中的键名和对应关联的键值。
array_rand() 函数返回数组中的一个随机键名,或者如果指定函数返回键名不只一个,则返回一个包含随机键名的数组。
get_defined_vars — 返回由所有已定义变量所组成的数组
有关数组及其函数作用

next — 将数组中的内部指针向前移动一位
pos — current 的别名
prev — 将数组的内部指针倒回一位
range — 根据范围创建数组,包含指定的元素
reset — 将数组的内部指针指向第一个单元
rsort — 对数组逆向排序

读取PHP源码的函数:show_source/highlight_file(),file_get_contents(),read_file

如何能得到scandir(’.’)中的点(.):
chr(ceil(sinh(cosh(tan(floor(sqrt(floor(phpversion())))))))) 返回点(.)
chr(46)

解题:

用githack能拔下来出现git文件泄露,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_replace(’/[a-z,_]+((?R)?)/’, NULL, $_GET[‘exp’])发现是无参数RCE。
这里把et过滤了就不能用getenv()函数去获取环境变量。也不能往函数里面传参。那就用localeconv() 函数和current()函数结合current(loacleconv())返回.。那么scandir(’.’)就能返回当前目录的信息了。
在这里插入图片描述这就发现了flag.php,那么下一步就是打开flag.php了。
flag.php在倒数第二个,可以用array_flip()+array_rand()爆出来单个的flag.php。那么现在就让它高亮就能显示了。
在这里插入图片描述或者使用反转数组函数:array_reverse()。再让指针指向下一个数组元素(第二个),再使其高亮。
在这里插入图片描述在这里插入图片描述这样就也能看到flag.php的信息了。

方法二:

利用getallheaders()函数。但是这里吧et过滤了无法进行演示,可以查看前言里面的无RCE方法2

方法三:PHPSESSID

UM_xxx是友盟的cookie:
在这里插入图片描述session函数

PHP SESSION PHPSESSID session_id()
使用session之前需要通过session_start()告诉PHP使用session,php默认是不主动使用session的。
session_id()可以获取到当前的session id。
在这里插入图片描述
总结:这个题考察了RCE的无参数方法,学到了挺多函数的使用方法的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

熊是本熊

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

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

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

打赏作者

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

抵扣说明:

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

余额充值