ホームページ >バックエンド開発 >PHPチュートリアル >Webセキュリティファイルアップロードの脆弱性攻撃と防御方法
1. ファイル アップロードの脆弱性と WebShell の関係
ファイル アップロードの脆弱性とは、ネットワーク攻撃者が実行可能ファイルをサーバーにアップロードして実行することを意味します。ここにアップロードされるファイルは、トロイの木馬、ウイルス、悪意のあるスクリプト、WebShell などである可能性があります。この攻撃方法は最も直接的かつ効果的であり、一部のファイル アップロードの脆弱性を悪用する技術的しきい値は非常に低く、攻撃者が簡単に実行できます。
ファイル アップロードの脆弱性自体は非常に有害な脆弱性であり、WebShell はこの脆弱性の利用を無限に拡大します。ほとんどのアップロードの脆弱性が悪用された後、攻撃者は WebShell を離れ、その後のシステムへの侵入を容易にします。攻撃者が影響を受けるシステムに WebShell を配置または挿入すると、その WebShell を使用して、サービス内でやりたいことをより簡単かつ秘密裏に実行できるようになります。
ここで、アップロードの脆弱性の悪用には WebShell が使用されることが多く、WebShell の埋め込みは単なるファイルのアップロードをはるかに超えていることに注意してください。
1 Webshell の概要
WebShell は、asp、php、jsp、cgi などの Web ページの形式で存在するコマンド実行環境です。 Webバックドアと呼ばれます。攻撃者は Web サイトに侵入した後、通常、これらの ASP または PHP バックドア ファイルを Web サイト サーバーの Web ディレクトリ内の通常の Web ページ ファイルと混合し、ブラウザを使用してこれらのバックドアにアクセスし、Web サイトを制御するためのコマンド実行環境を取得します。サーバーの目的 (ファイルのアップロード、ダウンロード、変更、データベースの操作、任意のコマンドの実行など)。
WebShell バックドアは高度に隠蔽されており、ファイアウォールを簡単に通過できます。WebShell にアクセスすると、システム ログは残されませんが、Web サイトの Web ログに一部のデータ送信記録が残るだけです。経験の浅い人にとっては簡単ではありません。侵入の痕跡が見つかりました。攻撃者は、WebShell を通常のファイルに隠したり、ファイルの時刻を変更して隠蔽性を高めたり、一部の関数を使用して WebShell をエンコードしたり結合したりして、検出を回避することもできます。さらに、一文のトロイの木馬ポニーを介してより強力なマルウェアを送信すると、アプリケーション自体による検出をより簡単に通過できます。 は最も一般的でオリジナルのポニーであり、これに基づいて など。
2 ファイル アップロードの脆弱性の原則
ほとんどの Web サイトとアプリケーション システムにはアップロード機能がありますが、一部のファイル アップロード機能の実装コードでは、ユーザーがアップロードするファイルのサフィックスを厳密に制限しておらず、このファイル タイプを使用すると、攻撃者は任意の PHP ファイルを Web アクセス可能なディレクトリにアップロードし、これらのファイルを PHP インタープリタに渡し、リモート サーバー上で任意の PHP スクリプトを実行することができます。
システムにファイル アップロードの脆弱性が存在すると、攻撃者はウイルス、トロイの木馬、WebShell、その他の悪意のあるスクリプト、またはスクリプトを含む画像をサーバーにアップロードすることができ、これらのファイルは攻撃者のその後の攻撃を容易にします。特定の脆弱性に応じて、ここにアップロードされるスクリプトは、通常のサフィックスを持つ PHP、ASP、および JSP スクリプト、または改ざんされたサフィックスを持つこれらのタイプのスクリプトになります。
アップロードされたファイルが ウイルスまたはトロイの木馬 の場合、主に ユーザーや管理者をだましてダウンロードして実行させたり、自動的に直接実行させたりするために使用されます ;
アップロードされたファイルは WebShell であり、攻撃者 はこれらの Web バックドアを通じてコマンドを実行し、サーバーを制御できます。
アップロードされたファイルが ## の場合#その他の悪意のあるスクリプト、攻撃者 スクリプトは攻撃のために直接実行される可能性がある;アップロードされたファイルが
悪意のある画像の場合、画像スクリプトが含まれている可能性があります。これらの画像を読み込むかクリックすると、スクリプトがサイレントに実行されます;アップロードされたファイルが通常のサフィックスを装った
悪意のあるスクリプトである場合、攻撃者 は、ローカル ファイル インクルードの脆弱性を利用して、ドキュメント を実行できます。たとえば、bad.php ファイルの名前を bad.doc に変更してサーバーにアップロードし、PHP の include、include_once、require、require_once などの関数を使用してファイルをインクルードして実行します。 悪意のあるファイルをアップロードする主な理由は 3 つあります:
ファイルアップロード時の検査不足。ファイル形式のチェックは実行されません。一部のアプリケーションはクライアント側でのみチェックされますが、プロの攻撃者の目から見ると、ほとんどすべてのクライアント側のチェックはチェックなしに等しいため、攻撃者は NC や Fiddler などのブレークポイント アップロード ツールを通じてクライアント側のチェックを簡単にバイパスできます。一部のアプリケーションはサーバー側でブラックリスト チェックを実行しますが、大文字と小文字を無視する場合があります。たとえば、.php を .Php に変更するとチェックを回避できますが、一部のアプリケーションはサーバー側でホワイトリスト チェックを実行しても無視します。
図 4 WebShell バックドアへのアクセス成功
4 ファイル アップロードの脆弱性防御
まず、アップロードされたファイルは次のとおりです。 Webコンテナからアクセスされる 説明と実行。したがって、ファイルがアップロードされるディレクトリは、Web コンテナによってカバーされるパスである必要があります。
2 番目に、ユーザーは Web からこのファイルにアクセスできます。ファイルがアップロードされても、ユーザーが Web 経由でファイルにアクセスできない場合、または Web コンテナにスクリプトを解釈させることができない場合、そのファイルは脆弱性とは言えません。
最後に、ユーザーがアップロードしたファイルの内容がセキュリティチェック、フォーマット、画像圧縮などの機能によって変更されている場合も、攻撃が失敗する可能性があります。
ファイルのアップロードの脆弱性を防ぐためのいくつかの一般的な方法。
1. ファイル アップロード用のディレクトリは実行不可能に設定されます。
攻撃者がアップロードしたとしても、Web コンテナがディレクトリ下のファイルを解析できない限り、スクリプト ファイルを削除してもサーバー自体は影響を受けないため、これは非常に重要です。
2. ファイル タイプの決定
ファイル タイプを決定する際には、MIME タイプ、サフィックス チェック、その他の方法を組み合わせて使用できます。ファイル タイプのチェックでは、ホワイトリスト方式が強く推奨されますが、ブラックリスト方式は信頼性が低いことが何度も証明されています。さらに、画像処理では、圧縮機能やサイズ変更機能を使用して、画像処理中に画像に含まれる可能性のある HTML コードを破棄することができます。
3. 乱数を使用してファイル名とファイル パスを書き換えます
ファイルのアップロードを実行するには、ユーザーがファイルにアクセスできる必要があります。 。環境によっては、ユーザーはアップロードできますが、アクセスできません。乱数を使用してファイル名とパスを書き換えると、攻撃コストが大幅に増加します。次に、shell.php.rar.rar やcrossdomain.xml などのファイルは、名前が変更されるため攻撃できなくなります。
4. ファイル サーバーのドメイン名を別途設定する
ブラウザの同一オリジン ポリシーにより、クライアント側の一連の攻撃は無効になります。 、crossdomain.xml のアップロードなど、JavaScript を含む XSS エクスプロイトなどのアップロードの問題が解決されます。
l システム開発段階での防御
システム開発者は、特に PHP 言語を使用してシステムを開発する場合、強いセキュリティ意識を持つ必要があります。システムのセキュリティは、システム開発段階で十分に考慮する必要があります。ファイル アップロードの脆弱性については、クライアント側とサーバー側の両方でユーザーがアップロードしたファイル名とファイル パスを厳密にチェックすることが最善です。クライアント側のチェックは、熟練した攻撃者がツールを使用してバイパスすることができますが、一部の基本的なテストをブロックすることもできます。サーバー側の検査には、大文字化やその他の方法によるバイパスを防ぐことができるホワイトリスト フィルタリング方法を使用するのが最善です。
以上がWebセキュリティファイルアップロードの脆弱性攻撃と防御方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。