全球旧事资料 分类
在libc库中的代码执行“execarg”,其中arg使一个指向一个字符串的指针参数,那么攻击者只要把传入的参数指针改向指向”bi
sh”。二2控制程序转移到攻击代码的方法所有的这些方法都是在寻求改变程序的执行流程,使之跳转到攻击代码。最基本的就是溢出一个没有边界检查或者其它弱点的缓冲区,这样就扰乱了程序的正常的执行顺序。通过溢出一个缓冲区,攻击者可以用暴力的方法改写相邻的程序空间而直接跳过了系统的检查。分类的基准是攻击者所寻求的缓冲区溢出的程序空间类型。原则上是可以任意的空间。实际上,许多的缓冲区溢出是用暴力的方法来寻求改变程序指针的。这类程序的不同之处就是程序空间的突破和内存空间的定位不同。主要有以下三种:活动纪录(Records):1、活动纪录(Activatio
Records):每当一个函数调用发生时,调用者会在堆栈中留下一个活动纪录,它包含了函数结束时返回的地址。攻击者通过溢出堆栈中的自动变量,使返回地址指向攻击代码。通过改变程序的返回地址,当函数调用结束时,程序就跳转到攻击者设定的地址,而不是原先的地址。这类的缓冲区溢出被称为堆栈溢出攻击(StackSmashi
gAttack),是目前最常用的缓冲区溢出攻击方式。函数指针(Poi
ters):2、函数指针(Fu
ctio
Poi
ters):函数指针可以用来定位任何地址空间。例如:“voidfoo”声明了一个返回值为void的函数指针变量foo。所以攻击者只需在任何空间内的函数指针附近找到一个能够溢出的缓冲区,然后溢出这个缓冲区来改变函数指针。在某一时刻,当程序通过函数指针调用函数时,程序的流程就按攻击者的意图实现了。它的一个攻击范例就是在Li
ux系统下的superprobe程序。buffers):3、长跳转缓冲区(Lo
gjmpbuffers):在C语言中包含了一个简单的检验恢复系统,称为setjmplo
gjmp。意思是在检验点设定“setjmpbuffer”,用“lo
gjmpbuffer”来恢复检验点。然而,如果攻击者能够进入缓冲区的空间,那么“lo
gjmpbuffer”实际上是跳转到攻击者的代码。象函数指针一样,lo
gjmp缓冲区能够指向任何地方,所以攻击者所要做的就是找到一个可供溢出的缓冲区。一个典型的例子就是Perl5003的缓冲区溢出漏洞;攻击
f者首先进入用来恢复缓冲区溢出的的lo
gjmp缓冲区,然后诱导进入恢复模式,这样就使Perl的解释器跳转到攻击代码上了。二3代码植入和流程控制技术的综合分析最简单和常见的缓冲区溢出攻击类型就是在一个字符串里综合了代码植入和活动纪录技术。攻击者定位一个可r
好听全球资料 返回顶部