钓鱼演练环境搭建:GoPhish + EwoMail

0x01 EwoMail+GoPhish搭建

2.1.EwoMail搭建

2.1.1服务器的购买

**注意:**国内X云服务器要解封25,建议买推荐的测试使用,请勿用于非法用途!

本次在野草云香港vps上购买的vps,配置是2c2g,域名我是在阿里云上购买:

1
https://my.yecaoyun.com/

image-20260228165322723

2.1.2EwoMail部署

2.1.2.1. 连通测试

出现220字样才是正常的。

1
2
yum install telnet -y
telnet smtp.qq.com 25

image-20260228170916255

2.1.2.2. 修改主机

关闭防护:

1
2
3
4
邮件系统涉及大量底层目录权限交互,关闭 SELinux 可避免各种玄学的权限拦截报错。

vi /etc/sysconfig/selinux
SELINUX=enforcing 改为 SELINUX=disabled

image-20260228171051221

修改主机名:

1
hostnamectl set-hostname mail.xxxx.cc(你的域名)

修改本地解析

1
2
vi /etc/hosts
127.0.0.1 mail.xxxx.cc stmp.xxxx.cc imap.xxxx.cc.xxxx.cc

image-20260228171742110

创建swap分区(内存超过2G,可不配置)EwoMail 包含众多反垃圾组件,对内存消耗极大,在 2C2G 的机器上极其容易 OOM(内存溢出)导致数据库崩溃,因此必须分配虚拟内存。

创建1G的swap,可以根据你的服务器配置来调整大小

1
dd if=/dev/zero of=/mnt/swap bs=1M count=1024  

设置交换分区文件

1
mkswap /mnt/swap

启动swap

1
swapon /mnt/swap

设置开机时自启用 swap 分区

1
2
需要修改文件 /etc/fstab 中的 swap 行,添加
/mnt/swap swap swap defaults 0 0

image-20260228171447764

2.1.2.3. 安装EW系统

1
2
3
4
5
yum -y install git
cd /root
git clone https://gitee.com/laowu5/EwoMail.git
cd /root/EwoMail/install
sh ./start.sh xxxx.cc(你的域名)

image-20260228171717440

2.1.2.4.配置域名解析

参考:

1
http://doc.ewomail.com/docs/ewomail/main_domain

image-20260228172102644

获取dkim key(配置 DKIM 是为了让收件方网关验证邮件确实由该域名授权发出,是提升邮件到达率、防拒收的核心要素。)

1
amavisd -c /etc/amavisd/amavisd.conf showkeys

image-20260228172213890

复制输出的信息,打开http://www.ewomail.com/list-20.html 整理dkim信息

image-20260228172256145

2.1.2.5.登录后台添加邮箱用户

1
2
3
4
5
8000端口:即WebMail页面
8010端口:即邮件管理后台
http://xx.xx.xx.xx:8010/
默认账号:admin
默认密码:ewomail123

image-20260228172559592

2.1.2.6.登录WebMail测试发信

1
http://xx.xx.xx.xx:8080/   成功后,下一步配置gophish平台

image-20260228174410219

2.1.2.7.添加其他域名

1
2
流程一样
https://dcc.godaddy.com/control/portfolio/chinataxadminsho.shop/settings?ventureId=7b6c3e62-1ee4-4566-b520-1faf42f69ccb&ua_placement=shared_header

image-20260304102210247

1
添加域名

image-20260304102300942

1
添加用户

image-20260304102337201

2.2GoPhish搭建

2.2.1. GoPhish部署

我是在Windows部署的,直接cmd启动gophish.exe

1
https://github.com/gophish/gophish

image-20260228174644732

修改配置文件

1
config.json文件,可以修改端口、证书等信息

image-20260305102616048

启动:


1
2
3
运行完会生成一个随意密码 
level=info msg="Please login with the username admin and the password 68eb5961e9f5eef4"
nohup ./gophish > gophish.log 2>&1 & Linux可以后台启动

image-20260228175151103

2.2.2. GoPhish基本使用

2.2.2.1 基本功能说明

image-20260228232810656

2.2.2.1 邮件发送配置

1
2
3
4
5
6
Name 随意填写,为Profile的名称
From 别名,为邮件的发送人,这里的格式为 名字<邮件地址>,名字可以任意填写,但邮箱地址必须和下面的Username一致。
Host smtp服务地址,因为我们没有做域名解析,所以直接填写 IP地址:25/465 即可。
Username和Password 为上面创建的邮箱用户。
配置完

image-20260301001135114

2.2.2.2 钓鱼用户组

image-20260228233751170

2.2.2.3 钓鱼邮件模板

2.2.2.3.1.邮件原文

image-20260228234456468

1
这里的 Change Links to Point to Landing Page 意思是将邮件内的链接替换成显示钓鱼页面的地址。因为你还没设置,所以使用 {{.URL}} 暂填代替。

image-20260228234738124

1
导入后点击 Source 就可以看到邮件内的所有链接替换成了 {{.URL}}。

image-20260228234837004

1
**获取邮件原文**

image-20260228234239533

image-20260228234551447

image-20260228234614736

2.2.2.3.1.html格式

1
2
3
4
5
6
7
8
9
10
11
12
AI生成就可以了

二维码的也可以用AI生成,二维码如果微信扫描会有告警,可以使用以下命令加个证书:
#安装certbot            
sudo apt install certbot            
#关闭gophish            
sudo kill $(pidof gophish)             
#生成证书,多域名可用逗号隔开            
sudo certbot certonly -d access.a.com --standalone             
#建立软连接,软连接地址根据工具生成的地址修改            
ln -s /etc/letsencrypt/live/xxxx.com/privkey.pem xxxx.key        
ln -s /etc/letsencrypt/live/xxxx.com/fullchain.pem xxxx.crt

image-20260228235113079

2.2.2.4 创建钓鱼网页

1
2
使用它本身自己导入的,可能会有点问题。
可以自己保存网页下来,然后手工改改,本次我自己使用的是python flask框架简单写了一个。
image-20260228235448569

image-20260301000217771

2.2.2.5. 发送钓鱼邮件测试

image-20260301000950856

2.3.钓鱼场景搭建

1
我自己使用 flask框架简单写了一个,将获取到的信息保存到Excel文件里面,然后在服务器里面启动就行

添加钓鱼用户组:

image-20260305101357095

制作钓鱼邮件模板可以AI生成

image-20260305101453754

钓鱼页面:python flask制作

后端

image-20260305101009269

前端

image-20260301140557101

发送测试钓鱼邮件:

image-20260305101840418

image-20260305102142354

点击页面直接跳转过去了:

image-20260305102239946

0x02 踩坑记录

踩坑1:Gophish测试邮件发送失败

1
2
分析原因:云厂商为了防止垃圾邮件泛滥,底层防火墙会禁止出口方向的TCP25端口
25 端口是传统的明文传输协议,所以可以使用465端口,465 端口是专门用于加密邮件传输的端口。

踩坑2:部署完EwoMail 服务器远程不上

1
2
因为我的服务器ssh端口是随机的,EwoMail 的安装脚本突然启动 firewalld 时,如果没有把ssh的远程端口放到白名单,直接导致SSH远程端口远程不上。
sudo systemctl stop firewalld

image-20260301140818069

踩坑3:钓鱼网站微信扫描url二维码会有告警

1
2
3
4
5
6
7
8
9
10
11
12
1、最好钓鱼网站绑定上域名和加https证书
2、给gophish加上https证书

#安装certbot            
sudo apt install certbot            
#关闭gophish            
sudo kill $(pidof gophish)             
#生成证书,多域名可用逗号隔开            
sudo certbot certonly -d access.a.com --standalone             
#建立软连接,软连接地址根据工具生成的地址修改            
ln -s /etc/letsencrypt/live/xxxx.com/privkey.pem xxxx.key            
ln -s /etc/letsencrypt/live/xxxx.com/fullchain.pem xxxx.crt  

0x03 绕过检测

一般企业都会有一些邮件安全网关,可以通过一下方式绕过

1、将图片转换成vag格式

本身就是基于 XML 的矢量图形格式,可以直接作为 HTML 元素嵌入。

1
2
转换网站
https://www.freeconvert.com/svg-converter/download

image-20260317091440633

内联 SVG:将 SVG 的代码直接写在 HTML 中。

1
2
3
<svg aria-hidden="true" style="width:1em;height:1em;">
<path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/>
</svg>

2、使用 Python qrcode库生成二维码矩阵

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
48
49
50
51
52
53
import qrcode

def generate_table_qr_with_logo(data, filename="email_qr_with_logo.html"):
# 1. 生成二维码矩阵,关键:必须使用最高容错率 ERROR_CORRECT_H
qr = qrcode.QRCode(
version=4, # 稍微调大一点版本,让方块多一些,显得更密
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=1,
border=2
)
qr.add_data(data)
qr.make(fit=True)
matrix = qr.get_matrix()

# 计算表格的实际像素大小 (假设每个单元格 6px)
cell_size = 6
table_size = len(matrix) * cell_size

# 2. 拼接 HTML 结构
html = [
'<!DOCTYPE html><html><body>',
'',
f'<div style="position: relative; display: inline-block; width: {table_size}px; height: {table_size}px;">'
]

# 3. 绘制纯 Table 二维码
html.append(f'<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse; line-height: 0; font-size: 0; width: 100%; height: 100%;">')

# 您之前上传的 Logo 是深蓝色的,这里我把二维码也换成深蓝色以保持视觉统一
qr_color = '#003cae'

for row in matrix:
html.append(f' <tr style="height: {cell_size}px;">')
for cell in row:
color = qr_color if cell else '#ffffff'
html.append(f' <td style="width: {cell_size}px; height: {cell_size}px; background-color: {color}; padding: 0; margin: 0;"></td>')
html.append(' </tr>')
html.append('</table>')

# 4. 嵌入 Logo:绝对定位到正中心
# 注意:这里的宽高建议不要超过 table_size 的 25%


html.append('</div>')
html.append('</body></html>')

with open(filename, 'w', encoding='utf-8') as f:
f.write('\n'.join(html))
print(f"带 Logo 的表格版 HTML 二维码已生成:{filename}")

# 执行生成
# 第二个参数是 Logo 的地址。在实际发邮件时,建议改成 "cid:您的附件ID" 或外链
generate_table_qr_with_logo('http://47.92.197.31:8083/login')