16

私の広告サーバーは週末にハッキングされました。

この記事によると、これは広範囲にわたる問題のようです。

そこに私が考えさせられた何かがあります...

攻撃者は1回の攻撃でサーバーへのログイン権を取得し、悪意を持ってエンコードされた画像をアップロードしました。この画像にはPHPスクリプトが隠されていました。攻撃者は画像を表示することにより、サーバー上でスクリプトを強制的に実行させました

これはどのように可能ですか?GDなどで開いている画像に依存していますか?彼らは画像を装ったスクリプトをアップロードし、どういうわけかそれを含めますか?

4

3 に答える 3

35

次のようなファイルをアップロードするのと同じくらい簡単です

GIF89a<?php
echo 'hi';

アップロード スクリプトがfileinfoを介してコンテンツ タイプをテストする場合、またはファイルを gif として識別するために必要な唯一のパターン/マジック ナンバーであるためmime_content_type()、「GIF 画像データ、バージョン 89a」として認識される場合。 そして、OpenX アップロード スクリプトは明らかに提案されたファイル名を保持していました。つまり、この「イメージ」を foo.php としてサーバーに保存することができました。ここで、スクリプトを介してそのファイルを要求した場合、ウェブサーバーは通常/多くの場合、ファイル名拡張子によってのみコンテンツタイプを決定するため、php スクリプトとして実行されます。GIF89a
http://hostname/uploaddir/foo.php

<FilesMatch "\.php$">
    SetHandler application/x-httpd-php
</FilesMatch>

php は先頭GIF89aをエコーし​​、ブロックを実行し<?php ...code...ます。
<?php ブロックを gif コメントに入れると、少し洗練されますが、基本的には同じです。

于 2010-08-30T00:18:43.983 に答える
5

サーバーは何らかの理由でそのファイルを解析しています。攻撃者は PHP を画像コメントに入れています。

ファイルが画像であることをどのように検証していますか? MIME タイプだけで行う場合、画像ヘッダーを偽造して、その後に必要なものを含めることができると思います。VolkerK には実用的な例があります

完璧な世界では、このような問題を恐れて、PHP を介して一般向けの画像を提供することはありません。

サーバーを使用して画像を直接提供します。これらの画像をPHPなしで提供できるディレクトリに保存することをお勧めします。

それが要点だと思います。間違っている場合は誰かが訂正してください。

于 2010-08-30T00:09:42.800 に答える
2

サーバーの侵害について私が見る唯一の可能性は、 egやその他のストリーム機能includeを介して読み取るのではなく、画像が d になっていることです。readfile

于 2010-08-30T00:05:49.250 に答える