XSS攻擊進階篇——那些年我們看不懂的XSS
一、XSS概述
注:因此沒有反射型XSS、存儲型XSS、DOM XSS這種分類,因為分類依據(jù)都不同…
XSS的實質(zhì)其實是HTML代碼與Javscript代碼的注入。但由于XSS的攻擊對象是與客戶對等的Browser端,因此常常不被開發(fā)者所重視。
一般意義上的XSS通??梢杂煤唵蔚姆椒z測出來:當用戶輸入中某個參數(shù)的全部或其中一部分,原封不動地在源代碼里出現(xiàn)時,我們就可以認為這個參數(shù)存在XSS漏洞。

我們可以在掃描器的幫助下鏟除絕大多數(shù)的常規(guī)XSS,因為掃描器所擅長的模式識別很容易從HTML代碼里找出自己剛剛輸入的東西…
直到某一天,出現(xiàn)了一類不會在源代碼中回顯的XSS…此時我們才意識到,原來XSS并不像想象中的那么簡單
二、文件對象模型簡介
2.1 DOM簡介
文檔對象模型(Document Object Model),即大名鼎鼎的DOM。
DOM可以被認為是一種通過將頁面元素以對象的樹形方式表現(xiàn),以便由Javascript組織處理的實現(xiàn)方法。
2.2 常用的DOM方法
用戶可通過 JavaScript (以及其他編程語言)對 HTML DOM 進行訪問。所有 HTML 元素被定義為對象,而編程接口則是對象方法和對象屬性。
2.3 四個重要的DOM屬性
nodeName 屬性:規(guī)定節(jié)點的名稱。
- nodeName 是只讀的
 - 元素節(jié)點的 nodeName 與標簽名相同
 - 屬性節(jié)點的 nodeName 與屬性名相同
 - 文本節(jié)點的 nodeName 始終是 #text
 - 文檔節(jié)點的 nodeName 始終是 #document
 
nodeValue 屬性:規(guī)定節(jié)點的值。
- 元素節(jié)點的 nodeValue 是 undefined 或 null
 - 文本節(jié)點的 nodeValue 是文本本身
 - 屬性節(jié)點的 nodeValue 是屬性值
 
nodeType 屬性:返回節(jié)點的類型。
- nodeType 是只讀的。
 
innerHTML 屬性:獲取元素內(nèi)容,如:
即text的值為Hello World!
innerHTML可以被賦值,也可讀,因此是被引用次數(shù)最多的對象屬性,同時也是最容易產(chǎn)生安全問題的對象屬性。
2.4 輸入一般在哪里
Location 對象屬性
JS通常會通過調(diào)用DOM內(nèi)置對象location來獲得用戶輸入,如引用參數(shù)切分可使用location.search,引用完整URL可使用location.href等。
三、DOM base XSS
3.1 兩個典型的DOM過程
1)反射型DOM base XSS

2)存儲型DOM base XSS
3.2 需要了解的知識點
比起常規(guī)XSS,DOM base XSS的漏洞發(fā)現(xiàn)過程更像是代碼審計..
3.3 典型DOM base XSS實例
3.4 mxss
如果用戶輸入“出入”DOM兩次以上,則有可能觸發(fā)更高級別的DOM base XSS:mXSS
3.5 容易出現(xiàn)mXSS的場景
由于innerHTML會將HTML實體,CSS轉(zhuǎn)義字符,ANSI編碼等進行反轉(zhuǎn)義,因此原來被轉(zhuǎn)義之后認為安全的用戶輸入很有可能在繞過過濾器之后被反轉(zhuǎn)回去。

四、過濾器繞過
4.1 先來幾個栗子
常規(guī)XSS的過濾器繞過
4.2 過濾器繞過方法
一般意義上而言,DOM base XSS的首先要通過服務(wù)端的過濾器清洗一番,然后還要通過頁面加載的各個JS腳本,繞過難度相對較大…
編碼繞過:
我們要插入的代碼:
- <img src=“” onerror=alert(123)>
 
HTML5特性:
4.3 XSS修復(fù)建議
(1)不含有富文本編輯器(自定義樣式)且沒有使用DOM的站點:
- 輸入:過濾雙引號,單引號,左右尖括號,分號。
 - 輸出:對上述字符進行HTML實體編碼即可。
 
(2)不含有富文本編輯器(自定義樣式)但使用DOM的站點:
- 輸入:在DOM中轉(zhuǎn)義雙引號,單引號,左右尖括號,分號。
 - 輸出:在輸出之前進行編碼,如:innerHTML=encodeHTML(output)
 
(3)含有富文本編輯器(自定義樣式)但沒有使用DOM的站點:
- 輸入:過濾雙引號,單引號,分號。
 - 輸出:對上述字符進行HTML實體編碼即可。
 
(4)含有富文本編輯器(自定義樣式)且使用DOM的站點:
- 沒辦法…指哪兒修哪兒…
 
五、學(xué)習(xí)資料
- http://sandbox.host.smartgslb.com
 - http://html5sec.org/
 - http://drops.wooyun.org/tips/956
 - http://www.w3school.com.cn/
 - http://www.slideshare.net/x00mario/the-innerhtml-apocalypse
 - http://app.baidu.com/app/enter?appid=280383
 
原文鏈接:http://blog.nsfocus.net/xss-advance/
【本文是51CTO專欄作者“綠盟科技博客”的原創(chuàng)稿件,轉(zhuǎn)載請通過51CTO聯(lián)系原作者獲取授權(quán)】


































 
 
 





 
 
 
 