Contenu connexe Similaire à スコアサーバーに起きた脆弱性で学ぶWebセキュリティ (20) スコアサーバーに起きた脆弱性で学ぶWebセキュリティ1. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
練習問題のScoreServerで学ぶ
ウェブセキュリティ
@nomuken
2. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
Agenda(このスライドの)
1. 自己紹介
2. 楽しいインターネット
3. Webの脆弱性のお話
4. 練習問題の答え合わせ
3. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
1.自己紹介
4. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
自己紹介
●
Nomuken (@nomuken)
●
ArchLinuxとごちうさと初音ミクが好き
●
CTFとか面白いけどマジわからない系男子
●
調子乗ってmlabCTFやったらTDUCTFの主催になっていた
●
大学2年生 (あと3日で3年生)
●
好きな脆弱性はディレクトリトラバーサルとOSコマンドイン
ジェクション
5. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
2.楽しいインターネット
6. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
楽しいインターネット
7. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
楽しいインターネット
●
練習問題を公開して沢山のアクセスが来ました
●
GEKI-YABA
8. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
来訪者の皆様
●
ShellShock
●
機械的なアクセス
9. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
来訪者の皆様
●
何らかのペネトレーションツール(と思われる物)の利用
10. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
来訪者の皆様
●
SQLi勢(とXSS勢)
11. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
来訪者の皆様
●
alert勢
12. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
来訪者の皆様
●
CSRF勢
13. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
来訪者の皆様
●
admin勢
14. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
_人人人人人人人人人人人人人_
> 後半,同じ人じゃねぇか <
 ̄Y Y Y Y Y Y Y Y Y Y Y Y Y^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ̄
15. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
感想
●
…… ……あぁ 狙われているなぁ
●
攻撃成立しちゃってんじゃねぇか,やだー
16. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
極めつけ
●
"GET /question/?%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E9%96%8B
%E5%82%AC%E3%80%81%E3%81%8A%E5%BE
%85%E3%81%A1%E3%81%97%E3%81%A6%E3%81%8A%E3%82%8A%E3%81%BE
%E3%81%99%E2%98%86%EF%BC%88%E3%82%9D%CF%89%E3%83%BB%EF
%BC%89v HTTP/1.1"
17. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
……つまり
●
「リモート開催、お待ちしております☆(ゝω・)v」
●
結構スマートかつさり気なくてカッコいい
●
……もしかして?
18. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
余談
●
載せてるとキリがない量で攻撃がありました
19. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
……というわけで
●
スコアサーバーのWebっぽい脆弱性からXSSとSQLiについて話
します
●
やぎはしゅ先生によるXSSとSQLiの話はCTF4bで聞こう!
20. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
3.Webの脆弱性のお話
21. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
……の前に
●
攻撃者は何がしたい?
●
例えば,先ほど見せた攻撃は何のためにする?
22. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
攻撃者の目的(Web関連において)
●
サーバーを奪取する
→自分の操作を増幅してくれるbotにしたい,bitcoinマイニングに使
……いたい
●
情報を奪いたい
……→クレジットカード番号,個人情報,パスワード
●
実力誇示
→これをする実力があると見せつける(過激派組織に多い?)
23. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
……目的を達成するために
●
” ”ご存知の通り, 作者の粗 を探し,そこを踏み台にする.
→その粗が「XSS」だったり「SQLi ……」だったり
●
その粗こそ脆弱性
25. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
XSS(クロスサイトスクリプティング)
●
javascriptでよしなにする
●
解説はどう考えたってxss.moeな人がやるべきかもしれない
26. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
どういったものか
●
ウェブページ内で好きなjavascriptが実行できる.
→つまりブラウザでできることは大抵できる
●
目的としては,ページの書き換え,Cookieを盗んだり等
27. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
……ところで
●
これ好きな人いますか?(例をphpで書きます)
28. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
_人人人人人人人人_
> 目を背けない <
 ̄Y^Y^Y^Y^Y^Y^Y ̄
29. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
phpのコード
(略)
<body>
<h1>xss</h1>
<hr>
<form method="get">
<input type="text" name="s" value="<?php echo $_GET["s"];?>">
<button type="submit">Go</button>
</form>
</body>
(略)
30. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
……つまり
●
GETで与えられたパラメータ(?s=hoge)をvalueに表示するプ
ログラム.
→検索機能とかがあるけれどサイトでよくある
●
適切にエスケープされてないがためにhtmlコードを渡すことが
できる
→javascriptを埋め込める
31. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
こんな値で送信する
●
「” autofocus onfocus=”alert('yagihashoo');」
→送信してページを開いた瞬間にXSSと表示される
33. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
原理
●
<input type="text" name="s" value=" $_GET['s'] ">に注目
●
先ほどの入力を含めると
<input (略)value="" autofocus onfocus="alert('yagihashoo');">
34. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
出来上がったものを考える
●
valueの中身は今のところ興味ないのでひとまず終了("を入れ
る)する
●
autofocusでロードするとすぐに選択されるようになっている
●
イベントハンドラのonfocusで,対象のフォームが選択された
時,任意のjavascriptを実行する
35. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
……結果的に
●
ページ開いた瞬間にjavascript実行できちゃいますね
●
ちなみに,単純にscriptタグを埋め込むことも出来ます.
→ "><script>alert('yagihashoo');</script><!--
36. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
原因
●
文字のエスケープ漏れによって発生します.
→適切にエスケープをしましょう
→でも,オレオレなエスケープ関数は作らないこと.漏れが
あったらどうする?
37. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
……攻撃者的には
●
フォームに「特別な意味を持つ文字」を送信して表示された結
果からどのような文字を入れるべきかを考えます.
平均的な一般(?)攻撃者
" ' >< & ...
' " > < &
38. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
まとめ
●
XSSとはページにjavascriptを埋め込めてしまう脆弱性
●
原因はユーザの入力文字列をエスケープできていないこと
●
そもそもあるライブラリもしくは,フレームワークを利用して
安全にエスケープしていきましょう
●
ユーザーはほぼ全員が敵と考えるほうが無難か?
40. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
SQLi(SQLインジェクション)
●
データベースを扱うSQLに起因する脆弱性です.
●
xss.moeなh(ry
41. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
どういったものか
●
存在するSQL文を全く別の意味に変え,想定するものとは別の
操作を出来てしまう脆弱性
●
目的としては,脆弱なWebアプリからユーザとパスワードを盗
……む,認証を通過する 等
42. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
phpのコード
$sql = "SELECT * FROM users WHERE id='".$_GET['s']."';";
$stmt = $pdo->query($sql);
foreach( $r as $stmt){
$article['title'] = $s['title']
...
}
43. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
……つまり
●
一応記事を検索するプログラムのつもり.タイトルからキー
ワードが含まれる記事を探してきて表示をする.
●
適切にエスケープがされていないため,SQL文を改変すること
ができる.
44. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
こんな値を送信する
●
「' union all select 1,sql,1 from sqlite_master;--」
→データベース内に登録されている全てが表示された後,sql文
が表示される.
●
なお,ここではsqliteを想定します
46. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
何が起きた?
●
クエリに注目
SELECT * FROM users WHERE id='' union all select 1,sql,1
from sqlite_master;--';
●
任意のテーブルからデータを取り出せた!
47. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
解説
●
「' 」でidに対する検索文字列を終了する
●
「union all select 」でテーブルの連結を行う
→他のテーブルから値を取り出し連結する
●
「1,sql,1」で1という値とsqlカラムの内容を取り出す
→ちなみに,3つカラムを指定しているのは,そもそものusersと数を合わせ
ているため
●
「from sqlite_master;--」でsqliteの各種データを持つテーブルにアクセス
48. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
原因
●
XSSと同様で文字列に対して適切にエスケープされていない
→なお,XSSへのエスケープとSQLへのエスケープは全く違う
49. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
対策
●
適切なエスケープを行いましょう
→SQLを書かなくても扱えるようなものを利用すると良いです
→でなくても,プリペアードステートメントの利用を!
→オレオレエスケープは絶対にダメ!
●
SQL文を覚えることも大切です
→攻撃が分かれば対策も取れるはず
50. TDU CTF 2014 Satellite in ConoHa
HashTag - #tductf
……攻撃者としては
●
SQLにとって特別な文字を入力しその反応を見るのが良いです
→多くの場合「'」や「"」 ……でエラーが出る はず.
● どのデータベースを利用しているか調べるのも重要です
→コメント文字の扱いを見るのも良いです.
sqliite → 「#」はコメントにならない(エラーにならない)
mysql → 「#」はコメントになる(エラーになる)