通常XSS漏洞驗證的總結,但對於DOM型的XSS漏洞接觸得比較少,本身這方面的東西少得可憐,不太瞭解,後面還須要總結的。 css
幾種狀況驗證方式: express
1. 參數值放在標籤屬性值中: 函數
(1) 事件屬性:可直接輸入腳本驗證; 編碼
(2) style屬性:經過expression引入腳本(根據是否對分號、冒號及固定結構進行過濾構造不一樣的結構); spa
(3) 通常屬性:經過引號把原屬性值進行截斷,構造出事件屬性或style屬性(若是是隱藏域的話通常構造style屬性)。 orm
2. 參數值放在普通標籤(非script標籤)中: seo
(1) 經過尖括號引入新的標籤(兩類:容許script、不容許script); 事件
3. 參數值放在script標籤中: ip
(1) 對尖括號進行過濾:根據參數所在位置上下文結構構造數據: 字符串
a. 未對引號、分號、逗號和冒號進行過濾:任意構造;
b. 引號未進行過濾,分號、逗號和冒號部分過濾:根據上下文進行構造(通常先閉合原有引號)
c. 引號進行過濾,參數放在引號中:無解;
(2) 對尖括號不進行過濾:閉合原有script標籤,引入新的script標籤。
驗證過濾不徹底狀況:
1. 黑名單過濾驗證:
(1) 對expression過濾:插入混淆字符繞過:在css中,/**/是註釋字符,除了/**/外,字符」\」和結束符」\0″也是被忽略的,能夠用來混淆字符(這個直接引用別人的,但驗證過了,OK了);
(2) 對於長度的限制:可經過分批加入,但要在同一頁面(如:<script>var z = z + "alert"</script>)。
2. 特殊字符過濾注意:
(1) 對單引號進行過濾:
a. 注入腳本實例:
<div onmouseover="a='al'+'ert(2)';e=eval;e(a);">mouse here!
b. 修復1:對單引號進行過濾或轉義
c. 繞過實例:
<div onmouseover="a='al'+'ert(2)';e=eval;e(a);">mouse here!
d. 繞過原理:ASCII編碼在屬性值中會轉爲相應字符(即:' ->')。
(2) 經過事件傳遞的轉義字符串發生二次轉義:
a. 注入腳本實例:
<div onmouseover="test('<ScriPt>alert(007)</ScrIpt>')">
b. test函數接收到的字符經轉義變爲:<script>alert(007)</script>