文章总结: 公开资料显示CVE-2026-63030(wp2shell)漏洞的PoC现已可用。该漏洞利用WordPressRESTAPI批量路由混淆实现未经身份验证的SQL注入,并可通过SQL注入到管理员桥接实现远程代码执行。PoC工具支持漏洞检查、数据读取和命令执行。建议用户尽快检查并修复此漏洞。 综合评分: 89 文章分类: 漏洞分析,恶意软件,威胁情报,安全工具,漏洞预警
更新:CVE-2026-63030 (wp2shell) 的公开 PoC 现已可用
Ots安全
2026年7月20日 19:29 广东
在小说阅读器读本章
去阅读
威胁简报
恶意软件
漏洞攻击
针对 Searchlight Cyber 发布的 wp2shell 安全公告中提及的未经身份验证的 WordPress REST 批量路由混淆 SQL 注入漏洞,进行了独立的概念验证。
此存储库并非 Searchlight Cyber 的官方检查器。check它确认 SQLi 路径, read演示数据库读取,并shell通过提供的管理员凭据或首先执行 SQLi 到管理员桥接来打开插件支持的命令 shell。
工作原理
REST 批处理端点(/batch/v1)未经身份验证,在一次调用中运行多个子请求,依赖于每个子请求本身的验证和权限检查。
serve_batch_request_v1()它会构建两个并行数组—— $matches(每个子请求的匹配处理程序)和$validation(每个子请求的验证结果)——然后在分发时使用相同的偏移量对这两个数组进行索引。路径失败的子请求wp_parse_url()会被添加到 “匹配处理程序”数组中$validation,但不会添加到$matches“验证结果”数组中,因此这两个数组的索引顺序不一致,导致子请求被分发到不同的处理程序下。这就是路由混淆的原因。
该概念验证将基本元素嵌套了两次:
- POST /wp/v2/posts带有请求体的请求会requests直接由批处理程序处理。由于它已被验证为 POST 请求,因此其requests请求体列表不会与批处理模式进行比对,所以其子请求可以使用GET允许列表方法,该方法会被绕过。
- 在该内部批次中,一个GET /wp/v2/posts/999999item-route 请求携带 posts 集合查询参数,例如author_exclude
<post\_id> orderby、<post\_id>和<post\_id> per\_page。ID999999不需要存在;它只是一个不太可能存在的帖子 ID,用于匹配 item-route,该路由的模式不会验证这些仅限集合使用的参数。然后,desync 会将相同的请求分发到posts下 get_items(),其中author_exclude<post\_id>映射到WP_Query author__not_in查询变量,易受攻击的构建会将该变量作为字符串插入到 SQL 中。
最终结果是实现了基于布尔值和时间的盲注 SQL 注入,且该注入可在身份验证之前进行。此概念验证还包含了 SQL 注入到管理员请求链中使用的 UNION 伪 POST 原语。
此处实现的远程代码执行路径为:
- 使用 UNION 伪造wp_posts行通过文章集合渲染攻击者控制的内容。渲染桥使用/wp/v2/posts/999999item-route 源——与 SQLi 读取所用的路由相同get_items()。
- 使用该渲染图可以让 WordPress 创建真正的 oEmbed 缓存文章。
- 通过 SQLi 恢复真实的缓存帖子 ID。
- 在一个被污染的批量请求中,将这些 ID 重新定义为自定义更改集、导航项和请求钩子形状。
- 让相同的请求到达POST /wp/v2/users,创建一个生成的管理员。
- 以生成的管理员身份登录,并使用插件上传行为来运行命令。
步骤 1-5 为身份验证前步骤;命令执行步骤为已验证管理员插件上传。
要求
需要 Python 3.8 及以上版本和标准库,无需第三方依赖。
用法
从仓库目录运行:
./wp2shell.py<command><url> [options]
或者pip install .获取wp2shell你身上的命令PATH。
检查——非破坏性漏洞检查
首先打印被动 WordPress 标记和公共版本提示,然后发送良性批量标记探测。易受攻击的批量实现会返回带有路由混淆标记模式的 HTTP 207 响应,该模式为 parse_path_failed, block_cannot_read, 和rest_batch_not_allowed。
该标记探测基于 WordPress 核心修复。格式错误的///请求会创建 parse_path_failed;一个/wp/v2/posts请求充当允许批量处理的间隔符;该 /wp/v2/block-renderer/…路由不允许批量处理,但block_cannot_read如果匿名访问其处理程序,则会返回;/batch/v1给出rest_batch_not_allowed。在存在漏洞的构建版本中,解析错误会导致批量处理程序数组错位,因此间隔符请求会被分派到块渲染器处理程序下。修复后的构建版本会保持数组对齐,因此精心构造的探测中不应出现这三个请求的模式。
默认情况下,check操作到此结束,不会发送 SQL 注入有效载荷。–confirm-sqli如果您还需要主动 SQL 注入确认,请使用此功能。确认操作会首先尝试 UNION 读取原语,如果 UNION 反射不可用,则回退到配对的定时探测。
这些信号是相互独立的:版本提示仅供参考,标记模式显示路由混乱,并–confirm-sqli表明有效载荷已到达数据库。WAF 可以阻止有效载荷,因此确认失败并不能证明漏洞不存在。
./wp2shell.py checkhttp://target
./wp2shell.py check targets.txt # scan every URLin the file
读取——通过 SQL 注入提取数据
./wp2shell.pyread http://target # server fingerprint
./wp2shell.pyread http://target --preset users # user logins and password hashes
./wp2shell.pyread http://target --query "SELECT @@version"
读取——通过 SQL 注入提取数据默认情况下,提取过程–technique auto会按以下顺序尝试可用方法:
- union操作WP_Post通过伪造一行数据UNION,并从 REST 响应中读取其标题||HEX(value)||。有效负载使用相同的/wp/v2/posts/999999源路由 orderby=none,因此per_page=500伪造的行会以渲染后的 POST 请求形式保留下来。每个值对应一个请求。
- 错误— EXTRACTVALUE/UPDATEXML当目标反映 MySQL 错误时,每次请求会泄漏约 15 字节(例如WP_DEBUG_DISPLAYon)。
- 盲寻——布尔二分查找,每个字符约 8 次请求;将帖子集合 X-WP-Total标头读取为真/假信号,不需要反射值。
强制执行其中一个–technique union|error|blind。这些读取路径不会写入数据库行。
shell——命令执行
使用提供的管理员凭据登录,并使用 WordPress 插件上传行为–user。–passwordshell
在没有凭据的情况下,shell首先运行预身份验证 SQLi 到 admin 桥接程序,以生成的管理员身份登录,然后上传插件 shell。
./wp2shell.pyshell http://target --user admin --password '<recovered>' --cmd id
./wp2shell.pyshell http://target --user admin --password '<recovered>' -i # interactive shell
./wp2shell.pyshell http://target --cmd id # pre-auth bridge
./wp2shell.pyshell http://target -i # pre-auth interactive
shell上传一个插件 webshell(使用随机路径和每次运行的令牌锁定),并打印其路径。上传的 webshell 会自动删除。当预认证桥接创建管理员帐户时,生成的帐户会在 shell 会话结束后自动删除。
项目地址:
https://github.com/Icex0/wp2shell-poc
END
公众号内容都来自国外平台-所有文章可通过点击阅读原文到达原文地址或参考地址
排版 编辑 | Ots 小安
采集 翻译 | Ots Ai牛马
公众号 | AnQuan7 (Ots安全)
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:Ots安全 《更新:CVE-2026-63030 (wp2shell) 的公开 PoC 现已可用》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论