daniyalnasir-root/email-atom

GitHub: daniyalnasir-root/email-atom

该工具通过生成并对比电子邮件解析器的分歧变体,识别并利用访问控制绕过漏洞。

Stars: 0 | Forks: 0

# email-atom 生成并对比电子邮件解析器分歧的变体,用于访问控制绕过测试。 这是一个小型 CLI 工具,实现了 Gareth Heyes 在《Splitting the Email Atom》(PortSwigger, 2024)中描述的技术:当一个 Web 应用使用一种解析器检查收件人域名,而 SMTP 层使用另一种解析器路由邮件时,你可以在受信任的地址上注册或重置,而消息会落入你的收件箱。该工具生成变体并展示每个解析器看到的内容。 [![Python 3.9+](https://img.shields.io/badge/python-3.9%2B-blue.svg)](https://www.python.org/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Status: active](https://img.shields.io/badge/status-active-brightgreen.svg)](#) ## 概述 电子邮件地址看似简单,实则不然。RFC 5321(SMTP 信封)与 RFC 5322(消息头)在局部部分、域名、注释、obs-route、引号字符串等方面存在分歧。注册门、OAuth 身份提供者以及下游邮件服务器通常是三个不同的解析器,它们读取的是同一字符串。 `email-atom` 枚举了十五种由这种分歧产生的变体,并将同一字符串通过四种常见解析器(`email.utils.parseaddr`、`email.headerregistry.Address`、一个简单的 `@` 结尾正则表达式,以及一个 SMTP 风格的去除引号块例程)进行处理。当两个解析器从同一地址提取出不同的域名时,即为一个潜在的绕过候选。 可选的 `probe` 模式会将每个变体提交给目标表单字段,并对比响应码与长度与基线的差异,从而筛选出应用程序接受的变体。 ## 功能特性 内置十五种变体,覆盖 RFC 5321/5322 的主要分歧模式:包括引号局部部分、源路由、编码字、多个 `@`、CFWS 折叠、punycode 同形字、NUL 注入等。每种变体都会通过四种解析器并生成并列对比表格;其中一种解析器看到受信任域名而另一种看到攻击者域名的案例会以红色高亮显示。 - JSON 输出,便于导入 Burp、ffuf 或自定义脚本 - HTTP 探测模式,支持响应码与长度差值报告 - 纯 Python 3.9+,仅依赖标准库,无需第三方安装 - 尊重 `NO_COLOR` 环境变量和非 TTY 终端,退出码为 `0`/`1`/`2` ## 安装 ``` git clone https://github.com/daniyalnasir-root/email-atom.git cd email-atom python3 cli.py -h ``` 无需执行 `pip install`。该脚本仅导入标准库。 ## 用法 ``` # 显示每个变体以及四个解析器如何看待每个变体 python3 cli.py gen --email victim@target.com --attacker attacker.example # 相同,但作为 JSON 用于下游工具 python3 cli.py gen --email victim@target.com --attacker attacker.example --json | jq # 将每个变体 POST 到注册端点并比较响应代码和长度 python3 cli.py probe \ --email victim@target.com \ --attacker attacker.example \ --url https://app.example.com/api/signup \ --field email ``` ## 命令行选项 ### `gen`:局部变体生成与解析器对比 | 标志 | 是否必需 | 描述 | |------|----------|------| | `--email` | 是 | 待变异的基准地址 `local@target` | | `--attacker` | 是 | 攻击者控制的域名 | | `--json` | 否 | 以 JSON 格式输出,替代彩色表格 | ### `probe`:将每个变体提交至远程字段 | 标志 | 是否必需 | 描述 | |------|----------|------| | `--email` | 是 | 基准地址 `local@target` | | `--attacker` | 是 | 攻击者控制的域名 | | `--url` | 是 | 提交目标的端点地址 | | `--field` | 否 | 表单字段名称(默认值为 `email`) | | `--method` | 否 | HTTP 方法(默认值为 `POST`) | | `--timeout` | 否 | 每个请求的超时秒数(默认值为 `10`) | ## 输出示例 ``` $ python3 cli.py gen --email victim@target.com --attacker attacker.example variant parser domain ------------------------------------------------------------------------------ baseline stdlib.parseaddr target.com baseline headerregistry.Address target.com baseline naive.regex target.com baseline rfc5321.rcpt target.com quoted-localpart stdlib.parseaddr target.com"@attacker.example quoted-localpart headerregistry.Address attacker.example quoted-localpart naive.regex attacker.example quoted-localpart rfc5321.rcpt attacker.example ↳ diverge: 2 distinct domains comment-before-domain stdlib.parseaddr target.com comment-before-domain headerregistry.Address target.com comment-before-domain naive.regex comment-before-domain rfc5321.rcpt (attacker.example)target.com ↳ split: one parser sees trusted, another sees attacker multiple-at-rfc5322 stdlib.parseaddr multiple-at-rfc5322 headerregistry.Address multiple-at-rfc5322 naive.regex attacker.example multiple-at-rfc5322 rfc5321.rcpt attacker.example ``` `gen` 与 `probe` 的完整输出内容位于 [`examples/`](examples/)。 ## 法律免责声明 本工具仅供授权的安全测试与教育用途。 请仅针对您拥有或已获得明确书面许可的系统运行该工具。 作者不承担任何误用责任。未经授权的使用可能违反 当地、州或联邦法律。 ## 作者 **Daniyal Nasir** 是一名高级 **网络安全顾问**、**认证道德黑客**,并提供 **专业渗透测试服务**,在 **Web 应用安全**、**API 安全测试**、**移动应用渗透测试**、**源代码审查** 以及端到端 **VAPT 咨询** 方面拥有超过十年的经验。项目足迹遍布 **中东、南亚、欧洲与北美**,服务过财富 500 强企业及全球 SaaS 平台。活跃的 **漏洞赏金猎人**,以 **负责任的漏洞披露** 记录闻名,曾向多家大型科技公司提交报告。认证包括:**OSCP**、**LPT (Master)**、**CPENT**、**CEH**、**CISA**、**CISM** 与 **CASP+**。 * LinkedIn: https://www.linkedin.com/in/daniyalnasir * 网站: https://www.daniyalnasir.com ## 许可证 MIT — 详见 [LICENSE](LICENSE)。
标签:CFWS, CLI 工具, email.headerregistry, email.utils, NUL 注入, OAuth 身份提供者, punycode, Python, quoted-string, RFC 5321, RFC 5322, SMTP, source route, SYN扫描, 动态分析, 同形异义字, 响应码, 地址解析, 域名解析, 字符串变体, 安全测试, 差异对比, 探针模式, 攻击性安全, 无后门, 本地部分, 注册绕过, 测试工具, 电子邮件解析器, 编码字, 访问控制绕过, 逆向工具, 邮箱解析, 长度比对