# WebSockets Lab1 本題要觸發客服端的 alert(1),代表我們成功將惡意 payload 傳進客服的 Web UI並被執行,所以一樣先進入網站。 ![image](https://hackmd.io/_uploads/SyAPwIFmlx.png) 因為要注入訊息,所以我到 Live Chat 裡面發送訊息,並看他的請求內容。 ![image](https://hackmd.io/_uploads/SkMX_LKmgx.png) 接著我嘗試輸入其他符號,例如HTML語法之類的。 ![image](https://hackmd.io/_uploads/r1kKOIKQxl.png) 發現在輸入`<`的時候,他會自動更換成`&lt;`,代表前端把我們的符號更改了 ,所以這裡可以嘗試攔截他,改成我們想要的東西。 ![image](https://hackmd.io/_uploads/ByfQYLKmex.png) ``` <img src=1 onerror='alert(1)'> ``` 這是 一段 HTML + JavaScript 的組合,利用了 img 標籤的錯誤事件 onerror: - `<img>`:HTML 裡用來放圖片的標籤 - `src=1`:這邊我們故意讓它失敗(1 不是合法圖片網址) - `onerror='alert(1)'`:當圖片載入失敗時,會觸發 onerror,執行裡面的 JavaScript。 所以整串的意思是:放一張圖片,網址亂給讓它載入失敗,然後趁失敗的時候偷偷執行 alert(1)。 ![image](https://hackmd.io/_uploads/r1QcqUKXgx.png) :::info ### 為什麼不用 `<script>alert(1)</script>`? 這個當然也可以用,但通常會被簡單的過濾器擋掉,比如: - 過濾 `<script>` 這個 tag - 過濾 alert 但`<img onerror>`這種變體,比較容易繞過簡單防禦,而且效能高、執行快。 *而且當初嘗試的時候整個聊天機器人壞掉也沒跳出其他回應,所以改成解題步驟中的方案。 ::: ### WebSockets Lab2 -> [write up](https://hackmd.io/@mio0813/B1EfhLKmeg) ---