浅析XXE注入导致RCE

简单复现一下XXE注入导致RCE 并分析一下其中逻辑

XXE(XML 外部实体注入)漏洞,可以使攻击者能够干扰 Web 应用程序中 XML 数据的处理。利用此漏洞后,XXE 可允许攻击者访问敏感数据、执行远程代码或干扰 Web 应用程序中 XML 数据的处理。

先用php进行简单的案例示范

image.png

可以看到访问成功的输出1.txt文件

image.png

利用expect协议可以成功打rce,但因为windows不好安装扩展所以改用centos做测试

以下是环境配置教程

安装EPEL仓库

sudo yum install epel-release

image.png

使用以下命令安装php开发工具和expect

sudo yum install php-devel expect

image.png

sudo yum install tcl-devel

sudo yum install expect-devel

image.png

image.png

然后安装pecl

sudo yum install php-pear

image.png

最后使用pecl进行安装expect

image.png

出现下面的消息说明安装成功

image.png

然后开始进行配置

Vim /etc/php.ini

加一行

Extension=expect.so

image.png

然后进行RCE复现

<?xml version="1.0"?>

[

]>

&xxe;

image.png

那么为何能执行命令呢,我们下载下来源码进行分析

https://pecl.php.net/get/expect-0.4.0.tgz

在expect_fopen_wrapper.c文件中

35行开始,首先检查命令字符串是否以"expect://"开头,如果是,则移除这个前缀,然后使用exp_popen函数尝试启动命令指定的外部进程

image.png

而在expect库中

https://core.tcl-lang.org/expect/index

exp_clib.c文件中定义了exp_popen

image.png

跟进exp_spawnl,初始化后使用malloc为参数组”argv”分配内存,然后调用exp_spawnv

image.png

继续跟进

file是要执行的程序的路径,argv是传递给该程序的参数列表,以NULL终止。然后初始化伪终端(pty)

image.png

往下走,发现在1909中使用fork创建了子进程

image.png

那么最终执行点在哪呢?在2217中使用execvp执行命令,其中file与argv都是我们传的参数,至此流程结束

  • 发表于 2024-04-26 10:03:48
  • 阅读 ( 17425 )
  • 分类:漏洞分析

0 条评论

请先 登录 后评论
ZAC安全
ZAC安全

5 篇文章

站长统计