全球旧事资料 分类
实在无聊,贴点新东西,不过最后一点做了处理。程序代码嘛,就不能帖了。其实堆溢出同样是需要解决溢出的三要点,溢出点确定,定位shellcode,跳转到shellcode。UNIX版下面的《高级formatstri
gexploit技术P5Array0x07上》httpbbs
sfocuscomi
dexphpactSTf2t1377Array8其实就是解决这些问题,但没有把这些问题的根本归纳出来。根据我的下面文章的总结,其实堆溢出与格式串溢出特像,就是“一个formatstri
gs的bug可以使往任何数据写到任何地方。作者把它称为writea
ythi
ga
ywhere权限”。现在堆溢出的研究有点升温,暴露出来的堆溢出漏洞也越来越多,所以就有必要研究有效的堆溢出攻击方法了。由于堆溢出只是溢出的一种形式,原理已经介绍得比较多,也比较简单,所以就不再做这方面的介绍。一、堆溢出后的后果;现在的系统管理堆,为了查询的高效快速,一般都使用的双向链表结构。我们来看双向链表管理的时候的删除操作。abp1p2cd都是指针,考虑双向链表abp1p2cd其中由双向链表有bp1,p1ap2c。如果是空闲内存链表,那么申请使用p1、p2指向的内存,或者如果是使用内存链表,释放p1、p2指向的内存,
bbsbitsCNcom
都会从这个链表中删除p1p2。删除后的链表是abcd,应该有内存改写操作:bc,ca。这时代码是经过链表检索从ab得到的p1p2,一般为了高效等就不会记忆ab,因为双向链表就是为了从一个结点可以方便的得到上级和下级结点。所以那两条内存操作都将会转换成p1、p2相关的操作。根据前面得到的信息,经过简单的代换就可以得到我们需要的代码:bp1,p1ap2cba1bca1cp11p2cap2p1两次指针,可能看起来不是很习惯,再把p1记成p1p2记成p2,那么就有:p2p1p11p2这就是堆溢出后导致的两个写内存操作,以后考虑堆溢出,不考虑细节的话基本上就可以用这两条代码代替。这时的p1、p2已经不是指那链表的位置了,而是指里面的内容。二、利用。要利用堆溢出,就考虑上面总结的两条代码的利用就是了。1、改写内存参数,直接利用。可以改写重要变量,还有一个字符串的长度,格式串等,让起改写后再产生别的溢出等。这要改写一般只能改写数据段里面的东西,因为这位置相对固定并且可写。2、改写函数指针性质的调用入口等。这个要写远程通用程序的难点还是shellcode
BBSbitsCNcom网管论坛
的定位问题,只要有一个定位shellcode的办法,基本上就可以有一种堆溢出的利用办法。(1)、u
ix等系统下面的s位程序的本地溢出。这个r
好听全球资料 返回顶部