一些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 解决方案

  1. 闭合跳出单引号
  2. 写入模板字符串
  3. 使用运算符分隔代码
  4. 注释掉多余部分

示例payload:

http://px1624.sinaapp.com/test/xsstest7/?px=111\%27-alert(1)-`//%3C!--%3Cscript%20

2.5 其他解法

  1. Huuuuu的解法:

    • 将无用内容分别放在单引号字符串和模板字符串中
    http://px1624.sinaapp.com/test/xsstest7/?px=`//*%3C!--%3Cscript%20%3E\%27-alert(1)-`
    
  2. 香草的解法:

    • 将无用内容放在两个模板字符串中
    • alert放在hash里
    http://px1624.sinaapp.com/test/xsstest7/?px=\%27-`-eval(location.hash.slice(1))//%3C!--%20%3Cscript%20%3E`-`#alert(1)
    
  3. 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 解决方案

  1. 跳出script标签
  2. 写入新的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. 关键知识点总结

  1. script标签内的<!--优先级:

    • <!--会改变解析优先级
    • 后面出现的<script>标签会寻找最近的</script>闭合
  2. 模板字符串的使用:

    • 可以用于分隔代码
    • 避免语法错误
  3. XSS Filter绕过:

    • 使输出和URL中的代码不同
    • 利用过滤规则差异
  4. 多输出点利用:

    • 结合JS和HTML中的输出点
    • 利用不同位置的过滤规则差异

6. 解题建议

  1. 不要局限于单一解法,尝试多种思路
  2. 关注构造思路而非具体payload
  3. 使用工具如Visual Studio Code进行调试
  4. 遇到难题可以先跳过,做其他题目

7. 进阶提示

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