受限情况下的 XSS 利用技巧
字数 938 2025-08-26 22:11:28
受限情况下的XSS利用技巧
1. 电子邮件XSS
背景
电子邮件地址在表单中广泛使用,并在web应用程序的不同部分多次显示。当应用程序对电子邮件格式进行验证时,可能会存在XSS漏洞。
验证机制
- 使用PHP的
filter_var或filter_input函数的FILTER_VALIDATE_EMAIL标志 - 所有不符合电子邮件格式的输入都会返回"INVALID"响应
绕过方法
根据RFC822标准,可以使用以下格式的完全有效电子邮件地址来绕过验证并实现XSS:
Payload示例:
"<svg/onload=alert(1)>"@x.y
2. URL XSS(无查询参数)
背景
URL格式的输入有时会以HTML元素的"href"属性结尾,仅进行URL格式验证。
验证机制
- 使用PHP的
filter_var或filter_input函数的FILTER_VALIDATE_URL标志 - 要求"protocol://reference"格式
绕过方法
- 使用JavaScript伪协议代替HTTP协议
- 由于双斜杠(//)会将后续内容转换为注释,需要使用换行符(%0A)
- 换行符需要双重编码(%250A),因为浏览器会进行一次解码
Payload示例:
javascript://%250Aalert(1)
3. URL XSS(带查询参数)
背景
URL验证时需要附加查询参数的情况。
绕过方法
- 基本方法:在payload后添加查询参数
javascript://%250Aalert(1)//?1 - 使用三元运算符:
javascript://%250A1?alert(1):0 - 当存在与提供的URL进行验证时,可以伪装成合法URL:
javascript://https://domain.com/%250A1?alert(1):0
4. 固定长度Key的XSS
背景
具有固定长度字符的输入格式(如API密钥),由于严格的长度限制,容易被自动化工具和人工检查遗漏。
绕过方法
- 确保payload长度与要求的固定长度一致
- 在满足长度要求的前提下插入XSS代码
Payload示例(针对32字符长度的MD5哈希):
12345678901<svg onload=alert(1)>
总结
在受限情况下进行XSS利用时,关键点包括:
- 理解应用程序的验证机制和限制条件
- 寻找符合格式要求但能执行JS代码的payload构造方式
- 对于URL类XSS,巧妙使用JavaScript伪协议和编码技巧
- 对于固定长度输入,确保payload长度符合要求同时包含有效XSS代码
这些技巧展示了即使在严格输入限制下,通过精心构造的payload仍然可能实现XSS攻击。