hacktricks/src/pentesting-web/file-inclusion/lfi2rce-via-temp-file-uploads.md

33 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{{#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`関数を使用して一時ファイル名を生成し、`<path>\<pre><uuuu>.TMP`のようなパターンになります。特に:
- デフォルトのパスは通常`C:\Windows\Temp`です。
- プレフィックスは通常「php」です。
- `<uuuu>`は一意の16進数値を表します。重要なことに、この関数の制限により、下位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}}