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

46 lines
4.2 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.

{% hint style="success" %}
AWSハッキングを学び、実践する<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、実践する<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricksをサポートする</summary>
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを送信してください。**
</details>
{% endhint %}
**この技術の詳細は[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は残りの一時ファイルを自動的に削除します。
{% hint style="info" %}
**セキュリティ警告:攻撃者は一時ファイルの場所を知っているため、ローカルファイルインクルージョンの脆弱性を悪用して、アップロード中にファイルにアクセスすることでコードを実行する可能性があります。**
{% endhint %}
不正アクセスの課題は、一時ファイルの名前を予測することにありますが、これは意図的にランダム化されています。
#### 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システムでは、一時ファイル名のランダム性が強固であり、名前は予測不可能であり、ブルートフォース攻撃に対しても脆弱ではありません。詳細は参照された文書に記載されています。