红队APT-钓鱼投递篇&邮件系统&SPF绕过&自建SMTP&修改转发&Swaks伪造&Gophish平台


知识点
1、邮件钓鱼-绕过-SPF机制
2、邮件钓鱼-平台-Gophish
3、邮件钓鱼-系统-SendCloud
邮件钓鱼简介
钓鱼邮件是指黑客伪装成同事、合作伙伴、朋友、家人等用户信任的人,通过发送电子邮件的方式,诱使用户回复邮件、点击嵌入邮件正文的恶意链接或者打开邮件附件以植入木马或间谍程序,进而窃取用户敏感数据、个人银行账户和密码等信息,或者在设备上执行恶意代码实施进一步的网络攻击活动。
思考邮件钓鱼重点细节
- -》如何取得受害者信任邮件
- 看发信人地址:寻找受信任的发件人地址,用于伪造受信任的邮件地址
- 邮件内容(话术):类似诈骗中的话术
- 兴趣话题等:能够引起受害者兴趣的话题
- -》受害者信任后如何取得权限
- 嵌入网页配合钓鱼:即在邮件中给出一个外部地址链接,跳转至钓鱼网站,窃取用户名和密码(模拟真实网站)
- 嵌入文件附件配合钓鱼:即直接把后门文件放在附件压缩包当中,受害者点击之后直接获得权限,大部分选择这个(压缩包,文档类等)
SPF电子邮件认证机制
例如system@notice.aliyun.com这个邮箱地址不是能够随随便便构造出来的,存在SPF机制,用来验证发件人的真实性
什么是SPF
发件人策略框架(Sender Policy Framework)电子邮件认证机制
中文译为发送方策略框架,主要作用是防止伪造邮件地址。
SPF记录的核心机制
SPF的核心在于一条存储在DNS中的TXT记录。这条记录明确列出了被允许代表该域名发送邮件的所有IP地址。
一条标准的SPF记录看起来是这样的:v=spf1 ip4:192.168.1.1 include:_spf.google.com ~all。我们来拆解一下它的含义:
| 组件 | 含义 | 说明 |
|---|---|---|
v=spf1 |
版本声明 | 标识此为SPF版本1的记录。 |
| 机制 | 授权规则 | 定义匹配的规则,常见的有: • ip4:192.168.0.1 或 ip6:2001:db8::1:直接授权一个IP地址或网段。• a / mx:授权该域名A记录或MX记录指向的IP地址。• include:_spf.example.com:引入其他域名(如第三方邮件服务商)的SPF记录。 |
| 限定词 | 匹配结果处理 | 位于机制前,定义匹配后的操作: • + (Pass):默认值,通过验证。 • - (Fail):严格失败,邮件可能被拒绝。• ~ (SoftFail):软失败,通常接受但可能标记为垃圾邮件。• ? (Neutral):中立,无明确表态。 |
all |
终止机制 | 必须放在记录末尾,匹配所有未提及的IP地址。常与限定词连用,如 -all 表示“所有未明确授权的IP都应拒绝”。 |
SPF如何工作
当一封声称来自 @example.com的邮件到达接收方服务器时,验证过程如下:
- 提取域名:接收服务器会从邮件的“信封FROM”(即
MAIL FROM或Return-Path地址)中提取域名example.com。 - 查询DNS:接收服务器查询
example.com的DNS中的TXT记录,寻找SPF记录。 - 比对IP:接收服务器将发送这封邮件的真实IP地址与SPF记录中授权的IP列表进行比对。
- 得出结果:根据比对结果,返回“通过”、“失败”等状态,接收方服务器会依据这个结果来决定如何处理这封邮件。
SPF与发件人地址伪造问题
如果域名存在SPF,那么在构造钓鱼邮件地址时,就需要绕过;如果域名没有配置SPF,就不需要绕过,即
无SPF验证——直接伪造
有SPF验证——转发或修改后缀等方式
如何判断SPF
在Linux系统使用dig命令,Windows系统使用nslookup命令可以判断。
1 | dig -t txt qq.com //linux |
根据如下返回值能够判断
1 | "v=spf1 -all" (拒绝所有,表示这个域名不会发出邮件) |
示例如下,说明qq.com采用类似spf.mail.qq.com这样的邮件地址来发送,其他地址是不可信的

邮箱系统分类及SPF情况
邮箱系统分几类:
1、传统厂商的邮箱系统:如QQ、163、sohu、sina、outlook、gmail、yahoo等——SPF必定有
2、企业自主的邮箱系统——SPF可能会有
3、个人使用的邮箱系统——SPF大部分没有
4、其他/临时邮箱——SPF大部分没有
Swaks和gophish
Swaks简单使用说明
1 | -t –to 目标地址 -t test@test.com |
gophish 安装使用
邮件钓鱼的防范-7看
- 看发件人地址:收到可疑邮件首先要查看发件人地址。如果是办公邮件,发件人多数会使用单位工作邮箱,如果发现对方使用的是外部邮箱账号如gmail,qq邮箱,或者邮箱账号拼写很奇怪,那么就需要提高警惕。钓鱼邮件的发件人地址也经常会进行伪造,比如伪造成本单位域名的邮箱账号或者系统管理员账号。
- 看收件人地址:如果发现所接收的邮件被群发给校内大量人员,而这些人员并不是工作常用联系人或相关单位人员,那么就需要警惕,有可能是钓鱼邮件。
- 看邮件标题:大量钓鱼邮件主题关键字涉及“系统管理员”、“告警通知”、“账户冻结”、“密码到期”、“邮件账号报备”、“邮件异常登录”等,收到此类关键词的邮件,需提高警惕。
- 看正文措辞:对使用“亲爱的用户”、“亲爱的同事”等一些泛化问候或同事间不常用称呼的邮件应保持警惕。同时也要对任何制造紧急气氛的邮件提高警惕,如要求“账号已到期”,“邮箱容量达到上限”等。
- 看正文内容:邮件中有要求使用者点击邮件中的链接完成某项操作(如激活账号,确认密码),一定不要随便点击链接,必要时可以先联系相关部门确认邮件内容,避免上当。
- 看附件内容:邮件中的附件信息,不要随便点击下载。诸如word、pdf、excel、PPT、rar等文件都可能植入木马或间谍程序,尤其是附件中直接带有后缀为.exe、.bat的可执行文件,千万不要点击。
- 看发件的日期:公务邮件通常接收邮件的时间在工作时间内,如果收到邮件是非工作时间(如凌晨时段),很有可能是钓鱼邮件。
演示案例
红队APT-邮件钓鱼-软硬绕过SPF
实验1:无SPF-直接伪造-Swaks
网络上有许多临时邮箱,可以直接使用,如:
检测SPF
nslookup -type=txt xxx.com
这些临时邮箱的域名一般都没有SPF,比如我们查询确认SPF情况,解析记录中没有"v=spf1 xxxx"这种记录

这些临时邮箱可以收信,也可以发送信息
Swaks伪造
Swaks 是一款非常强大的 SMTP 测试工具,因其功能全面、灵活好用,常被称作“SMTP 界的瑞士军刀”。
| 特性项目 | 说明 |
|---|---|
| 工具全称 | Swaks (Swiss Army Knife for SMTP) |
| 主要用途 | SMTP 服务器测试、邮件发送调试、邮件系统故障排查 |
| 在 Kali Linux 中的状态 | 通常已默认安装 |
| 核心特点 | 命令行操作、支持 TLS/SSL 加密、支持多种认证机制、可伪造邮件头、可发送附件等 |
下载地址:http://jetmore.org/john/code/swaks/
我们使用如下命令构造钓鱼邮件
1 | swaks --header-X-Mailer "" --header-Message-Id "" --from "admin@qq.com" --ehlo shabimeiguo --header "Subject: 测试" --body "我们做了一个测试" --to 12e7232ee159@drmail.in |
这条命令试图向邮箱 12e7232ee159@drmail.in发送一封主题为“测试”的纯文本(但声明为HTML)邮件。它特别注重伪装和移除能识别出是由 swaks发送的痕迹。
各个参数的含义如下:
| 参数 | 含义 | 作用与目的 |
|---|---|---|
swaks |
Swiss Army Knife SMTP 工具的主命令。 | 调用邮件发送测试工具。 |
--header-X-Mailer "" |
自定义 X-Mailer邮件头,并将其值设置为空。 |
移除发送软件标识,增加隐蔽性,使对方无法直接从邮件头看出由 Swaks 发送。 |
--header-Message-Id "" |
自定义 Message-Id邮件头,并将其值设置为空。 |
试图移除邮件的唯一追踪ID,消除发送端标识(但接收服务器很可能拒绝并重新生成)。 |
--header-"Content-Type"="text/html" |
(语法错误) 意图是设置邮件内容类型为 HTML 格式。 | 声明邮件正文为 HTML 代码。错误点:正确写法应为 --add-header "Content-Type: text/html"。 |
--from "admin@qq.com" |
设置邮件的发件人地址(From)。 | 伪造发件人。收件人将看到邮件来自此地址。能否成功送达取决于反垃圾邮件策略(如SPF)。 |
--ehlo shabimeiguo |
设置 SMTP 握手阶段的 EHLO标识。 |
伪装客户端身份,以规避基于 EHLO 主机名的简单过滤或测试服务器响应。 |
--header "Subject: 测试" |
意图是设置邮件的主题。 | 定义邮件的标题为“测试” |
--body 我们做了一个测试 |
设置邮件的正文内容。 | 定义邮件的正文文本为“我们做了一个测试”。逻辑冲突:与前面声明的 text/html类型不匹配。 |
--to 12e7232ee159@drmail.in |
设置邮件的收件人地址(To)。 | 指定这封测试邮件的目的邮箱地址。这是命令中必须正确的真实参数。 |
在Kali中执行上述命令,向临时邮箱中发送一封我们构造的邮件,可见伪造admin@qq.com成功

经过测试jd.com和aliyun.com域名也可伪造,这是因为收件方的邮件系统没有进行SPF验证,直接接收任意邮件
实验2:有SPF-直接伪造-Swaks
1、视觉绕过-软刚发信人:(修改字眼或后缀域名)
根据域名、字体上的相似性,构造容易混淆的发件人地址
如用aliyun.cn、aliyun.com.cn,来混淆aliyun.com这个官方域名,或者利用字体上的相似将官方域名中的1和l混淆,0和o混淆
1 | swaks --body "test" --header "Subject:testT" -t xxx@163.com -f message@abobe.com |
我们使用上面用过的命令语句,将最后的临时邮件地址换成某个QQ邮箱地址,将发件人地址改成system@notice.aliyun.com,即
1 | swaks --header-X-Mailer "" --header-Message-Id "" --from "system@notice.aliyun.com" --ehlo shabimeiguo --header "Subject: 测试" --body "我们做了一个测试" --to 123456@qq.com |

会发现发送失败,这是因为接收方QQ邮箱做了SPF验证,会检测发送人的身份,发现我们构造的信息和SPF解析记录中不一致(笔者注:可能是IP和解析记录IP对不上),认为我们的邮件是伪造的,因此发送失败
这时我们将system@notice.aliyun.com换成system@notice.a1iyun.com即把l换成1,即
1 | swaks --header-X-Mailer "" --header-Message-Id "" --from "system@notice.a1iyun.com" --ehlo shabimeiguo --header "Subject: 测试" --body "我们做了一个测试" --to 123456@qq.com |


发现可以成功发送,说明QQ邮箱的SPF检测已经通过了(笔者注:另一方面说明a1iyun.com域名的SPF解析记录不太严格),类似的,使用system@notice.aliyun.com.cn也可以发送成功
2、转发技术-硬刚发信人:(转发突破)
笔者注:
1、SPF验证的核心是验证DNS解析记录,比如aliyun.com就可能配置仅允许x.x.x.x~y.y.y.y段的IP地址发送邮件,接收方的对SPF的验证也是基于DNS查询实现的,一旦我们伪造的发件人地址与SPF记录不符,就无法成功发送。
2、如果我们在A向B发送邮件的过程中,进行一道转发操作,将A的内容通过C转发给B,那么B只会验证C的真实性,从而实现发件人的伪造(相当于接收方只验证自己上一站的真实性,不管上上一站的真实性)
方法一:注册一个邮箱开启POP3转发(已失效)
1、将要发送的邮件导出EML模版
2、修改内置的发件人内容时间等
1 | swaks --to 收信人 -f 发信人 --data 1.eml --server smtp.163.com -p 25 -au 帐号 -ap 授权码 |
方法二:使用网上已知的邮箱系统转发:红队APT-邮件钓鱼-SendCloud转发
1、smtp2go(速度慢但免费发送量大),地址:https://www.smtp2go.com/
2、SendCloud(速度快但免费发送量少),地址:https://www.sendcloud.net/
3、当然也可以自己搭建邮件服务器-Ewomail&Postfix,地址:http://www.ewomail.com/
下面演示SendCloud平台中转操作
在发送设置中配置域名,有自己的域名就用自己的,没有可以使用平台提供的

之后点击API_USER,这是为了验证用户身份所需

进入“发送相关”页面,即可配置发信地址、接受者地址、邮件主题等信息。此平台提供的是邮件中转服务,会将我们配置的邮件内容通过平台中转发送出去,接收方13554365566@163.com看到的发件人将会是admin@qq.com

点击发送,查看投递回应情况,可以看到已经送达

在网易163邮箱就能看到我们中转发送过来的邮件,但会提示由某某代转发,使用自己的短域名可以避免伪造邮件进垃圾箱

同理,QQ邮箱测试也能实现

红队APT-邮件钓鱼-Gophish批量系统
实验3:优化内容效率-Gophish
使用Gophish工具,可以批量伪造邮件制造攻击
Gophish:https://github.com/gophish/gophish
功能实现1:不伪造来源发件人-使用Gophish伪造自己的已知邮箱
这里我们以QQ邮箱为例演示,先在QQ邮箱中开启“POP3/IMAP/SMTP/Exchange服务”并拿到授权码
第三方登录QQ邮箱需要先在QQ邮箱网页版中开启IMAP/SMTP服务,并通过密保验证后获取授权码,然后在第三方客户端的密码栏填写此授权码而非原QQ密码即可登录(笔者注:这里实际上是在Gophish作为第三方平台登录QQ邮箱)
1、配置发件接口(自定义)
2、配置发信模版(更逼真)
3、配置触发页面(钓鱼用)
4、配置收信人地址(批量套)
发送邮件之后,效果如下,可以看到,尽管伪造了发件人,但还是会提示转发邮箱地址

通过上面的实验,主要学习到Gophish平台的一些配置操作,尤其是钓鱼邮件模板和外链替换的配置,而邮件的发送方仍然是我们自己的QQ邮箱/网易163邮箱,即不能伪造发件人。
实际上,使用自己在公开提供的邮箱平台注册的邮箱进行钓鱼时,尽管能够绕过SPF验证,但是如果进行批量的操作,容易被平台监测到导致邮箱账号被封禁,因此,作为攻击者搭建自己的邮箱服务器是很有必要的。
功能实现2:伪造来源发件人-搭建邮箱服务器+Gophish伪造钓鱼邮件
见下一节