2.整型溢出原理
在数学概念中,整数指的是没有小数部分的实数变量;而在计算机中,整数包括长整型、整型和短整型,其中每一类又分为有符号和无符号两种类型。如果程序没有正确的处理整型数的表达范围、符号或者运算结果时,就会发生整型溢出问题,这一般又分为三种类型。
( 1)宽度溢出。由于整型数都有一个固定的长度,存储其的最大值是固定的,如果该整型变量尝试存储一个大于这个最大值的数,将会导致高位被截断,引起整型宽度溢出。
( 2)符号溢出。有符号数和无符号数在存储的时候是没有区别的,如果程序没有正确地处理有符号数和无符号数之间的关系,比如将有符号数当做无符号数对待,或者将无符号数当做有符号数对待时,就会导致程序理解错误,引起整型符号溢出问题。
( 3)运算溢出。整型数在运算过程中常常发生进位,如果程序忽略了进位,就会导致运算结果不正确,引起整型运算溢出问题。整型溢出是一种难以杜绝的漏洞形式,其大量存在于软件中。要防范该溢出问题除了注意正确编程外,还可以借助代码审核工具来发现问题。另外整型溢出本身并不会带来危害,只有当错误的结果被用到了如字符串复制、内存复制等操作中才会导致严重的栈溢出等问题,因此也可以从防范栈溢出、堆溢出的角度进行防御。
3. UAF 类型缓冲区溢出原理
UAF 类型缓冲区溢出是目前较为常见的漏洞形式,它指的是由于程序逻辑错误,将已释放的内存当做未释放的内存使用而导致的问题,多存在于 Internet Explorer 等使用了脚本解释器的浏览器软件中,因为在脚本运行过程中内部逻辑复杂,容易在对象的引用计数等方面产生错误,导致使用已释放的对象。
4.2.2 缓冲区溢出的利用
缓冲区溢出会造成程序崩溃,但要达到执行任意代码的目的,还需要做到如下两点:一是在程序的地址空间里安排适当的代码,这些代码可以完成攻击者所需的功能;二是控制程序跳转到第一步安排的代码去执行,从而完成指定的功能。
1)在程序的地址空间里安排适当的代码
在程序的地址空间里安排适当的代码包括植入法和利用已经存在的代码两种方法。
( 1)植入法:一般是向被攻