anounymous68/ShellForge-

GitHub: anounymous68/ShellForge-

ShellForge 是一款模块化的命令行 payload 生成器,用于快速生成多种语言的 reverse shell、bind shell 和 web shell 模板,解决渗透测试和红队演练中手动拼装 shell 脚本的效率与一致性问题。

Stars: 0 | Forks: 0

ShellForge logo

ShellForge

一个模块化的 reverse shell、bind shell 和 web shell payload 生成器,专为授权的安全测试设计。

Python License Tests Platform

作者: Mostafa Tamime

## 目录 - [概述](#overview) - [法律声明](#legal-notice) - [功能](#features) - [支持的 payload](#supported-payloads) - [安装说明](#installation) - [快速开始](#quick-start) - [命令行参考](#command-line-reference) - [使用示例](#usage-examples) - [交互模式](#interactive-mode) - [编码](#encoding) - [监听器助手](#listener-helpers) - [演示](#demo) - [架构](#architecture) - [扩展 ShellForge](#extending-shellforge) - [测试](#testing) - [路线图](#roadmap) - [许可证](#license) ## 概述 ShellForge 是一个命令行 payload 生成器,适用于红队演练、渗透测试、CTF 和实验室练习。它可以生成标准且文档完善的 reverse shell、bind shell 和 web shell 模板,否则你通常需要从 revshells.com、PayloadsAllTheThings 和 HackTricks 等参考资料中手动复制——这些模板已使用你自己的 IP 和 port 进行参数化,并且可以直接粘贴、保存或编译。 其目标是在演练过程中提供速度和一致性:一条命令,一个干净的 payload,无需离开终端。payload 以纯文本、可安全复制的文本形式打印(没有外框或装饰),因此只需一次鼠标选择即可准确复制你需要的内容,不多不少。 **开发动机。** 在 CTF 和实验室渗透测试期间,每次使用不同的 `LHOST`/`LPORT` 生成相同的 shell 既重复又容易出错。ShellForge 将这些模板集中在一个小型、可脚本化的 CLI 后面,并带有可选的引导菜单。 ## 法律声明 ## 功能 - **三大 payload 系列** — 一个 CLI 即可生成 reverse shell、bind shell 和 web shell。 - **16 种 reverse/bind 语言和工具** 以及 **11 种 web shell 语言**(见下文)。 - **参考级模板** — 干净的 `{IP}` / `{PORT}` 替换,无混淆。 - **可安全复制的输出** — payload 以纯文本形式打印,没有边框或样式。 - **文件输出** — 直接保存 `.ps1`、`.c`、`.java`、`.cs`、`.go` 和 web shell 文件。 - **编码器** — Base64、URL 编码和 PowerShell `-EncodedCommand` (UTF-16LE)。 - **监听器助手** — 生成匹配的 `nc`、`rlwrap`、`socat` 和 Metasploit `multi/handler` 命令。 - **交互式菜单** — 带有 IP、port 和选项输入验证的引导提示。 - **模块化设计** — 只需在 `generators/` 中放入一个文件并注册,即可添加新语言。 - **经过测试** — pytest 测试套件覆盖了每个生成器、编码器和 CLI 路径。 ## 支持的 payload ### Reverse 与 bind shell | 语言 / 工具 | 键值 | Reverse | Bind | 文件输出 | |-----------------|--------|:-------:|:----:|:-----------:| | Bash | `bash` | ✅ | ✅ | — | | Python 2 / 3 | `python`, `python3` | ✅ | ✅ | — | | Perl | `perl` | ✅ | ✅ | — | | PHP | `php` | ✅ | ✅ | — | | Ruby | `ruby` | ✅ | ✅ | — | | Netcat | `nc`, `nc-mkfifo` | ✅ | ✅ | — | | socat | `socat` | ✅ | ✅ | — | | PowerShell | `powershell` | ✅ | ✅ | `.ps1` | | Java | `java` | ✅ | ✅ | `.java` | | C# | `csharp` | ✅ | ✅ | `.cs` | | C | `c` | ✅ | ✅ | `.c` | | Go | `golang` | ✅ | ✅ | `.go` | | Lua | `lua` | ✅ | ✅ | — | | AWK | `awk` | ✅ | ✅ | — | 使用 `-l all` 可一次性输出所有 reverse/bind 语言。 ### Web shell | 语言 | 键值 | 扩展名 | 变体 | |----------|-----|-----------|----------| | PHP | `php` | `.php` | minimal, full | | PHP 5 | `php5` | `.php5` | minimal, full | | ASP (classic) | `asp` | `.asp` | minimal, full | | ASP.NET | `aspx` | `.aspx` | minimal, full | | JSP | `jsp` | `.jsp` | minimal, full | | JSPX | `jspx` | `.jspx` | minimal, full | | Perl CGI | `perl` | `.pl` | minimal, full | | Python CGI | `python` | `.py` | minimal, full | | Ruby CGI | `ruby` | `.rb` | minimal, full | | ColdFusion | `cfm` | `.cfm` | minimal, full | | Node.js | `nodejs` | `.js` | minimal, full | - **minimal** — 最小的功能性单行命令,非常适合快速上传。 - **full** — 浏览器交互式版本,带有命令表单、输出面板和基本的错误处理。 ## 安装说明 **环境要求:** Python 3.9 或更高版本。 ``` git clone https://github.com//shellforge.git cd shellforge pip install -r requirements.txt ``` 可选的 editable 安装(提供 `shellforge` 入口点): ``` pip install -e . ``` ## 快速开始 ``` # 引导式交互菜单 python shellforge.py # Bash reverse shell python shellforge.py -t reverse -i 10.10.14.5 -p 4444 -l bash # PHP web shell(浏览器表单)保存到文件 python shellforge.py -t webshell -l php --variant full -o shell.php ``` ## 命令行参考 ``` python shellforge.py [-t TYPE] [-i IP] [-p PORT] [-l LANG] [--variant VARIANT] [--encode ENCODING] [-o OUTPUT] [--listener] [-m] [--list-langs] [--no-banner] [--version] ``` | 选项 | 参数 | 描述 | |--------|----------|-------------| | `-t`, `--type` | `reverse` \| `bind` \| `webshell` | 要生成的 payload 系列。 | | `-i`, `--ip` | IP 地址 | 攻击者/回调主机。`reverse` 必填。 | | `-p`, `--port` | 端口 | 监听/回调端口。`reverse`/`bind` 必填。 | | `-l`, `--lang` | 语言键值 \| `all` | 目标语言/工具。参见[支持的 payload](#supported-payloads)。 | | `--variant` | `minimal` \| `full` | Web shell 变体。默认值:`minimal`。 | | `--encode` | `none` \| `base64` \| `urlencode` \| `ps-encoded` | 应用于 payload 的编码。默认值:`none`。 | | `-o`, `--output` | 路径 | 将 payload 写入文件(推荐用于 web shell 和编译语言)。 | | `--listener` | — | 同时打印匹配的监听器命令。 | | `-m`, `--interactive` | — | 启动引导式交互菜单。 | | `--list-langs` | — | 列出支持的语言(与 `-t webshell` 结合使用时显示 web shell 语言)。 | | `--no-banner` | — | 隐藏横幅和免责声明。 | | `--version` | — | 打印版本并退出。 | 不带**任何参数**运行等效于 `--interactive`。 ## 使用示例 **Reverse shell (bash):** ``` python shellforge.py -t reverse -i 10.10.14.5 -p 4444 -l bash ``` **Bind shell (Python 3):** ``` python shellforge.py -t bind -p 5555 -l python3 ``` **保存为脚本的 PowerShell reverse shell:** ``` python shellforge.py -t reverse -i 10.10.14.5 -p 443 -l powershell -o reverse.ps1 ``` **可直接编译的 C reverse shell:** ``` python shellforge.py -t reverse -i 10.10.14.5 -p 4444 -l c -o reverse.c # gcc -o reverse reverse.c && ./reverse ``` **一次性输出所有语言:** ``` python shellforge.py -t reverse -i 10.10.14.5 -p 4444 -l all ``` **Web shell:** ``` python shellforge.py -t webshell -l php --variant full -o shell.php python shellforge.py -t webshell -l aspx --variant minimal -o shell.aspx python shellforge.py -t webshell --list-langs ``` 更多端到端操作指南:[`examples/usage_examples.md`](examples/usage_examples.md)。 ## 交互模式 运行 `python shellforge.py`(或 `-m`)进入提示式工作流。它会验证输入,并在输入无效时重新提示,而不是直接崩溃。 ``` [?] Select shell type: [1] Reverse shell [2] Bind shell [3] Web shell ``` - **Reverse / bind** — 提示输入语言、IP(仅 reverse)、端口、编码、可选的监听器输出以及可选的文件保存。 - **Web shell** — 提示输入语言、变体和输出路径;不需要 IP/端口。 每次生成 payload 后,菜单会提供生成下一个或退出的选项。 ## 编码 使用 `--encode` 对任何生成的 payload 应用编码: | 编码 | 描述 | 典型用途 | |----------|-------------|-------------| | `none` | 原始 payload(默认)。 | 直接粘贴。 | | `base64` | UTF-8 payload 的 Base64。 | 包装在解码运行 stub 中。 | | `urlencode` | 百分号编码。 | 通过 URL 参数传递。 | | `ps-encoded` | UTF-16LE + Base64,包装为 `powershell -EncodedCommand`。 | Windows 单行命令。 | ``` python shellforge.py -t reverse -i 10.10.14.5 -p 4444 -l bash --encode base64 python shellforge.py -t reverse -i 10.10.14.5 -p 4444 -l powershell --encode ps-encoded ``` ## 监听器助手 添加 `--listener` 以在 payload 旁边打印接收命令: ``` python shellforge.py -t reverse -i 10.10.14.5 -p 4444 -l bash --listener ``` 为所选端口生成 `nc -lvnp`、`rlwrap nc -lvnp`、完整的 TTY `socat` 监听器以及 Metasploit `multi/handler` 单行命令。 ## 演示 在实验室环境中进行了端到端测试:Kali(攻击者)和一台 Windows 目标虚拟机 —— 通过交互式菜单生成 PowerShell reverse shell,并使用 netcat 成功接收。 **交互模式 — 选择 shell 类型和选项** ![交互菜单](https://static.pigsec.cn/wp-content/uploads/repos/cas/57/571e2477dcd8043e69cabde4e0db292f721d188feaf0e07b311b2dcaddb71d72.png) **生成的 PowerShell reverse shell payload 及监听器命令** ![Payload 和监听器输出](https://static.pigsec.cn/wp-content/uploads/repos/cas/bc/bc8825cf95c60a85dedb519bd19acb6e039979e2cdcab0bbc76301ef67b94ce4.png) **粘贴到目标实时 PowerShell 会话中的 payload** ![在目标上执行的 payload](https://static.pigsec.cn/wp-content/uploads/repos/cas/c2/c2e02d41c77bed65731026794b2433a0b99a8f7f4c0a7136b9e2896013125c6c.png) **成功接收 shell — 通过 reverse 连接在目标上运行 `whoami /priv`** ![Reverse shell 会话](https://static.pigsec.cn/wp-content/uploads/repos/cas/71/71cbfe615bc3faf04a122691dde4a68d4f2b92d57a3960097959768a6cd1b50b.png) ## 架构 ``` shellforge/ ├── shellforge.py # CLI entrypoint, argument parsing, dispatch ├── interactive.py # Guided menu mode ├── generators/ # One module per language/tool │ ├── base.py # PayloadGenerator abstract base class │ ├── bash_sh.py, python_lang.py, ... │ └── webshell.py # Web shell generators (minimal / full) ├── encoders/ │ └── encode.py # Base64 / URL / PowerShell encoders ├── listeners/ │ └── listener_helper.py # nc / rlwrap / socat / msfconsole helpers ├── assets/logo.svg ├── docs/screenshots/ # Demo screenshots ├── examples/usage_examples.md └── tests/ # pytest suite ``` Reverse/bind 生成器实现了通用的 `PayloadGenerator` 接口 (`reverse()`、`bind()`、`file_extension()`);支持文件的语言添加了 `reverse_script()` / `bind_script()`。Web shell 生成器暴露了 `minimal()` 和 `full()`。CLI 通过 `LANGUAGES` 和 `WEBSHELL_LANGUAGES` 注册表将语言键解析为生成器。 ## 扩展 ShellForge 只需两步即可添加新的 reverse/bind 语言: 1. 创建 `generators/mylang.py`,实现 `PayloadGenerator` 接口: ``` from generators.base import PayloadGenerator class MyLangGenerator(PayloadGenerator): def reverse(self, ip: str, port: int) -> str: return f"..." # payload with {ip}:{port} def bind(self, port: int) -> str: return f"..." def file_extension(self) -> str: return ".ext" ``` 2. 在 `shellforge.py` 中的 `LANGUAGES` 字典中注册它: ``` LANGUAGES = { # ... "mylang": MyLangGenerator(), } ``` Web shell 语言在 `generators/webshell.py` 中遵循相同的模式。 ## 测试 ``` pip install pytest pytest -q ``` 该测试套件验证每个生成器是否产生带有正确 `IP`/`PORT` 替换的非空输出,编码器是否能正确往返,web shell 是否包含有效的命令执行原语,以及 CLI 和交互式入口点的行为是否符合预期。 ## 路线图 - 在 PowerShell 生成器旁边提供 Windows `cmd` / `mshta` / `certutil` 传递单行命令。 - 可选的 TTY 升级备忘单,在 Linux reverse shell 之后打印(`python pty`、`stty raw` 等)。 - 一个 `--format raw|commented` 标志,用于输出纯 payload 或带有简短编译/运行标头的 payload。 ## 许可证 基于 [MIT 许可证](LICENSE) 发布。

ShellForge · 作者:Mostafa Tamime

标签:Payload生成, Python, WebShell, 内存取证对抗, 安全规则引擎, 文档结构分析, 无后门