はじめに
SQL インジェクションは、アプリケーションがデータベースに対して行うクエリに攻撃者が干渉できるウェブセキュリティ上の脆弱性です。一般的に、攻撃者は通常は取得できないデータを閲覧できるようになります。これには、他のユーザーに属するデータや、アプリケーション自体がアクセスできるその他のデータが含まれる場合があります。多くの場合、攻撃者はこれらのデータを変更または削除でき、アプリケーションのコンテンツや動作に永続的な変更を引き起こすことができます。
sqlmap は、SQL インジェクションの脆弱性を検出し、悪用するプロセスとデータベースサーバーの乗っ取りを自動化するオープンソースのペネトレーションテストツールです。強力な検出エンジン、究極のペネトレーションテスター向けの多くのニッチな機能、そしてデータベースのフィンガープリンティングからデータベースからのデータ取得、基盤となるファイルシステムへのアクセス、アウトオブバンド接続を介したオペレーティングシステム上でのコマンド実行まで、幅広いスイッチを備えています。
この実験(Lab)では、--technique オプションを使用して sqlmap でさまざまな SQL インジェクション技術を指定する方法を学びます。これにより、インジェクションに使用するメソッドを sqlmap が試行するものを制御でき、特定の脆弱性をターゲットにしたり、スキャン時間を最適化したりするのに役立ちます。
6 つの SQLi テクニックコード(B, E, U, S, T, Q)を理解する
このステップでは、sqlmap が使用するさまざまな SQL インジェクションテクニックコードについて学びます。sqlmap はさまざまな SQL インジェクションテクニックをサポートしており、--technique オプションでそれらを指定できます。各テクニックは 1 文字で表されます。
6 つの主要な SQL インジェクションテクニックコードは以下の通りです。
- B: ブールベースのブラインド SQL インジェクション。このテクニックは、TRUE または FALSE の結果を返す SQL クエリを送信し、アプリケーションの応答(例:ページのコンテンツ変更)を観察して情報を推測することに依存します。
- E: エラーベースの SQL インジェクション。このテクニックは、データベース構造やデータに関する情報を含むエラーメッセージをデータベースに生成させます。
- U: UNION クエリベースの SQL インジェクション。このテクニックは、
UNIONSQL 演算子を使用して、2 つ以上のSELECTステートメントの結果を単一の結果セットに結合し、攻撃者が他のテーブルからデータを取得できるようにします。 - S: スタッククエリ SQL インジェクション。このテクニックは、攻撃者が単一のクエリで複数の SQL ステートメントを実行することを可能にし、データベースサーバー上で任意のコマンドを実行するためによく使用されます。
- T: 時間ベースのブラインド SQL インジェクション。このテクニックは、TRUE または FALSE の条件に基づいてデータベースを指定された時間だけ一時停止させ、攻撃者が応答時間を観察することによって情報を推測できるようにすることに依存します。
- Q: インラインクエリ SQL インジェクション。このテクニックは、サブクエリを元のクエリに直接注入することを含みます。
これらのテクニックを理解することは、sqlmap を効果的に使用し、SQL インジェクションの根本的な原則を理解するために不可欠です。
--technique=B でブールベースのブラインドテストを強制する
このステップでは、sqlmap にブールベースのブラインド SQL インジェクションテクニックのみを使用させる方法を学びます。これは、ターゲットがこの特定タイプのインジェクションに対して脆弱であると疑われる場合や、単一のテクニックに焦点を当てることでスキャン時間を短縮したい場合に役立ちます。
--technique=B オプションは、sqlmap にブールベースのブラインドインジェクションのみを使用するように指示します。
このオプションを使用して sqlmap を実行するシミュレーションを行いましょう。実際のシナリオでは、http://testphp.vulnweb.com/artists.php?id=1 をターゲット URL に置き換えます。この実験(Lab)では、コマンドを実演するだけです。
ターミナルを開き、以下のコマンドを実行します。
sqlmap -u "http://testphp.vulnweb.com/artists.php?id=1" --technique=B --batch --eta --skip-waf
-u "http://testphp.vulnweb.com/artists.php?id=1": ターゲット URL を指定します。これは既知の脆弱なテストサイトです。--technique=B:sqlmapにブールベースのブラインドインジェクションのみを使用するように強制します。--batch:sqlmapを非対話モードで実行し、デフォルトの選択を受け入れます。--eta: 各出力の到着推定時間を表示します。--skip-waf: Web アプリケーションファイアウォール(WAF)の検出をスキップします。
sqlmap の出力が表示され、主にブールベースのブラインド脆弱性をテストしていることが示されます。出力には、sqlmap がさまざまなペイロードを試行し、応答を分析している様子が表示されます。
_
___ ___ ___ ___
|_ -| . | . | . |
|___|_ |_ |_ |
|_| |_| |_| 3.7-dev (r12345)
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. sqlmap developers assume no liability and are not responsible for any misuse or damage caused by this program.
[*] starting @ 12:00:00 /2023-01-01/
[12:00:00] [INFO] starting sqlmap 3.7-dev (r12345)
[12:00:00] [INFO] testing connection to the target URL
[12:00:01] [INFO] checking if the target is stable
[12:00:01] [INFO] target URL is stable
[12:00:01] [INFO] testing for SQL injection on URL 'http://testphp.vulnweb.com/artists.php?id=1'
[12:00:01] [INFO] testing 'Boolean-based blind - Parameter: id'
...
出力は、sqlmap がブールベースのブラインドテクニックに焦点を当てていることを確認しています。
--technique=T で時間ベースのブラインドテストを強制する
このステップでは、sqlmap に時間ベースのブラインド SQL インジェクションテクニックのみを使用させる方法を学びます。このテクニックは、エラーベースやブールベースのような他の方法が結果をもたらさない場合、特にアプリケーションの応答がインジェクションに関係なく一貫しているシナリオでよく使用されます。
--technique=T オプションは、sqlmap に時間ベースのブラインドインジェクションのみを使用するように指示します。
ターミナルを開き、以下のコマンドを実行します。
sqlmap -u "http://testphp.vulnweb.com/artists.php?id=1" --technique=T --batch --eta --skip-waf
-u "http://testphp.vulnweb.com/artists.php?id=1": ターゲット URL を指定します。--technique=T:sqlmapに時間ベースのブラインドインジェクションのみを使用するように強制します。--batch:sqlmapを非対話モードで実行します。--eta: 到着推定時間を表示します。--skip-waf: WAF 検出をスキップします。
sqlmap の出力が表示され、サーバーの応答に遅延を引き起こすペイロードを注入していることが示されます。この方法は、時間遅延を待つ必要があるため、他の方法よりも遅くなる可能性があります。
_
___ ___ ___ ___
|_ -| . | . | . |
|___|_ |_ |_ |
|_| |_| |_| 3.7-dev (r12345)
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. sqlmap developers assume no liability and are not responsible for any misuse or damage caused by this program.
[*] starting @ 12:00:00 /2023-01-01/
[12:00:00] [INFO] starting sqlmap 3.7-dev (r12345)
[12:00:00] [INFO] testing connection to the target URL
[12:00:01] [INFO] checking if the target is stable
[12:00:01] [INFO] target URL is stable
[12:00:01] [INFO] testing for SQL injection on URL 'http://testphp.vulnweb.com/artists.php?id=1'
[12:00:01] [INFO] testing 'Time-based blind - Parameter: id'
...
出力は、sqlmap が現在時間ベースのブラインドテクニックに焦点を当てていることを確認しています。
--technique=U で UNION クエリベースのテストを強制する
このステップでは、sqlmap に UNION クエリベースの SQL インジェクションテクニックのみを使用させる方法を学びます。このテクニックは、アプリケーションが SQL クエリの結果をページに直接表示する場合に非常に効果的であり、攻撃者がデータベース内の他のテーブルからデータを取得することを可能にします。
--technique=U オプションは、sqlmap に UNION クエリベースのインジェクションのみを使用するように指示します。
ターミナルを開き、以下のコマンドを実行します。
sqlmap -u "http://testphp.vulnweb.com/artists.php?id=1" --technique=U --batch --eta --skip-waf
-u "http://testphp.vulnweb.com/artists.php?id=1": ターゲット URL を指定します。--technique=U:sqlmapに UNION クエリベースのインジェクションのみを使用するように強制します。--batch:sqlmapを非対話モードで実行します。--eta: 到着推定時間を表示します。--skip-waf: WAF 検出をスキップします。
sqlmap の出力が表示され、UNION SELECT ステートメントを注入しようとしていることが示されます。成功した場合、このテクニックはデータベースの構造とデータを迅速に明らかにすることができます。
_
___ ___ ___ ___
|_ -| . | . | . |
|___|_ |_ |_ |
|_| |_| |_| 3.7-dev (r12345)
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. sqlmap developers assume no liability and are not responsible for any misuse or damage caused by this program.
[*] starting @ 12:00:00 /2023-01-01/
[12:00:00] [INFO] starting sqlmap 3.7-dev (r12345)
[12:00:00] [INFO] testing connection to the target URL
[12:00:01] [INFO] checking if the target is stable
[12:00:01] [INFO] target URL is stable
[12:00:01] [INFO] testing for SQL injection on URL 'http://testphp.vulnweb.com/artists.php?id=1'
[12:00:01] [INFO] testing 'UNION query - Parameter: id'
...
出力は、sqlmap が現在 UNION クエリベースのテクニックに焦点を当てていることを確認しています。
--technique=BEUST を使用して複数のテクニックでスキャンを実行する
このステップでは、単一の sqlmap スキャンで複数の SQL インジェクションテクニックを組み合わせる方法を学びます。これは多くの場合、最も実用的なアプローチです。なぜなら、sqlmap が様々な方法を試して脆弱性を見つけることを可能にし、成功の可能性を高めるからです。
複数のテクニックは、--technique= の後にそれぞれのコードを連結することで指定できます。例えば、--technique=BEUST は、sqlmap にブールベース、エラーベース、UNION クエリベース、スタッククエリ、時間ベースのブラインドインジェクションを試すように指示します。
ターミナルを開き、以下のコマンドを実行します。
sqlmap -u "http://testphp.vulnweb.com/artists.php?id=1" --technique=BEUST --batch --eta --skip-waf
-u "http://testphp.vulnweb.com/artists.php?id=1": ターゲット URL を指定します。--technique=BEUST:sqlmapにブールベース、エラーベース、UNION クエリベース、スタッククエリ、時間ベースのブラインドインジェクションを使用するように強制します。--batch:sqlmapを非対話モードで実行します。--eta: 到着推定時間を表示します。--skip-waf: WAF 検出をスキップします。
sqlmap の出力が表示され、指定された各テクニックを体系的にテストしていることが示されます。この包括的なアプローチは、通常、初期スキャンに推奨されます。
_
___ ___ ___ ___
|_ -| . | . | . |
|___|_ |_ |_ |
|_| |_| |_| 3.7-dev (r12345)
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. sqlmap developers assume no liability and are not responsible for any misuse or damage caused by this program.
[*] starting @ 12:00:00 /2023-01-01/
[12:00:00] [INFO] starting sqlmap 3.7-dev (r12345)
[12:00:00] [INFO] testing connection to the target URL
[12:00:01] [INFO] checking if the target is stable
[12:00:01] [INFO] target URL is stable
[12:00:01] [INFO] testing for SQL injection on URL 'http://testphp.vulnweb.com/artists.php?id=1'
[12:00:01] [INFO] testing 'Boolean-based blind - Parameter: id'
[12:00:02] [INFO] testing 'Error-based - Parameter: id'
[12:00:03] [INFO] testing 'UNION query - Parameter: id'
[12:00:04] [INFO] testing 'Stacked queries - Parameter: id'
[12:00:05] [INFO] testing 'Time-based blind - Parameter: id'
...
出力は、sqlmap が現在指定された複数のテクニックをテストしていることを確認しています。
まとめ
この実験では、sqlmap が使用する SQL インジェクションテクニックを指定および制御する方法を習得しました。個々のテクニックコード(B、E、U、S、T、Q)を調査し、ブールベースのブラインド、時間ベースのブラインド、UNION クエリベースのインジェクションなどの特定のメソッドを sqlmap に強制することを実践しました。最後に、より包括的なスキャンのために複数のテクニックを組み合わせる方法を学びました。
sqlmap の --technique オプションを理解し活用することで、脆弱性評価を微調整し、スキャン時間を最適化し、特定の種類の SQL インジェクション脆弱性をより効果的にターゲットにすることができます。このスキルは、効率的かつ正確なペネトレーションテストにとって不可欠です。


