Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

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

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

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

工具目录

分类

查看所有分类
Loading categories
POC-WP-XSS2Shell-CVE-2026-64638 — 针对 CVE-2026-64638(XSS2Shell)的功能性 PoC:WordPress Core 中从预认证 XSS 到 RCE 的攻击链。包含 Docker 实验环境 + Python 攻击服务器 + 技术分析与缓解措施。 | Kitploit
工具/GitHubGitHub/686f6c61/poc-wp-xss2shell-cve-2026-64638
漏洞分析漏洞利用Web应用程序漏洞利用学习与教育Payload 开发实验室与实践
GitHub686f6c61/poc-wp-xss2shell-cve-2026-64638

POC-WP-XSS2Shell-CVE-2026-64638

针对 CVE-2026-64638(XSS2Shell)的功能性 PoC:WordPress Core 中从预认证 XSS 到 RCE 的攻击链。包含 Docker 实验环境 + Python 攻击服务器 + 技术分析与缓解措施。

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库
113天前尚未审核

XSS2Shell — CVE-2026-64638 的 PoC

关于 XSS2Shell(CVE-2026-64638)攻击链的教育性概念验证(PoC), 这是 pwn.ai 自主发现并于 2026 年 8 月 7 日披露的 WordPress Core 预认证 XSS → RCE 漏洞。


目录

  1. 执行摘要
  2. 法律声明
  3. 攻击链架构
  4. 环境要求
  5. 仓库结构
  6. 快速使用指南
  7. 利用验证
  8. 补充文档

执行摘要

CVE-2026-64638 是 WordPress 登录界面(wp-login.php)中一个预认证的反射型 跨站脚本(XSS)漏洞。它影响所有受维护且版本低于 7.0.3 的 WordPress 版本;7.0.3 于 2026 年 8 月 6 日作为紧急 安全版本 发布。该漏洞的 CVSS v4.0 评分为 8.9。

这条名为 XSS2Shell 的攻击链演示了:仅凭一次使用被篡改 用户名 的失败 登录 尝试,攻击者就可以:

  1. 利用 PHP(strip_tags)与 WordPress(wp_kses_post)两个语法解析器之间的差异,在 登录 页面中注入活跃的 DOM 元素。
  2. 劫持 WordPress 自身 JavaScript(user-profile.js)的执行流程,向同源发起一项 REST JSONP 请求。
  3. 通过 jQuery.globalEval() 将 JSONP 响应转换为在 WordPress 源上执行的 JavaScript。
  4. 将这一切与 Paulos Yibelo(2022)的 同源方法执行(Same Origin Method Execution,SOME)技术串联起来,在管理员已认证的会话中自动 点击“应用程序密码”(Application Passwords)的批准按钮。
  5. 捕获生成的 应用程序密码(Application Password)凭据,发布一个包含恶意 JavaScript 的页面,最后上传一个 ZIP 格式的 插件,从而在服务器上执行 PHP。

最终结果是:从管理员单击一次攻击者控制的链接开始,即可在 WordPress 服务器上以 Web 进程用户(通常是 www-data)身份实现远程代码执行(RCE)。


法律声明

本仓库包含严格意义上的教育与防御性材料。

  • 目的: 以培训、自审和验证 补丁 为目的演示该利用链。
  • 授权使用: 请仅针对你拥有或已获得明确书面授权的 WordPress 安装运行它。
  • 禁止: 未经同意对第三方系统进行任何使用。仓库作者不对此处所含材料的滥用承担任何责任。
  • 责任: 操作者须自行负责遵守适用的法律法规(西班牙的 LOPD/RGPD、美国的 CFAA 等)。

该 PoC 附带一个自包含的 Docker 环境,其唯一用途是作为可复现的本地靶机。


攻击链架构

root@kitploit:~
┌─────────────────────────────────────────────────────────────────────┐
│  1. XSS pre-auth en wp-login.php                                    │
│     log=< area id=ajaxurl href=/?rest_route=/&_jsonp=...>           │
│     (discrepancia strip_tags ↔ wp_kses_post)                        │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  2. user-profile.js dispara .trigger('click')                       │
│     DOM clobbering de ajaxurl → petición POST al origen             │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  3. REST JSONP responde application/javascript                      │
│     jQuery.globalEval() ejecuta el callback en el origen WP         │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │  callback = window.opener
                                           │            .approve.click
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  4. SOME: click() cruza la frontera opener→admin                    │
│     authorize-application.php#approve se pulsa en sesión admin      │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  5. WP crea Application Password → redirige a success_url           │
│     El atacante captura user_login + password en callback.php       │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │  HTTP Basic REST
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  6. POST /wp-json/wp/v2/pages  → publica página con <script>        │
│     El admin visita la página → JS en origen WP con sesión admin    │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  7. fetch update.php?action=upload-plugin  → sube payload.zip       │
│     PHP del plugin es accesible directamente sin activarlo          │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  8. RCE confirmada: GET /wp-content/plugins/payload/shell.php       │
└─────────────────────────────────────────────────────────────────────┘

环境要求

该 PoC 设计为在 macOS 或 Linux 上运行,需要:

  • Docker 24+ 和 Docker Compose v2(用于本地靶机)。
  • Python 3.9+(用于可选的编排器)。
  • PHP 8.1+ 且带有 zip 扩展(用于手动构建 payload,可选;已构建好的 ZIP 已包含在 payload/ 中)。
  • 一个基于 Chromium 或 Firefox 的现代浏览器。

无需手动安装 WordPress:docker-compose.yml 会启动一个存在漏洞的 WordPress 7.0.2(补丁之前的最后一个版本)以及 MariaDB。


仓库结构

root@kitploit:~
POC XSS2Shell (CVE-2026-64638)/
├── README.md                       ← Este archivo
├── docker-compose.yml              ← Blanco: WordPress 7.0.2 + MariaDB
├── .env.example                    ← Variables de configuración
├── exploit.py                      ← Orquestador en Python (opcional)
├── attacker/                       ← Infraestructura del atacante
│   ├── index.html                  ← Página cebo con la cadena SOME
│   ├── callback.php                ← Receptor de la Application Password
│   └── server.py                   ← Servidor estático + PHP embebido
├── payload/                        ← Plugin ZIP malicioso
│   ├── build_payload.py            ← Generador del ZIP
│   ├── shell.php                   ← Webshell mínimo
│   └── payload.zip                 ← ZIP preconstruido (listo para usar)
└── docs/
    ├── ANALISIS.md                 ← Análisis técnico detallado
    └── MITIGACION.md               ← Guía de mitigación y hardening

快速使用指南

1. 启动靶机(存在漏洞的 WordPress 7.0.2)

root@kitploit:~
cp .env.example .env
docker compose up -d

WordPress 将在 http://localhost:8080 上可用。按照安装向导操作,并创建一个管理员用户(例如 admin / admin-password)。

Dockerfile 将镜像固定为 wordpress:7.0.2-php8.2-apache,这是补丁 7.0.3 之前的最后一个版本。

2. 启动攻击者基础设施

root@kitploit:~
# En otro terminal, dentro de attacker/
python3 server.py

攻击者服务器监听于 http://localhost:9000,并暴露:

  • / → index.html(诱饵页面)。
  • /callback.php → 应用程序密码(Application Password)接收端。

3. 模拟管理员的 点击

  1. 在 http://localhost:8080/wp-admin 以管理员身份登录。
  2. 在同一个浏览器会话中,打开一个新标签页并访问 http://localhost:9000/。
  3. 你会看到只有一个“Approve Application”按钮。点击它之后,整条攻击链将自动执行。

4. 观察凭据捕获

在运行 server.py 的终端中会出现类似下面的一行:

root@kitploit:~
[+] Application Password recibida para el usuario 'admin':
    XXXX XXXX XXXX XXXX XXXX XXXX

该凭据也会保存在 attacker/captured_credentials.txt 中。

5. 查看 RCE

几秒钟后,index.html 中的编排器将完成:

  • 发布一个在 WordPress 源上执行 JavaScript 的页面。
  • 将插件 payload.zip 上传到 wp-content/plugins/payload/。

使用以下命令验证代码执行:

root@kitploit:~
curl -sI http://localhost:8080/wp-content/plugins/payload/shell.php

响应中包含 Hacked: true 头以及 JSON 响应体,即确认 RCE 成功。


利用验证

攻击链执行完毕后,以下 端点 可作为证据:

资源预期证据
GET /wp-content/plugins/payload/shell.php头 Hacked: true + JSON {"rce":true,"user":"www-data"}
attacker/captured_credentials.txt

补充文档

  • docs/ANALISIS.md — 对攻击链每个阶段的详细技术分析,并附有对 WordPress 源代码的引用。
  • docs/MITIGACION.md — 推荐的缓解措施、加固(hardening)方案以及 补丁 7.0.3 的验证。

致谢

  • 原始研究与披露:pwn.ai — https://pwn.ai/blog/xss2shell
  • 底层 SOME 技术:Paulos Yibelo(2022),发表于 pwn.ai 博客,并获提名为 2022 年 Top Web Hacking Techniques。
  • 本仓库的 PoC 与打包:本人出于教育目的完成的工作。

许可证

依据 MIT 许可证分发。更多详情请参阅 LICENSE 文件。

下载工具
捕获到的应用程序密码(Application Password)
wp-admin → 应用程序 → 应用程序密码一个名为“SomeApp”的新条目