[张三的渗透日记]一次xss-bypass
字数 1169 2025-08-11 08:35:53

XSS绕过技术详解:从基础到高级绕过方法

1. XSS漏洞基础发现

XSS漏洞的初步发现通常可以通过简单的测试向量:

">

这个简单的测试字符串可以帮助快速识别是否存在XSS漏洞。当输入被直接反射到HTML页面中时,可能会破坏原有HTML结构,暴露出潜在的XSS漏洞。

2. 基本XSS Payload拦截分析

当尝试使用标准XSS payload时:

">

发现被WAF拦截,这表明存在某种防护机制。通过逐步删减测试,可以确定具体的过滤规则:

  1. `` 标签未被拦截

这表明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的工作原理:

  1. 8680439..toString(30) 将数字转换为30进制字符串,结果是"alert"
  2. 通过top对象访问该属性
  3. 避免了使用任何引号、括号等特殊字符

6.2 其他进制转换示例

(12345).toString(36)  // 可以生成各种短字符串

7. WAF绕过方法论

系统化的绕过思路:

  1. 最小化测试:从最简单的测试开始,逐步增加复杂度
  2. 逐步删减:确定哪些部分触发拦截
  3. 替代方案:标签、属性、事件、函数名的替代
  4. 编码混淆:尝试不同编码方式(HTML实体、Unicode、URL编码等)
  5. 上下文利用:利用不同对象的属性访问方式
  6. 特殊字符FUZZ:测试哪些特殊字符可以通过过滤
  7. 进制转换:利用数字到字符串的转换生成关键词

8. 防御建议

针对这类绕过技术,防御措施应包括:

  1. 严格的输出编码(HTML实体编码)
  2. 内容安全策略(CSP)
  3. 不仅仅是关键词过滤,需要语义分析
  4. 对特殊字符和编码的统一规范化处理
  5. 避免将不受信任的数据放入可执行上下文中

9. 总结

XSS绕过是一个不断演进的过程,需要理解WAF的工作原理并创造性思考。本文展示的从简单发现到高级绕过技术,体现了安全研究的思维方式:从观察到分析,从尝试到创新。掌握这些技术不仅有助于渗透测试,也能帮助开发更安全的Web应用。

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