网络钓鱼攻防演练系统是一套基于开源工具链构建的本地化安全培训平台,旨在帮助组织以可控、合规的方式开展钓鱼攻击模拟演练与防御检测训练,提升全员安全意识与应急响应能力。
面向全体员工或特定部门(财务、HR、IT)开展定期钓鱼演练
网络安全专业课程实验、CTF竞赛训练、红蓝对抗演练
工作组成员单位间的安全能力互评、行业标准符合性测试
本系统采用红蓝双视角设计理念,不仅提供攻击模拟工具(红队),同时提供检测防御工具(蓝队),实现"以攻促防、攻防兼备"的演练效果。
根据演练需求、技术难度及安全合规要求,我们从GitHub开源社区中筛选出以下工具,形成完整的钓鱼攻防演练工具链。工具按红队攻击、蓝队检测、扩展工具三个维度分类呈现。
| 工具名称 | 演练类型 | 难度等级 | 推荐场景 | 建议 |
|---|---|---|---|---|
|
Gophish
|
邮件钓鱼 + 数据收集 + Web管理 | ★★☆☆☆ | 企业培训、批量演练 | 核心推荐 |
|
Evilginx2
|
反向代理 + 2FA绕过 + 会话劫持 | ★★★★☆ | 高级演练、红队测试 | 核心推荐 |
|
EvilnoVNC
|
实时浏览器劫持 + 2FA绕过 | ★★★★★ | 深度会话劫持演练 | 进阶推荐 |
|
Modlishka
|
透明代理 + 会话劫持 | ★★★★☆ | 2FA绕过教学演示 | 可选 |
|
King-Phisher
|
邮件钓鱼 + 社工工程 | ★★★☆☆ | 社工工程演练 | 可选 |
|
FiercePhish
|
批量邮件自动化 + 活动管理 | ★★☆☆☆ | 大规模演练 | 可选 |
|
OhMyQR
|
二维码钓鱼 + QR劫持 | ★☆☆☆☆ | 二维码攻击演示 | 可选 |
|
BlackEye
|
登录页克隆(30+模板) | ★★☆☆☆ | 快速搭建演示环境 | 可选 |
|
SocialFish
|
社交媒体钓鱼 + 信息收集 | ★★☆☆☆ | 社交平台钓鱼演练 | 可选 |
|
Malleable-C2
|
Cobalt Strike C2配置 | ★★★★★ | APT级攻击模拟 | 不推荐 |
| 工具名称 | 检测类型 | 难度等级 | 推荐场景 | 建议 |
|---|---|---|---|---|
|
Phishing Catcher
|
TLS证书透明度实时监测 | ★★☆☆☆ | 钓鱼域名早期预警 | 核心推荐 |
|
DNSTwist
|
域名变体生成 + 钓鱼检测 | ★★☆☆☆ | 品牌仿冒域名发现 | 核心推荐 |
|
SpiderFoot
|
OSINT自动化侦察(200+模块) | ★★★☆☆ | 攻击面梳理、情报收集 | 推荐 |
|
Pafish
|
虚拟机/沙箱检测测试 | ★★☆☆☆ | 沙箱环境Hardening验证 | 可选 |
选型建议:对于初次搭建演练环境的组织,推荐以 Gophish 为核心开展邮件钓鱼演练,配合 Evilginx2 进行高级场景(2FA绕过)演练。EvilnoVNC 可作为进阶的实时浏览器劫持演示工具,展示"即使开了2FA也能被绕过"的震撼效果。Modlishka 适合2FA绕过技术的教学演示。Phishing Catcher 和 DNSTwist 则可用于蓝队侧的钓鱼域名监测与预警演练,实现"以攻促防"的闭环。
以下工具可根据特定演练需求选用,涵盖更多攻击面和检测维度:
根据演练复杂度与团队技术能力,提供三套工具组合方案:
适合首次开展钓鱼演练的组织,快速搭建邮件钓鱼环境,收集点击率数据,配合蓝队检测工具验证防御效果。
在基础方案上增加反向代理能力,演示如何捕获真实凭证并绕过双因素认证,同时部署域名监测发现仿冒。
模拟完整攻击链,从钓鱼邮件到会话劫持,配合OSINT侦察和实时浏览器劫持,适合红队演练和安全竞赛。
以下部署指南以 Ubuntu 22.04 LTS 为例,其他 Linux 发行版可参照调整包管理命令。所有操作须在授权测试环境中进行。工具按红队核心、红队进阶、蓝队检测三个维度分别部署说明。
Gophish 是一款开源的钓鱼模拟框架,提供 Web 管理界面,支持邮件模板编辑、目标分组、活动调度及数据报表生成。是红队钓鱼演练的首选核心工具。
确保系统已安装必要依赖,建议使用 Docker 方式部署以简化环境配置。
# 更新系统并安装 Docker
$ sudo apt update && sudo apt upgrade -y
$ sudo apt install -y docker.io docker-compose
# 启动 Docker 服务
$ sudo systemctl enable docker
$ sudo systemctl start docker
# 验证 Docker 安装
$ docker --version
使用官方 Docker 镜像快速启动 Gophish 服务。
# 拉取最新镜像
$ docker pull gophish/gophish:latest
# 运行容器(映射管理端口3333和钓鱼页面端口80)
$ docker run -d \
--name gophish \
-p 3333:3333 \
-p 80:80 \
-v gophish_data:/opt/gophish \
gophish/gophish:latest
# 查看初始管理员密码
$ docker logs gophish | grep "password"
首次登录后修改默认密码,并根据需要调整配置文件。
// config.json 关键配置项
{
"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:80",
"use_tls": false
},
"db_name": "sqlite3",
"db_path": "gophish.db",
"migrations_prefix": "db/db_"
}
在 Gophish 管理界面中配置 SMTP 发送配置(Sending Profile),支持企业邮箱、第三方SMTP服务。
注意:云厂商通常限制25端口出站,建议使用587或465端口。发送测试邮件前,请确保发件域名已配置正确的SPF、DKIM、DMARC记录,避免邮件被拦截。
依次完成邮件模板(Email Template)、钓鱼页面(Landing Page)、目标群组(Groups)配置后,创建演练活动(Campaign)。
最佳实践:使用 {{.URL}} 变量插入钓鱼链接,使用 {{.FirstName}}、{{.LastName}} 实现邮件个性化,提升仿真度。设置 "Send Emails By" 分散发送时间,避免触发邮件网关告警。
Evilginx2 是一款开源的中间人攻击框架,通过反向代理目标网站的真实登录页面,捕获用户凭据、2FA令牌及会话Cookie,实现双因素认证绕过。
安全警示:Evilginx2 具有极强的攻击能力,仅限在完全隔离的测试环境中使用。部署前须确保已获得组织书面授权,且演练范围明确限定。
Evilginx2 基于 Go 语言开发,需先安装 Go 1.14 以上版本。
# 安装 Go(以 Ubuntu 为例)
$ sudo apt update
$ sudo apt install -y golang-go git
# 验证 Go 版本
$ go version
# 克隆仓库
$ git clone https://github.com/kgretzky/evilginx2.git
$ cd evilginx2
# 编译安装
$ make
$ sudo make install
# 复制 phishlet 模板到系统路径
$ sudo mkdir -p /usr/share/evilginx/phishlets
$ sudo cp -r phishlets/* /usr/share/evilginx/phishlets/
需要准备一个域名,并配置 DNS 记录指向演练服务器 IP。
# 启动 Evilginx2
$ sudo evilginx2
# 在交互式控制台中配置
[evilginx2] > config domain your-lab-domain.com
[evilginx2] > config ip 192.168.1.100
# 启用并配置 phishlet(以 Office365 为例)
[evilginx2] > phishlets enable o365
[evilginx2] > phishlets hostname o365 login.your-lab-domain.com
# 生成钓鱼链接
[evilginx2] > lures create o365
[evilginx2] > lures get-url 0
DNS 配置要点:添加一条 A 记录将主域名指向服务器 IP,添加一条 NS 记录将子域名解析权交给主域名。Evilginx2 会自动为子域名申请 Let's Encrypt SSL 证书。
当目标用户访问钓鱼链接并输入凭据后,在 Evilginx2 控制台中查看捕获结果。
# 查看所有会话
[evilginx2] > sessions
# 查看特定会话详情(含凭据和Cookie)
[evilginx2] > sessions 1
# 将会话导出为 JSON
[evilginx2] > sessions export 1 /tmp/session.json
EvilnoVNC 是一款基于 noVNC 的实时浏览器钓鱼平台,通过 VNC/X11 虚拟桌面环境加载真实登录页面,可实时查看受害者操作、捕获凭据、下载文件及浏览器完整Profile(含Cookie、密码、历史记录),实现更隐蔽的2FA绕过。
安全警示:EvilnoVNC 代表了最新的2FA绕过技术方向,攻击隐蔽性极高。仅限在完全隔离的测试环境中使用,且须获得组织最高级别书面授权。
EvilnoVNC 基于 Docker 运行,需预先安装 Docker 和 Chromium 浏览器。
# 确保 Docker 已安装
$ docker --version
# 安装 Chromium(如未安装)
$ sudo apt update
$ sudo apt install -y chromium-browser
# 克隆仓库
$ git clone https://github.com/JoelGMSec/EvilnoVNC
$ cd EvilnoVNC
# 设置权限并构建镜像
$ sudo chown -R 103 Downloads
$ sudo docker build -t joelgmsec/evilnovnc .
# 验证镜像构建
$ docker images | grep evilnovnc
# 运行 EvilnoVNC 容器
$ sudo docker run -d \
--name evilnovnc \
-p 8080:8080 \
-p 5900:5900 \
-v $(pwd)/Downloads:/home/user/Downloads \
joelgmsec/evilnovnc
# 查看服务日志
$ docker logs -f evilnovnc
DNSTwist 是一款域名变体生成与钓鱼检测工具,通过多种模糊算法(同形异义字、比特翻转、连字符插入等)生成目标域名的变体,检测已注册的仿冒域名,支持模糊哈希和感知哈希进行内容相似度比对。
# 安装依赖
$ sudo apt update
$ sudo apt install -y python3-pip python3-venv
# 使用 pip 安装 dnstwist
$ pip3 install dnstwist[full]
# 验证安装
$ dnstwist --version
# 基础域名变体扫描
$ dnstwist example.com
# 仅显示已注册的域名
$ dnstwist --registered example.com
# 使用特定模糊算法
$ dnstwist --fuzzers "homoglyph,hyphenation" example.com
# 启用钓鱼检测(模糊哈希)
$ dnstwist --lsh example.com
# 启用视觉相似度检测(感知哈希)
$ dnstwist --phash example.com
将 DNSTwist 集成到定时任务中,实现每日品牌域名监控。
# 创建监控脚本
$ cat > /opt/dnstwist-monitor.sh << 'EOF'
#!/bin/bash
DOMAIN="your-company.com"
OUTPUT="/var/log/dnstwist/$(date +%Y%m%d).json"
mkdir -p /var/log/dnstwist
dnstwist --registered --lsh --format json "$DOMAIN" > "$OUTPUT"
# 如有新注册域名,发送告警
if [ -s "$OUTPUT" ]; then
echo "发现可疑域名变体" | mail -s "DNSTwist Alert" security@company.com
fi
EOF
# 添加定时任务(每日凌晨2点执行)
$ chmod +x /opt/dnstwist-monitor.sh
$ (crontab -l 2>/dev/null; echo "0 2 * * * /opt/dnstwist-monitor.sh") | crontab -
SpiderFoot 是一款开源 OSINT 自动化侦察框架,集成 200+ 数据模块,支持从 100+ 数据源(Shodan、VirusTotal、Have I Been Pwned 等)收集情报,用于攻击面梳理、威胁情报富化和品牌监控。
# 安装依赖
$ sudo apt update
$ sudo apt install -y python3-pip python3-venv git
# 克隆仓库
$ git clone https://github.com/smicallef/spiderfoot.git
$ cd spiderfoot
# 创建虚拟环境并安装
$ python3 -m venv venv
$ source venv/bin/activate
$ pip install -r requirements.txt
# 验证安装
$ python3 ./sf.py --version
# 启动 SpiderFoot Web 界面(默认端口5000)
$ python3 ./sf.py -l 0.0.0.0:5000
# 后台运行
$ nohup python3 ./sf.py -l 0.0.0.0:5000 > /var/log/spiderfoot.log 2>&1 &
# 访问 http://服务器IP:5000
在 Web 界面 Settings 中配置各数据源的 API 密钥,以获取更丰富的侦察结果。推荐配置以下关键模块:
# CLI 方式启动扫描(以域名为例)
$ python3 ./sf.py -s your-company.com -m sfp_shodan,sfp_virustotal,sfp_censys
# 导出结果为 JSON
$ python3 ./sf.py -s your-company.com -o json -f /tmp/spiderfoot-result.json
# 导出为 GEXF 图格式(用于可视化分析)
$ python3 ./sf.py -s your-company.com -o gexf -f /tmp/spiderfoot-graph.gexf
结合红蓝双视角工具链,可开展以下典型攻防演练场景。每个场景均包含红队攻击路径和蓝队检测响应路径。
使用 Gophish 发送伪造的办公邮件,链接指向 Evilginx2 代理的仿冒登录页,捕获凭据。演练目标:测试员工对钓鱼邮件的识别能力和邮件网关的拦截效果。
利用 Evilginx2 的 phishlet 功能,劫持 OAuth 登录流程,获取用户授权令牌。演练目标:演示 OAuth 钓鱼的隐蔽性和危害性。
使用 EvilnoVNC 搭建虚拟浏览器环境,受害者通过 noVNC 访问真实登录页面,攻击者实时捕获凭据和2FA验证码。演练目标:展示即使启用2FA也可能被绕过的现实风险。
使用 OhMyQR 生成恶意二维码,扫码后跳转至钓鱼页面,适合线下演练场景。演练目标:测试员工对二维码来源的警惕性。
使用 SocialFish 克隆社交媒体登录页面,结合社工信息构造个性化钓鱼链接。演练目标:测试员工对社交平台钓鱼的识别能力。
使用 Phishing Catcher 监控 TLS 证书透明度日志,实时发现针对本组织的仿冒域名注册。演练目标:验证蓝队从证书层面提前发现钓鱼基础设施的能力。
使用 DNSTwist 生成组织域名的所有可能变体,检测已注册的仿冒域名并进行内容相似度比对。演练目标:发现攻击者针对本组织的域名抢注和钓鱼页面克隆。
使用 SpiderFoot 对组织域名、IP、邮箱进行全面的 OSINT 侦察,发现公开暴露的服务、子域名、员工信息泄露等安全隐患。演练目标:在攻击者发现之前,主动消除暴露面。
配合红队的钓鱼邮件发送,验证邮件网关对各类钓鱼邮件(含附件、链接、个性化内容)的拦截率和误报率,优化安全策略。
红队使用完整工具链发起多向量钓鱼攻击,蓝队使用检测工具实时发现攻击并应急响应。演练结束后双方复盘,共同优化防御策略。
先通过蓝队工具发现仿冒域名,再由红队模拟利用该域名发起攻击,最后蓝队验证检测告警和响应流程的完整性。
各部门组成红蓝两队,红队设计钓鱼方案,蓝队设计检测方案,通过竞赛形式提升全员安全意识和协作能力。
演练报告模板:每次演练结束后,建议生成包含以下内容的报告:演练目标与范围、参与人员统计、红队攻击成功率/蓝队检测率数据、识别准确率分析、防御薄弱环节、改进建议。报告模板可在下方资源下载区获取。
钓鱼演练涉及模拟攻击行为,必须严格遵守法律法规和组织内部规范。以下是关键合规要求,覆盖红队攻击侧和蓝队检测侧:
# ===== 红队工具清理 =====
# Gophish 数据清理
$ docker stop gophish && docker rm gophish
$ docker volume rm gophish_data
# Evilginx2 数据清理
$ rm -rf ~/.evilginx
$ rm -rf /usr/share/evilginx
# EvilnoVNC 数据清理
$ docker stop evilnovnc && docker rm evilnovnc
$ docker rmi joelgmsec/evilnovnc
$ rm -rf ~/EvilnoVNC/Downloads/*
# Modlishka 数据清理
$ rm -rf ~/Modlishka
# ===== 蓝队工具清理 =====
# DNSTwist 扫描结果清理
$ rm -f /var/log/dnstwist/*.json
# SpiderFoot 扫描数据清理
$ rm -f /tmp/spiderfoot-*.json
$ rm -f /tmp/spiderfoot-*.gexf
# ===== 系统日志清理 =====
$ sudo rm -f /var/log/evilginx*.log
$ sudo rm -f /var/log/modlishka*.log
$ sudo rm -f /var/log/spiderfoot.log
重要提醒:若演练涉及真实员工邮箱,须在演练结束后发送澄清通知,说明演练目的、结果及后续培训安排,避免造成恐慌或信任危机。对于演练中"中招"的员工,应提供针对性的安全培训而非惩罚。蓝队发现的仿冒域名应及时通报相关机构和域名注册商。
可以。Gophish 提供 Windows 二进制发行版,可直接下载运行。Evilginx2 和 EvilnoVNC 基于 Go/Docker 开发,在 Windows 上可通过 WSL2(Windows Subsystem for Linux)运行。DNSTwist 和 SpiderFoot 基于 Python,在 Windows 上可直接通过 pip 安装。建议使用 WSL2 + Ubuntu 以获得最佳兼容性。
这是预期现象,说明邮件网关正在发挥作用。解决方法:① 将演练发件域名加入邮件网关白名单;② 使用内部 SMTP 服务器发送;③ 调整邮件内容降低触发概率(如避免使用敏感词汇、添加合规声明)。若测试防御效果,可保留拦截状态以评估网关策略。蓝队可通过此场景验证邮件网关的检测能力。
纯内网演练无需公网资源。Gophish 的钓鱼页面可通过内网 IP 访问。若需模拟公网钓鱼场景,可使用内网 DNS 解析自定义域名到演练服务器。Evilginx2 和 EvilnoVNC 的 SSL 证书功能在内网环境中可使用自签名证书替代 Let's Encrypt。蓝队工具(DNSTwist、SpiderFoot)在监测公网域名时需要网络出站权限。
建议采取以下措施:① 部署在物理隔离的测试网络中,与生产环境完全分离;② 限制工具访问权限,仅授权安全团队使用;③ 建立使用审计日志,记录每次操作;④ 定期审查演练环境,确保无遗留配置;⑤ 在组织内部明确演练工具的使用规范与问责机制;⑥ 演练结束后严格执行数据清理脚本。
DNSTwist 和 SpiderFoot 均使用公开数据源(DNS记录、WHOIS、证书透明度日志等),属于被动信息收集,通常不违反法律。但需注意:① 仅扫描本组织自有域名或已获得授权的域名;② 遵守各数据源服务条款;③ 不将收集的数据用于商业目的或对外泄露;④ 扫描频率应合理,避免对目标服务造成负担。
官网的演练场景(drill.html)提供前端交互式模拟体验,适合公众快速了解钓鱼手法。本地部署的演练系统(本页面所述工具)则提供真实的邮件发送、页面代理、数据捕获、域名监测能力,适合企业内部深度演练。两者互补:可先通过官网场景进行科普教育,再通过本地系统开展实战演练,最后用蓝队工具验证防御效果。
两者实现2FA绕过的技术路径不同:Evilginx2 采用反向代理方式,拦截并转发用户的登录请求和2FA验证码,攻击者获得的是用户的会话Cookie;EvilnoVNC 采用实时浏览器劫持方式,受害者在攻击者控制的虚拟浏览器中操作,攻击者可以实时看到并操控整个登录过程,包括输入2FA验证码,获得的是完整的浏览器会话。EvilnoVNC 更加隐蔽,但部署复杂度更高。
以下资源文件可辅助您快速搭建演练环境,点击下载即可获取。资源按红队工具、蓝队工具、通用资源分类。
包含 config.json 模板、邮件模板示例、钓鱼页面示例
常用 phishlet 配置文件(Office365、Google、GitHub等)
Word 格式报告模板,包含数据图表、分析框架、改进建议
一键安装 Docker、Gophish、Evilginx2 的 Bash 脚本
自动化品牌域名监控脚本,含定时任务配置示例
预配置的扫描模块组合和 API 密钥配置模板