Q1. 什麼是 XSS?
- 跨網站指令碼(Cross-Site Scripting,通常簡稱為XSS)
- 駭客在瀏覽器插入惡意 Javascript,一旦受害者的瀏覽器解析並執行,可能導致受害者cookie 被盜取、網頁導向惡意網站等
- 簡單來說,就是讓使用者(駭客)「 輸入的資料」 變成「 程式的一部分 」,藉此攻擊其他的使用者
Q2. XSS 手法?
- 常見的 XSS 手法分為三種類型: (危害等級: 儲存型 > 反射型 > DOM 型)
- 反射型 XSS ( Reflected )
- 若後端程式會從 GET 參數取得資料,並將內容顯示在前端,如此一來便可在 GET 參數中植入 javascript。
- e.g. 將攻擊的 script 藏在URL中,網頁透過 GET 參數傳遞
- 儲存型 XSS ( Stored )
- 若後端程式會儲存前端的輸入,並在日後瀏覽時顯示,如此一來駭客便可以輸入 javascript,使得其他使用者瀏覽時遭受攻擊。
- e.g. 將攻擊的 script 透過留言板功能,儲存於 database 中,下一次受害者開啟此頁面,注入惡意 script 的留言就會執行
- DOM 型 XSS
- 前二型通常發生在網頁的後端程式,然而網頁前端 Javascript 也可能動態變更頁面上的內容,此類 XSS 便稱為 DOM 型。
- e.g. 在 input 處輸入 DOM 語法,只能在前端發生,所以除非駭客在你電腦前幫受害者輸入,否則無法讓受害者輸入惡意程式,所以通常 DOM 型 XSS 要搭配反射型與儲存型製造出內容,讓 Javascript 動態產生 DOM 才能達成
參考資料:https://medium.com/starbugs/身為-web-工程師-你一定要知道的幾個-web-資訊安全議題-29b8a4af6e13
參考資料:https://yakimhsu.com/project/project_w12_Info_Security-XSS_SQL.html
參考資料:https://forum.gamer.com.tw/Co.php?bsn=60292&sn=11267
Q3. XSS 的 script 類型?
在以下地方都可以插入 javascript 語法:
-
<script>alert('666')</script>
-
<svg/onload=alert(1)>
-
<img src=# onerror=alert(1)>
-
<a href="javascript:alert(1)">g</a>
-
<input type="text" value="g" onmouseover="alert(1)" />
-
<iframe src="javascript:alert(1)"></iframe>
-
反射型 XSS 腳本可以使用 URL encoding,讓網址看起來沒那麼可疑,通常此類攻擊連結可以透過廣告信件、留言板等,讓受害者點擊
-
參考資料:https://github.com/w181496/Web-CTF-Cheatsheet#XSS
-
參考資料:https://portswigger.net/web-security/cross-site-scripting/cheat-sheet
Q4. 檢查是否有 XSS 漏洞?
- 在網頁的 GET 處輸入 script 測試
- 在網頁留言板/搜尋處,輸入 script
參考資料:/articles/10243506