Weitere ähnliche Inhalte
Ähnlich wie Web applicationpenetrationtest その5 (20)
Mehr von Tetsuya Hasegawa (20)
Web applicationpenetrationtest その5
- 3. 3 /84
ツール、言語
◦ Burp Suiteの詳細はその4.pptx 参照
◦ その他のツールの説明はその1.pptx~その3.pptx 参照。
XSS:Cross-site Scripting(前提知識)
問題 & 解き方 & 解答
- 5. 5 /84
情報収集:Reconnaissance
◦ 情報を収集する。(データフロー、フィンガープリント、ソース)
Wireshark、Blind Elephant、httprint
マッピング:Mapping
◦ ターゲットアプリケーションの検査。
Burp Spider、SprAJAX、WebScarab
発見:Discovery
◦ ターゲットアプリケーションの脆弱性の発見。
エクスプロイト:Exploit
◦ 脆弱性を実証する。
SANS SEC542より
- 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 /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 /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を偽装してメール送信したりする(標的型攻撃)。
次のスライドにもう少し攻撃的な例を示す。
- 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>
...
- 16. 16 /8416
Challenge 20 ~ Challenge 36
(重要)セキュリティレベルを最弱にしたIE11でやりました。
セキュリティレベルが高いとかブラウザによっては想定動作に
ならないかも。
- 17. 17 /84
Challenge 20: XSS
http://pentesteracademylab.appspot.com/lab/webapp/xss/1
目的
◦ XSSを使い、alertでcookieを表示する。
Fetchボタンを押すと、
テキストボックスに
入力したテキストが表示される。
- 19. 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 Attributes
https://www.w3schools.com/tags/ref_eventattributes.asp
こんな感じでポップアップが表示される。
あとはCookieを表示してやればよい。
- 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)">
- 22. 22 /84
Challenge 21: XSS II
http://pentesteracademylab.appspot.com/lab/webapp/xss/1
目的
◦ XSSを使い、alertでCookieを表示する。
ヒント
◦ imgタグを使う。
Sendボタンを押すと、
テキストボックスに
入力したテキストが表示される。
- 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している。
詳細は次スライド。
- 26. 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 tags
https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
こんな感じでポップアップが表示される。
あとはCookieを表示してやればよい。
- 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>">
- 29. 29 /84
Challenge 22: XSS III
http://pentesteracademylab.appspot.com/lab/webapp/xss/4
目的
◦ XSSを使い、alertでCookieを表示する。
ドロップダウンリストから
車メーカーを選択し、
Submitボタンを押すと、
車の台数が表示される。
- 31. 31 /84
マッピング:Mapping
発見:Discovery
productをコメントを終端する攻撃スクリプトに書き換える。
書き換えにはBurp Suteを使う。
Burp Proxyの使い方はその4.pptx参照。
このような攻撃スクリプトが考えられる。
攻撃スクリプトの一例
--><input onmouseout="alert(document.cookie)">
- 33. 33 /84
Challenge 23: XSS IV
http://pentesteracademylab.appspot.com/lab/webapp/xss/5
目的
◦ XSSを使い、alertでCookieを表示する。
テキストを入力して
Fetchボタンを押すと
検索結果が表示される。
- 35. 35 /84
マッピング:Mapping
発見:Discovery
valueを終端し、cookieを表示する攻撃スクリプトを入力する。
このような攻撃スクリプトが考えられる。
攻撃スクリプトの一例
"><script>alert(document.cookie)</script>
<input type="text" value=""><script>alert(document.cookie)</script> ...
となって、alertでcookieが表示される。
- 37. 37 /84
Challenge 24: XSS V
http://pentesteracademylab.appspot.com/lab/webapp/xss/6
目的
◦ XSSを使い、alertでCookieを表示する。
グラフが表示されるページ。
- 38. 38 /84
情報収集:Reconnaissance
ソースを見るGoogle Chart APIでグラフを作成している。
怪しい短縮URLがソース内にあった。
復元すると下記のXMLファイルになる。
http://demofilespa.s3.amazonaws.com/chart.xml
このXMLファイルから表示するグラフを生成している。
そのまま表示されるlegentタグに
攻撃スクリプトを注入する方向で検討。
filenameを指定する必要があるみたい。
- 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はダミーです。
ファイルは自分でアップロードしてください。
- 41. 41 /84
Challenge 25: XSS VI
http://pentesteracademylab.appspot.com/lab/webapp/xss/7
目的
◦ XSSを使い、alertでCookieを表示する。
ファイルを選択し、
Submitボタンを押すと、
ファイル名が表示される。
- 43. 43 /84
マッピング:Mapping
発見:Discovery
Windowsだとファイル名にスクリプトを設定できないので、Burp Proxyを使い、
requestのfilenameを書き換える。Burp Proxyの使い方はその4.pptx参照。
このような攻撃スクリプトが考えられる。
攻撃スクリプトの一例
<script>alert(document.cookie)</script>
ファイル名を攻撃スクリプトに書き換え。
- 45. 45 /84
Challenge 26: XSS VII
http://pentesteracademylab.appspot.com/lab/webapp/xss/8
目的
◦ XSSを使い、alertでCookieを表示する。
テキストボックスに入力して
Fetchボタンを押すと、
テキストが表示される。
- 47. 47 /84
マッピング:Mapping
発見:Discovery
inputタグを終端する攻撃スクリプトでtime_inputを書き換える。
Burp Proxyの使い方はその4.pptx参照。
このような攻撃スクリプトが考えられる。
攻撃スクリプトの一例
"><script>alert(document.cookie)</script>
- 49. 49 /84
Challenge 27: XSS VII
http://pentesteracademylab.appspot.com/lab/webapp/xss/10
目的
◦ XSSを使い、alertでCookieを表示する。
テキストボックスに入力して
Previewボタンを押すと、
入力したカラーコードの色が表示される。
- 53. 53 /84
Challenge 28: XSS IX
http://pentesteracademylab.appspot.com/lab/webapp/xss/11
目的
◦ XSSを使い、alertでCookieを表示する。
テキストボックスに入力して
Previewボタンを押すと、
入力したカラーコードの色が表示される。
(Challenge 27と同じ)
- 55. 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 Handlers
https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
イベントハンドラを全部試した。
- 57. 57 /84
Challenge 29: XSS X
http://pentesteracademylab.appspot.com/lab/webapp/xss/10
目的
◦ XSSを使い、alertでCookieを表示する。
◦ 開発者が開発中のページを公開してしまったシチュエーション。
テキストボックスに入力して
Fetchボタンを押すと、
何かを検索するっぽい。
- 59. 59 /84
マッピング:Mapping
発見:Discovery
何が入力されてもノーチェックのため、何でも実行可能。
このような攻撃スクリプトが考えられる。
攻撃スクリプトの一例
alert(document.cookie)
フロントエンドの場合はデバッグコードをきちんと消しておきましょう!
- 61. 61 /84
Challenge 30: XSS XI
http://pentesteracademylab.appspot.com//lab/webapp/xss/13
目的
◦ XSSを使い、alertでCookieを表示する。
テキストボックスに入力して
Fetchボタンを押すと、
何かを検索するっぽい。
- 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)>
- 65. 65 /84
Challenge 31: XSS XII
http://pentesteracademylab.appspot.com//lab/webapp/xss/14
目的
◦ XSSを使い、alertでCookieを表示する。
テキストボックスに入力して
Check User IDボタンを押すと、
ユーザーIDをチェックするっぽい。
- 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)>
- 69. 69 /84
Challenge 32: XSS XIII
http://pentesteracademylab.appspot.com//lab/webapp/xss/15
目的
◦ XSSを使い、alertでCookieを表示する。
URLを開くとログらしきものが表示されている。
- 71. 71 /84
マッピング:Mapping
発見:Discovery
User-Agentヘッダーに攻撃スクリプトを注入する。
このような攻撃スクリプトが考えられる。
攻撃スクリプトの一例
<script>alert(document.cookie)</script>
User-Agentヘッダーを攻撃スクリプトに書き換え。
Burp Proxyの使い方はその4.pptx参照。
- 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検索して
出てきたものを適当に入れた。
- 75. 75 /84
Challenge 34: XSS 15
http://pentesteracademylab.appspot.com/lab/webapp/xss/17
目的
◦ XSSを使い、alertでCookieを表示する。
何も表示されないページ。
- 77. 77 /84
マッピング:Mapping
発見:Discovery
localStrageにdivタグを終端する攻撃スクリプトを注入する。
このような攻撃スクリプトが考えられる。
攻撃スクリプトの一例
</div><input onmouseout=alert(document.cookie)><div>
IEの場合、F12開発者ツールを使い、コンソールからlocalStrageを書き換える。
- 79. 79 /84
Challenge 35: XSS 16
http://pentesteracademylab.appspot.com/lab/webapp/xss/18
目的
◦ XSSを使い、alertでCookieを表示する。
テキストボックスに入力して
Fetchボタンを押すと、
何かを検索するっぽい。
- 82. 82 /84
Challenge 36: XSS 16
http://pentesteracademylab.appspot.com/lab/webapp/xss/18
目的
◦ XSSを使い、alertでCookieを表示する。
テキストボックスに入力して
Renderボタンを押す。
特に何も変わらない。