MrEx-Right/ViperForge

GitHub: MrEx-Right/ViperForge

一个可视化的模块化红队漏洞利用链构建工具,通过拖拽节点生成多阶段 Python 利用脚本。

Stars: 2 | Forks: 1

ViperForge Logo # ViperForge ### 红队漏洞利用工厂  ·  `2.0.0-beta`
![Python](https://img.shields.io/badge/Python-3.10+-3776AB?style=for-the-badge&logo=python&logoColor=white) ![PyQt6](https://img.shields.io/badge/GUI-PyQt6-41CD52?style=for-the-badge&logo=qt&logoColor=white) ![License](https://img.shields.io/badge/License-GPLv3-blue?style=for-the-badge) ![Status](https://img.shields.io/badge/Status-Beta-e63946?style=for-the-badge) ![Version](https://img.shields.io/badge/Version-2.0.0--beta-ff6680?style=for-the-badge) **可视化的、基于模块的红队漏洞利用工厂。通过拖拽模块构建多阶段漏洞利用链 —— 无需样板代码,无需盲目猜测。**
## ⚠️ 免责声明 ## 界面 ![ViperForge v2.0 GUI](https://static.pigsec.cn/wp-content/uploads/repos/cas/c4/c4e8c10466932d1478ee4656790ff3a8636544a82162fd0e32ec34a646640383.png) ## 概述 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, 可视化工具, 无后门, 逆向工具