漏洞概要 关注数(24) 关注此漏洞
缺陷编号:wooyun-2012-015979
漏洞标题:[腾讯实例教程] 那些年我们一起学XSS - 5. 反斜线复仇记
相关厂商:腾讯
漏洞作者: 心伤的瘦子
提交时间:2012-12-13 21:55
修复时间:2013-01-27 21:55
公开时间:2013-01-27 21:55
漏洞类型:xss跨站脚本攻击
危害等级:低
自评Rank:1
漏洞状态:厂商已经确认
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]
Tags标签: 无
漏洞详情
披露状态:
2012-12-13: 细节已通知厂商并且等待厂商处理中
2012-12-17: 厂商已经确认,细节仅向厂商公开
2012-12-27: 细节向核心白帽子及相关领域专家公开
2013-01-06: 细节向普通白帽子公开
2013-01-16: 细节向实习白帽子公开
2013-01-27: 细节向公众公开
简要描述:
还是在<script>之间的场景,某些情况下,我们仅仅需要的只是一个反斜线,就可以绕过过滤了。
详细说明:
1. 有以下实例点。
对应的输出,如下图所示:
经过测试,我们可以看到,双引号是用不了, 但是 反斜线还可以使用。
那么这里是否可以成功的XSS呢? 我们把缺陷代码部分提取出来。
2. 可以看到有缺陷的部分是
我们可以控制的是 aaaa ,又不能用",怎么办呢?
因为我们可以使用 \,那么我们可以杀掉 aaaa 后面的 双引号。
可以看到代码的结果因为一个反斜线发生了变化,如下图:
为了保证 bbb 后面的语法正确性,我们把bbb改为一个数字,把bbb后面加上 // 来注释掉后面的部分。变成以下形式。
3. 看起来不错哦,但是会出来一些问题,"字符串"&from=1,这样是错误的,因为&符号的优先级高, ("字符串"&from)=1 是无法进行这种赋值操作的。这样一来还是不行。别着急。我们可以稍微改动一下。变为以下形式。
由于==的优先级比 & 高,所以语句相当于 ("字符串")&(from==1)
4. 更顺眼了,但是还是会悲剧啊。由于from未定义,直接和1进行相等判断的话,会报错,错误是:“from”未定义。。。怎么办呢?
5. 别紧张,javascript里有一个特性。 如下:
凡是以 function xxx(){} 形式定义的函数,都会被最优先解析。换句话说:
解析器在解析JS代码段时,会先将 function xxx(){} 拿到最前面解析,然后再依次解析其它的部分。 换句话说,上面的代码,实际的解析顺序是:
利用这样一个特性,我们的代码可以改改。
这样一来,我们的 function from(){} 就会被提前解析,从而定义了from, 后面 from==1的时候,就不会报错啦~~
6. 故事往往是曲折的,到了这一步,我们会发现还是不行。
看一看源代码吧~~ ,哎,我们的空格被转义为了
7. 当然,这么一点小事情,难不到我们的,我们用注释符来做分隔符。 /**/替换空格,有没有觉得和 sql注入一样了,咔咔。
于是,我们的代码变为了:
8. 嗯,这次没有语法错误了,我们插入我们自己的JS代码。
最终的利用代码如下:
----------------------------
恩,这次是我们的 反斜线为 双引号报仇啦!
漏洞证明:
修复方案:
1. 随便修修就好。
2. 某些情况下,\ 还是很危险的。
版权声明:转载请注明来源 心伤的瘦子@乌云
漏洞回应
厂商回应:
危害等级:低
漏洞Rank:5
确认时间:2012-12-17 14:58
厂商回复:
非常感谢您的报告。这个问题我们已经确认,正在与业务部门进行沟通制定解决方案。如有任何新的进展我们将会及时同步。
最新状态:
暂无