MrEx-Right/ViperForge
GitHub: MrEx-Right/ViperForge
一个可视化的模块化红队漏洞利用链构建工具,通过拖拽节点生成多阶段 Python 利用脚本。
Stars: 2 | Forks: 1
# ViperForge
### 红队漏洞利用工厂 · `2.0.0-beta`





**可视化的、基于模块的红队漏洞利用工厂。通过拖拽模块构建多阶段漏洞利用链 —— 无需样板代码,无需盲目猜测。**
## ⚠️ 免责声明
## 界面

## 概述
ViperForge v2.0 是一个基于节点的漏洞利用构建器。每个漏洞利用模块都是您放置在画布上的一个**模块**。通过箭头连接器连接模块以定义攻击流程。ViperForge 会根据整个利用链生成一个干净、独立的 Python 漏洞利用脚本 —— 包含去重的 import 语句、共享的 `CTX` 上下文字典,以及可选的 XOR 编码 shellcode payload。
### 为什么选择 ViperForge?
- **可视化的利用链构建** —— 以图形化方式查看您的攻击流程。不再需要在脚本之间复制粘贴样板代码。
- **0-Day Builder 微模块** —— 将基础操作(socket、send/recv、encode、XOR、HTTP、文件 I/O 等)从头组合成自定义的漏洞利用流程。
- **规避优先的 payload** —— C shellcode 使用 GCC 编译,通过随机密钥进行 XOR 编码,并作为自解码的 Python `ctypes`/`mmap` stub 嵌入。每次生成的输出都不相同。
- **利用链验证器** —— 在生成代码之前检测中断的利用链(缺少 socket、未定义变量、空字段等)。
- **双接口** —— 提供用于可视化构建的完整 GUI;以及用于无头/纯终端工作流的基于 Rich 的 CLI。
## 功能特性
| 特性 | 描述 |
|---|---|
| 🧩 **可视化模块构建器** | 在无限画布上通过拖拽放置漏洞利用模块 |
| 🔗 **链式模式** | 连接模块以生成多阶段漏洞利用脚本 |
| ⚡ **实时代码预览** | 带有 Python 语法高亮的输出会实时更新 |
| 🛡️ **利用链验证器** | 生成前的静态分析 —— 在生成代码前捕获错误 |
| 💾 **工作区保存 / 加载** | 将您的模块画布保存为 JSON,以便日后重新加载 |
| 🔐 **多态 XOR 编码器** | 随机密钥 · `ctypes`/`mmap` 自解码 shellcode stub |
| ⚙️ **C Payload 编译器** | 通过 `gcc` + `objcopy` 自动编译 `.c` 源码 → 原始 shellcode |
| 🌐 **36 个漏洞利用模块** | 18 个经典漏洞利用 + 18 个 Builder 微模块 |
| 🖥️ **CLI 模式** | 完整的 `--cli` shell,支持 Rich 格式化和链式构建模式 |
## 漏洞利用模块
### 🧱 漏洞利用构建器 (0-Day) —— 微模块
将基础操作组合为自定义漏洞利用流程。旨在被串联成一个带有共享 `CTX` 字典的扁平化顺序脚本。
| 模块 | 描述 |
|---|---|
| `builder_socket` | 创建一个 TCP 网络 socket |
| `builder_send` | 通过 socket 发送数据 |
| `builder_recv` | 从 socket 接收数据 |
| `builder_recv_until` | 持续接收直到匹配到指定模式(带超时) |
| `builder_pack` | 将整数/字节打包为 struct 缓冲区 |
| `builder_p32_p64` | 将整数快速打包为 32/64 位小端序 |
| `builder_http_req` | HTTP GET / POST 请求 |
| `builder_b64encode` | 对变量进行 Base64 编码 |
| `builder_b64decode` | 对变量进行 Base64 解码 |
| `builder_urlencode` | 对字符串进行 URL 编码 |
| `builder_hex` | 对变量进行十六进制编码或解码 |
| `builder_xor` | 使用密钥对字节变量进行异或 (XOR) |
| `builder_shell_cmd` | 执行本地 shell 命令(阻塞 / 非阻塞) |
| `builder_read_file` | 将本地文件内容读取到变量中 |
| `builder_write_file` | 将变量内容写入本地文件 |
| `builder_print` | 向控制台打印消息或变量 |
| `builder_sleep` | 暂停执行 N 秒 |
| `builder_custom` | 注入任意 Python 代码 |
### 💥 二进制漏洞利用
| 模块 | 描述 |
|---|---|
| `bof_remote` | 通过 TCP 的远程缓冲区溢出 |
| `bof_local` | 本地缓冲区溢出 (CLI 参数 / 标准输入) |
| `rop_chain` | 返回导向编程 (ROP) 链生成器 |
| `format_string` | 格式化字符串任意内存写入 |
| `heap_uaf` | 堆漏洞利用 —— 释放后重用 (Use-After-Free) |
### 🌐 Web 漏洞利用
| 模块 | 描述 |
|---|---|
| `web_lfi` | 本地文件包含 → RCE (日志包含) |
| `web_sqli` | 盲注 SQLi → 通过 `INTO OUTFILE` 实现 RCE |
| `web_ssti` | 服务端模板注入 (Jinja2/Flask) |
| `web_cmd_exec` | 通过 HTTP 进行操作系统命令注入 (Base64 编码,绕过 WAF) |
| `web_xxe` | XML 外部实体 (XXE) 数据外带 |
| `web_deserialization` | 不安全的反序列化 (Python Pickle) |
| `web_ssrf` | SSRF 内部端口扫描器 |
### 🔼 权限提升
| 模块 | 描述 |
|---|---|
| `privesc_suid` | SUID PATH 劫持 |
| `privesc_sudo_token` | 通过 `/proc/[pid]/mem` 劫持 Sudo Token |
### 🌍 网络攻击
| 模块 | 描述 |
|---|---|
| `network_ftp_anon` | FTP 匿名登录 & Payload 上传 |
| `network_smb_relay` | SMB 中继攻击 (封装器) |
### 🔒 密码学
| 模块 | 描述 |
|---|---|
| `crypto_padding_oracle` | Padding Oracle 攻击自动化 |
### 🏢 活动目录
| 模块 | 描述 |
|---|---|
| `ad_kerberoasting` | Kerberoasting 攻击自动化 (Impacket) |
## 安装说明
### 前置条件
- **Python 3.10+**
- **GCC + binutils**(用于编译 C payload)
sudo apt install gcc binutils gcc-multilib
- **Python 依赖项:**
pip install -r requirements.txt
`requirements.txt`:
```
PyQt6>=6.6.0
jinja2>=3.1.0
rich>=13.0.0
qtawesome>=1.3.0
```
### 安装配置
```
# 克隆 repository
git clone https://github.com/MrEx-Right/ViperForge.git
cd ViperForge
# 安装 Python 依赖
pip install -r requirements.txt
# 启动 GUI(默认)
python viperforge.py
# 或者启动 CLI
python viperforge.py --cli
```
## 使用说明
### GUI 模式(默认)
```
python viperforge.py
```
1. **双击**左侧面板中的模块,将其添加到画布。
2. 点击模块底部的 **▼ 连接器**,然后点击另一个模块以将它们链接起来。
3. 选中一个模块,并在右侧面板中填写其**参数**。
4. 观察**实时代码预览**在您输入时实时更新。
5. 点击 **GENERATE EXPLOIT** —— 选择保存路径,脚本将被立即生成。
**工具栏操作:**
| 按钮 | 操作 |
|---|---|
| 💾 Save WS | 将当前画布状态保存到 JSON 工作区文件 |
| 📂 Load WS | 恢复之前保存的画布 |
| 🗑️ Clear Canvas | 移除所有模块和连接器 |
| 🔥 GENERATE EXPLOIT | 验证利用链并生成 Python 漏洞利用脚本 |
**画布快捷键:**
| 输入 | 操作 |
|---|---|
| 滚轮 | 放大 / 缩小 |
| 鼠标中键拖动 | 平移画布 |
| `Delete` / `Backspace` | 删除选中的模块或连接器 |
| 右键点击模块 | 编辑 · 替换为其他模块 · 删除 |
### CLI 模式
```
python viperforge.py --cli
```
选择 **Single Exploit Mode** 为单个模块运行参数向导,或者选择 **Chain Builder Mode** 交互式地组合多模块利用链,并一步生成脚本。
## 利用链验证
在生成代码之前,ViperForge 会运行静态分析检查模块利用链:
| 检查项 | 严重程度 |
|---|---|
| `builder_send/recv/recv_until` 在没有前置 `builder_socket` 的情况下使用 | ❌ 错误 |
| 模块读取了未被任何先前模块生成的变量 | ⚠️ 警告 |
| `builder_custom` 的 `CODE` 字段为空 | ❌ 错误 |
| `builder_pack` / `builder_p32_p64` 的 VALUE 不是有效的整数/十六进制 | ❌ 错误 |
| `builder_sleep` 的 SECONDS 不是有效的数字 | ❌ 错误 |
| `builder_http_req` 的 URL 不是以 `http://` 或 `https://` 开头 | ⚠️ 警告 |
| `builder_read_file` / `builder_write_file` 的 FILE_PATH 为空 | ❌ 错误 |
| Builder 模块和经典漏洞利用模块混合在同一条利用链中 | ⚠️ 警告 |
错误会阻止代码生成。警告会显示,但不会阻止脚本输出。
## 生成的输出
脚本将保存到 `output/` 目录。利用链脚本包含:
- `#!/usr/bin/env python3` shebang
- 自动生成的包含模块/清单列表的文件头
- **Builder 链** —— 带有去重 import 和共享 `CTX = {}` 字典的扁平化顺序代码
- **经典利用链** —— 每个模块被封装在 `stage_N_name()` 函数中,由 `main()` 调用
- **混合利用链** —— Builder 模块作为扁平化代码,经典模块作为分阶段函数
## C Payload
在 `templates/payloads/` 中预置的 C payload 源码:
| 文件 | 描述 |
|---|---|
| `execve.c` | Linux `execve("/bin/sh")` —— 32 位 x86 位置无关代码 |
| `win_exec.c` | 通过 PEB 解析 + API hashing 的 Windows shellcode(无导入表) |
Payload 使用 GCC(`-m32 -fno-stack-protector -z execstack -nostdlib -static`)编译,通过 `objcopy` 提取原始 `.text` 字节,使用随机密钥进行 XOR 编码,并作为 `ctypes`/`mmap` 自解码 Python stub 嵌入。
## 添加新模块
**1. 在 `templates/exploits/my_exploit.j2` 中创建一个 Jinja2 模板**:
```
#!/usr/bin/env python3
# ViperForge — my_exploit
import socket
r = socket.create_connection(("{{ RHOST }}", {{ RPORT }}))
# ... 你的 exploit 逻辑
```
**2. 在 `viperforge/registry.py` 中注册模块**:
```
ExploitDef(
id=37, name="my_exploit", category="Binary Exploitation",
description="My Custom Exploit",
template="my_exploit",
options=[
ExploitOption("RHOST", "Target IP Address", "127.0.0.1"),
ExploitOption("RPORT", "Target Port", "4444"),
],
),
```
ViperForge 会自动发现新模块 —— 它会立即显示在 GUI 面板和 CLI 菜单中。
## 架构
```
viperforge.py ──────────────────────────────────────────────────
│ │
▼ (--cli) ▼ (default) │
viperforge/cli/shell.py viperforge/gui/ │
Rich-powered interactive shell ┌─────────────────────┐│
├─ Single Exploit Mode │ main_window.py ││
└─ Chain Builder Mode │ block_palette.py ││
│ canvas.py ││
│ block_item.py ││
│ connector.py ││
│ param_panel.py ││
│ preview_panel.py ││
└─────────────────────┘│
│ │
──────────────────────────┘ │
▼ │
viperforge/engine.py (Jinja2 rendering + chain assembly)
│
┌────────────┴────────────┐
▼ ▼
viperforge/compiler.py viperforge/encoder.py
(C source → shellcode) (XOR encode + ctypes/mmap stub)
│
▼
viperforge/validator.py (pre-generation chain analysis)
viperforge/registry.py (36 ExploitDef entries)
viperforge/session.py (per-block option storage)
```
## 依赖项
| 包 | 版本 | 用途 |
|---|---|---|
| `PyQt6` | ≥ 6.6.0 | GUI 框架(也支持 PyQt5) |
| `jinja2` | ≥ 3.1.0 | 漏洞利用模板渲染 |
| `rich` | ≥ 13.0.0 | CLI 格式化和交互式提示 |
| `qtawesome` | ≥ 1.3.0 | GUI 中的 FontAwesome 图标 |
## 许可证
本项目基于 **GNU General Public License v3.0 (GPLv3)** 授权。
您可以在 GPLv3 条款下自由使用、学习、修改和分发本软件。任何衍生作品也必须在相同的许可证下分发。
有关完整的许可证文本,请参见 [LICENSE](LICENSE),或访问 [gnu.org/licenses/gpl-3.0](https://www.gnu.org/licenses/gpl-3.0.html)。
为红队而生。请负责任地使用。
标签:DNS 反向解析, PyQt6, Python, 可视化工具, 无后门, 逆向工具