Skip to content

怎么在 Exploit 中使用 PhpEXE 进行任意文件上传

L edited this page May 8, 2022 · 1 revision

任意文件上传在 Web 应用程序中非常普遍, 可被滥用以上传恶意文件, 然后危及服务器. 通常, 攻击者会根据支持的任何服务器端编程语言来选择有效负载. 因此, 如果易受攻击的应用程序使用 PHP, 那么显然支持 PHP, 因此一个简单的选择是使用 PHP 有效负载, 例如 Metasploit 的 PHP Meterpreter. 但是, PHP Meterpreter 的效果与 Windows 的 Meterpreter 不同. 因此, 实际上, 你可能希望升级到更好的 shell, 这在此过程中涉及额外的手动工作. 那么为什么要限制你的有效 payload 选项呢? 对于这种情况, 你应该使用 PhpEXE mixin. 它在 PHP 中充当有效负载阶段, 将最终的恶意可执行文件写入远程文件系统, 然后在使用后自行清除, 因此不留痕迹.

条件

要使用 PhpEXE mixin, 应满足一些典型的可利用要求:

  • 你必须在 Web 服务器上找到可写位置.
  • HTTP 请求也应该可以读取相同的可写位置.

注意: 对于任意文件上传漏洞, 通常有一个包含上传文件的目录, 并且是可读的. 如果错误是由于目录遍历引起的, 那么临时文件夹 (来自操作系统或 Web 应用程序) 将是你的典型选择.

使用方法

  • 首先将 mixin 包含在 MetasploitModule 类的范围内, 如下所示:
include Msf::Exploit::PhpEXE
  • 使用 get_write_exec_payload 生成有效负载 (使用 PHP 暂存器)
p = get_write_exec_payload

如果你正在使用 Linux 目标, 则可以将 unlink_self 设置为 true, 这将自动清除可执行文件:

p = get_write_exec_payload(:unlink_self=>true)

在 Windows 上, 你可能无法清除可执行文件, 因为它可能仍在使用中. 如果无法自动清理恶意文件, 则应始终警告用户它们在哪里, 以便他们稍后在渗透测试期间手动清理.

此时可以上传 get_write_exec_payload 生成的 payload, 然后通过 GET 请求调用. 如果你不知道如何发送 GET 请求, 请参考以下文章: 使用 HTTPClient 发送 HTTP 请求

参考

https://github.com/rapid7/metasploit-framework/blob/master/lib/msf/core/exploit/php_exe.rb

Clone this wiki locally