跳到主要内容

Swaks SMTP 服务测试

Swaks 全称 Swiss Army Knife SMTP,是一个灵活、可脚本化的 SMTP 事务测试工具。它适合检查 SMTP 服务是否可达、支持哪些命令、STARTTLS 是否可用、认证是否正常,以及邮件是否能被投递到目标用户邮箱。

在靶场里,Nmap 发现 25/465/587 端口后,Swaks 通常用于验证邮件投递链路。它不负责“扫描漏洞”,更像 SMTP 服务的手工测试器。


安装

Kali / Debian / Ubuntu

sudo apt update && sudo apt install -y swaks

macOS

brew install swaks

源码

Swaks 官方页面 下载脚本,赋予执行权限后放到 PATH 中:

chmod +x swaks
sudo mv swaks /usr/local/bin/

核心参数速查

参数说明示例
--server, -s指定 SMTP 服务器,可带端口--server 192.168.1.108
--port, -p指定端口--port 25
--to, -t收件人--to [email protected]
--from, -f发件人--from [email protected]
--helo指定 HELO/EHLO 主机名--helo attacker.local
--quit-after, -q在指定阶段后退出--quit-after EHLO
--tls要求使用 STARTTLS--tls
--tls-on-connect连接后立即 TLS,常用于 465--tls-on-connect --port 465
--tls-verify验证服务端证书--tls --tls-verify
--auth, -a启用认证,可指定机制--auth LOGIN
--auth-user, -au认证用户名--auth-user [email protected]
--auth-password, -ap认证密码--auth-password password
--body指定邮件正文--body "hello"
--data使用完整 DATA 内容--data mail.txt
--attach添加附件--attach report.txt
--add-header, -ah添加邮件头--add-header "X-Test: 1"
--timeout事务超时时间--timeout 10

常用测试模式

1. 检查 SMTP Banner

swaks --server 192.168.1.108 --quit-after BANNER

只验证服务是否能连接,以及服务端返回的 Banner。适合确认端口开放是否真的是 SMTP。

2. 检查 EHLO 能力

swaks --server 192.168.1.108 --quit-after EHLO

EHLO 结果里通常能看到服务支持的扩展,例如 STARTTLSAUTHPIPELININGSIZE 等。

3. 发送一封基础测试邮件

swaks --server 192.168.1.108 --to root@localhost --from [email protected] --body "smtp test"

如果服务接受 MAIL FROMRCPT TODATA,说明邮件投递链路至少在协议层可用。

4. 指定端口

swaks --server 192.168.1.108 --port 25 --to user@localhost --from [email protected]

常见端口:

端口场景
25SMTP 服务端投递
465SMTPS,通常连接后立即 TLS
587Submission,通常需要 STARTTLS 和认证

5. STARTTLS 测试

swaks --server mail.example.com --port 587 --tls --quit-after EHLO

如果目标是 465:

swaks --server mail.example.com --port 465 --tls-on-connect --quit-after EHLO

需要验证证书时:

swaks --server mail.example.com --port 587 --tls --tls-verify --quit-after EHLO

6. SMTP 认证测试

swaks --server mail.example.com --port 587 --tls \
--auth LOGIN \
--auth-user [email protected] \
--auth-password 'password' \
--body "auth test"

不要把真实密码写进可提交的 Markdown、脚本或命令历史。知识库示例只使用占位值。

7. 添加自定义邮件头

swaks --server 192.168.1.108 \
--to root@localhost \
--add-header "X-BeeHack: smtp-test" \
--body "header test"

这适合测试邮件过滤、日志记录、网关规则和安全设备处理逻辑。

8. 发送附件

swaks --server mail.example.com \
--body "attachment test" \
--attach report.txt

附件测试容易触发网关、杀毒或 DLP 策略,只应在授权环境中执行。


靶场中的邮件投递验证

在 CTF 或 VulnHub 靶机中,SMTP 常见用途是确认本地用户是否能收邮件,或者验证“可控邮件内容是否会落到某个可读文件”。如果后续存在 LFI,邮件投递可能成为读取邮件队列或用户邮箱的入口。

swaks --server 192.168.1.108 \
--to www-data@localhost \
--body "beehack smtp delivery test"

如果只是验证协议流程,不想真正发送 DATA,可以停在 RCPT TO

swaks --server 192.168.1.108 \
--to www-data@localhost \
--quit-after RCPT

在授权靶场中,若要复现“邮件内容写入可被 LFI 读取的位置”这一类路径,先用普通文本确认投递,再进入具体靶机文章里的利用步骤。不要在真实邮件系统中投递可执行 Payload。


排错思路

现象可能原因下一步
连接超时防火墙、端口未开放、目标服务未监听回到 Nmap 确认端口和服务
550收件人不存在或不允许中继换本地域用户,观察 RCPT 阶段
530 Authentication required服务要求认证--auth--auth-user--auth-password
STARTTLS 失败端口不支持 STARTTLS 或证书/TLS 协议问题--quit-after EHLO 看能力列表
465 无响应465 通常需要连接后立即 TLS--tls-on-connect
邮件未落盘本地投递链路、别名、权限或 MTA 配置问题查看服务日志或换本地用户验证

靶场实战速查

场景命令
看 Bannerswaks --server target --quit-after BANNER
看 EHLO 能力swaks --server target --quit-after EHLO
发普通测试邮件swaks --server target --to root@localhost --from [email protected] --body "test"
停在 RCPT 阶段swaks --server target --to root@localhost --from [email protected] --quit-after RCPT
STARTTLSswaks --server target --port 587 --tls --quit-after EHLO
SMTPS 465swaks --server target --port 465 --tls-on-connect --quit-after EHLO
认证发送swaks --server target --port 587 --tls --auth LOGIN --auth-user user --auth-password password --to [email protected]
自定义邮件头swaks --server target --to root@localhost --add-header "X-Test: 1"