ホームページ  >  記事  >  テクノロジー周辺機器  >  権限を取得するためのファイルのアップロード方法に関する簡単な説明

権限を取得するためのファイルのアップロード方法に関する簡単な説明

王林
王林転載
2023-04-09 09:11:031095ブラウズ

概要

ファイル アップロードの脆弱性は、アップロード機能を備えたアプリケーションで発生します。アプリケーションがユーザーのアップロード ファイルを制御できない場合、または欠陥がある場合、攻撃者はアプリケーションのアップロード機能の欠陥を悪用して、トロイの木馬をアップロードする可能性があります。ウイルスやその他の有害なファイルをサーバーに送信し、サーバーを制御します。

この脆弱性の原因と危険性

ファイル アップロードの脆弱性の主な理由は、アプリケーションにアップロード機能があるにもかかわらず、アップロードされたファイルが厳格な合法性テストやテストを受けていないことです。機能に欠陥があるため、トロイの木馬ファイルがサーバーにアップロードされます。ファイル アップロードの脆弱性は、悪意のあるコードがサーバーに直接アップロードされる可能性があるため、非常に有害であり、サーバーの Web ページの改ざん、Web サイトのハング、サーバーのリモート制御、バックドアのインストールなどの重大な結果を引き起こす可能性があります。

以下では、ファイル アップロードのいくつかの検証およびバイパス方法について説明します:

1. ローカル検証 (フロントエンド検証)

フロントエンド JS フィルタリングはアップロードの脆弱性を回避します。アプリケーションのため、プログラムはプログラムのバックエンドではなく、フロントエンドの JS コードを通じて検証されるため、フロントエンドの JS コードを変更することで、アップロード フィルタリングをバイパスし、トロイの木馬をアップロードできます。

では、フロントエンド検証であるかどうかを判断するにはどうすればよいでしょうか?個人的には、アップロードしてパケットをキャプチャするときにデータパケットを取得できるかどうか、データが流れているかどうか、アップロードした画像ページにアップロードした画像アドレスが表示されるかどうかなどを確認できるのではないかと考えています。

バイパス: フィルタリング コードを削除し、JavaScript を変更または無効にします。

2. バックエンド検証とバイパス

ファイル アップロードの一般的な検証: サフィックス名 (直接検証)、ファイル、ファイル ヘッダー (間接検証)。

2.1 サフィックス名

2.1.1 ブラックリスト (アップロードが明示的に許可されていないスクリプト形式のサフィックス)

ファイル名フィルタリング バイパスの脆弱性ファイルのアップロードのタイプはブラックリストによって決定され、完全なフィルタリングがないため、攻撃者はブラックリストのタイプ以外にファイルをアップロードする可能性があります。

ブラックリストの判定方法: ファイルをアップロードすると、xxx 形式のファイルのアップロードが許可されていないことを示すメッセージが表示されます。

バイパス: 他の形式 (php5、Phtml、php3) またはファイルケースを使用し、いくつかの干渉シンボルを追加してバイパスを実現することもできます。

2.1.2 .htaccess (擬似静的プロトコル) - 書き換え分析 (Apache でのみ利用可能で、擬似静的モジュールを有効にします)

.htaccess ファイルのアップロードは次のとおりです。 .htaccess を使用して実行 このファイルは、jpg や png などの拡張子が付いているファイルを PHP ファイルとして解析する処理を実現する Web サーバーの機能を設定できます。

.htaccess ファイル (分散構成ファイル) は、ディレクトリごとに構成を変更する方法を提供します。1 つ以上の構成ディレクティブを含むファイルは特定のドキュメント ディレクトリに配置され、ディレクティブは次のディレクトリに適用されます。このディレクトリとそのすべてのサブディレクトリ。 .htaccessはWebサーバーの設定ファイルで、Webサーバーにおける定義ファイルの解析方法やリダイレクトなどの設定を行うことができます。

バイパス方法: まず、1.htaccess ファイルをアップロードします。 2. 写真を再度アップロードします。

2.1.3 スペースのバイパス

バイパス方法: バイパスを実現するには、データ パケット内のファイル サフィックス名の後にスペースを追加します。

2.1.4. バイパス

バイパス方法: スペース バイパス方法と同様に、データ パケット内のファイル サフィックス名の後に . を追加してバイパスを実現します。

2.1.5 ::$data bypass

Windows 独自のプロトコルで、Windows ではファイル名「::$DATA」を指定すると::$DATA の後のデータをファイル ストリームとして、サフィックス名をチェックせずに、::$DATA より前のファイル名を保持します。その目的はサフィックス名をチェックすることではありません。

2.1.6 ループ フィルタリング

バイパス: コードは文字列内の php を何も置き換えません。

例: a.pphphp は ->a.

になります。2.1.7 ホワイトリスト: アップロードできる形式のサフィックスをクリアします (より安全です)

3. ファイル タイプの検証

3.1 ファイル ヘッダーの検出: ファイル ヘッダーの内容情報 (gif89a など)

さまざまなファイルには特定のファイル ヘッダー形式があり、開発者はファイルをチェックしてファイルをアップロードします。ヘッダーはファイル タイプを検出しますが、この検出方法はバイパスすることもできます。対応するファイル ヘッダーがトロイの木馬ファイルのヘッダーに追加されている限り、トロイの木馬ファイルの通常の動作に影響を与えることなく検出をバイパスできます。

一般的なファイル ヘッダーは次のとおりです。

JPEG 0xFFD8FF

PNG0 x89504E470D0A1A0A

GIF 47 49 4638 39 61 (GIF89a)

ラップ方法:

  • ヘッダー情報を変更して欺瞞を実現します。たとえば、画像ファイルのファイル ヘッダーをトロイの木馬のヘッダー ファイルに追加すると、検出を回避できます。
#GIF89a

#

?>

絵馬を作成
  • 画像にトロイの木馬という文を直接挿入してアップロードします。 ——ファイルインクルードの原則を使用します。

cmd コマンドを使用して、通常の画像 1.jpg と、一文のトロイの木馬を含む a.txt ファイルを新しい test.php トロイの木馬ファイルに結合します。

cmd コマンド: 1.jpg/b a.txt test.php をコピーします。

3.2 Content-Type の検出

Content-Type は、ネットワーク ファイルのタイプと Web ページのエンコーディングを定義するために使用され、ファイル受信者にどの形式とエンコーディングであるかを伝えるために使用されます。ファイルを読み取ります。異なるファイルは異なる Content-Type に対応します。たとえば、jpg ファイルの Content-Type は image/jpeg、php ファイルの Content-Type は application/octet-stream です。 Content-Type はデータ パケットのリクエスト ヘッダーにあり、開発者は Content-Type タイプを使用して、ファイルのアップロードが許可されているかどうかを判断します。

バイパス: Content-Type のタイプはパケット キャプチャを通じて改ざんできるため、パケットをキャプチャしてデータ パケットの Content-Type を変更し、Content-Type の判定をバイパスできます。

MIME: タイプを判断してファイルのサフィックス名を推測し、パケット キャプチャ ツールを使用して Content-Type を改ざん (image/pjpeg、image/jpeg、image/gif に変更するなど) できます。 、image/png. フィルタリングをバイパスすることもできます。

4. 内容とその他

4.1 論理的安全性: 条件付き競合 (システム占有に相当)

定義: 競合条件とは、複数のスレッドがロック操作を実行しない、またはロック操作を実行しない場合を指します。同期操作では、同じ共有コード、変数、ファイルなどに同時にアクセスします。操作の結果は、異なるスレッドがデータにアクセスする順序によって異なります。まずファイルをサーバーにアップロードし、サーバーはルールに従って画像を保存するか削除するかを選択します サーバーに保存される前にファイルの正当性がチェックされないという脆弱性があります 保存後にファイルのチェックは行われますが、競合状態の脆弱性を介して、ファイルが渡されます。 ファイルを書き込む機能を持つトロイの木馬をアップロードし、削除する前にアップロードされたトロイの木馬にアクセスして、新しいトロイの木馬を書き込みます。

バイパス: ファイルをサーバーにアップロードした後、ファイル パスへのアクセスを継続します。条件が競合するため、Web シェルをアップロードする目的は達成されます。この脆弱性は、リクエストを送信し、継続的にアップロードすることによって悪用されます。このようなアクセスは、新しいトロイの木馬ファイルを生成し、このファイルに継続的にアクセスするための別のリクエストを送信します。競合状態のエクスプロイトが成功すると、新しいトロイの木馬が生成されます。

4.2 ディレクトリの命名

バイパス: -x.php/.

のように、アップロードの目的を達成するためにサーバーにファイルをフォルダーとして認識させるには、/. サフィックスを追加します。

5. その他の脆弱性

スクリプト関数の脆弱性-cve

CVE-2017-12615

CVE-2015-5254

CVE-2019- 2618

....

これらの脆弱性を悪用する方法については、オンラインでチュートリアルが公開されているので、興味のあるマスターは情報を確認してください。

6. ミドルウェア解析の脆弱性

6.1 IIS 6.0 解析の脆弱性

解析の脆弱性を迅速に判断 /.php でコード化けがないか確認してください。存在する場合は存在し、存在しない場合は存在しません。

6.1.1 フォルダとして実行します

通常のファイル名:image/aa.jpg。

バイパス: image.asp/aa.jpg aa.jpg は asp として解析されます。

6.1.2 ファイルとして実行

通常のファイル名:image.jpg。

バイパス: image.asp;.jpg または xxx.asp;xxx.jpg このファイルは asp として実行されます。

aspをphpに変更すればphpとして実行できるようになります。

7.WAF バイパス

WAF をバイパスするには、次のようなパラメータを変更できることを知る必要があります。

Content-Disposition: 一般的に変更可能。
  • 名前: フォームパラメータ値。変更できません。
  • filename: ファイル名は変更可能です。
  • Content-Type (ファイル独自のタイプ): ファイル MIME、必要に応じて変更します。
  • waf バイパスの核心は、バイパスを試みるために変更できるパラメーター名の後のテストを常に変更することです。
  • 一般的なバイパス方法:

7.1 データ オーバーフロー (ジャンク データの埋め込み)

WAF 検出制限を使用して、大量のジャンク データを追加します。オーバーフローの脆弱性と同様に、干渉データは通常、アップロード パラメータの後に追加できます。ジャンク データとパラメータの間に ; を追加することを忘れないでください。そうしないと、データ パケットでエラーが報告されます。

7.2 シンボルの突然変異 ('";)

プログラム開発の脆弱性を利用して、アップロードの目的を達成するために、データ パッケージ内のアップロード パラメータ内のシンボルを置換、追加、削除します。# など##

例: x.jpg;.php セミコロンはデータの終わりを表します。

7.3 データの切り捨て (

以上が権限を取得するためのファイルのアップロード方法に関する簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。