红蓝双视角 · 本地部署指南 · 2026 终审修订版

网络钓鱼攻防演练
系统部署手册

基于开源工具链构建本地局域网钓鱼攻防演练环境,从红队攻击模拟到蓝队检测防御,帮助成员单位、高校及企业安全团队开展可控、合规的安全意识培训与红蓝对抗演练。本手册所有命令均经逐一核验,标注版本差异与常见坑点,技术小白可对照逐步操作。

1系统概述

网络钓鱼攻防演练系统是一套基于开源工具链构建的本地化安全培训平台,旨在帮助组织以可控、合规的方式开展钓鱼攻击模拟演练与防御检测训练,提升全员安全意识与应急响应能力。

演练目标

  • 安全意识提升:通过沉浸式模拟体验,让员工直观感受钓鱼攻击的真实手法与危害
  • 识别能力检验:评估员工对各类钓鱼攻击(邮件、网站、语音、二维码等)的识别准确率
  • 应急响应训练:模拟钓鱼攻击成功后的应急处置流程,检验安全团队的响应效率
  • 防御体系验证:测试组织现有邮件网关、Web防火墙、终端安全等防御措施的有效性
  • 攻击面梳理:通过OSINT侦察发现组织的暴露面,提前消除安全隐患

适用场景

企业安全培训

面向全体员工或特定部门(财务、HR、IT)开展定期钓鱼演练

高校教学实验

网络安全专业课程实验、CTF竞赛训练、红蓝对抗演练

成员单位测评

工作组成员单位间的安全能力互评、行业标准符合性测试

运行环境与硬件要求

以下以在 Ubuntu 22.04 LTS 上部署全套工具链为基准给出建议配置。若仅部署 Gophish 进行邮件钓鱼入门演练,最低配置即可流畅运行。

配置项 最低要求 推荐配置 说明
OS操作系统
Ubuntu 20.04 LTS Ubuntu 22.04 LTS Debian 11+/Kali 亦可,命令包管理器略有差异
CPU处理器
2 核 4 核 EvilnoVNC 的虚拟桌面较吃 CPU
RAM内存
4 GB 8 GB Docker 多容器并行时建议 8GB 以上
DISK磁盘
40 GB 100 GB SSD 镜像、日志与演练数据占用
NET网络
内网互通 固定内网 IP 纯内网演练无需公网;出站需放通 587/465 邮件端口
SW基础软件
Docker 20.10+ Docker 24+ / Compose v2 另需 Go 1.21+(编译 Evilginx2)、Python 3.10+(蓝队工具)

网络规划建议:将演练服务器部署在独立网段或 VLAN,与生产环境隔离;如需员工从办公网访问钓鱼页面,放通服务器 80/8080/3333 端口即可,无需开放入站 25 端口。云服务器注意:主流云厂商默认封禁 25 端口出站,请改用 587/465 或内网 MailHog(见 ③ 部署指南)。

红蓝双视角演练架构

本系统采用红蓝双视角设计理念,不仅提供攻击模拟工具(红队),同时提供检测防御工具(蓝队),实现"以攻促防、攻防兼备"的演练效果。

红队视角(攻击模拟)

  • 模拟真实钓鱼攻击手法(邮件、网站、二维码)
  • 测试2FA/MFA绕过技术(Evilginx2、EvilnoVNC)
  • 收集点击率、捕获率等攻击效果数据
  • 评估员工安全意识薄弱环节
  • 验证现有防御措施的有效性

蓝队视角(检测防御)

  • 实时监测钓鱼域名注册(Phishing Catcher)
  • 品牌仿冒域名侦察(DNSTwist)
  • 攻击面梳理与情报收集(SpiderFoot)
  • 邮件网关策略优化验证
  • 安全事件响应流程演练
演练管理平台
Gophish
→
钓鱼邮件发送
SMTP/MailHog
→
仿冒登录页面
Evilginx2/Modlishka
→
数据收集分析
报告生成

2工具选型

根据演练需求、技术难度及安全合规要求,我们从GitHub开源社区中筛选出以下工具,形成完整的钓鱼攻防演练工具链。工具按红队攻击、蓝队检测、扩展工具三个维度分类呈现。

红队攻击演练工具矩阵

工具名称 演练类型 难度等级 推荐场景 建议
G Gophish
邮件钓鱼 + 数据收集 + Web管理 ★★☆☆☆ 企业培训、批量演练 核心推荐
E Evilginx2
反向代理 + 2FA绕过 + 会话劫持 ★★★★☆ 高级演练、红队测试 核心推荐
V EvilnoVNC
实时浏览器劫持 + 2FA绕过 ★★★★★ 深度会话劫持演练 进阶推荐
M Modlishka
透明代理 + 会话劫持 ★★★★☆ 2FA绕过教学演示 可选
K King-Phisher
邮件钓鱼 + 社工工程 ★★★☆☆ 社工工程演练 已停更
F FiercePhish
批量邮件自动化 + 活动管理 ★★☆☆☆ 大规模演练 已停更
Q OhMyQR
二维码钓鱼 + QR劫持 ★☆☆☆☆ 二维码攻击演示 可选
B BlackEye
登录页克隆(30+模板) ★★☆☆☆ 快速搭建演示环境 可选
S SocialFish
社交媒体钓鱼 + 信息收集 ★★☆☆☆ 社交平台钓鱼演练 可选
C Malleable-C2
Cobalt Strike C2配置 ★★★★★ APT级攻击模拟 不推荐

维护状态提示:King-Phisher 与 FiercePhish 项目仓库均已多年停止更新(存在依赖失效、安全补丁缺失等风险),仅建议在隔离环境学习参考,不作为生产演练首选;Gophish 官方仓库自 v0.12.1(2022年9月)后更新放缓,但仍是目前生态最成熟、文档最完善的开源钓鱼演练框架,可放心作为核心平台。

蓝队检测防御工具矩阵

工具名称 检测类型 难度等级 推荐场景 建议
P Phishing Catcher
TLS证书透明度实时监测 ★★☆☆☆ 钓鱼域名早期预警 核心推荐
D DNSTwist
域名变体生成 + 钓鱼检测 ★★☆☆☆ 品牌仿冒域名发现 核心推荐
S SpiderFoot
OSINT自动化侦察(200+模块) ★★★☆☆ 攻击面梳理、情报收集 推荐
P Pafish
虚拟机/沙箱检测测试 ★★☆☆☆ 沙箱环境Hardening验证 可选

选型建议:对于初次搭建演练环境的组织,推荐以 Gophish 为核心开展邮件钓鱼演练,配合 Evilginx2 进行高级场景(2FA绕过)演练。EvilnoVNC 可作为进阶的实时浏览器劫持演示工具,展示"即使开了2FA也能被绕过"的震撼效果。Modlishka 适合2FA绕过技术的教学演示。Phishing Catcher 和 DNSTwist 则可用于蓝队侧的钓鱼域名监测与预警演练,实现"以攻促防"的闭环。

扩展工具库

以下工具可根据特定演练需求选用,涵盖更多攻击面和检测维度:

🎣 钓鱼页面克隆类
BBlackPhish NNexPhisher WWeeman AAdvPhishing ZZphisher
📧 邮件社工类
PPhishMailer TPhishingTemplates FPhishing Frenzy
📷 辅助信息收集类
SSayCheese II-See-You LLinkedInt
🐳 容器化部署类
DDocker-Blackeye
⚠️ 维护状态提醒

上述扩展工具中,Weeman、SayCheese 等项目已多年未更新,部分工具依赖旧版本 Python/PHP 环境。仅建议在物理隔离的测试虚拟机中学习参考,不要在生产环境或与互联网直连的服务器上运行。

推荐工具组合方案

根据演练复杂度与团队技术能力,提供三套工具组合方案:

基础方案

邮件钓鱼入门演练

适合首次开展钓鱼演练的组织,快速搭建邮件钓鱼环境,收集点击率数据,配合蓝队检测工具验证防御效果。

Gophish MailHog DNSTwist
进阶方案

凭证捕获 + 2FA绕过 + 域名监测

在基础方案上增加反向代理能力,演示如何捕获真实凭证并绕过双因素认证,同时部署域名监测发现仿冒。

Gophish Evilginx2 域名 + SSL Phishing Catcher
高级方案

全链路红蓝对抗 + OSINT侦察

模拟完整攻击链,从钓鱼邮件到会话劫持,配合OSINT侦察和实时浏览器劫持,适合红队演练和安全竞赛。

Gophish Evilginx2 EvilnoVNC SpiderFoot DNSTwist

3部署指南

以下部署指南以 Ubuntu 22.04 LTS 为例,其他 Linux 发行版可参照调整包管理命令。所有操作须在授权测试环境中进行。工具按红队核心、红队进阶、蓝队检测三个维度分别部署说明。

通用环境准备(所有工具共用)

无论选择哪套工具组合,请先完成以下基础环境配置。每一行命令均可直接复制执行。

1
更新系统并安装 Docker
bash
# 更新软件源
$ sudo apt update && sudo apt upgrade -y

# 安装 Docker(Ubuntu 官方仓库版本即可满足需求)
$ sudo apt install -y docker.io docker-compose-v2

# 启动 Docker 并设置开机自启
$ sudo systemctl enable --now docker

# 验证安装(应输出类似 Docker version 24.0.x)
$ docker --version
2
将当前用户加入 docker 组(免 sudo 运行 docker)
bash
$ sudo usermod -aG docker $USER
# 重新登录终端后生效,验证:
$ docker ps
3
安装编译与脚本运行环境
bash
# Go 语言(编译 Evilginx2 / Modlishka 需要,Ubuntu 22.04 仓库提供 Go 1.18+)
$ sudo apt install -y golang-go git make

# Python3 与 pip(蓝队工具需要)
$ sudo apt install -y python3-pip python3-venv

# 验证版本
$ go version && python3 --version

Gophish 部署 红队核心

Gophish 是一款开源的钓鱼模拟框架,提供 Web 管理界面,支持邮件模板编辑、目标分组、活动调度及数据报表生成,是目前生态最成熟的开源钓鱼演练平台。官方提供 Docker 镜像,安装门槛极低。

1
拉取镜像并启动容器
bash
# 拉取官方镜像
$ docker pull gophish/gophish:latest

# 启动容器:
#   3333 = 管理后台(HTTPS)
#   8080:80 = 钓鱼页面(容器内 80 端口映射到宿主机 8080)
$ docker run -d --name gophish \
    -p 3333:3333 \
    -p 8080:80 \
    -v gophish_data:/opt/gophish \
    gophish/gophish:latest
-v gophish_data:/opt/gophish
命名卷持久化:首次挂载空卷时 Docker 会把镜像内 /opt/gophish 的程序与数据库迁移文件自动复制进卷,之后演练数据(SQLite 数据库、配置)都保存在其中,容器删除重建不丢数据
2
获取初始管理员密码并登录

Gophish 首次启动会随机生成管理员密码并打印在容器日志中:

bash
$ docker logs gophish 2>&1 | grep -i password
# 输出示例:
# Please login with the username admin and the password 4f0c8f2b6a1d...
  • 管理地址:https://服务器IP:3333(使用 HTTPS,浏览器会提示证书不受信任,属正常现象,点"高级 → 继续访问"即可)
  • 用户名固定为 admin,密码用上一步日志中的随机密码
  • 首次登录后系统会强制要求修改密码,请设置高强度密码并妥善保管

无法访问排查:① 确认防火墙放通 3333 端口;② 若使用旧版本镜像,其默认监听 127.0.0.1:3333,仅容器内部可访问,需进入容器把 config.json 中 admin_server 的 listen_url 改为 0.0.0.0:3333 后重启容器;③ 确认容器在运行:docker ps | grep gophish。

3
配置邮件发送服务(Sending Profile)

在 Gophish 左侧菜单 Sending Profiles → New Profile 中配置 SMTP。内网演练推荐用 MailHog 作为本地测试邮件服务器,零配置、可视化查看邮件:

bash
# 启动 MailHog(SMTP 端口 1025,Web 查看端口 8025)
$ docker run -d --name mailhog \
    -p 1025:1025 -p 8025:8025 \
    mailhog/mailhog:latest

# 浏览器访问 http://服务器IP:8025 即可查看 Gophish 发出的所有邮件

Gophish 中对应填写:

  • Name:任意命名,如"内网MailHog"
  • From:发件人显示名与地址,如 IT运维中心 <it-notice@your-lab.local>
  • Host:服务器IP:1025(与 MailHog 同机部署时填本机 IP 即可)
  • Username / Password:留空(MailHog 不校验)
  • 点击 Send Test Email 发送测试邮件,在 MailHog Web 界面确认收到即配置成功

使用企业邮箱/真实 SMTP 时的三个投递基础:① SPF——声明哪些服务器有权代域名发信,防止伪造;② DKIM——对邮件内容加数字签名,防篡改;③ DMARC——告诉收件方如何处理未通过 SPF/DKIM 校验的邮件。三项记录未配置正确,邮件大概率进垃圾箱。此外,主流云厂商默认封禁 25 端口,请使用 587(STARTTLS)或 465(SSL)端口,企业邮箱通常需在后台开启"客户端授权码"。

4
创建演练活动(Campaign)的四要素

在 Campaigns → New Campaign 创建活动前,需先准备好四项资源:

  • Email Template(邮件模板):正文支持 HTML;使用 {{.FirstName}}、{{.LastName}} 插入收件人姓名实现个性化,使用 {{.URL}} 插入钓鱼链接(必须,否则无法统计点击)
  • Landing Page(落地页):可导入官网 HTML 克隆页面,或指向 Evilginx2 生成的钓鱼链接(见下一 Tab)
  • Groups(目标群组):批量导入 CSV,标准格式为四列:First Name, Last Name, Email, Position
  • URL(活动地址):填钓鱼页面地址,内网演练用 http://服务器IP:8080 或配合内网 DNS 使用自定义域名

最佳实践:设置 Send Emails By 让邮件在一段时间内分批随机发送,避免短时间内海量邮件触发邮件网关告警;先向自己的小范围测试组发送一轮,确认打开、点击、提交全链路数据正常后,再面向正式人群开展演练。

5
Docker Compose 一键编排(推荐)

将 Gophish 与 MailHog 编排在一起,一条命令完成整套邮件演练环境:

yaml
# docker-compose.yml
version: "3.8"

services:
  gophish:
    image: gophish/gophish:latest
    container_name: gophish
    restart: unless-stopped
    ports:
      - "3333:3333"      # 管理后台(HTTPS)
      - "8080:80"        # 钓鱼页面
    volumes:
      - gophish_data:/opt/gophish

  mailhog:
    image: mailhog/mailhog:latest
    container_name: mailhog
    restart: unless-stopped
    ports:
      - "1025:1025"      # SMTP 服务端口
      - "8025:8025"      # Web 邮件查看

volumes:
  gophish_data:
bash
$ docker compose up -d
# Gophish 的 Sending Profile 中 Host 填:mailhog:1025
# (同一 Compose 网络内可直接用服务名解析,无需 IP)

Evilginx2 部署 红队进阶

Evilginx2(现版本即 Evilginx 3.x,仓库名仍为 evilginx2)是一款开源的中间人攻击框架,通过反向代理目标网站的真实登录页面,捕获用户凭据、2FA令牌及会话Cookie,实现双因素认证绕过。它内置 HTTP 与 DNS 服务器,无需额外安装 nginx。

安全警示:Evilginx2 具有极强的攻击能力,仅限在完全隔离的测试环境中使用。部署前须确保已获得组织书面授权,且演练范围明确限定。作者 Kuba Gretzky 在官方文档中明确要求:仅用于获得被钓鱼方书面许可的合法渗透测试。

1
安装 Go 环境并编译
bash
# 安装编译依赖(Ubuntu 22.04 仓库提供的 golang-go 为 Go 1.18+,满足要求)
$ sudo apt update
$ sudo apt install -y golang-go git make

# 克隆仓库并编译
$ git clone https://github.com/kgretzky/evilginx2.git
$ cd evilginx2
$ make

# 安装到系统路径(可选):二进制复制到 /usr/local/bin,phishlets 复制到 /usr/share/evilginx/
$ sudo make install

版本命名说明:不同版本编译产物文件名可能为 evilginx 或 evilginx2,请以 build/ 目录下的实际文件名为准。phishlets 模板的查找顺序为:当前目录 ./phishlets/ → /usr/share/evilginx/phishlets/,也可用启动参数 -p <路径> 显式指定。

2
端口检查(重要前置条件)

Evilginx 内置 HTTP/DNS 服务器,TCP 80、TCP 443、UDP 53 必须空闲,否则启动报错:

bash
$ sudo ss -tulnp | grep -E ':80 |:443 |:53 '
# 如有占用进程(如 apache2、nginx、named、systemd-resolved),先停止:
# $ sudo systemctl stop apache2 nginx named
# $ sudo systemctl stop systemd-resolved   # 占用 UDP 53 时
3
配置域名与 DNS

Evilginx 需要接管一个域名的解析权,官方推荐做法是:在域名注册商处把域名的 NS 记录(ns1、ns2)指向演练服务器的公网 IP,由 Evilginx 内置 DNS 服务器完成解析(这也是要求 UDP 53 空闲的原因)。常见替代做法:为主机名添加 A 记录指向服务器 IP,并为子域添加 NS 记录委派给主域。

bash
# 启动(若未执行 make install,则运行 ./build/ 下的可执行文件)
$ sudo evilginx2

# ===== 以下为交互式控制台命令 =====

# 设置域名与服务器 IP
: config domain your-lab-domain.com
: config ip 192.168.1.100

# 设置未命中 lure 时的重定向地址(可选,建议设为无害站点)
: config redirect_url https://www.example.com

# 绑定 phishlet 主机名(先绑定,后启用)
: phishlets hostname o365 login.your-lab-domain.com

# 启用 phishlet(自动向 Let's Encrypt 申请证书)
: phishlets enable o365

# 创建诱饵(lure)并生成钓鱼链接
: lures create o365
: lures get-url 0

内网/无公网环境:Let's Encrypt 签发要求域名公网可达(80/443 通)。纯内网演练请使用 -developer 启动参数生成自签名证书,并用 phishlets get-hosts <phishlet名> 生成需要写入测试机 hosts 文件的解析记录,然后在参与演练的终端上配置 hosts 指向演练服务器。

4
查看捕获数据

当目标访问钓鱼链接并登录后,凭据与授权令牌实时回显在控制台;查看历史会话:

bash
# 会话列表(含用户名、密码、令牌捕获状态、来源 IP、时间)
: sessions

# 查看指定会话详情(含凭据与完整 Cookie)
: sessions 0

会话数据保存在用户主目录 ~/.evilginx/ 下。关于 phishlet 的语法与进阶用法,可查阅官方帮助站点 help.evilginx.com 及仓库 Wiki。

EvilnoVNC 部署 红队进阶

EvilnoVNC 是 JoelGMSec 开发的开源钓鱼平台,通过 Docker 内置的 noVNC 虚拟桌面运行真实 Chromium 浏览器。受害者"登录"的页面实际运行在攻击者控制的浏览器中,攻击者可实时观看并操控整个登录过程,捕获凭据、2FA验证码、下载文件及完整浏览器 Profile(Cookie、已存密码、历史记录),实现更隐蔽的 2FA 绕过。

安全警示:EvilnoVNC 代表了最新的 2FA 绕过技术方向,攻击隐蔽性极高。仅限在完全隔离的测试环境中使用,且须获得组织最高级别书面授权。项目许可证明确声明:仅供教育环境和/或获得客户同意的安全审计使用。

1
环境要求与镜像构建

前置要求:Docker(必需)与宿主机安装 Chromium 相关依赖。构建过程会自动拉取基础镜像并安装容器内的浏览器环境:

bash
# 克隆仓库
$ git clone https://github.com/JoelGMSec/EvilnoVNC
$ cd EvilnoVNC

# 将 Downloads 目录属主改为容器内用户(UID 103),保证下载文件可保存到宿主机
$ sudo chown -R 103 Downloads

# 构建镜像
$ sudo docker build -t joelgmsec/evilnovnc .

# 验证镜像
$ docker images | grep evilnovnc
2
启动钓鱼会话

当前版本通过 start.sh 脚本启动(脚本内部自动完成容器运行与端口映射),参数为"分辨率"与"目标网址":

bash
# 固定分辨率 1280x720(16 位色,省资源)
$ ./start.sh 1280x720x16 https://login.example.com

# 或 1920x1080 24 位色(演示效果最佳)
$ ./start.sh 1920x1080x24 https://login.example.com

# 动态分辨率(受害者进入时按其屏幕自适应)
$ ./start.sh dynamic https://login.example.com
  • 启动后按终端输出的提示将钓鱼链接发给目标(脚本会打印 noVNC Web 访问入口与端口信息)
  • 攻击者侧通过 noVNC Web 控制台实时观察受害者操作,必要时可直接接管输入
  • VNC 客户端也可直连容器映射的 5900 端口查看
3
核心功能清单(对应官方 README)
  • 实时浏览器劫持:受害者在虚拟 Chromium 中操作,全程可被观看/接管
  • 2FA 实时绕过:验证码即时转发,攻击者同步登录真实站点
  • 浏览器 Profile 导出:Cookie(实时解密)、已保存密码、浏览历史完整导出到宿主机
  • 下载文件捕获:受害者下载的文件自动保存到宿主机 Downloads/ 目录(即步骤 1 中 chown 的目录)
  • 基础键盘记录:记录虚拟浏览器内的按键输入
  • 反识别细节:动态模拟真实 User-Agent 与窗口标题、禁用快捷键、屏蔽 URL 参数明文显示

与 Evilginx2 的对比选择:Evilginx2 是"反向代理"思路,拿到的是会话 Cookie;EvilnoVNC 是"远程桌面"思路,拿到的是整个浏览器会话且能实时交互。演示震撼力 EvilnoVNC 更强、资源消耗更高;稳定性与易维护性 Evilginx2 更好。两者可结合:邮件入口用 Gophish,高价值目标演示用 EvilnoVNC。

Phishing Catcher 部署 蓝队检测

Phishing Catcher(x0rz 开源)基于 CT Log(证书透明度日志)实时监测新签发的 TLS 证书,用机器学习模型与关键词打分识别疑似钓鱼域名,可在钓鱼网站上线后数分钟内发出预警——是蓝队"看见"钓鱼基础设施的核心工具。

1
安装与启动
bash
$ git clone https://github.com/x0rz/phishing_catcher.git
$ cd phishing_catcher

# 安装依赖(含 certstream 客户端库)
$ pip3 install -r requirements.txt

# 启动监测(注意:脚本名为 catch_phishing.py)
$ python3 catch_phishing.py

数据源说明:工具默认连接公共 CertStream 服务(wss://certstream.calidog.io)接收全量证书日志。该公共服务偶尔不稳定,断线后脚本会尝试重连;对持续性要求高的单位,建议参考社区方案自建 certstream-server 数据源,并用 tmux/systemd 守护进程常驻运行。

2
自定义品牌关键词与告警阈值

仓库内置 suspicious.yaml(通用可疑词表)。监控本组织品牌时,新建 external.yaml 追加自有词条即可(无需改动原文件):

yaml
# external.yaml 示例:分值越高越可疑,权重自行调整
keywords:
    'yourbrand': 70
    'yourbrand-login': 80
    'yourbrand-verify': 90

输出按分值分级:≥65 为 Potential(潜在)、≥80 为 Likely(高度疑似)、≥90 为 Suspicious(高度可疑)。建议将 ≥80 的告警对接企业微信/钉钉 Webhook 或 SIEM 实现自动通知。

3
常驻运行(tmux 方式)
bash
$ sudo apt install -y tmux
$ tmux new -s catcher
$ cd phishing_catcher && python3 catch_phishing.py
# 按 Ctrl+B 再按 D 挂起会话,随时 tmux attach -t catcher 回到监控画面

DNSTwist 部署 蓝队检测

DNSTwist 是一款域名变体生成与钓鱼检测工具,通过多种模糊算法(同形异义字、比特翻转、连字符插入等)生成目标域名的变体,检测已注册的仿冒域名,支持模糊哈希与感知哈希进行页面内容相似度比对。

1
安装 DNSTwist
bash
$ sudo apt update
$ sudo apt install -y python3-pip

# 安装完整版([full] 包含 ssdeep/whois 等可选依赖)
$ pip3 install dnstwist[full]

# 验证安装
$ dnstwist --version
2
常用扫描命令
bash
# 基础域名变体扫描
$ dnstwist example.com

# 仅显示已注册的域名
$ dnstwist --registered example.com

# 模糊哈希:抓取各变体站点页面,与目标站点做 ssdeep 相似度比对(默认 ssdeep,可指定 --lsh tlsh)
$ dnstwist --lsh example.com

# 感知哈希:渲染页面截图做视觉相似度比对(需系统安装 Chromium)
$ dnstwist --phash example.com

# 只运行指定的模糊算法(逗号分隔,可用 dnstwist --fuzzers 帮助查看全部)
$ dnstwist --fuzzers "homoglyph,hyphenation" example.com

# 结果导出为 JSON 文件(配合 -o 指定输出文件)
$ dnstwist --registered --format json -o report.json example.com
3
自动化监控(cron 定时任务)
bash
# 创建监控脚本
$ sudo tee /opt/dnstwist-monitor.sh > /dev/null << 'EOF'
#!/bin/bash
DOMAIN="your-company.com"
OUTDIR="/var/log/dnstwist"
mkdir -p "$OUTDIR"
$HOME/.local/bin/dnstwist --registered --format json \
    -o "$OUTDIR/$(date +%Y%m%d).json" "$DOMAIN" 2>/dev/null
# 如需邮件告警,请先安装 mailutils,并配置好本地 MTA 或 SMTP 中继
if [ -s "$OUTDIR/$(date +%Y%m%d).json" ]; then
    echo "发现已注册的可疑域名变体,请查看 $OUTDIR" | \
    mail -s "[DNSTwist] 仿冒域名告警" security@your-company.com
fi
EOF

$ sudo chmod +x /opt/dnstwist-monitor.sh

# 加入 crontab:每日凌晨 2 点执行
$ (crontab -l 2>/dev/null; echo "0 2 * * * /opt/dnstwist-monitor.sh") | crontab -

使用提示:① pip3 install 安装的命令通常位于 ~/.local/bin/dnstwist,脚本中注意使用绝对路径;② 告警邮件功能需先 sudo apt install mailutils 并配置好邮件发送环境,内网环境可直接改为写入告警文件或由监控 Agent 采集;③ 每日基线扫描结果建议保留,便于发现"今日新增"的注册变体。

SpiderFoot 部署 蓝队检测

SpiderFoot 是一款开源 OSINT 自动化侦察框架,集成 200+ 数据模块,支持从 Shodan、VirusTotal、Have I Been Pwned 等数据源收集情报,用于攻击面梳理、威胁情报富化和品牌监控。当前维护版本为 SpiderFoot 5.x(注意:其 hx 分支的 SpiderFoot HX 为商业版,功能与开源版不同)。

1
安装 SpiderFoot
bash
$ sudo apt update
$ sudo apt install -y python3-pip python3-venv git

$ git clone https://github.com/smicallef/spiderfoot.git
$ cd spiderfoot

# 使用虚拟环境安装依赖(避免污染系统 Python)
$ python3 -m venv venv
$ source venv/bin/activate
(venv) $ pip install -r requirements.txt
2
启动 Web 界面
bash
# 监听所有网卡,默认端口 5001
(venv) $ python3 ./sf.py -l 0.0.0.0:5001

# 如需后台常驻
(venv) $ nohup python3 ./sf.py -l 0.0.0.0:5001 > /var/log/spiderfoot.log 2>&1 &
  • 浏览器访问 https://服务器IP:5001(自签名证书警告属正常;部分版本为 http,以启动日志提示为准)
  • 开源版 Web 界面默认无登录认证,切勿直接暴露公网;可用防火墙限制访问来源,或按官方文档配置 passwd 文件启用 Basic Auth(格式:用户名:密码,每行一条)
3
配置 API 密钥

在 Web 界面 Settings 中配置各数据源的 API 密钥,密钥越全,侦察结果越丰富。推荐优先配置:

Shodan
查询目标 IP 的开放端口、服务指纹和已知漏洞(有免费额度)
VirusTotal
检测域名/IP 的恶意软件关联与信誉评分
Have I Been Pwned
检查目标邮箱是否出现在已知数据泄露事件中
SecurityTrails / censys
获取域名历史 DNS 记录、子域名与证书信息
4
发起扫描与结果导出

Web 界面 New Scan 输入目标(域名/IP/邮箱/用户名均可),按需选择扫描模式("All" 最全但慢,建议按用途选模块子集)。命令行方式:

bash
# CLI 直接扫描(-s 目标,-m 逗号分隔的模块名)
(venv) $ python3 ./sf.py -s your-company.com \
    -m sfp_dnsresolve,sfp_shodan,sfp_virustotal

# 更多参数请查看
(venv) $ python3 ./sf.py --help

扫描结果在 Web 界面 Browse Data 中查看,并支持导出 CSV / GEXF(GEXF 可用 Gephi 打开做关联图谱可视化)。发现的高危暴露(如未授权管理后台、测试环境泄露、员工凭据出现在泄露库中)应形成整改清单闭环。

Modlishka 快速部署 红队进阶

Modlishka(波兰语"螳螂")是 drk1wi 开发的高级反向代理钓鱼工具,全站 TLS 透明转发,内置插件支持凭证捕获、2FA 令牌拦截。适合作为 Evilginx2 的替代/对照教学工具。项目更新较慢,建议仅在隔离环境教学使用。

1
编译运行
bash
$ sudo apt install -y golang-go git make
$ git clone https://github.com/drk1wi/Modlishka.git
$ cd Modlishka
$ make

# 编译产物位于 dist/proxy,通过 -config 指定 JSON 配置运行
# templates/ 目录提供了参考配置模板(含 target、redirect、proxyDomain 等字段)
$ ./dist/proxy -config templates/<示例配置>.json

字段速览:proxyDomain 为钓鱼域名、target 为被仿冒的真实站点、redirect 为未命中时的跳转地址、listeningPort/listeningAddress 控制监听、plugins 配置凭证捕获等插件。各字段含义请以仓库 templates 下的示例文件与 README 为准。

4演练实施流程

工具就绪只是第一步。一次合规、有效的钓鱼演练需要经过筹备、执行、收尾复盘三个阶段,每个阶段都有明确的动作清单与责任要求。以下为可直接照做的标准流程。

三阶段操作清单

筹
筹备阶段(建议提前 2 周启动)
  • 获得书面授权:明确演练目的、范围、目标人群、时间窗口、数据处理方式,经法务/安全负责人签字
  • 组建演练小组:红队(1-2人执行)、蓝队(1-2人监测)、联络人(1人对接HR/各部门)
  • 准备资源:演练服务器、测试邮箱账号、演练用域名(或内网DNS记录)、邮件模板、落地页
  • 环境联调:完整跑通"发送→打开→点击→提交"链路,确认数据统计正确
  • 小范围预演:向演练小组内部发送一轮,验证邮件网关策略与页面可达性
  • 报备:提前告知 IT 服务台/安全运营中心演练时间窗,避免真实应急响应被误触发
行
执行阶段(T 日)
  • 分批发送:利用 Gophish 的 Send Emails By 功能错峰发送,避免触发网关风暴告警
  • 实时监控:观察打开/点击/提交数据曲线,发现异常(如大量转发外部)及时暂停
  • 蓝队同步监测:并行记录邮件网关拦截情况、DNS 安全设备告警情况,为复盘积累对照数据
  • 不扩大范围:严禁因效果"好"而临时扩大目标人群;超范围即违规
复
收尾与复盘阶段(T+1 至 T+7)
  • T+1 发送澄清通知:全员通报演练事实、目的与结果口径,消除恐慌(模板见资源下载区)
  • T+3 数据分析:按部门/岗位统计指标,定位薄弱环节(财务、HR、高管助理通常是重点)
  • T+7 针对性培训与复盘会:对"中招"员工以培训代替处罚;红蓝双方共同输出改进建议
  • 数据清理:按第 ⑥ 章脚本彻底清理演练数据与临时配置,留存脱敏后的统计报告
T-14
书面授权
→
T-7
环境就绪
→
T-1
全链路测试
→
T日
分批执行
→
T+1
澄清通知
→
T+7
复盘培训

核心度量指标定义

复盘质量取决于指标口径是否统一。以下六项为行业标准度量,Gophish 报表均可直接或间接得出:

送达率 越低异常越需排查

成功送达 ÷ 计划发送。过低说明被网关拦截或地址库质量差

打开率

打开邮件(加载追踪元素)÷ 送达。反映邮件标题与发件人的欺骗性

点击率 核心风险指标

点击钓鱼链接 ÷ 送达。反映员工对链接/二维码的警惕性

敏感信息提交率 最高危指标

在钓鱼页提交凭据 ÷ 送达。高危人群须一周内完成专项培训

报告率 越高越好

主动向安全团队上报可疑邮件 ÷ 送达。这是最值得奖励的行为指标

识别准确率

未点击 ÷ 送达(或以问卷实测)。用于培训前后对比,验证培训成效

口径约定:所有指标以"送达"为分母口径(而非"发送"),避免把无效邮箱计入分母造成指标虚高。首次演练的点击率行业常见区间在 10%–30%,不要以"越低越好"为由压制正常上报,报告率才是安全文化成熟度的第一指标。

5演练场景

结合红蓝双视角工具链,可开展以下典型攻防演练场景。每个场景均包含红队攻击路径和蓝队检测响应路径。

红队演练场景

红队 场景A:邮件钓鱼 + 假登录页

使用 Gophish 发送伪造的办公邮件,链接指向 Evilginx2 代理的仿冒登录页,捕获凭据。演练目标:测试员工对钓鱼邮件的识别能力和邮件网关的拦截效果。

Gophish Evilginx2 MailHog/企业SMTP
红队 场景B:OAuth钓鱼 + 会话劫持

利用 Evilginx2 的 phishlet 功能,劫持 OAuth 登录流程,获取用户授权令牌。演练目标:演示 OAuth 钓鱼的隐蔽性和危害性。

Evilginx2 phishlet
红队 场景C:实时浏览器劫持(2FA绕过)

使用 EvilnoVNC 搭建虚拟浏览器环境,受害者通过 noVNC 访问真实登录页面,攻击者实时捕获凭据和2FA验证码。演练目标:展示即使启用2FA也可能被绕过的现实风险。

EvilnoVNC Docker
红队 场景D:二维码钓鱼

使用 OhMyQR 生成恶意二维码,扫码后跳转至钓鱼页面,适合线下演练场景。演练目标:测试员工对二维码来源的警惕性。

OhMyQR Gophish
红队 场景E:社交媒体钓鱼

使用 SocialFish 克隆社交媒体登录页面,结合社工信息构造个性化钓鱼链接。演练目标:测试员工对社交平台钓鱼的识别能力。

SocialFish LinkedInt

蓝队演练场景

蓝队 场景F:钓鱼域名早期预警

使用 Phishing Catcher 监控 TLS 证书透明度日志,实时发现针对本组织的仿冒域名注册。演练目标:验证蓝队从证书层面提前发现钓鱼基础设施的能力。

Phishing Catcher CertStream
蓝队 场景G:品牌仿冒域名发现

使用 DNSTwist 生成组织域名的所有可能变体,检测已注册的仿冒域名并进行内容相似度比对。演练目标:发现攻击者针对本组织的域名抢注和钓鱼页面克隆。

DNSTwist 模糊哈希 感知哈希
蓝队 场景H:攻击面梳理与暴露面发现

使用 SpiderFoot 对组织域名、IP、邮箱进行全面的 OSINT 侦察,发现公开暴露的服务、子域名、员工信息泄露等安全隐患。演练目标:在攻击者发现之前,主动消除暴露面。

SpiderFoot Shodan VirusTotal
蓝队 场景I:邮件网关策略验证

配合红队的钓鱼邮件发送,验证邮件网关对各类钓鱼邮件(含附件、链接、个性化内容)的拦截率和误报率,优化安全策略。

Gophish 邮件网关 Splunk/ELK

紫队协同场景

红队 蓝队

场景J:红蓝对抗日

红队使用完整工具链发起多向量钓鱼攻击,蓝队使用检测工具实时发现攻击并应急响应。演练结束后双方复盘,共同优化防御策略。

Gophish Evilginx2 DNSTwist SpiderFoot
红队 蓝队

场景K:钓鱼演练闭环

先通过蓝队工具发现仿冒域名,再由红队模拟利用该域名发起攻击,最后蓝队验证检测告警和响应流程的完整性。

Phishing Catcher DNSTwist Gophish
红队 蓝队

场景L:安全意识竞赛

各部门组成红蓝两队,红队设计钓鱼方案,蓝队设计检测方案,通过竞赛形式提升全员安全意识和协作能力。

全部工具链

演练报告模板:每次演练结束后,建议生成包含以下内容的报告:演练目标与范围、参与人员统计、红队攻击成功率/蓝队检测率数据、识别准确率分析、防御薄弱环节、改进建议。报告模板可在下方资源下载区获取。

6安全合规

钓鱼演练涉及模拟攻击行为,必须严格遵守法律法规和组织内部规范。以下是关键合规要求,覆盖红队攻击侧和蓝队检测侧。

授权管理

  • 演练前须获得组织书面授权,明确演练目的、范围、时间、目标人群
  • 授权文件应经法务部门审核,确保符合《网络安全法》《数据安全法》《个人信息保护法》等法规要求
  • 《网络安全法》第二十七条明确禁止非法侵入他人网络、干扰网络正常功能、窃取网络数据等危害网络安全的活动;《刑法》第二百八十五条、第二百八十六条对非法侵入、破坏计算机信息系统行为规定了刑事责任——超出授权范围的演练行为同样适用
  • 关键信息基础设施运营单位还应符合《关键信息基础设施安全保护条例》的相关要求
  • 演练范围限定在组织自有网络或明确授权的测试环境中
  • 涉及外部域名扫描(如 DNSTwist、SpiderFoot)时,须确保不违反目标网站的服务条款,扫描频率应合理

数据保护

  • 演练过程中收集的凭据、Cookie、个人信息等数据须加密存储,访问权限严格限制
  • 蓝队工具(SpiderFoot)收集的OSINT数据须遵守数据源的使用条款和隐私政策
  • 演练结束后立即销毁所有测试数据,包括数据库记录、日志文件、临时配置文件
  • 禁止将演练数据用于非授权目的,禁止外传或留存

演练后清理

以下清理脚本覆盖本手册涉及的全部工具,演练结束后务必逐项执行并确认:

bash
# ===== 红队工具清理 =====

# Gophish / MailHog 容器与数据卷
$ docker stop gophish mailhog 2>/dev/null
$ docker rm gophish mailhog 2>/dev/null
$ docker volume rm gophish_data 2>/dev/null

# Evilginx2 数据清理(会话、黑名单、配置)
$ sudo pkill -f evilginx 2>/dev/null
$ rm -rf ~/.evilginx
$ sudo rm -rf /usr/share/evilginx
$ sudo rm -f /usr/local/bin/evilginx*

# EvilnoVNC 容器、镜像与下载目录残留
$ docker stop $(docker ps -q --filter ancestor=joelgmsec/evilnovnc) 2>/dev/null
$ docker rm $(docker ps -aq --filter ancestor=joelgmsec/evilnovnc) 2>/dev/null
$ docker rmi joelgmsec/evilnovnc 2>/dev/null
$ rm -rf ~/EvilnoVNC/Downloads/*

# Modlishka 数据清理
$ rm -rf ~/Modlishka

# ===== 蓝队工具清理 =====

# Phishing Catcher(含自定义词表)
$ pkill -f catch_phishing.py 2>/dev/null
$ rm -rf ~/phishing_catcher

# DNSTwist 扫描结果
$ sudo rm -f /var/log/dnstwist/*.json

# SpiderFoot 扫描数据(含停用后的 crontab)
$ rm -rf ~/spiderfoot /tmp/spiderfoot*
$ crontab -l 2>/dev/null | grep -v dnstwist-monitor | crontab -

# ===== 系统日志与邮件测试残留 =====
$ sudo rm -f /var/log/spiderfoot.log
$ sudo rm -rf /var/log/mailhog 2>/dev/null

演练后通知与培训

重要提醒:若演练涉及真实员工邮箱,须在演练结束后发送澄清通知,说明演练目的、结果及后续培训安排,避免造成恐慌或信任危机。对于演练中"中招"的员工,应提供针对性的安全培训而非惩罚。蓝队发现的仿冒域名应及时通报相关机构和域名注册商。

7常见问题

可以。Gophish 提供 Windows 二进制发行版,可直接下载运行。Evilginx2 和 EvilnoVNC 基于 Go/Docker 开发,在 Windows 上可通过 WSL2(Windows Subsystem for Linux)运行,建议使用 Ubuntu 22.04 发行版。DNSTwist 和 SpiderFoot 基于 Python,Windows 上可直接通过 pip 安装。总体而言,仍推荐 WSL2 或虚拟机安装 Ubuntu 以获得最佳兼容性(本手册命令均以 Ubuntu 为例)。

这往往说明邮件网关正在发挥作用。分两种情况处理:① 若目标是测试员工识别能力,可将演练发件域名/发件地址加入邮件网关白名单,或使用内部 SMTP(如 MailHog)发送;② 若目标是测试防御能力,则保留拦截状态,把"拦截率"本身作为蓝队的战绩数据。注意不要为了让邮件到达而过度降低仿真度——真实攻击者同样要绕过网关,这正是演练价值所在。

纯内网演练无需公网资源。Gophish 的钓鱼页面可通过内网 IP 访问(如 http://192.168.x.x:8080),配合内网 DNS 自定义域名效果更佳。Evilginx2 的 Let's Encrypt 证书功能需要公网可达,内网请用 -developer 自签名模式配合 hosts 文件解析;EvilnoVNC 纯内网可直接使用。蓝队工具中,DNSTwist 扫描的是公网域名数据,需要 DNS 出站查询;SpiderFoot 需要访问外部数据源,同样需要出站网络。

建议采取以下措施:① 部署在物理隔离的测试网络中,与生产环境完全分离;② 限制工具访问权限,仅授权安全团队成员使用;③ 建立使用审计日志,记录每次操作;④ 定期审查演练环境,确保无遗留配置;⑤ 在组织内部明确演练工具的使用规范与问责机制;⑥ 演练结束后严格执行第 ⑥ 章的数据清理脚本。

DNSTwist 和 SpiderFoot 主要使用公开数据源(DNS记录、WHOIS、证书透明度日志、搜索引擎等),属于被动信息收集,在仅针对本组织自有资产的前提下通常不违反法律。但需注意:① 优先扫描本组织自有域名或已获得授权的域名;② 遵守各数据源服务条款;③ 不将收集的数据用于商业目的或对外泄露;④ 扫描频率应合理,避免对目标服务造成负担。

官网的演练场景(drill.html)提供前端交互式模拟体验,适合公众快速了解钓鱼手法。本地部署的演练系统(本页面所述工具)则提供真实的邮件发送、页面代理、数据捕获、域名监测能力,适合企业内部深度演练。两者互补:可先通过官网场景进行科普教育,再通过本地系统开展实战演练,最后用蓝队工具验证防御效果。

两者实现2FA绕过的技术路径不同:Evilginx2 采用反向代理方式,拦截并转发用户的登录请求和2FA验证码,攻击者获得的是用户的会话Cookie;EvilnoVNC 采用实时浏览器劫持方式,受害者在攻击者控制的虚拟浏览器中操作,攻击者可以实时看到并操控整个登录过程,包括输入2FA验证码,获得的是完整的浏览器会话。EvilnoVNC 更加隐蔽、演示效果更强,但部署复杂度与资源消耗更高。

这是国内云厂商的普遍策略(防垃圾邮件),三种解决方案:① 内网演练用 MailHog 本地收发,完全绕过该限制(推荐入门首选);② 使用企业邮箱 SMTP 中继,端口选 587(STARTTLS)或 465(SSL),多数企业邮箱需在后台为账号开启"客户端授权码",填授权码而非登录密码;③ 向云厂商提交工单申请解封 25 端口(审核严格,演练用途通常不被批准,不建议依赖)。

按顺序检查:① DNS 是否已生效——用 nslookup login.yourdomain.com 8.8.8.8 确认公网解析到服务器 IP;② 80/443 端口是否公网可达且未被其他服务占用;③ UDP 53 是否被 systemd-resolved 等占用(sudo systemctl stop systemd-resolved);④ Let's Encrypt 对同一域名有签发频率限制,反复调试触发限流只能等待;⑤ 纯内网环境无需折腾公网证书,直接用 -developer 参数自签名 + hosts 解析。

完全正常,且恰好是绝佳的教学点:真实钓鱼网站也常因证书问题被浏览器标记。自签名证书在内网无法被浏览器信任,会出现红色警告。进阶做法是用 mkcert 工具生成内网受信任的本地 CA 证书并分发给演练终端,或在内网 DNS/AD 域环境中部署企业 CA。教学场景中,"看到证书警告仍继续访问"的行为本身就可以作为统计指标。

Gophish 批量导入标准格式为四列:First Name, Last Name, Email, Position(首行必须是英文列名)。示例:Zhang,San,zhangsan@your-company.com,财务部。在 Groups → New Group → Bulk Import Users 中上传即可。Position 列可留空但逗号占位不能省略;中文姓名建议填在 First Name 一列,模板中的 {{.FirstName}} 变量即可取到。

常见原因:① 未配置 API 密钥——大部分高质量数据源(Shodan、VirusTotal 等)需要免费注册获取 API Key,在 Settings 中填入后效果明显不同;② 模块选择不当——先跑 sfp_dnsresolve、sfp_whois 等被动模块验证链路,再逐步启用更多模块;③ 出站网络受限——容器/防火墙需放通对外的 443 端口;④ Python 版本过低——SpiderFoot 5.x 要求 Python 3.8+,用虚拟环境可避免依赖冲突;⑤ 查看 /var/log/spiderfoot.log 中的具体报错。

工具默认连接公共 CertStream 服务,该服务负载极高、偶尔不稳定。建议:① 用 tmux/systemd 守护进程常驻,断线后重新拉起;② 确认 external.yaml 关键词无误——匹配不到自有品牌词条时输出自然很少(这是正常现象,说明暂未发现仿冒);③ 对监测连续性要求高的单位,可参考社区方案自建 certstream-server 数据源,替换默认连接地址。

8资源下载

以下资源文件可辅助您快速搭建演练环境,点击下载即可获取。资源按红队工具、蓝队工具、通用资源分类。

Gophish 配置模板

包含 config.json 模板、邮件模板示例、钓鱼页面示例

ZIP · 约 30KB · 红队

Evilginx2 phishlet 合集

常用 phishlet 配置文件(Office365、Google、GitHub等)

ZIP · 约 9KB · 红队

演练报告模板

Word 格式报告模板,包含数据图表、分析框架、改进建议

DOCX · 约 46KB · 通用

快速启动脚本

一键安装 Docker、Gophish、Evilginx2 的 Bash 脚本

SH · 约 9KB · 红队

DNSTwist 监控脚本

自动化品牌域名监控脚本,含定时任务配置示例

SH · 约 3KB · 蓝队

SpiderFoot 扫描配置

预配置的扫描模块组合和 API 密钥配置模板

JSON · 约 5KB · 蓝队

在线资源库(随本页提供,代码可直接复制使用)

以下资源与本手册内容配套,均为可复制即用的完整代码,无需额外下载:

① docker-compose.yml(Gophish + MailHog 一键编排)
yaml
version: "3.8"

services:
  gophish:
    image: gophish/gophish:latest
    container_name: gophish
    restart: unless-stopped
    ports:
      - "3333:3333"
      - "8080:80"
    volumes:
      - gophish_data:/opt/gophish

  mailhog:
    image: mailhog/mailhog:latest
    container_name: mailhog
    restart: unless-stopped
    ports:
      - "1025:1025"
      - "8025:8025"

volumes:
  gophish_data:
② gophish config.json 关键配置模板(自编译/调优参考)
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
  },
  "contact_address": "sec@your-company.com",
  "db_name": "sqlite3",
  "db_path": "gophish.db",
  "migrations_prefix": "db/db_"
}
③ dnstwist-monitor.sh(品牌域名每日监控)
bash
#!/bin/bash
DOMAIN="your-company.com"
OUTDIR="/var/log/dnstwist"
mkdir -p "$OUTDIR"
$HOME/.local/bin/dnstwist --registered --format json \
    -o "$OUTDIR/$(date +%Y%m%d).json" "$DOMAIN" 2>/dev/null
if [ -s "$OUTDIR/$(date +%Y%m%d).json" ]; then
    echo "发现已注册的可疑域名变体,请查看 $OUTDIR" | \
    mail -s "[DNSTwist] 仿冒域名告警" security@your-company.com
fi
④ targets-template.csv(Gophish 目标群组导入模板)
csv
First Name,Last Name,Email,Position
Zhang,San,zhangsan@your-company.com,财务部
Li,Si,lisi@your-company.com,人力资源部
Wang,Wu,wangwu@your-company.com,信息技术部