XXE(XML 外部实体注入)漏洞,可以使攻击者能够干扰 Web 应用程序中 XML 数据的处理。利用此漏洞后,XXE 可允许攻击者访问敏感数据、执行远程代码或干扰 Web 应用程序中 XML 数据的处理。
先用php进行简单的案例示范
可以看到访问成功的输出1.txt文件
利用expect协议可以成功打rce,但因为windows不好安装扩展所以改用centos做测试
以下是环境配置教程
安装EPEL仓库
sudo yum install epel-release
使用以下命令安装php开发工具和expect
sudo yum install php-devel expect
sudo yum install tcl-devel
sudo yum install expect-devel
然后安装pecl
sudo yum install php-pear
最后使用pecl进行安装expect
出现下面的消息说明安装成功
然后开始进行配置
Vim /etc/php.ini
加一行
Extension=expect.so
然后进行RCE复现
<?xml version="1.0"?>
[
]>
&xxe;
那么为何能执行命令呢,我们下载下来源码进行分析
https://pecl.php.net/get/expect-0.4.0.tgz
在expect_fopen_wrapper.c文件中
35行开始,首先检查命令字符串是否以"expect://"开头,如果是,则移除这个前缀,然后使用exp_popen函数尝试启动命令指定的外部进程
而在expect库中
https://core.tcl-lang.org/expect/index
exp_clib.c文件中定义了exp_popen
跟进exp_spawnl,初始化后使用malloc为参数组”argv”分配内存,然后调用exp_spawnv
继续跟进
file是要执行的程序的路径,argv是传递给该程序的参数列表,以NULL终止。然后初始化伪终端(pty)
往下走,发现在1909中使用fork创建了子进程
那么最终执行点在哪呢?在2217中使用execvp执行命令,其中file与argv都是我们传的参数,至此流程结束
5 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!