从新浪微博一处Flash XSS到XSS Worm

最近一直在研究一些flash,希望能发现点什么。

偶然发现这样一个swf:http://vgirl.weibo.com/swf/BlogUp.swf (已修复),一般上传swf、播放器这种地方容易出现xss,这个BlogUp.swf就是上传的flash。

反编译看看,其中有个函数:

ExternalInterface.call(loc1);这句话很明显存在一个XSS,loc1是之前获取的GET参数stage.loaderInfo.parameters[“onflashready”]。

我们试试:

新浪vgirl flash XSS导致微博蠕虫1766.png

弹了。其实前面几个参数也是存在XSS的,但这个xss最明显,我就不说前几个了。

如果ExternalInterface.call函数的第一个参数可控的话,我们最好把POC写成这 样:http://vgirl.weibo.com/swf/BlogUp.swf?onflashready=(function() {alert(1)}) ,因为他和后面的参数组成了一个执行的代码:

因为我们这里这个漏洞没参数,所以最终执行的javascript实际上是(function(){alert(1)})(),我们将alert(1)换成自己的payload就能干想干的事了。

然后我想提交,来到sina src看到个公告:

新浪vgirl flash XSS导致微博蠕虫2116.png

我擦嘞!XSS漏洞都降级了,原因只是因为cookie加了httponly?

我掐指一算,如果就这样交的话,顶多拿2个金币啊!!

挖了半天就换这点金币,不行,那么我们想想怎么让我的XSS发挥点作用吧,否则憋屈得很。来个蠕虫吧。

我关注到vgirl.weibo.com这个站首页是个评分的flash,大概是给MM们评分并分享的。

新浪vgirl flash XSS导致微博蠕虫2282.png

有些妹纸还是挺不错的,我喜欢。来分析一下这个flash吧:

新浪vgirl flash XSS导致微博蠕虫2314.png

这里有5个API很闪眼睛。分析了一下,实际上第一个是获得妹纸列表的,第二个是给妹纸打分的,第三个是分享到微博的,第四个是获得具体妹纸信息的,第五个是关注这个妹纸的。

很明显,第三个和第五个是我想要的(为毛不是第一个和第四个?)。我可以利用这俩API和之前的XSS,来让浏览的用户发表任意微博并关注我,造成一个微博蠕虫。

那么继续分析一下API怎么使用(实际上比看flash代码更简单的方式是抓包,抓包大家都会我就不演示了):

这是发表微博的函数,实际上就是发送了一个POST数据包,text是要发表的内容,img是妹纸图片,uid是妹纸的用户ID。

实际上,text可以写任意文字,img可以是任意图片(属于新浪sinaimg.cn的图片,随便找个图片上传接口传一个即可),uid可以不用填写。

新浪vgirl flash XSS导致微博蠕虫3008.png

如上图,这样一个数据包即可发表一个微博:

新浪vgirl flash XSS导致微博蠕虫3032.png

好,有了这个接口,我们就可以来制作一个蠕虫了。

首先写一个payload,我用了parsec团队的兔子君写的一个javascript辅助工具love.js(https://github.com/quininer/hisoka/blob/master/doc/LoveJS.md && https://quininer.github.io/tests/love.js)来进行数据包的发送。

然后传到自己的服务器上:

http://mhz.pw/game/vgirl/poc.js 

首先要清楚这一点,新浪整体对CSRF的防御基本是靠Referer来进行的,所以不管在哪发微博,都会检查referer是否来自合法的域。所 以我们这个脚本运行在其他地方是不管用的,但因为我们之前找到了一个flash xss,这个flash是处于新浪vgirl域下的,合法合理。

所以,我们现在的工作就是让这个flash加载我的js文件。

最早想到这样一个payload:

不过运行你会发现,referer是这个的话微博是发送不成功的,我目测是被WAF拦截了还是怎样。

测试了一下,拦截的是appendChild,这个关键字。

我想那简单啊,把payload换成

就没关键字了。结果执行发现,URL太长了,flash加载不上。

再想想,如何把URL变短,还要没有关键字?当然是用window.name咯:

把EXP放在iframe的name里,然后实际的payload就是setTimeout(window.name,0),执行了window.name等于执行了我的EXP。

将代码美化一下,传到服务器上。

访问即可发布类似这样的微博:

新浪vgirl flash XSS导致微博蠕虫4551.png

如果换成吸引人的文字和图片,这样,我的粉丝看了以后,多半是会点进去看看。一旦访问这个链接,也会发表这样一个微博。

这样一传十十传百。

形成一个XSS蠕虫,危害很大。同样,我还可以发送一个关注我的数据包,在蠕动的同时,也能无限涨粉。

碍于法律的限制,我就不做测试了。关于新浪微博蠕虫,我曾经是有测试过的:http://wooyun.org/bugs/wooyun-2010-065761,在这里可以看到效果图,和厂商回复。

测试有风险,蠕动需谨慎啊……

【via@离别歌