XSS攻擊進(jìn)階篇——那些年我們看不懂的XSS
一、XSS概述
注:因此沒有反射型XSS、存儲型XSS、DOM XSS這種分類,因為分類依據(jù)都不同…
XSS的實質(zhì)其實是HTML代碼與Javscript代碼的注入。但由于XSS的攻擊對象是與客戶對等的Browser端,因此常常不被開發(fā)者所重視。
一般意義上的XSS通常可以用簡單的方法檢測出來:當(dāng)用戶輸入中某個參數(shù)的全部或其中一部分,原封不動地在源代碼里出現(xiàn)時,我們就可以認(rèn)為這個參數(shù)存在XSS漏洞。
我們可以在掃描器的幫助下鏟除絕大多數(shù)的常規(guī)XSS,因為掃描器所擅長的模式識別很容易從HTML代碼里找出自己剛剛輸入的東西…
直到某一天,出現(xiàn)了一類不會在源代碼中回顯的XSS…此時我們才意識到,原來XSS并不像想象中的那么簡單
二、文件對象模型簡介
2.1 DOM簡介
文檔對象模型(Document Object Model),即大名鼎鼎的DOM。
DOM可以被認(rèn)為是一種通過將頁面元素以對象的樹形方式表現(xiàn),以便由Javascript組織處理的實現(xiàn)方法。
2.2 常用的DOM方法
用戶可通過 JavaScript (以及其他編程語言)對 HTML DOM 進(jìn)行訪問。所有 HTML 元素被定義為對象,而編程接口則是對象方法和對象屬性。
2.3 四個重要的DOM屬性
nodeName 屬性:規(guī)定節(jié)點的名稱。
- nodeName 是只讀的
- 元素節(jié)點的 nodeName 與標(biāo)簽名相同
- 屬性節(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編碼等進(jìn)行反轉(zhuǎn)義,因此原來被轉(zhuǎn)義之后認(rè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的站點:
- 輸入:過濾雙引號,單引號,左右尖括號,分號。
- 輸出:對上述字符進(jìn)行HTML實體編碼即可。
(2)不含有富文本編輯器(自定義樣式)但使用DOM的站點:
- 輸入:在DOM中轉(zhuǎn)義雙引號,單引號,左右尖括號,分號。
- 輸出:在輸出之前進(jìn)行編碼,如:innerHTML=encodeHTML(output)
(3)含有富文本編輯器(自定義樣式)但沒有使用DOM的站點:
- 輸入:過濾雙引號,單引號,分號。
- 輸出:對上述字符進(jìn)行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)】