Hello there, ('ω')ノ
2つの異なるパラメータで保存されたXSSを。
脆弱性:
反映されたXSS
記事:
https://joelmcg1993.medium.com/stored-xss-with-two-different-parameters-d9243cae3e6a
今回は、2つの異なるパラメータを使用してXSSの脆弱性を悪用する方法について。
ターゲットアプリは、ユーザがアップロードされた写真にコメントできて。
他のすべての人がそれらのコメントを見ることができる機能があって。
入力フィールド:「comment」
ただし、「comment」フィールドには、「<」や「>」など。
「危険な」文字をHTMLエンコードするメカニズムがあって。
(これはXSS攻撃から保護するための正しい方法で)
もう1つ考慮すべき点は、コメントを送信すると。
「 first name」と「comment」パラメータの値がデータベースに保存されて。
下記のようにソースコードに反映されて。
<p>
<h3> YourFirstName</h3>
<br>
CommentValue
</p>
前述したように、「comment」パラメータは危険な文字をエンコードされるので。
「<」は「<」に「>」を「>」に変換されて。
これは、XSSを実行するために新しいタグを挿入できないことを意味して。
したがって、次の論理的なステップとして。
2番目のパラメータ「 first name」を突くことで。
このパラメータは設定オプションでのみ変更でき。
注意点として、12文字しか使用できず。
そこで、アプリケーションがどのように機能するかを確認するために。
「 first name」の値を「<> Joel」に変更してみると。
「<」と「>」の文字はプロファイルページでは、HTMLエンコードされるものの。
エンドポイントでは、反映されていて。
<p>
<h3><>Joel</h3>
<br>
whatever
</p>
ただ、問題は12文字に制限されているので。
下記の短いペイロードを考えたものの長すぎて。
<svg/onload=alert(1)>
なので、この脆弱性を悪用するアプローチを変更する必要があって。
これを悪用するには、これらのパラメータ両方を使用する必要があって。
Javascriptでは、コメントは下記のように配置できて。
//これは1行あたりのコメント
Or
/*
複数のコメント
複数行で
*/
なので、両方を試すことに。
「 first name」の値を<script>/*に変更して。
「comment」用に*/alert(document.domain)//を挿入して。
このページにアクセスすると、XSSが機能して。
ソースコードは下記のとおりで。
<p>
<h3><script>/*</h3><br>*/alert(document.domain)//</p>
</script></h3>
</p>
なぜ、これが機能したかというと。
Webページのコンテンツをユーザに表示する前に。
ブラウザが最初に行うことを理解する必要があって。
まずはコードを読み取って、HTMLタグが正しく閉じられていることを検証して。
そうでない場合は、ブラウザは正しい終了タグを挿入するので。
コードをエラーなしで実行できるようにする必要があって。
このため、コメントフィールドに終了</script>タグを挿入しなくても、
ブラウザ自体が挿入してくれるので、悪意のあるJSコードを実行できるわけで。
</h3><br>タグは/ ** /の間にあるため、JSは、コメントと解釈して。
次に、</p>タグはJSの通常の//文字によってコメントされて。
HTMLタグが適切に閉じられていないので。
ブラウザが自動で、</script></h3></p>タグを追加して。
要点:
XSSは、ユーザが入力したものが悪意のある目的に使用される可能性があるため。
最も一般的な脆弱性の1つで。
プログラマは、すべてのエンドポイントでユーザが指定したすべてのパラメータが。
適切にフィルタ処理/エンコードされていることを検証する必要があって。
Best regards, (^^ゞ