一、XSS漏洞簡介
??XSS(Cross Site Script)即跨站腳本,攻擊者通過在目標網站上注入惡意腳本,使之在用戶的瀏覽器上運行,利用這些惡意腳本,攻擊者可獲取用戶的敏感資訊如 Cookie、SessionID等,總而言之,前端能做的事情它都能做到,XSS可分為反射型,存盤型和DOM型,
二、XSS分類
反射型XSS:反射型XSS也被稱為非持久性XSS,是現在最容易出現的一種XSS漏洞,當用戶訪問一個帶有XSS代碼的URL請求時,服務器端接收資料后處理,然后把帶有XSS代碼的資料發送到瀏覽器,瀏覽器決議這段帶有XSS代碼的資料后,最終造成XSS漏洞,

存盤型XSS:存盤型XSS又被稱為持久性XSS,存盤型XSS是最危險的一種跨站腳本,允許用戶存盤資料的WEB應用程式都可能會出現存盤型XSS漏洞,當攻擊者提交一段XSS代碼后,被服務器端接收并存盤,當再次訪問頁面時,這段XSS代碼被程式讀取回應給瀏覽器,造成XSS跨站攻擊,這就是存盤型XSS,

DOM型XSS:傳統型別的XSS漏洞(反射型或存盤型)一般出現在服務器端代碼中,而DOM XSS是基于DOM檔案物件模型的一種漏洞,所以,受客戶端瀏覽器的腳本代碼所影響,

三、XSS漏洞利用
1.Cookie劫持
常見的XSS漏洞利用方式有Cookie劫持,一般Cookie中保存了用戶的登錄憑證,如果Cookie泄露,則可以直接登錄進用戶的賬號,
具體的攻擊步驟:
- 1.用戶登錄
- 2.攻擊者欺騙用戶訪問帶XSS payload的URL
- 3.用戶請求攻擊者的URL
- 4.在用戶瀏覽器執行遠程js,將cookie發送給攻擊者
- 5.攻擊者利用cookie進入用戶賬號
通過param變數注入xss payload,xss payload加載遠程腳本,

腳本中將cookie發送到遠程服務器,后續也可以在遠程服務器的web日志中查看到,

在不確定是否存在XSS注入點時,避免Cookie劫持的方法:
1.給關鍵的Cookie植入Httponly標識;2.Cookie與客戶端IP系結,
驗證給Cookie植入Httponly標識的效果:

2.構造GET與POST請求
通過js,讓瀏覽器發起GET、POST請求,完成各種操作,

構造GET請求:通過插入圖片,圖片的src為GET請求的URL,

構造POST請求:1.構造form表單,并提交;

2.通過XMLHttpRequest發送POST請求,

3.釣魚
通過param變數注入xss payload,xss payload加載遠程腳本,

腳本中構造一個登錄框,表單提交時將賬號密碼發送到攻擊者服務器上,

4.識別瀏覽器及插件
資訊收集用戶的瀏覽器版本資訊,擴大攻擊面,通過js讀取瀏覽器的userAgent物件識別瀏覽器版本,查詢navigator.plugins物件獲取插件資訊,

由于漏洞環境的限制,包括識別用戶安裝軟體、查看用戶訪問網站、獲取用戶真實IP、蠕蟲等利用方式不做復現,XSS構造和繞過的技巧也不做說明,可自行查找做了解,
四、XSS的防御
防御XSS攻擊的方案,主要有兩種,1.輸入檢查;2.輸出檢查,
輸入檢查:對傳入引數進行格式校驗,并對特殊字符進行過濾或轉義,由于輸入資料的使用場景不同,過濾或轉義可能會影響實際的業務使用,同時XSS攻擊發生的位置并不是引數傳入的位置,可能存在遺漏,
輸出檢查:對回傳給瀏覽器的輸出結果進行HTML物體化編碼,對JavaScript輸出的用戶可控資料進行轉義,
此外還可以使用Vue、Angular、React等前端開發框架自帶的XSS防御機制,

DOM型XSS的防御需要注意,觸發點可能不止一個,需要對每個位置都做編碼處理,
在script標簽中產生xss:

在document.write輸出到html頁面產生xss:

五、Self XSS
Self XSS指的是用戶自己輸入XSS payload,且輸出僅自己可見的XSS問題,通常單獨的Self XSS是不可利用的,但通過CSRF(跨站請求偽造)、點擊劫持等組合攻擊就可能把Self XSS利用起來,所以即使是Self XSS也建議做好修復,避免被組合利用造成危害,
對代碼感興趣的,關注公眾號“吳花果的吳花火”,輸入”xss“獲取xss實體代碼的下載鏈接,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/375217.html
標籤:其他
