说明
主要分两步
- 1是部署邮件服务器(已经有邮件服务器或者有相关的账号可以直接从第二步开始)
- 2是部署钓鱼平台
为了安全、简单、方便,我比较喜欢用docker,所以下文能用docker的我都用docker了
邮件服务器:EwoMail
下载镜像
EwoMail开源企业邮件系统,先从docker pull下来
docker pull bestwu/ewomail
编写快速启动文件
创建docker-compose.yml
文件并写入如下内容,需要给mail.dvwatest.xyz
替换成自己的域名
service:
mail:
image: bestwu/ewomail
hostname: mail.dvwatest.xyz
container_name: ewomail
restart: always
ports:
- "25:25"
- "143:143"
- "587:587"
- "993:993"
- "109:109"
- "110:110"
- "465:465"
- "995:995"
- "127.0.0.1:8002:80"
- "8001:8080"
volumes:
- ./mysql:/ewomail/mysql/data
- ./vmail:/ewomail/mail
- ./rainloop:/ewomail/www/rainloop/data
- ./ssl/certs/:/etc/ssl/certs/
- ./ssl/private/:/etc/ssl/private/
- ./ssl/dkim/:/ewomail/dkim/
可配置参数
- MYSQL_ROOT_PASSWORD mysql数据库root密码,默认:mysql
- MYSQL_MAIL_PASSWORD mysql数据库ewomail密码,默认:123456
- URL 网站链接,后面不要加/线
- WEBMAIL_URL 邮件系统链接,后面不要加/线
- TITLE 用户邮统标题
- COPYRIGHT 邮箱管理后台网站版权
- ICP 邮箱管理后台网站备案号
- LANGUAGE 语言选择,默认:zh_CN
启动镜像
docker compose up -d
启动后就可以访问web页面了 http://ip:8001
,用户名:admin,密码:ewomail123
登陆后如下图
配置DNS
要想让域名指向过去,还需要配置一下DNS
主机记录 | 记录类型 | 解析线路 | 记录值 | MX优先级 | TTL值 |
---|---|---|---|---|---|
@ | TXT | 默认 | v=spf1 ip4:邮件服务器IP -all | 600 | |
dkim._domainkey | TXT | 默认 | DKIM值 | 600 | |
A | 默认 | 邮件服务器IP | 600 | ||
smtp | CNAME | 默认 | mail.dvwatest.xyz | 600 | |
pop | CNAME | 默认 | mail.dvwatest.xyz | 600 | |
imap | CNAME | 默认 | mail.dvwatest.xyz | 600 | |
@ | MX | 默认 | mail.dvwatest.xyz | 1 | 600 |
DKIM值获取方法:
docker exec ewomail amavisd showkeys
然后需要对这个值进行整理,可使用网站:http://www.ewomail.com/list-20.html
等待10分钟左右测试是否设置正确:
docker exec ewomail amavisd testkeys
如果出现pass就说明正确
配置邮箱
现在一切都准备就绪了,只需要我们去http://ip:8001
配置账号就行了(其他一般不用配置,可以浏览一遍检查一下)
系统设置:
添加账号:
特别注意⚠️
只通过上面的流程,会出现如下的问题
邮件发不出去
原因是因为10024
端口跑的服务主要用于ewomail中反垃圾反病毒作用,然而docker镜像中没有集成,所以会无法接收到邮件
解决办法:
注释/etc/postfix/main.cf
中的(最前面加个#
即可)
content_filter = smtp-amavis:[127.0.0.1]:10024
然后重启容器
docker restart ewomail
不能伪造From
可能会遇到如下的情况 Sender address rejected: not owned by user
还是查看日志,发现在postfix/smtpd
被拒绝了,解决方案如下:
进入docker容器,编辑/etc/postfix/main.cf
文件
# 1. 找到smtpd_sender_login_maps,修改为
smtpd_sender_login_maps = mysql:/etc/postfix/mysql/mysql-sender-login-maps.cf,pcre:/etc/postfix/login_maps.pcre
# 2. 找到smtpd_recipient_restrictions,删除reject_unknown_sender_domain,这样就不会对发送的域进行验证了
然后创建/etc/postfix/login_maps.pcre
文件,写入如下内容:
# 意思是允许用户[email protected](你自己的邮箱账户)的用户使用任意domain
/^(.*)$/ [email protected]
刷新配置
postmap /etc/postfix/login_maps.pcre
postfix reload
邮件自动重发
如果查看日志,发现收件服务器提示 rejected
,那么会在5分钟左右自动重发一次。
这里主要注意的是:如果客户的邮件服务器有时候拒绝有时候成功的话,要耐心等待自动重发,不要看到失败了马上就去手动继续发,这样可能导致邮件多次发送,影响钓鱼效果。
测试
可以直接用swaks
工具来测试
swaks --to [email protected] --from [email protected] --header 'Subject:TEST' --body hello --server smtp.dvwatest.xyz -p 25 -au [email protected] -ap 设置的密码
钓鱼平台:gophish
下载镜像
docker pull gophish/gophish
启动镜像
docker run -it -d --rm --name gophish -p 3333:3333 -p 8003:80 -p 8004:8080 gophish/gophish
登陆系统
https
访问3333
端口
用户名为admin
,密码第一次登陆为随机密码,通过查看日志获取
docker logs gophish
登陆即可
使用
使用暂时我觉得还是没必要说,点点点就会了
效果
特别注意⚠️
捕获不到提交的数据
1)导入后要在HTML编辑框的非Source模式下观察源码解析情况,如果明显发现存在许多地方未加载,则有可能导入的源码并非页面完全加载后的前端代码,而是一个半成品,需要通过浏览器二次解析,渲染未加载的DOM。这种情况下,除非能够直接爬取页面完全加载后的前端代码,否则无法利用gophish进行钓鱼,造成的原因是不满足第2点。
2)导入的前端源码,必须存在严格存在结构
<form method="post" ···><input name="aaa" ··· /> ··· <input type="submit" ··· /></form>
即表单(POST方式)— Input标签(具有name属性)Input标签(submit类型)— 表单闭合的结构,如果不满足则无法捕获到提交的数据
3)在满足第2点的结构的情况下,还需要求<form method="post" ···>
在浏览器解析渲染后(即预览情况下)不能包含action属性,或者action属性的值为空。否则将会把表单数据提交给action指定的页面,而导致无法被捕获到.
捕获数据不齐全
对于需要被捕获的表单数据,除了input标签需要被包含在<form>
中,还需满足该<input>
存在name
属性。例如<input name="username">
,否则会因为没有字段名而导致value被忽略。
密码被加密
针对https页面的import,通常密码会进行加密处理,这时需要通过审计导入的前端代码,找到加密的JavaScript函数(多数情况存在于单独的js文件中,通过src引入),将其在gophish的HTML编辑框中删除,阻止表单数据被加密。