昨日、誰かがasp.net MVCアプリケーションの「プロフィール画像のアップロード」フォームを介して.jpgファイルとしてサーバーに this PHP code をアップロードしたことを発見しました。攻撃はいくつかの理由で失敗したと思います(画像にはランダムなファイル名が付けられ、サイズが変更され、非実行ディレクトリに保存されます)。サイズ変更に失敗した場合に一時ファイルのクリーンアップに失敗したため、ファイルは残っていましたが、これを修正しました。
しかし、この攻撃の次のステップが何であるか理解できないのではないかと心配しています...たとえば、悪意のあるPHPコードが含まれている.jpgファイルをWindows/IISに正常にアップロードしたとしましょうサーバー、そして彼はファイルのURLを知っていました。それで?その.jpgファイルを画像ではなくIISコードとして解釈するには、PHPを取得する必要がありますよね?それを達成するために彼の計画は何だったのでしょうか?
私が考えることができる唯一のことは、それがApacheサーバーであり、.phpファイルがフィルターで除外されていたが、.htaccessファイルはフィルターで除外されていなかった場合、彼はおそらくそれを管理できたでしょう。 IISで機能する可能性のある同等のアプローチはありますか?
考えられる方法の1つは、何とかしてそれを含めようとすることです。多くのアドオンフレームワークは、任意のPHPコードファイルを実行できます。攻撃者がそのようなアドオンフレームワークを見つけることができた場合、ファイルへのパスを与えることができます。 PHPとして実行されます。ファイル拡張子は関係ありません。
ファイル名とその保存場所を制御できる限り1、それは問題ではありません。基本的には、既存のphpファイルを置き換えて、次回の実行時に代わりにコードが実行されるようにすることもできます。
彼らが試すことができるもう1つのトリックは、サーバーにファイルを実行させることです。 PHPは、ハッカーが通常のHTTP経由で取得できない権限で実行されます。攻撃者はfoo.php
をアップロードする可能性があり、サーバーはそれをimages/foo.php
に移動します。これで、攻撃者がページにアクセスします。これは、ファイル名を(再度)制御するか、.htaccess
を設定して画像ディレクトリのPHPを無効にする)で防ぐことができます。
サイトがrun.php?name=abc.php
のフォームのページにアクセスすると「abc.php」が表示または含まれるフォームの場合は、特に注意する必要があります。このような場合は、GET
パラメーターを制限して、特定のファイルのみを実行できるようにします。これは、ユーザーからの入力に基づいて一部のPHPファイルを含むか実行するアプリケーションのすべての部分に適用されます。これらを精査し、ユーザーがシステムにファイルの外部でファイルを実行するように強制できないことを確認してください実行したいもの。
1これには、ファイルが../../foo.jpg
または(シャダー)../index.php
として保存されないようにすることも含まれます。
それはあなたがそこで見つけた興味深いスクリプトです。私が気づいたことの1つは、.jpgファイルを処理するようにmod-phpを登録している場合は、画像が表示されることです。
この写真の目的はわかりませんが、興味深い機能です。
とにかく、スクリプトはリモートシェルのように見えます。私はほぼすべての点でマニッシュアースに強く反対します。 AJヘンダーソンの答えははるかに優れています。ファイル拡張子が何であるか、どこに保存されているかに関係なく、PHP will try指示された場合は実行します。攻撃者がインクルードされたファイルへのパスを制御できる場合、攻撃者はこのスクリプトを実行できます。