franckferman/p0wnyShellX

GitHub: franckferman/p0wnyShellX

一款用于授权红队行动的多态 PHP webshell 生成器,每次运行生成特征完全唯一的 shell,规避静态特征检测。

Stars: 4 | Forks: 0

[![License](https://img.shields.io/github/license/franckferman/p0wnyShellX.svg?style=for-the-badge)](LICENSE) [![Python](https://img.shields.io/badge/Python-3.8+-3776AB?style=for-the-badge&logo=python&logoColor=white)](https://www.python.org/) [![PHP](https://img.shields.io/badge/PHP-8.x-777BB4?style=for-the-badge&logo=php&logoColor=white)](https://www.php.net/) [![Release](https://img.shields.io/github/v/release/franckferman/p0wnyShellX?style=for-the-badge)](https://github.com/franckferman/p0wnyShellX/releases) [![CI](https://img.shields.io/github/actions/workflow/status/franckferman/p0wnyShellX/ci.yml?style=for-the-badge&label=CI)](https://github.com/franckferman/p0wnyShellX/actions) **用于授权红队行动的多态 PHP webshell 生成器。** *每次运行生成唯一的 shell。没有任何两次部署共享相同的特征。*
## 什么是 p0wnyShellX p0wnyShellX 是一个用于后渗透 PHP webshell 的**多态生成器**,基于 [p0wny-shell](https://github.com/flozz/p0wny-shell) 分叉并进行了深度扩展。 原始的 p0wny-shell 及大多数衍生版本发布的是一个**静态文件** —— 每次部署在字节级上完全一致,这使得 YARA/AV/SIEM 检测变得轻而易举。p0wnyShellX 解决了这个问题:与其使用静态 webshell,不如运行一个 Python 生成器,它每次都会生成一个**唯一的 PHP 文件**,其中包含随机化的函数名、路由 token、垃圾代码、bcrypt 哈希凭据、CSS 主题以及可配置的 AJAX 传输层。 ``` flowchart LR A["python3 p0wnyShellX.py\n-p "MyPass!" -o shell.php"] subgraph engine ["Polymorphic Engine"] B1["Random function names\nPHP + JS — 250+ pool"] B2["Random routing tokens\n?x4r9tz=k2m8jvn"] B3["Bcrypt hash — cost=12\nplaintext never stored"] B4["Junk functions\n20–80 decoys per run"] B5["CSS theme\n3 camouflage themes"] B6["Shuffled exec order\nnew chain per build"] B7["AJAX transport\nplain / mimic / rc4"] end C["shell.php\nunique signature — never the same"] A --> engine engine --> C style engine fill:#0d1117,stroke:#27ae60,color:#ccc style A fill:#111,stroke:#27ae60,color:#ccc style C fill:#111,stroke:#27ae60,color:#27ae60 ``` ## 功能对比 | 功能 | p0wny-shell | p0wnyShellX | |---|---|---| | 身份验证 | 无 | 登录表单 + session | | 密码存储 | — | bcrypt cost=12 (通过 `password_verify`) | | 时序安全的身份验证 | — | 针对用户名的 `hash_equals` + `password_verify` | | 静态特征 | 是 — 每次部署完全相同 | **否** — 每次部署都是唯一的 | | 函数名 | 固定 (`featureShell` 等) | 从 250+ 个业务名称池中随机选取 | | JS 变量名 | 固定 | 随机 | | HTML 元素 ID | 固定 | 随机 token | | 路由 endpoint | 固定的 `?feature=shell` | 随机 token (例如 `?x4r9tz=k2m8jvn`) | | 垃圾代码 | 无 | 20–80 个动态生成的诱饵函数 | | Exec 回退顺序 | 固定 | 每次运行随机打乱 | | CSS 伪装 | 透明的 webshell | 伪装的监控仪表板 (3 种主题) | | 文件中的密码 | — | 仅包含 bcrypt 哈希 — 绝不存储明文 | | 可重现构建 | 是 (静态) | 通过 `--seed` 标志 | ## 与 Weevely 对比 [Weevely](https://github.com/epinna/weevely3) 是红队人员首选的 CLI webshell。这两个工具解决的是不同的问题 —— 它们可以互补。 | 功能 | Weevely | p0wnyShellX | |---|---|---| | 身份验证 | MD5(password) 作为 XOR 密钥 | bcrypt cost=12 + `password_verify` | | 多态性 | 变量打乱 + 随机字符串块 | 业务名称、路由 token、垃圾函数、bcrypt salt、exec 执行顺序 | | 通信 | POST body 中使用 XOR+gzip+base64,经过混淆的 header/footer | POST body 中使用 Base64,随机化的路由 token | | 界面 | Python CLI 客户端 | 浏览器终端 — 操作者机器上无需安装工具 | | 伪装 | 纯 PHP 代码片段 | 伪装的监控仪表板 (3 种主题) | | 模块 | 30+ (反向 shell、SQL、网络扫描、代理…) | Shell、上传、下载、Tab 补全 | | Exec 方法 | 9 种 — `exec`, `shell_exec`, `system`, `passthru`, `popen`, `proc_open`, `pcntl_fork`, `python_eval`, `perl_system` — 已打乱 | 5 种 — `exec`, `shell_exec`, `system`, `passthru`, `popen` — 每次构建随机打乱 | | `disable_functions` 绕过 | 是 — mod_cgi + `.htaccess` (仅限 Apache,需要 `AllowOverride` + 写入权限) | 否 — 未计划作为优先事项;该技术需要 Apache + mod_cgi + AllowOverride + web 可写目录,这在生产环境中极少能同时满足 | | 反向 shell | 是 | 否 (已规划) | | 日志清理 | 是 | 否 (已规划) | | 端口扫描 | 是 | 否 (已规划) | | SQL 控制台 | 是 | 否 | **适用 Weevely 的场景**:你需要 CLI 自动化、模块生态系统 (SQL、反向 shell、扫描),或者经过混淆的 HTTP 传输比视觉伪装更重要。 **适用 p0wnyShellX 的场景**:浏览器访问是你唯一的选项,每次部署具有唯一的特征是首要任务,或者主题化伪装有助于 shell 在人工目视检查中存活。 ## 多态性是如何工作的 ### 1. 函数名随机化 每个 PHP 和 JS 函数都会被分配一个从 250+ 个看似真实的业务名称池中随机提取的名称 (`archiveReplicationLog`, `fetchComplianceStatus`, `validateSchemaCompatibility`…)。每次运行都会生成一个新的映射。 ``` # Run 1 # Run 2 function archiveReplicationLog function validateSchemaCompatibility function fetchComplianceStatus function computePipelineThroughput ``` 池中的名称刻意做得很通用 —— 它们与任何真实的监控仪表板、CMS 插件或企业级 PHP 应用中的函数没有区别。针对 `fetchClusterStatus` 或 `validateCertificateChain` 编写 YARA 规则会在合法代码库中产生大量误报,使得此类规则在生产环境中根本无法使用。唯一可检测的痕迹是 `p0wnyShellX.py` 内部的名称池本身 —— 但生成器永远不会接触目标。部署后的 shell 仅包含从该池中提取的 15–20 个名称,没有留下任何可识别的模式。 除此之外,垃圾函数和随机化的路由 token 增加了更多的干扰:每次构建看起来都像是一个不同的应用程序,而不是同一个工具的变种。 ### 2. 路由 token 随机化 AJAX 路由参数 `?feature=` 及其值 (`shell`, `hint`, `pwd`, `upload`) 将被在构建时生成的随机字母数字 token 替换,并连贯地注入到 PHP 和 JS 中。 ``` # 原始 (static, detectable) POST /?feature=shell # 生成 (每次 run 唯一) POST /?x4r9tz=k2m8jvn POST /?x4r9tz=p3nq7as ``` ### 3. Bcrypt 密码哈希 生成器在构建时调用 PHP 来计算密码的 `bcrypt cost=12` 哈希。该哈希被嵌入到生成的文件中;永远不会出现明文。由于 bcrypt salt 是随机的,即使密码相同,每次运行生成的哈希值也不同。 ``` # 生成文件中存储的内容: define('PHSH_R7VX2', '$2y$12$oEYz4jk/0pa1K...'); # Auth check: function validateClusterState(string $login, string $pass): bool { return hash_equals($login, AUSR_5KQP) && password_verify($pass, PHSH_R7VX2); } ``` ### 4. 动态垃圾代码 每次运行都会生成 20 到 80 个诱饵 PHP 函数,这些函数取自 20 个主体模板 × 250+ 种名称组合,并带有随机化的返回值、循环计数和字符串字面量。它们散布在功能核心周围,以增加噪声比例。 ## 环境要求 - **Python 3.8+** - **PHP 8.x CLI** — 供生成器在构建时用于计算 bcrypt 哈希 ``` # Verify python3 --version php --version ``` ## 安装 ``` git clone https://github.com/franckferman/p0wnyShellX cd p0wnyShellX ``` 无需安装任何依赖项。`p0wnyShellX.py` 仅使用 Python 标准库。 ## 使用方法 ``` python3 p0wnyShellX.py [OPTIONS] ``` ### 选项 | 标志 | 简写 | 默认值 | 描述 | |---|---|---|---| | `--password` | `-p` | `changeme666` | 登录密码 | | `--user` | `-u` | `sysadmin` | 登录用户名 | | `--output` | `-o` | `shell.php` | 输出文件路径 | | `--junk` | `-j` | 随机 20–80 | 垃圾函数的数量 (最大 200) | | `--theme` | `-t` | 随机 | CSS 主题: `infra-dark`, `corporate-blue`, `matrix` | | `--seed` | `-s` | — | 固定 RNG 种子,用于生成可重现的输出 | | `--no-junk` | — | false | 禁用垃圾函数生成 | | `--transport` | — | `plain` | AJAX 编码: `plain` / `mimic` / `rc4` | ### 示例 ``` # Minimal — 仅 password python3 p0wnyShellX.py -p "MyPass123!" -o shell.php # Full control python3 p0wnyShellX.py \ -p "MyPass123!" \ -u operator \ -j 60 \ -t matrix \ -o /tmp/shell_$(date +%s).php # Reproducible (跨 run 输出相同 — 用于测试) python3 p0wnyShellX.py -p "MyPass123!" --seed 42 -o shell.php # Minimal output (无垃圾数据,生成最快) python3 p0wnyShellX.py -p "MyPass123!" --no-junk -o shell.php # Corporate blue theme,自定义 username python3 p0wnyShellX.py -p "MyPass123!" -u webmaster -t corporate-blue -o shell.php # Mimic mode — 随机 param names,标准 base64,融入正常 web 流量 python3 p0wnyShellX.py -p "MyPass123!" --transport mimic -o shell.php # RC4 mode — RC4 + shuffled base64 alphabet,每次 build 唯一,WAF-blind python3 p0wnyShellX.py -p "MyPass123!" --transport rc4 -o shell.php ``` ## Shell 命令 部署并通过身份验证后,该 shell 支持: | 命令 | 描述 | |---|---| | `<任意命令>` | 执行 shell 命令,并显示输出 | | `cd /path` | 更改工作目录 (跨命令保持不变) | | `download /path/to/file` | 将文件下载到浏览器 | | `upload /remote/path` | 通过浏览器对话框上传本地文件 | | `clear` | 清除终端输出 | | `Tab` | 自动补全文件和命令 | | `↑ / ↓` | 命令历史导航 | | `Ctrl+L` | 清屏 | | `Ctrl+C` | 取消当前输入 | | `Ctrl+U` | 清除输入行 | ## CSS 主题 | 主题 | 外观 | 适用场景 | |---|---|---| | `infra-dark` | 深色背景上的绿色 — "Resource Monitor" | 常规 Linux 基础设施 | | `corporate-blue` | 深色背景上的蓝色 — "InfraOps Console" | 企业环境 | | `matrix` | 黑色背景上的绿色 — "SysCore Terminal" | 高对比度 / 经典风格 | 省略 `--theme` 可让生成器在每次运行时随机选择一个。 ## Exec 回退链 该 shell 每次运行都会以随机顺序尝试执行方法 (这是特征差异的另一个来源): - `exec()` - `shell_exec()` - `system()` + 输出缓冲 - `passthru()` + 输出缓冲 - `popen()` + `fread()` 如果第一个方法被 `disable_functions` 禁用,它会自动回退到下一个方法。 ## CI/CD 每次推送到版本标签 (`v*.*.*`) 都会触发 GitHub Actions 工作流,它会: 1. 安装 Python 3.11 和 PHP 8.3 2. 使用默认凭据生成一个示例 shell 3. 运行 `php -l` 语法验证 4. 验证是否不存在静态特征 5. 发布一个 GitHub Release,并将 `p0wnyShellX.py` 和示例 shell 作为资产附件 在每次推送/PR 时,CI 还会运行多态性验证套件: - 生成 7 个 shell (包含所有主题、垃圾代码级别和传输模式) - 检查所有的 PHP 语法 - 确认没有保留静态特征 - 确认连续两次运行产生不同的输出 - 验证 mimic 传输使用随机化的参数名称 - 验证 rc4 传输注入了 `tEnc`/`tDec` 并且没有明文参数名称 ## 安全提示 - 生成文件中的 bcrypt 哈希在没有暴力破解的情况下是不可逆的 - 针对用户名的 `hash_equals` 可防止时序预言机攻击 - `password_verify` 在进行密码比较时是常量时间的 - Session 使用了 `cookie_httponly`, `use_strict_mode`, `cookie_samesite: Lax` - 密码错误会触发 400–700 毫秒的随机延迟 (防暴力破解) ## 交互式命令构建器 **[franckferman.github.io/p0wnyShellX](https://franckferman.github.io/p0wnyShellX/)** — 基于浏览器的工具,用于配置并复制 `p0wnyShellX.py` 命令。包含预设选项卡 (快速、infra-dark、corporate、matrix、minimal) 以及带有 password/user/theme/transport/junk/output 输入项的实时自定义构建器。 ## 法律免责声明 本工具仅供**授权的渗透测试、红队交战和安全研究使用**。仅对你拥有或获得明确书面许可进行测试的系统使用它。未经授权对你不拥有的系统使用是非法行为。作者对滥用行为不承担任何责任。 ## 许可证 GNU Affero General Public License v3.0 — 见 [LICENSE](LICENSE)。
标签:OpenVAS, PHP, Python, WebShell, 数据可视化, 无后门, 逆向工具