LFI2RCE Via temp file uploads

支持 HackTricks

查看此技术的完整细节 https://gynvael.coldwind.pl/download.php?f=PHP_LFI_rfc1867_temporary_files.pdf

PHP 文件上传

PHP 引擎接收到包含根据 RFC 1867 格式化的文件的 POST 请求 时,它会生成临时文件以存储上传的数据。这些文件对于 PHP 脚本中的文件上传处理至关重要。如果需要在脚本执行之外的持久存储,必须使用 move_uploaded_file 函数将这些临时文件移动到所需位置。执行后,PHP 会自动删除任何剩余的临时文件。

安全警报:攻击者如果知道临时文件的位置,可能会利用本地文件包含漏洞通过在上传过程中访问该文件来执行代码。

未经授权访问的挑战在于预测临时文件的名称,该名称是故意随机化的。

在 Windows 系统上的利用

在 Windows 上,PHP 使用 GetTempFileName 函数生成临时文件名,形成类似 <path>\<pre><uuuu>.TMP 的模式。值得注意的是:

  • 默认路径通常是 C:\Windows\Temp

  • 前缀通常是 "php"。

  • <uuuu> 代表一个唯一的十六进制值。由于该函数的限制,仅使用低 16 位,因此在路径和前缀不变的情况下,最多可以生成 65,535 个唯一名称,使暴力破解成为可能。

此外,在 Windows 系统上,利用过程更为简化。FindFirstFile 函数的一个特性允许在本地文件包含 (LFI) 路径中使用通配符。这使得可以构造如下的包含路径以定位临时文件:

http://site/vuln.php?inc=c:\windows\temp\php<<

在某些情况下,可能需要更具体的掩码(如 php1<<phpA<<)。可以系统地尝试这些掩码以发现上传的临时文件。

在 GNU/Linux 系统上的利用

对于 GNU/Linux 系统,临时文件命名中的随机性是强健的,使得名称既不可预测也不易受到暴力攻击。更多细节可以在参考文档中找到。

Last updated