邮件钓鱼
今天给大家分享一个自己钓自己的网络钓鱼攻击案例,我将从创建到实施做一个完整的讲解,其中会使用 docker,更方便的搭建环境,主要用到的工具包括:Gophish(一个钓鱼框架)、Mailhog(邮件发送服务)。
邮件钓鱼案例
https://blog.csdn.net/qq_42939527/article/details/107485116 https://www.cnblogs.com/xinssblog/p/15886097.html http://f5.pm/go-103800.html https://cloud.tencent.com/developer/article/1796781 https://blog.csdn.net/qq_42939527/article/details/107485116
一、Gofish 安装
使用下面的 docker 配置文件,启动 docker 服务:
docker-compose.yml
services:
gophish:
image: "gophish/gophish"
ports:
- "3333:3333"
- "8888:80"
mailhog:
image: "mailhog/mailhog"
ports:
- "1025:1025"
- "8025:8025"
depends_on:
- gophish
environment:
MAIL_MAILER: smtp
MAIL_HOST: 127.0.0.1
MAIL_PORT: 1025
MAIL_USERNAME: null
MAIL_PASSWORD: null
MAIL_ENCRYPTION: null
启动服务: docker-compose up -d
访问 https://localhost:3333
gophish 服务使用的是 3333 端口,默认用户名密码为 admin/gophish。由于 docker 每次启动时密码都不同,所以无法使用默认密码登录,可以在控制台看到密码:
docker-compose logs | grep pass
然后使用获得的密码登录系统:
里面主要使用的有如下几个模块:
Dashboard 仪表盘,展示已发动的攻击情况和受害者信息
Campaigns 在此配置每次要发起的攻击
Users& Groups 在此设置目标受害者的邮箱
EmailTemplates 在此设置钓鱼邮件的模板
LandingPages 要在此设置钓鱼页面模板
SendingProfiles 在此配置发送钓鱼邮件的邮箱
在下面的实际使用中会对这些模块一一进行介绍。
自建 SMTP 服务
docker network ls
接下来查看其分配的 IP 地址,我们需要知道 mailhog 的 IP :
docker network inspect fcff01c8be6a
上图是分配的网段信息,向下翻找出 mailhob 服务的 IP:
使用流程
1、设置发件人的邮箱
使用SendingProfiles模块来将用来发送钓鱼邮件的邮箱配置到gophish。
点击New Profiles添加新的邮箱,测试可以使用QQ或者163邮箱(需要设置开启“SMTP服务”),但是实际攻击中,这会很容易被认出来,降低钓鱼攻击的成功率。可以注册与受害者邮箱域名类似的域名,然后搭建邮件服务器,再以此服务器来发送钓鱼邮件。
填写的具体格式如下,这里使用qq邮箱:
Username:
Username 是smtp服务认证的用户名,如果是qq邮箱,Username则是自己的qq邮箱号xxxx@qq.com
Password:
Password 是smtp服务认证的密码,例如qq邮箱,需要在登录qq邮箱后,点击 设置 - 账户 - 开启SMPT服务 生成授权码,Password的值则可以填收到的授权码
Email Headers: Email Headers 是自定义邮件头字段,例如邮件头的X-Mailer字段,若不修改此字段的值,通过gophish发出的邮件,其邮件头的X-Mailer的值默认为gophish。
选择显示邮件原文可以看到;
上面填好后,可以点击Send Test Email来给自己发送测试邮件。
之后可以在自己邮箱收到这样的测试邮件:
注:使用阿里云的服务器时,可能会发送超时,并出现报错:Max connection attempts exceeded - dial tcp 14.18.175.202:25: i/o timeout,这是由于阿里云服务器关闭了25号端口,这个25号端口正是SMTP需要的端口。 具体可以参考:https://blog.csdn.net/nbhh2748/article/details/81320174
2、Email Templates 钓鱼邮件模板
编辑钓鱼邮件模板使用的模块为EmailTemplates ,该模块提供了两种方法编辑邮件内容,第一种是使用Import Email
直接导入,另一种是手动编辑。点击New Template
创建新的邮件模板。
Import Email:
这种方法支持用户直接导入现有邮件的格式,打开并选择导出为eml文件
或者显示邮件原文
,然后将内容复制到gophish的Import Email
中,即可将设计好的钓鱼邮件导入。
勾选了ChangeLinks to Point to LandingPage
之后,邮件模板中的链接会被替换为钓鱼网站的链接,当目标点击邮件中的链接后,会跳转到后续在LandingPages
里配置的钓鱼页面里。
钓鱼模板参数
模板变量参考:
column0 | column1 |
---|---|
Variable | Description |
The target’s unique ID | |
The target’s first name | |
The target’s last name | |
The target’s position | |
The target’s email address | |
The spoofed sender | |
The URL to the tracking handler | |
An alias for | |
The phishing URL | |
The base URL with the path and rid parameter stripped. Useful for making links to static files. |
网页显示有bug,下面是去除的正常显示,正常运行要加上
column0 | column1 |
---|---|
Variable | Description |
.RId | The target’s unique ID |
.FirstName | The target’s first name |
.LastName | The target’s last name |
.Position | The target’s position |
The target’s email address | |
.From | The spoofed sender |
.TrackingURL | The URL to the tracking handler |
.Tracker | An alias for |
.URL | The phishing URL |
.BaseURL | The base URL with the path and rid parameter stripped. Useful for making links to static files. |
超链接例子:
<p>②、Web自助:<a href="" target="_blank">http://baidu.com</a></p>
内容编辑器:
内容编辑器可以让你手动编辑钓鱼邮件,不过它更偏向于用来辅助第一种方法:对导入的邮件进行源码修改和预览。
Add Files: Add Files 是在发送的邮件中添加附件
,一是可以添加相关文件提高邮件真实性,二是可以配合免杀木马诱导受害用户下载并打开。
3、Landing Pages 钓鱼页面
钓鱼页面是配合钓鱼邮件使用的,钓鱼邮件的最终目的,通常是通过钓鱼邮件来使受害者点击链接进入精心构造的钓鱼页面,通过钓鱼页面来诱导用户输入敏感信息,如密码等;或者通过钓鱼邮件诱导用户点击下载邮件附件,以此来向受害用户主机植入病毒或木马等。
一般情况下,钓鱼页面都是类似于修改密码
或者登录
之类的页面,并且要和钓鱼页面所模仿的页面做到尽可能的一样。
和制作钓鱼邮件类似,制作钓鱼页面也有相应的两种方法:
import site: 通过输入url的方式来导入网站,这种方法可通过互联网自动抓取被伪造网站的前端代码。但是也会遇到各种各样的问题,如导入不全,或者中文出现乱码等情况。
Capture Submitted Data:
这个选项是获取提交的数据,毕竟钓鱼页面就是干这个的,一般都会勾上。这个选项勾上之后,又会多出几个选项,Capture Passwords
是捕获密码,一般也一起勾上,有的时候搞钓鱼邮件应急演练,客户不让你获取他们的密码,只统计受害的人,那就不勾这个了。Redirect to
表示用户做完提交操作后,页面跳转的地址,可以指向真正的官网登录页面,这样能减少受害者发现自身被钓鱼的可能性。
点击save page,钓鱼页面就制作完成了。这个页面实际上就在自己IP的80端口,只有你有公网IP其他人才能访问的到。
踩坑汇总
(必看)经验之谈 · 注意事项 在导入真实网站来作为钓鱼页面时,绝大多数情况下并非仅通过Import就能够达到理想下的克隆,通过多次实践,总结出以下几点注意事项 1.
【捕获不到提交的数据】
导入后要在HTML编辑框的非Source模式
下观察源码解析情况,如果明显发现存在许多地方未加载,则有可能导入的源码并非页面完全加载后的前端代码,而是一个半成品,需要通过浏览器二次解析,渲染未加载的DOM。这种情况下,除非能够直接爬取页面完全加载后的前端代码,否则无法利用gophish进行钓鱼,造成的原因是不满足第2点。
【捕获不到提交的数据】
导入的前端源码,必须存在严格存在<form method="post" ···><input name="aaa" ··· /> ··· <input type="submit" ··· /></form>结构
,即表单(POST方式)— Input标签(具有name属性)Input标签(submit类型)— 表单闭合的结构,如果不满足则无法捕获到提交的数据【捕获不到提交的数据】
在满足第2点的结构的情况下,还需要求<form method=”post” ···>在浏览器解析渲染后(即预览情况下)不能包含action属性
,或者action属性的值为空。否则将会把表单数据提交给action指定的页面,而导致无法被捕获到【捕获数据不齐全】
对于需要被捕获的表单数据,除了input标签需要被包含在 < form > 中,还需满足该 < input>存在name 属性。例如< input name=”username”>,否则会因为没有字段名而导致value被忽略
5.
【密码被加密】
针对https页面的import,通常密码会进行加密处理,这时需要通过审计导入的前端代码,找到加密的JavaScript函数(多数情况存在于单独的js文件中,通过src引入),将其在gophish的HTML编辑框中删除,阻止表单数据被加密 以上5点是在实践中总结出来的宝贵经验,或许还有其他许多坑未填,但所有的坑通常都围绕在<form></form>结构中,所以如果遇到新坑,先将该结构排查一遍,还是不行,再另辟蹊径
Landing Pages 钓鱼页面的模板例子
<form method="post" >
username: <input type="text" name="username"><br>
password: <input type="text" name="password">
<input type="submit" name="lastname">
</form>
4、设置目标用户
使用Users & Groups模块来设置钓鱼邮件的目标
可以单个导入,其中Email选项为必填,其他都可以不要。
也可以批量导入:
5、创建钓鱼事件
在一切都准备好之后,就可以发送钓鱼邮件了,使用Campaigns
模块,创建一个新的钓鱼活动。
URL:
(重点)URL: URL 是用来替换选定钓鱼邮件模板中超链接的值,该值指向部署了选定钓鱼页面的url网址(这里比较绕,下面具体解释一下,看完解释再来理解这句话)
简单来说,这里的URL需要填写当前运行gophish脚本主机的ip。 因为启动gophish后,gophish默认监听了3333和80端口,其中3333端口是后台管理系统,而80端口就是用来部署钓鱼页面的。 当URL填写了http://主机IP/,并成功创建了当前的钓鱼事件后。gophish会在主机的80端口部署当前钓鱼事件所选定的钓鱼页面,并在发送的钓鱼邮件里,将其中所有的超链接都替换成部署在80端口的钓鱼页面的url
所以,这里的URL填写我本地当前运行gophish主机的IP对应的url,即http://192.168.141.1/
点开钓鱼邮件的模板,查看源码也能看到,这里替换的是源码里的字段。
Launch Date && Send Emails By Launch Date
顾名思义是设置发送邮件的时间,可以选择在什么时间发送。 另一个可选项 Send Emails By
是配合Launch Date
使用的,Send Emails By代表开始发送时间,Launch Date代表结束发送时间,所有邮件都会在这个时间段按分钟平均发送。假设这个时间段有10分钟,那么100封邮件就分成10份,每一分钟发10份。这样的发件策略可以防止因短时间大量邮件抵达目标邮箱而导致的垃圾邮件检测,甚至发件邮箱服务器IP被目标邮箱服务器封禁。
6、查看结果
点开Dashboard
可以查看所有钓鱼活动
(Campaigns)的数据统计。
在下方可以选择查看某一次活动的数据。
在这里可以看到有谁点开了邮件
、有谁点击了邮件
的、有谁往里面提交了数据
等。
点击受害者栏的左边的小箭头,可以看到受害者提交的数据,还有操作系统的版本和浏览器版本信息。
第三方插件-导出报表
Goreport Goreport是一个第三方的报表生产脚本,通过Gophish API可以帮你快速生成IP地址、操作系统、浏览器类型、版本、位置信息列表。并导出为execl或者word文档。
项目地址:https://github.com/chrismaddalena/GoReport
Swaks 伪造邮件
https://payloads.online/archivers/2019-05-09/1/
一般情况下没有SPF可以 直接用swaks伪造。
-t –to 目标地址 -t test@test.com
-f –from 来源地址 (发件人) -f "text<text@text.com>"
–protocol 设定协议(未测试)
--body "http://www.baidu.com" //引号中的内容即为邮件正文;
--header "Subject:hello" //邮件头信息,subject为邮件标题
-ehlo 伪造邮件ehlo头
--data ./Desktop/email.txt //将正常源邮件的内容保存成TXT文件,再作为正常邮件发送;
绕过 SPF
绕过 sendgird, mailgun
在有SPF的情况下,就需要绕过SPF,可以使用swaks+smtp2go,需要借助到邮件托管平台来绕过SPF监测。
swaks --to xxx@163.com
--from admin@gov.com
--ehlo xxx
dan--body “hello ,i'm 007"
--server mail.smtp2go.com -p 2525 -au user -ap pass
自建邮件服务器
开源邮件服务poste https://www.xiaoz.me/archives/16114 https://www.zhihu.com/question/68590382 https://www.wumvp.com/2019/03/24/poste.html
Docker部署poste
Docker部署 poste ,几乎不会影响你服务器上现有的服务,复制下面的命令执行:
docker run -d \
-p 880:80 -p 8443:443 -p 25:25 -p 110:110 -p 143:143 -p 465:465 -p 587:587 -p 993:993 -p 995:995 -p 4190:4190 \
-e TZ=Asia/Shanghai \
-v /data/mail-data:/data \
--name "mailserver" \
-h "mail.your-domain.com" \
--restart=always \
-t analogic/poste.io
参数含义如下:
880/8443
是WEB访问端口,为了避免和本地已有WEB服务(nginx等)冲突,所以这里使用的880/8443
作为WEB端口- TZ=Asia/Shanghai:设置容器为上海时区
/data/mail-data:
本地数据目录,根据实际情况修改为服务器目录mail.xxx.com:
改成你自己的域名--restart=always:
容器异常时自动拉起 如果部署遇到25端口被占用,可通过netstat -apn|grep 25查看是否是postfix导致,CentOS 7可卸载postfix:#卸载postfix yum -y remove postfix
部署后访问https://IP:8443/
根据提示完成初始化设置。
发送邮件
内网配置域名,部署后访问 https://IP:8443/webmail/
, 即可登录web发件页面
配置客户端
内网服务器填
IP地址
,勾选SSL
文档信息
- 本文作者:dzxindex
- 本文链接:https://dzxindex.github.io/2022/02/18/security-%E9%82%AE%E4%BB%B6%E9%92%93%E9%B1%BC/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)