LFI2RCE Via temp file uploads
このテクニックの詳細は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進数値を表します。関数の制限により、下位16ビットのみが使用されるため、一定のパスと接頭辞で最大65,535個の一意な名前が可能であり、ブルートフォースが実行可能です。
さらに、Windowsシステムでは悪用プロセスが簡略化されます。FindFirstFile
関数の特異性により、ローカルファイルインクルージョン(LFI)パスでワイルドカードを使用できます。これにより、次のようなインクルードパスを作成して一時ファイルを特定できます。
特定の状況では、より具体的なマスク(例:php1<<
またはphpA<<
)が必要になることがあります。これらのマスクをシステマティックに試すことで、アップロードされた一時ファイルを発見できます。
GNU/Linuxシステムでの悪用
GNU/Linuxシステムでは、一時ファイルの命名におけるランダム性が強固であり、その名前は予測可能でもブルートフォース攻撃にも弱くありません。詳細は参照文書に記載されています。
Last updated