Shikata Ga Nai

Private? There is no such things.

SSTI to XSS using curly braces {}を訳してみた

Hello there, ('ω')ノ

 

中括弧 {} を使用した SSTI から XSS へを。

 

脆弱性

 SSTI

 XSS

 

記事:

 https://sagarsajeev.medium.com/escalating-ssti-to-reflected-xss-using-curly-braces-825685bd93ec

 

ノート:

Server Side Template Injection または SSTI については。

基本的には、サーバ側で実行されるテンプレート エンジンに。

何か (ペイロード) を注入する方法で。

 

対象シナリオ:

XSS に対して脆弱なエンドポイントを見つけるために何時間も努力した結果。

最終的に興味深いものにたどり着き。

サインアップページを公開していて。

これについて興味深いのは、それが隠されていたことで。

URL は次のようになり。

    https://www.redacted.com/engine/signup/create.php

 

そこで XSS ペイロードを試しましたが、すべてをフィルタリングしていて。

そこで、中括弧 {} を名、姓、および住所フィールドに追加することを考え。

驚いたことに、これら 3 つのフィールドはすべて。

中括弧に対して特定のフィルタリングを実行しておらず。

次のペイロードを試しすことに。

 {{ <svg/onload=prompt("XSS")> }}

 

ペイロードが複雑に見えることはわかっていて。

すべてのエンティティが URL エンコードされているだけで。

デコードされたペイロードは次のようになり。

 {{ <svg/onload=prompt(“XSS”)> }}

 

問題は、何らかの理由で直接ペイロードが通過しなかったことで。

Burp Suiteを使用してリクエストをインターセプトし。

エンコードされたペイロードを追加する必要があり。

すると、XSS が発生して。

問題は、これは単なるSelf XSS であるということで。

 

Self  XSS からStored XSS

ターゲット Web サイトには、プロジェクトを作成できるセクションがあり。

プロジェクトは、ファイルを保存できるフォルダと考えて。

プロジェクト管理者は、これを他の「認証済みユーザ」と共有でき。

プロジェクトには名前を付ける必要があり、リンクを使用して共有されて。

ペイロードでプロジェクトに名前を付けると。

ファイル名は次のようになり。

 {{ &lt;svg/onload=prompt(&quot;XSS&quot;)&gt; }}

 

ファイル名の制限は守られず、プロジェクトに好きな名前を付けることができ。

共有プロジェクトのリンクをコピーして、他の認証済みユーザに送信し。

前述したように、認証されたユーザのみがプロジェクトを表示でき。

そのため、アプリケーションは、共有プロジェクトを表示する前に。

ユーザにログインを強制し。

認証されたユーザがリンクをクリックすると、ポップアップが。

 

 

簡単なまとめ:

・SSTI ベースの Self-XSS ペイロードが作成されて。

・Self-XSS は Reflected XSSエスカレートされて。 (攻撃シナリオによって異なり)

・SSTI ⇨ Self XSS ⇨ Reflected XSS

・実際、これはより深刻な問題にエスカレートされる可能性があり。

 攻撃者はプロジェクトを作成し、そのリンクをソーシャル メディアで。

 共有するだけで済んで。

 認証されたユーザが、たまたまリンクをランダムにクリックすると。

 XSS がトリガされる可能性があり。

 

ヒント:

・ターゲットを理解するために時間を費やすようにして。

 これを見つけるために、このターゲットに 1 週​​間近く費やして。

・特定のバグが見つからないという理由だけで。

 あるプログラムから別のプログラムに変更し続けないで。

 学習した脆弱性のリストを作成し、それに応じてそれぞれをテストして。

・また、影響を最も重大度の高いものに説明して。

 脆弱性がもたらす可能性のある最も潜在的な影響を彼らに知らせて。

・メモを取ることをお勧めして

 手書きでもNotionでも構いませんので必ずメモを取って。

 それは長期的に役立って。

 

Best regards, (^^ゞ