「白い帽子は、Webセキュリティの話」|研究はインジェクション攻撃を指摘

第7章インジェクション攻撃

エッセンスインジェクション攻撃は、データがコードの実行など、ユーザーが入力したということです。二つの重要な条件がある:まず、ユーザが入力を制御することができる。第二は、ユーザによって入力されたデータをステッチ、実行すべき元のプログラムのコードです。

1、SQLインジェクション

SQLインジェクションは、SQLコマンドが提出したWebフォームに挿入されたか、ドメイン名またはページリクエストクエリ文字列を入力して、最終的には悪質なSQLコマンドを実行するサーバーを欺くされています。SQLインジェクション攻撃は、データベースに対して、比較的一般的な脆弱性を攻撃されています。SQLインジェクションのプロセスでは、サイトのWebサーバーが間違ったエコー、大きな誤差バック機密情報の開示になっている場合、攻撃者はSQLインジェクションを構築するために大きな利便性を提供します。
2、ブラインド(ブラインドインジェクション)

サーバーが間違っエコーないときにブラインドは、インジェクション攻撃が行われます。いいえ、エコーサーバーエラーは、非常に重要な「デバッグ情報を」不足している攻撃者のために、攻撃者は、注入されたSQL文が実行されていることを確認する方法を見つけてはなりません。

最も一般的なブラインド検証方法は、戻りページに基づいて、簡単な構造で、条件文は、SQL文を実行するかどうかを判断するために、変更されています。

カラムは、次のような:ID = 2 = 2 1、攻撃者は、結果ページが空白またはエラーページになり見ることができます。ときに入力されたID = 2、= 1、ページは、SQL文の実行が成功を示し、正常に戻され、SQLの脆弱性IDパラメータの存在を決定することができる場合。

3、タイミングアタック

時間の長さの変化によって、ステートメントが正常に注入が実行されるかどうかを判定することができ、同一の機能をするように戻された結果通常より長く、数回行うことができるように、MySQLは、BENCHMARK()関数を利用します。これは、攻撃はタイミング攻撃ブラインドと呼ばれ、サイドチャネル攻撃です。異なるデータベースでは、同様のベンチマーク()関数があり、Attakタイミングを利用することができます。

4、データベース攻撃手法

SQLインジェクションは、MySQLのバージョンが4であれば、それはTUREを返します、次の通路ペイロードに、データベースの対応するバージョンを推測することができます。

http://www.site.com/news.php?id=5とストリング(@@バージョン、1,1)= 4

このペイロードの下には、労働組合の選択管理者を使用し、それぞれのカラム名のpasswdが存在する、テーブル名の存在を確認しました。

管理者からのid = 5組合すべてを選択1,2,3

ID = 5組合はすべて、1,2を選択し、管理者からのpasswd

sqlmap.pyは非常に良い自動注入ツールです。

5、コマンド実行

加算指令でMYSQLの技術では、コマンドを実行する際に、すなわち、UDF(ユーザー定義関数)、「ユーザ定義関数」を使用することができ、ウェブシェルを導出することによって間接的に行われてもよいです。

図6に示すように、ストアドプロシージャ攻撃

ストアドプロシージャは、CALLを用いて行うか、EXECUTEされなければなりません。

xp_cmdshellを:オーダー実行システム(2005年SQLのクライアントアクセスライセンスではデフォルトで有効になって以降、デフォルトでは無効になっていました)

xp_regread:レジストリを操作することができます。

xp_servicecontrol:サービスを停止し、ユーザーが開始することができます

xp_dirtree:ディレクトリツリーを得ることができます

xp_loginconfig:サーバーの情報セキュリティをゲット

ストアドプロシージャ自体も本注入脆弱性であってもよいです。

7、コーディングの問題

「ワイド文字」を使用したデータベースは、脆弱性のいくつかの意図を持っていない場合があります。例えば、GBKコーディング、oxbf27とoxbf5cが文字(全角文字)とみなされるときMYSQLを使用しました。

最高の統一されたデータベースの文字はUTF-8に設定します。

8、SQLインジェクションに対する防御の権利

  1. すべてのSQLインジェクションの脆弱性を探します。
  2. これらの脆弱性を修復します。

一般的に、防衛SQLインジェクションへの最善の方法、つまり、プリペアドステートメントを使用して、変数をバインドします。

ストアドプロシージャの使用:データベースに定義されたSQL文を、ストアドプロシージャで、動的SQLステートメントを使用しないようにしてみてください。やむを得ない場合は、厳密な入力フィルタは、ユーザ入力データを処理するために使用されるか、または符号化機能すべきです。

データの種類を確認します

安全機能の使用

9、その他のインジェクション攻撃

XMLインジェクション:XML噴射がデータコンテンツのxmlを書き換えることにより達成されます。

コードインジェクション:多くの場合、危険なメソッドまたは関数の数によって引き起こされます。評価()、PHP、JSPのダイナミックは、()、システム()。

CRLF注入:キャリッジリターン(CR、ASCII13、\ rの)ラインフィード(LF、ASCII10、の\ n)。

\ Rの\ nは改行のための2つの文字。進エンコーディングは、0x0Aのを0x0Dをしています。

CRLFに対する方法は非常に簡単です、ただ「\ rを」を扱う、「\ n」は、これら2つの文字を予約することができます。

10まとめ

インジェクション攻撃は、アプリケーション「分離のデータとコードの原則」の結果に反している原因。

インジェクション攻撃との戦いでは、単にパッチワークが起こる場所でセキュリティチェック「データとコードの分離の原則」を念頭に置いておく、このような問題を回避することができるようになります。

おすすめ

転載: blog.csdn.net/qq_42646885/article/details/95314190