ホームページ バックエンド開発 PHPチュートリアル Webセキュリティファイルアップロードの脆弱性攻撃と防御方法

Webセキュリティファイルアップロードの脆弱性攻撃と防御方法

Jun 06, 2019 pm 03:00 PM
php ウェブセキュリティ ファイルのアップロード 抜け穴 予防措置

Webセキュリティファイルアップロードの脆弱性攻撃と防御方法

1. ファイル アップロードの脆弱性と WebShell の関係

ファイル アップロードの脆弱性とは、ネットワーク攻撃者が実行可能ファイルをサーバーにアップロードして実行することを意味します。ここにアップロードされるファイルは、トロイの木馬、ウイルス、悪意のあるスクリプト、WebShell などである可能性があります。この攻撃方法は最も直接的かつ効果的であり、一部のファイル アップロードの脆弱性を悪用する技術的しきい値は非常に低く、攻撃者が簡単に実行できます。

ファイル アップロードの脆弱性自体は非常に有害な脆弱性であり、WebShell はこの脆弱性の利用を無限に拡大します。ほとんどのアップロードの脆弱性が悪用された後、攻撃者は WebShell を離れ、その後のシステムへの侵入を容易にします。攻撃者が影響を受けるシステムに WebShell を配置または挿入すると、その WebShell を使用して、サービス内でやりたいことをより簡単かつ秘密裏に実行できるようになります。

ここで、アップロードの脆弱性の悪用には WebShell が使用されることが多く、WebShell の埋め込みは単なるファイルのアップロードをはるかに超えていることに注意してください。

1 Webshel​​l の概要

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 に変更するとチェックを回避できますが、一部のアプリケーションはサーバー側でホワイトリスト チェックを実行しても無視します。

Webセキュリティファイルアップロードの脆弱性攻撃と防御方法

図 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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles