Shikata Ga Nai

Private? There is no such things.

XSS Through Parameter Pollutionを訳してみた

Hello there, ('ω')ノ

 

パラメータ汚染によるXSSを。

 

脆弱性:

 オープンリダイレクト

 XSS

 HTTPパラメータ汚染

 

記事:

 https://infosecwriteups.com/xss-through-parameter-pollution-9a55da150ab2

 

クロスサイトスクリプティング(XSS)とは。

攻撃者が脆弱なWebアプリケーションに悪意のあるコードを挿入することを。

可能にするWebセキュリティの脆弱性で。

 

XSS攻撃の主な3つのタイプ:

 反映されたXSS:

  悪意のあるスクリプトは、現在のHTTPリクエストからのもので。

 保存されたXSS:

  悪意のあるスクリプトは、Webサイトのデータベースからのもので。

 DOMベースのXSS:

  脆弱性がサーバ側のコードではなく、クライアント側のコードに存在する場合で。

 

HTTPパラメータ汚染(HPP)とは、Webアプリケーションの意図された動作とは。

異なる特定の悪意のあるタスク/攻撃を実行または達成するために。

WebアプリケーションのHTTPパラメータを汚染して。

 

今回は、VDPプログラムのバグを探し始めて。

あるドメインがURLのcallbackパラメータを使用して。

ユーザを別のサブドメインにリダイレクトしていることがわかって。

また、ターゲットの名前を開示することはできず。

それで、ターゲットがsite.comであると仮定するとURLは次のようになって。

    https://site.com/out?callback=https://subdomain.site.com

 

そして、上記のリンクを開くとsubdomain.site.comにリダイレクトされるので。

このリダイレクトを確認した後に。

https://bing.comを使用してコールバックパラメータの値を変更して。

Webサイトはあらゆる種類の検証を行っているかどうかを確認することに。

Webサイトが検証を行っているか。

リダイレクトがsite.comのサブドメインのみを許可している場合は。

そのWebサイトはOpenRedirectに対して脆弱ではない可能性があって。

また、Webサイトがいかなる種類の検証も行っていない場合は。

そのWebサイトは脆弱で。

そして、callbackパラメータの値を変更したURLは次のようになって。

    https://site.com/out?callback=https://bing.com

 

callbackパラメータの値が応答に反映されていて。

 

f:id:ThisIsOne:20220316202917p:plain

 

そして、上記のリンクを開くとbing.comにリダイレクトして。

これは、Webサイトがいかなる種類の検証も行っておらず。

OpenRedirectに対して脆弱であることを意味して。

しかし、Burp Suiteでその応答を見た後に。

callbackパラメータの値も応答に反映されているため。

これはクロスサイトスクリプティングに対しても脆弱であると思って。

そのため、最初に値がスクリプトタグに反映されているため。

コードを解読することに。

callbackUrlの変数を壊すためにcallbackパラメータに下記を入れて。

 anything%22;

 ⇩

 anything";

 

このリクエストを送信した後、リクエストをブロックするエラーが発生して。

また、他のいくつかの値で、[‘,”]などでも同じエラーが発生して。

下記は、リクエストをブロックするエラーで。

 

f:id:ThisIsOne:20220316203000p:plain

 

今、2つの選択肢しかなくて。

    最初のオプションは、この問題をオープンリダイレクトとして報告することで。

 2番目のオプションは、XSSを取得するためのバイパスを見つけることで。

 

2番目のオプションを選択するのはXSSを取得するためのバイパスを見つけることで。

パラメータ汚染攻撃を行うために。

URLにもう1つのコールバックパラメータを追加するとURLは次のようになって。

    https://site.com/out?callback=anything&callback=random

 

2つのcallbackパラメータの応答は以下のとおりで。

 

f:id:ThisIsOne:20220316203025p:plain

 

そして、URLに2つの同じパラメータを追加すると気づいて。

ただ、応答の両方のパラメータの値をコンマで区切って取得すると。

リクエストをブロックするエラーが発生するので。

2番目のコールバックパラメータに%22; something%2f%2fを入れると。

URLは次のようになって。

    https://site.com/out?callback=anything&callback=%22;something%2f%2f

 ⇩

 https://site.com/out?callback=anything&callback=";something//

 

callbackUrl変数を壊すことがでて。

 

f:id:ThisIsOne:20220316203051p:plain

 

そして、コードを壊したり、フィルターをバイパスしたりすることができて。

これは、Webサイトが2番目のcallbackパラメータの。

検証を行っていないことを意味して。

今回は、XSSアラートを取得するために2番目のコールバックパラメータに。

%22;alert%281%29;%2f%2fを追加するとURLは次のようになって。

    https://site.com/out?callback=anything&callback=%22;alert%281%29;%2f%2f

 ⇩

 https://site.com/out?callback=anything&callback=";alert(1);//

 

再びブロックリクエストを取得すると。

 

f:id:ThisIsOne:20220316203123p:plain

 

Webサイトは、角かっこを使用するという要求をブロックするので。

角かっこをURLエンコードまたは``に置き換えて。

しかし、それでもエラーが発生して。

Webサイトは、まだすべてのパラメータの検証を行っているためで。

次に、URLエンコードされた``を再び使用すると。

最後にフィルタをバイパスすることに成功して。

最終的なURLは次のようになって。

     https://site.com/out?callback=anything&callback=%22;alert%60XSS_POC_BY_SAAJAN_BHUJEL%60;%2f%2f

 

%22;alert%60XSS_POC_BY_SAAJAN_BHUJEL%60;%2f%2f

"";alert`XSS_POC_BY_SAAJAN_BHUJEL`;//

 

フィルタをバイパスできて。

 

f:id:ThisIsOne:20220316203221p:plain

 

XSSアラートを取得して。

 

f:id:ThisIsOne:20220316203238p:plain

 

これで、フィルタをバイパスしてパラメータ汚染を介して。

XSSを実行できるようになって。

そして、パラメータ汚染攻撃を通じて[‘,”]などで。

いくつかのフィルタをバイパスすることができて。

 

ヒント:

ターゲットがパラメータに対して何らかの検証チェックを。

実行していることがわかった場合は。

次に1つ以上の同じパラメータを追加してみると。

Webサイトの応答の変更を確認するには、検証チェックをバイパスできて。

 

Best regards, (^^ゞ