文章目錄
- 一、XSS漏洞概述
- 1.1 XSS簡介
- 二、XSS漏洞分類
- 2.1 反射型XSS
- 2.2 存儲型XSS
- 2.3 DOM型XSS
- 三、XSS payload構造以及變形
- 3.1 XSS payload構造
- 3.2 XSS payload 變形
一、XSS漏洞概述
1.1 XSS簡介
??XSS被稱為跨站腳本攻擊(Cross-site scripting),由于和CSS(Cascading Style Sheets)重名,所以改為XSS。XSS主要基于javascript語言完成惡意的攻擊行為,因為javascript可以非常靈活的操作html、css和瀏覽器。
??XSS就是指通過利用網頁開發時留下的漏洞(由于web應用程序對用戶的輸入過濾不足),巧妙的將惡意代碼注入到網頁中,使用戶瀏覽器加載并執行攻擊者制造的惡意代碼,以達到攻擊的效果。這些惡意代碼通常時javascript,但實際上也可以包括java、VBScript、ActiveX、Flash或者普通的html。
??當用戶訪問被XSS注入的網頁,XSS代碼就會被提取出來。用戶瀏覽器就會解析這段XSS代碼,也就是說用戶被攻擊了。用戶最簡單的動作就是使用瀏覽器上網,并且瀏覽器中有javascript解釋器,可以解析javascript,然而由于瀏覽器不具有人格,不會判斷代碼是否惡意,只要代碼符合語法規則,瀏覽器就會解析這段XSS代碼。
??簡單來說,XSS就是通過攻擊者精心構造的JS代碼注入到網頁中,并由瀏覽器解釋運行這段JS代碼,以達到惡意攻擊瀏覽器的效果。XSS攻擊的對象是用于瀏覽器,屬于被動攻擊。因此XSS攻擊涉及三個角色:
- 攻擊者
- 用戶瀏覽器
- 服務器
XSS屬于客戶端攻擊,受害者最終是用戶。注意,網站管理員也是用戶之一,管理員比普通用戶權限高,可以利用當其跳板實施攻擊。
??實施XSS攻擊需要具備的兩個條件:
- 需要向web頁面注入精心構造的惡意代碼;
- 對用戶的輸入沒有做過濾,惡意代碼能夠被瀏覽器成功執行。
XSS驗證代碼:
<script>alert(/xss/)</script>
<script>confirm('xss')</script>
<script>prompt("xss")</script>
XSS驗證原理:在測試頁面中提交上述代碼,瀏覽器執行后就能看到彈框操作,彈框的目的是驗證JS代碼是否被執行。
二、XSS漏洞分類
2.1 反射型XSS
??反射型XSS又稱為非持久性XSS,用戶在請求某條URL時,會攜帶一部分數據。當客戶端進行訪問某條鏈接時,攻擊者可以將惡意代碼植入到URL中,如果服務端未對URL攜帶的參數做判斷或者過濾處理,直接返回響應頁面,那么XSS攻擊代碼就會一起被傳輸到用戶的瀏覽器,從而觸發反射型XSS。攻擊流程圖如下:
??反射型XSS的特點:
- 非持久性
- 參數型腳本
- 反射型XSS的JS代碼在web應用的參數(變量)中,如搜索框等地方。
數據流量走向:瀏覽器 → \rightarrow →后端 → \rightarrow →瀏覽器
2.2 存儲型XSS
??存儲型XSS又稱為持久型XSS,此類型的XSS漏洞時由于惡意代碼被持久化保存到服務器上,然后被顯示到HTML頁面之中。這類漏洞經常出現在用戶評論的頁面,攻擊者精心構造XSS代碼,保存到數據庫中,當其他用戶再次訪問這個頁面時,就會觸發并執行惡意的XSS代碼,從而竊取用戶的敏感信息。攻擊流程圖如下:
??存儲型XSS的特點:
- 持久性XSS
- 持久性體現在JS代碼不是愛某個參數(變量)中,而是寫進數據庫或文件等可以永久保存數據的介質中,如留言板等地方。
??數據流量走向:瀏覽器 → \rightarrow →后端 → \rightarrow →數據庫 → \rightarrow →后端 → \rightarrow →瀏覽器
2.3 DOM型XSS
??DOM型XSS漏洞是基于文檔對象模型(Document Object Model)的一種漏洞。這種XSS與反射型XSS、存儲型XSS在原理上有著本質區別,DOMx型XSS的攻擊代碼并不需要服務器解析響應,觸發XSS靠的是瀏覽器端的DOM解析。客戶端上的Javascript腳本可以訪問瀏覽器的DOM并修改頁面的內容,不在依賴服務器的數據,從而從瀏覽器端獲取數據并執行。在客戶端直接輸出DOM內容的時候極易觸發DOM型XSS漏洞,如document.getElementByid("x").innerHTML、document.write
等。
DOM型XSS不會將XSS payload寫入到源代碼中,其他兩種類型的XSS會將payload寫入源代碼中。
三、XSS payload構造以及變形
3.1 XSS payload構造
-
利用
<>
構造HTML標簽和<script></script>
標簽;
-
利用HTML標簽的屬性值(偽協議)
-
利用事件
- windows事件:對windows對象觸發的事件
- Form事件:HTML表單內的動作觸發事件
- Keyboard事件:鍵盤按鍵
- Mouse事件:由鼠標或類似用戶動作觸發的事件
- Media事件:由多媒體觸發的事件
事件參考資料
3.2 XSS payload 變形
-
大小寫
-
雙寫關鍵字
-
引號
如果在HTML標簽中,可以不用引號;如果在js中,可以用反引號代替單雙引號。
-
/
代替空格
-
Tab與回車
在一些位置添加Tab(水平制表符)和回車鍵來繞過關鍵字檢測
-
編碼(HTML實體編碼和URL編碼)