[张三的渗透日记]一次xss-bypass
字数 1169 2025-08-11 08:35:53
XSS绕过技术详解:从基础到高级绕过方法
1. XSS漏洞基础发现
XSS漏洞的初步发现通常可以通过简单的测试向量:
">
这个简单的测试字符串可以帮助快速识别是否存在XSS漏洞。当输入被直接反射到HTML页面中时,可能会破坏原有HTML结构,暴露出潜在的XSS漏洞。
2. 基本XSS Payload拦截分析
当尝试使用标准XSS payload时:
">
发现被WAF拦截,这表明存在某种防护机制。通过逐步删减测试,可以确定具体的过滤规则:
- `` 标签未被拦截
这表明WAF使用的是基于关键词的黑名单机制,而非语义分析。
3. 标签替换技术
当主要标签被拦截时,可以尝试使用替代标签:
- 使用
<image>代替`` - 其他可能可用的标签:
<svg>,<iframe>,<object>,<embed>
构造测试payload:
<image src=| onerror=alert(1)//>
发现alert关键字被拦截,需要进行进一步绕过。
4. 函数名替换技术
当标准弹窗函数被拦截时,可以尝试:
4.1 使用其他弹窗函数
confirm(1)
prompt(1)
4.2 Unicode编码绕过
pr\u006fmpt(1) // prompt的Unicode编码
但发现这些方法也被拦截,说明WAF具备解码检测能力。
5. 高级混淆技术
5.1 字符串拼接
this[`al`+/ert/.source](1)
这种技术利用:
- 模板字符串拼接
- 正则表达式source属性
- 上下文对象引用
5.2 属性访问方式
window['a'+'l'+'e'+'r'+'t'](123)
但发现WAF会对这些payload进行修改,自动添加=或删除特殊字符。
6. 无特殊字符绕过技术
当WAF严格过滤特殊字符时,可以采用:
6.1 使用数字进制转换
top[8680439..toString(30)](document.cookie)
这个payload的工作原理:
8680439..toString(30)将数字转换为30进制字符串,结果是"alert"- 通过
top对象访问该属性 - 避免了使用任何引号、括号等特殊字符
6.2 其他进制转换示例
(12345).toString(36) // 可以生成各种短字符串
7. WAF绕过方法论
系统化的绕过思路:
- 最小化测试:从最简单的测试开始,逐步增加复杂度
- 逐步删减:确定哪些部分触发拦截
- 替代方案:标签、属性、事件、函数名的替代
- 编码混淆:尝试不同编码方式(HTML实体、Unicode、URL编码等)
- 上下文利用:利用不同对象的属性访问方式
- 特殊字符FUZZ:测试哪些特殊字符可以通过过滤
- 进制转换:利用数字到字符串的转换生成关键词
8. 防御建议
针对这类绕过技术,防御措施应包括:
- 严格的输出编码(HTML实体编码)
- 内容安全策略(CSP)
- 不仅仅是关键词过滤,需要语义分析
- 对特殊字符和编码的统一规范化处理
- 避免将不受信任的数据放入可执行上下文中
9. 总结
XSS绕过是一个不断演进的过程,需要理解WAF的工作原理并创造性思考。本文展示的从简单发现到高级绕过技术,体现了安全研究的思维方式:从观察到分析,从尝试到创新。掌握这些技术不仅有助于渗透测试,也能帮助开发更安全的Web应用。