【渗透测试】Phishing钓鱼记录

0x00 前言

得到通知需要对某单位内部员工进行一次钓鱼邮件演练,因为之前接触的不多,钓鱼只是娱乐性的自己钓自己,记录下思路和踩坑。

0x01 信息

通过沟通得到了以下信息:

  • 钓鱼形式为外部链接钓鱼
  • 共计千余个邮箱,全量测试
  • 统计时间从发送邮件到第二天上班前
  • 统计结果,需要统计哪个邮箱点击链接,哪个邮箱输入了数据

0x02 部署

结合需求信息,采取Gophish+ewomail,Gophish钓鱼服务,可记录到每个邮箱收信之后的操作,ewomail邮箱网关服务,主要记录下部署过程和踩坑。

首先是Gophish,无需安装,项目仓库直接下载对应的版本即可gophish

修改config.json,主要就是两个端口,注意下默认监听端口不要和已有服务冲突即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
"admin_server": {
"listen_url": "0.0.0.0:3333",
"use_tls": true,
"cert_path": "gophish_admin.crt",
"key_path": "gophish_admin.key"
},
"phish_server": {
"listen_url": "0.0.0.0:8083",
"use_tls": false,
"cert_path": "example.crt",
"key_path": "example.key"
},
"db_name": "sqlite3",
"db_path": "gophish.db",
"migrations_prefix": "db/db_",
"contact_address": "",
"logging": {
"filename": "",
"level": ""
}
}

根目录运行./gophish即可运行。

建议首次运行不加nohub,首次登陆需要随机生成的密码,当然,也可直接查看nohub文件查看

部署完成大体如下:

Untitled

首先配置Sending Profiles,配置发件箱、smtp服务器信息,这里用163邮箱测试:

Untitled

smtp端口默认25,但云主机默认封掉25端口,需要改变为465端口;

smtp服务的用户名就是邮箱账号,密码需要邮箱开启smtp服务之后得到的授权码,以163为例,设置→POP3/SMTP/IMAP选项开启SMTP服务,认证之后即可得到授权码,填入Password字段

然后发送测试邮件测试连通性,只需要填第三项的邮箱地址,其余选项可随意填写:

Untitled

发送成功后,目标邮箱会收到如下邮件,证明连通性OK:

Untitled

接着配置Landing Pages,也就是钓鱼页面,可通过直接导入Site或直接编辑HTML两种方法配置页面:

实际中发现,有些网站导入效果不是很理想,例如使用mip22生成对外链接导入,它就变成了这个样子

Untitled

预览一下页面,emmmmm:

Untitled

很难受,有的网站导入效果好,有的网站导入效果就不好,比如说本次钓鱼是想用甲方的邮箱登录地址做链接,但是导进去发现,页面只有一个框框,一片漆黑,连登录框都没出来,暂时还没发现有什么特别好的办法。

然后是Email Templates,主要配置邮件正文内容,为了后续记录邮件是否打开,可勾选上 AddTrackingImage,它将会在发送的每份邮件源码上插⼊⼀个唯⼀特定的隐藏图⽚,当邮件被打开时,此隐藏图⽚则也会被请求,以此来检测该邮件是否被打开,AddFiles 则是给邮件添加附件。

如下是官⽅提供的其他可以使⽤的参数:

1
2
3
4
5
6
7
8
9
10
{{.RId}} 
{{.FirstName}}
{{.LastName}}
{{.Position}}
{{.Email}}
{{.From}}
{{.TrackingURL}}
{{.Tracker}}
{{.URL}}
{{.BaseURL}}

可先对上述参数进行测试:

Untitled

Users & Groups就容易理解了,添加目标邮箱即可,不再赘述。

最终Campaigns下发任务

注意这里的URL,需要对应Gophish服务端监听的地址端口

Untitled

确认无误之后,点击Launch,发送邮件,成功发送后,目标邮箱效果:

Untitled

如果用户点击了链接,在Gophish服务端,即可看到信息:

Untitled

然后是Ewomail搭建:

项目地址:https://gitee.com/laowu5/EwoMail https://github.com/gyxuehu/EwoMail

官方文档:http://doc.ewomail.com/docs/ewomail/jianjie

docker地址:https://hub.docker.com/r/bestwu/ewomail

源码安装,需要准备一台干净的CentOS系统

尝试此种方法,未知原因导致服务很不稳定,启动了一会儿webmail就登不上去了。

Docker简便安装,无需CentOS,xxx.com为申请的域名:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
docker run  -d -h mail.xxx.com --restart=always \
-p 25:25 \
-p 109:109 \
-p 110:110 \
-p 143:143 \
-p 465:465 \
-p 587:587 \
-p 993:993 \
-p 995:995 \
-p 80:80 \
-p 8080:8080 \
-v `pwd`/mysql/:/ewomail/mysql/data/ \
-v `pwd`/vmail/:/ewomail/mail/ \
-v `pwd`/ssl/certs/:/etc/ssl/certs/ \
-v `pwd`/ssl/private/:/etc/ssl/private/ \
-v `pwd`/rainloop:/ewomail/www/rainloop/data \
-v `pwd`/ssl/dkim/:/ewomail/dkim/ \
--name ewomail bestwu/ewomailserver

如果提示25端口被占用,执行systemctl stop postfix,之后再次安装;

或是修改10024端口,(执行上面那个应该就可以,此条留作备选)

Untitled

接着配置解析:http://doc.ewomail.com/docs/ewomail/main_domain

spf这里设置VPS的地址,如果是127.0.0.1发件的时候可能提示spf check failed

一定是mail.xxx,不能直接解析xxx.com

DKMI这里,首先通过docker执行docker exec ewomail amavisd showkeys 获取,根据文档进行整理之后填入解析等待十分钟,再次执行docker exec ewomail amavisd testkeys 出现TESTING#1: dkim._domainkey.xxx.com => pass 字样即为正确

Untitled

解析配置好之后,可通过域名进行访问,如果没配置也可直接IP访问

前端地址,重要!!需要先进行配置:

1
2
3
4
5
http://mail.xxx.com.cn:8080/          //ewomail后台管理页面,admin/ewomail,管理smtp地址邮箱

http://mail.xxx.com.cn/?admin //rainloop管理后台,admin/12345,需要先登录进行域名添加及smtp服务联通测试

http://mail.xxx.com.cn/ //webmail邮箱页面,配置好前两步,可登录邮箱账户进行收发邮箱

Untitled

Untitled

Untitled

实际测试中发现,给企业邮箱发邮件可能会收到系统邮件提示550 Ip frequency limited,可能需要进行白名单设置,QQ邮箱可直接发送。

测试smtp服务,可通过以下脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#coding: utf-8
import time
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header

smtpserver = 'smtp.xxx.com.cn:465'
username = 'admin@xxx.com.cn'
password = 'Admin123'
sender = 'admin@xxx.com.cn'
receiver = ['sssss@163.com']
# receiver = ['username1@qq.com', 'username2@163.com']

msg = MIMEMultipart('mixed')
subject = '发送主题'
subject = Header(subject, 'utf-8').encode()
msg['Subject'] = subject
msg['From'] = 'admin <admin@xxx.com.cn>'
msg['To'] = '<sss@163.com>'
# msg['To'] = 'username1 <username1@163.com>; username2 <username2@163.com>'
msg['Date'] = '2021-1-26'

text = "邮件正文"
text_plain = MIMEText(text, 'plain', 'utf-8')
msg.attach(text_plain)

total = 1
send = 0
error = 0
while error < 2 and send < total:
try:
smtp = smtplib.SMTP()
smtp.connect('smtp.xxx.com.cn')
smtp.login(username, password)
while send < total:
smtp.sendmail(sender, receiver, msg.as_string())
print("第{}封邮件发送成功!".format(send+1))
send += 1
error = 0
time.sleep(0)
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()
except Exception as e:
print("发生错误,重新发送",e)
error += 1
continue

Untitled

0x03 联动

经过实际测试,Gophish和Ewomail要在同一台VPS下!

原本的想法是Ewomail在国外的VPS,Gophish在阿里云,但是测试中发现这样配置Gophish无法通过Ewomail的smtp服务发送邮件,报错Max connection attempts exceeded - dial tcp 127.0.0.1:465: connect: connection refused

Untitled

而在同一台VPS下操作,就可以正常发送:

Untitled

Untitled

至此,Gophish和Ewomail已经部署完成,接下来就是配置钓鱼页面准备猎杀时刻。

需要注意,一定要把Gophish的VPS地址加白,原以为通过smtp发件显示的是smtp邮箱的地址,但实际上却是Gophish的地址,如果不加白会导致触发邮箱服务黑名单。