一个有趣的xss绕过过程
字数 938 2025-08-26 22:11:15
XSS绕过技术实战分析:从过滤绕过到成功利用
1. 初始测试与基本过滤机制分析
1.1 基础XSS尝试失败
- 初始尝试使用标准
<script>alert(1)</script>标签 - 发现
<script>标签被完全移除 - 表明系统有基本的标签过滤机制
1.2 大小写绕过尝试
- 尝试使用大小写变体
<scriPt>标签 - 仍然被过滤移除
- 说明过滤系统采用大小写不敏感的匹配方式
2. 进一步测试与过滤规则分析
2.1 测试HTML注入点
- 使用
233">alert(233)进行测试 - 发现
alert字符可以正常显示 - 但圆括号
()被HTML实体编码 - 表明系统有针对特定字符的编码机制
2.2 替代标签尝试
- 尝试使用``标签及其
src属性 - 发现
src属性被过滤 - 说明系统有针对常见XSS属性的过滤
3. 高级绕过技术
3.1 SVG标签利用
- 尝试使用
<svg>标签及其onload属性 - 发现
/onload=被替换为空 - 表明系统有针对事件处理属性的过滤
3.2 等号(=)绕过技术
- 尝试对
=进行URL编码- 单次编码:失败
- 二次编码:仍然被过滤
- 三次编码:成功绕过(
%25%32%35%25%33%33%25%36%34)
4. 最终有效载荷构造
4.1 绕过括号限制
- 由于
()被实体编码,采用两种解决方案:- 利用SVG标签内可执行实体字符的特性
- 使用反引号
`代替括号:alert233``
4.2 成功利用的Payload
233"><svg/onload%25%32%35%25%33%33%25%36%34alert(233)>
或
233"><svg/onload%25%32%35%25%33%33%25%36%34alert`233`>
5. 关键知识点总结
- 多层编码绕过:某些WAF/过滤器只解码一次或两次URL编码,三次编码可能绕过
- 替代标签选择:当
<script>和``被过滤时,<svg>可能成为可行选择 - 事件处理属性:
onload等属性在特定标签中仍可执行JS - 字符替换技术:当特定符号被过滤时,可使用:
- 反引号代替括号
- 实体编码在允许的上下文中仍可执行
- 过滤规则分析:通过逐步测试了解过滤器的具体规则和行为模式
6. 防御建议
- 实施多层次的输入过滤和输出编码
- 使用内容安全策略(CSP)限制脚本执行
- 对用户输入进行规范化处理后再过滤
- 考虑使用专业的WAF解决方案
- 定期更新过滤规则以应对新型绕过技术