wwwolf 的 PHP Web Shell
我在使用其他 Web Shell 时经常遇到以下问题:
- 它们使用了新的 PHP 语法特性,与某些目标系统上运行的旧版 PHP 不兼容。
- 它们对远程 URL 做出错误假设,从而破坏 PHP 代码注入或服务器(不)期望的 GET 参数。
- 它们通常只显示标准输出内容,而丢弃了 stderr。
- 它们在输出显示中对特殊字符(如
<)处理不佳。
- 它们不允许文件上传,或者提供的方法不受目标设置支持或被其阻止。
- 它们需要根据目标运行的是类 UNIX 还是 Windows 系统而进行手动修改。
下面是我为解决这些问题所做的尝试。与其他一些解决方案不同,这个方案甚至不打算成为一个 “功能完备的后渗透框架”。它的唯一目标是通过尽可能遵循 KISS 原则,并保持足够的通用性,让你能够在此基础上自由构建所需功能而不受阻碍,从而提供一种稳定、可靠的方式在目标上获得立足点。

WhiteWinterWolf 的 PHP Web Shell:
- 访问可以密码保护。
- 无需任何修改即可兼容类 UNIX 和 Windows 系统。
- 尝试清除 PHP 输出缓冲区(即丢弃被攻击应用已产生的任何“垃圾”代码),并强制终止 PHP 代码执行,从而提供干净、稳定的行为。
- 表单以 POST 请求方式提交,保持与首次访问时完全相同的 URL(包括完全相同的 GET 参数,不增不减)。不做任何假设,因此适用于各种扭曲的代码注入技术。此外,远程服务器可能不会记录 POST 数据,因此可能不会记录在目标上实际执行的命令。
- 应用了合理的默认值:
- 当前工作目录设置为实际的当前工作目录。这还有一个额外好处,就是可以轻松判断远程系统类型(
/var/www/html 对比 C:\Inetpub\wwwroot)。
- 抓取源主机设置为你从目标服务器角度看到的 IP 地址。
- 你可以自由设置工作目录,并且该值会在各条命令之间保持。如果 PHP 的
open_basedir 设置可能限制你在服务器上的移动能力,会显示一条特定的警告信息。
- 有两种不同的方式向目标上传文件:
- 如果远程 PHP 设置允许,可以使用经典的上传表单。
- 从给定主机和 URL 抓取文件(通常是由攻击者控制的主机)。此功能实现了一个非常基本的 HTTP 抓取功能,允许绕过 PHP 的
url_allow_fopen 设置限制。它不处理 HTTP 重定向或身份验证等复杂功能,但可能通过相应添加主机名前缀(tls://203.0.113.37)来处理 SSL/TLS。
- 一个
Clear cmd 链接允许单击即可清除命令输入表单字段并将焦点设置到其上。我觉得这对于在服务器上快速执行几条任意命令很方便,但此功能依赖 JavaScript。如果你想避免使用 JavaScript,可以删除这一行,这不会影响 Web Shell 的其余部分,因为其他任何地方都不使用 JavaScript。
此脚本按给定顺序应用表单设置:
- 当前工作目录。
- 要上传的文件。
- 要执行的命令。
这样可以实现在单个 HTTP 请求中将文件上传到指定目录并立即执行。
更多信息请参见[项目主页][]。
此脚本仅用于安全研究和评估目的。请勿将其用于任何非法用途!