一些BAT的XSS实例(二)进阶篇
字数 1344 2025-08-26 22:11:29
BAT XSS实例分析(二)进阶篇 - 构造与绕过技术详解
前言
本文基于先知社区px1624分享的BAT XSS实例(二)进阶篇内容,深入分析XSS漏洞的构造与绕过技术。文章包含16道XSS挑战题的详细解析,重点讲解第四题至第六题的解题思路和多种绕过方法。
第四题解析
题目特点
- 第三题的升级版,过滤了所有运算符
- 参数名为
px - 同步输出特性
- 过滤了斜线(/)运算符
运算符过滤问题
题目参考W3School列出的所有运算符(https://www.w3school.com.cn/js/js_operators.asp)进行了过滤,但存在遗漏。
解题思路
方法一:模板字符串
- 使用模板字符串(反引号
`)绕过运算符限制 - 模板字符串可以包含换行符,不受单/双引号字符串限制
- 构造示例:
';`${alert(1)}`// - 最短解法(13个字符):
';`${alert(1)}
方法二:使用in运算符
- 发现
in和instanceof运算符未被过滤 - 构造示例:
'in alert(1)' - 虽然会引发类型错误,但alert(1)会先执行
关键知识点
- 模板字符串特性:允许跨行,支持字符串插值
- JavaScript运算符全集:
in和instanceof也是运算符 - 同步输出环境下的闭合技巧
第五题解析
题目特点
- 页面直接访问会跳转
- 包含HTML和PHP两个版本
- 使用index.js获取URL参数
- 通过document.write动态创建script标签
解题思路
- 识别跳转陷阱:不注意会一直在PHP页面测试
- 分析HTML页面中的document.write操作
- 利用参数控制script标签的src属性
- 找到可控制并包含alert(1)的文件路径
- 按照传参逻辑拼接文件路径
关键知识点
- 路径控制导致的XSS
- JSONP相关安全问题
- 动态脚本加载的利用方式
第六题解析
题目特点
- 类似第五题但参数减少为1个
- 移除了路径中的问号字符
- 参数经过URL解码
- 过滤问号(?)和百分号(%)
解题难点
- 尝试使用问号会导致跳转
- 使用%3f编码问号,但百分号被过滤
- 参数校验严格,不符合条件返回空值
绕过方法
- 寻找不依赖问号的路径构造方式
- 利用其他特殊字符或路径特性
- 目前唯一解出者gainover的解法未公开
关键知识点
- URL路径解析特性
- 严格过滤机制的绕过思路
- 前端校验机制的缺陷利用
其他题目概况
- 1-3题:基础XSS构造,已在系列(一)中讲解
- 7-10题:涉及多种XSS技巧,部分解题者已给出解法
- 通杀解法:香草给出了同时解决9和10题的payload
优秀解题者
- gainover:唯一解出第6题,第4题最短payload(13字符)
- 香草:解出1-4及7-10题,提供通杀解法
- p1g3/zeddy/Huuuuu/w8ay:解出1-5题及部分其他题目
- w8ay/Huuuuu:第4题提供独特解法
- zeddy:第7题给出不同构造思路
总结
本系列XSS挑战题展示了多种高级绕过技术:
- 运算符过滤绕过:利用非常用运算符或模板字符串
- 路径控制XSS:通过参数操控资源加载路径
- 严格过滤绕过:寻找校验机制的盲点
- 同步输出利用:巧妙的语法闭合技巧
这些实例反映了真实环境中XSS漏洞的复杂性和防御的挑战性,对安全研究人员和开发人员都有重要参考价值。