anounymous68/ShellForge-
GitHub: anounymous68/ShellForge-
ShellForge 是一款模块化的命令行 payload 生成器,用于快速生成多种语言的 reverse shell、bind shell 和 web shell 模板,解决渗透测试和红队演练中手动拼装 shell 脚本的效率与一致性问题。
Stars: 0 | Forks: 0
ShellForge
一个模块化的 reverse shell、bind shell 和 web shell payload 生成器,专为授权的安全测试设计。
作者: 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 类型和选项**

**生成的 PowerShell reverse shell payload 及监听器命令**

**粘贴到目标实时 PowerShell 会话中的 payload**

**成功接收 shell — 通过 reverse 连接在目标上运行 `whoami /priv`**

## 架构
```
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, 内存取证对抗, 安全规则引擎, 文档结构分析, 无后门