一些BAT的XSS实例(三)中级篇
字数 1171 2025-08-26 22:11:29
XSS绕过实例分析:中级篇教学文档
1. 背景介绍
本教学文档基于BAT公司的XSS实例分析,这些实例已经公开并修复完毕。文档将详细讲解XSS绕过技巧,特别是针对中级难度的题目。
2. 第七题解析
2.1 题目特点
- 需要构造参数
px - 特殊字符被转义(单引号被转义)
- 反斜线未被转义
2.2 初始尝试
- 直接构造
\'会被转义为\\',导致单引号未被转义 - 可以闭合代码中的单引号,但末尾多出的单引号无法处理
2.3 关键突破点
- 利用
<!--改变解析优先级 - 当
<!--后出现<script>标签时,最近的</script>会优先闭合新标签 - 这使得HTML位置的输出点也能被当作JS代码解析
2.4 解决方案
- 闭合跳出单引号
- 写入模板字符串
- 使用运算符分隔代码
- 注释掉多余部分
示例payload:
http://px1624.sinaapp.com/test/xsstest7/?px=111\%27-alert(1)-`//%3C!--%3Cscript%20
2.5 其他解法
-
Huuuuu的解法:
- 将无用内容分别放在单引号字符串和模板字符串中
http://px1624.sinaapp.com/test/xsstest7/?px=`//*%3C!--%3Cscript%20%3E\%27-alert(1)-` -
香草的解法:
- 将无用内容放在两个模板字符串中
- alert放在hash里
http://px1624.sinaapp.com/test/xsstest7/?px=\%27-`-eval(location.hash.slice(1))//%3C!--%20%3Cscript%20%3E`-`#alert(1) -
zeddy的解法:
- 使用
<!--<script开头 - 第一个输出点放在单引号字符串中
- 第二个输出点放在模板字符串中
- 使用
%0a换行避免语法错误
http://px1624.sinaapp.com/test/xsstest7/?px=%3C!--%3Cscript%20`)/*\%27%0aalert(1)%0aalert(`*/// - 使用
3. 第八题解析
3.1 题目特点
- 四个输出点:JS中2个,HTML中2个
- HTML中一处做了HTML编码
- value属性位置看似未过滤,但双引号被过滤为实体字符
3.2 初始尝试
- 直接构造
xxx"onxxxx=alert(1)//会被过滤
3.3 解决方案
- 跳出script标签
- 写入新的script标签
基本payload:
http://px1624.sinaapp.com/test/xsstest8/?px=%3C!--%3C/script%3E%3Cscript%20%3Ealert(1)%3C/script%3E
3.4 绕过XSS Filter的技巧
- 利用双引号被过滤为实体字符的特性
- 使输出和URL位置不同,避免被拦截
香草的payload:
http://px1624.sinaapp.com/test/xsstest8/?px=%3C!--%3C/script%3E%3Cscript%20%3E%22=alert(1)%3C/script%3E
4. 第九题提示
- 对第八题进行了修改
- 双引号过滤方式改变
- 两处HTML输出点都做了HTML编码并限制长度
- 需要更复杂的解决方案(将在下篇详细讲解)
5. 关键知识点总结
-
script标签内的
<!--优先级:<!--会改变解析优先级- 后面出现的
<script>标签会寻找最近的</script>闭合
-
模板字符串的使用:
- 可以用于分隔代码
- 避免语法错误
-
XSS Filter绕过:
- 使输出和URL中的代码不同
- 利用过滤规则差异
-
多输出点利用:
- 结合JS和HTML中的输出点
- 利用不同位置的过滤规则差异
6. 解题建议
- 不要局限于单一解法,尝试多种思路
- 关注构造思路而非具体payload
- 使用工具如Visual Studio Code进行调试
- 遇到难题可以先跳过,做其他题目
7. 进阶提示
- 第六题是最难的题目,可以留到最后解决
- 建议安装调试工具辅助解题
- 关注过滤规则的细微差异
- 尝试将不同题目的解法思路进行组合应用