0x01 EwoMail+GoPhish搭建 2.1.EwoMail搭建 2.1.1服务器的购买 **注意:**国内X云服务器要解封25,建议买推荐的测试使用,请勿用于非法用途!
本次在野草云香港vps上购买的vps,配置是2c2g,域名我是在阿里云上购买:
1 https://my.yecaoyun.com/
2.1.2EwoMail部署 2.1.2.1. 连通测试 出现220字样才是正常的。
1 2 yum install telnet -y telnet smtp.qq.com 25
2.1.2.2. 修改主机 关闭防护:
1 2 3 4 邮件系统涉及大量底层目录权限交互,关闭 SELinux 可避免各种玄学的权限拦截报错。 vi /etc/sysconfig/selinux SELINUX=enforcing 改为 SELINUX=disabled
修改主机名:
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
创建swap分区(内存超过2G,可不配置)EwoMail 包含众多反垃圾组件,对内存消耗极大,在 2C2G 的机器上极其容易 OOM(内存溢出)导致数据库崩溃,因此必须分配虚拟内存。
创建1G的swap,可以根据你的服务器配置来调整大小
1 dd if=/dev/zero of=/mnt/swap bs=1M count=1024
设置交换分区文件
启动swap
设置开机时自启用 swap 分区
1 2 需要修改文件 /etc/fstab 中的 swap 行,添加 /mnt/swap swap swap defaults 0 0
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(你的域名)
2.1.2.4.配置域名解析 参考:
1 http://doc.ewomail.com/docs/ewomail/main_domain
获取dkim key(配置 DKIM 是为了让收件方网关验证邮件确实由该域名授权发出,是提升邮件到达率、防拒收的核心要素。)
1 amavisd -c /etc/amavisd/amavisd.conf showkeys
复制输出的信息,打开http://www.ewomail.com/list-20.html 整理dkim信息
2.1.2.5.登录后台添加邮箱用户 1 2 3 4 5 8000端口:即WebMail页面 8010端口:即邮件管理后台 http://xx.xx.xx.xx:8010/ 默认账号:admin 默认密码:ewomail123
2.1.2.6.登录WebMail测试发信 1 http://xx.xx.xx.xx:8080/ 成功后,下一步配置gophish平台
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
2.2GoPhish搭建 2.2.1. GoPhish部署 我是在Windows部署的,直接cmd启动gophish.exe
1 https://github.com/gophish/gophish
修改配置文件 :
1 config.json文件,可以修改端口、证书等信息
启动:
1 2 3 运行完会生成一个随意密码 level=info msg="Please login with the username admin and the password 68eb5961e9f5eef4" nohup ./gophish > gophish.log 2>&1 & Linux可以后台启动
2.2.2. GoPhish基本使用 2.2.2.1 基本功能说明
2.2.2.1 邮件发送配置 1 2 3 4 5 6 Name 随意填写,为Profile的名称 From 别名,为邮件的发送人,这里的格式为 名字<邮件地址>,名字可以任意填写,但邮箱地址必须和下面的Username一致。 Host smtp服务地址,因为我们没有做域名解析,所以直接填写 IP地址:25/465 即可。 Username和Password 为上面创建的邮箱用户。 配置完
2.2.2.2 钓鱼用户组
2.2.2.3 钓鱼邮件模板 2.2.2.3.1.邮件原文
1 这里的 Change Links to Point to Landing Page 意思是将邮件内的链接替换成显示钓鱼页面的地址。因为你还没设置,所以使用 {{.URL}} 暂填代替。
1 导入后点击 Source 就可以看到邮件内的所有链接替换成了 {{.URL}}。
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
2.2.2.4 创建钓鱼网页
1 2 使用它本身自己导入的,可能会有点问题。 可以自己保存网页下来,然后手工改改,本次我自己使用的是python flask框架简单写了一个。
2.2.2.5. 发送钓鱼邮件测试
2.3.钓鱼场景搭建 1 我自己使用 flask框架简单写了一个,将获取到的信息保存到Excel文件里面,然后在服务器里面启动就行
添加钓鱼用户组:
制作钓鱼邮件模板 :可以AI生成
钓鱼页面:python flask制作 :
后端 :
前端 :
发送测试钓鱼邮件:
点击页面直接跳转过去了:
0x02 踩坑记录 踩坑1:Gophish测试邮件发送失败 1 2 分析原因:云厂商为了防止垃圾邮件泛滥,底层防火墙会禁止出口方向的TCP25端口 25 端口是传统的明文传输协议,所以可以使用465端口,465 端口是专门用于加密邮件传输的端口。
踩坑2:部署完EwoMail 服务器远程不上 1 2 因为我的服务器ssh端口是随机的,EwoMail 的安装脚本突然启动 firewalld 时,如果没有把ssh的远程端口放到白名单,直接导致SSH远程端口远程不上。 sudo systemctl stop firewalld
踩坑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
内联 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')