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

4.2 KiB
Raw Blame History

htARTEHackTricks AWS Red Team Expert htARTEHackTricks AWS Red Team ExpertでAWSハッキングをゼロからヒーローまで学ぶ

HackTricksをサポートする他の方法

このテクニックの詳細は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システムでは、一時ファイルの命名におけるランダム性が強固であり、その名前は予測可能でもブルートフォース攻撃にも弱くありません。詳細は参照文書に記載されています。