{{#include ../../banners/hacktricks-training.md}} **查看此技术的完整细节 [https://gynvael.coldwind.pl/download.php?f=PHP_LFI_rfc1867_temporary_files.pdf](https://gynvael.coldwind.pl/download.php?f=PHP_LFI_rfc1867_temporary_files.pdf)** ## **PHP 文件上传** 当 **PHP** 引擎接收到包含根据 RFC 1867 格式化的文件的 **POST 请求** 时,它会生成临时文件以存储上传的数据。这些文件对于 PHP 脚本中的文件上传处理至关重要。如果需要在脚本执行之外的持久存储,必须使用 `move_uploaded_file` 函数将这些临时文件移动到所需位置。执行后,PHP 会自动删除任何剩余的临时文件。 > [!NOTE] > **安全警报:攻击者如果知道临时文件的位置,可能会利用本地文件包含漏洞通过在上传过程中访问该文件来执行代码。** 未经授权访问的挑战在于预测临时文件的名称,该名称是故意随机化的。 #### 在 Windows 系统上的利用 在 Windows 上,PHP 使用 `GetTempFileName` 函数生成临时文件名,形成类似 `\
.TMP` 的模式。值得注意的是:

- 默认路径通常是 `C:\Windows\Temp`。
- 前缀通常是 "php"。
- `` 代表一个唯一的十六进制值。由于该函数的限制,仅使用低 16 位,因此最多可以生成 65,535 个具有固定路径和前缀的唯一名称,使暴力破解成为可能。

此外,在 Windows 系统上,利用过程更为简化。`FindFirstFile` 函数中的一个特性允许在本地文件包含 (LFI) 路径中使用通配符。这使得可以构造如下的包含路径以定位临时文件:
```
http://site/vuln.php?inc=c:\windows\temp\php<<
```
在某些情况下,可能需要更具体的掩码(如 `php1<<` 或 `phpA<<`)。可以系统地尝试这些掩码以发现上传的临时文件。

#### 在GNU/Linux系统上的利用

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

{{#include ../../banners/hacktricks-training.md}}