缓冲区溢出攻击原理

缓冲区溢出攻击原理

ID:9998091

大小:264.99 KB

页数:11页

时间:2018-05-20

缓冲区溢出攻击原理_第1页
缓冲区溢出攻击原理_第2页
缓冲区溢出攻击原理_第3页
缓冲区溢出攻击原理_第4页
缓冲区溢出攻击原理_第5页
资源描述:

《缓冲区溢出攻击原理》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、缓冲区溢出攻击原理一、缓冲区溢出攻击原理缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。利用缓冲区溢出攻击,可以导致程序运行失败、系统当机、重新启动等后果。更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。缓冲区溢出是一种系统攻击的手段,通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。据统计,通过缓冲区溢出进行的攻击占所有系统攻击总数的80%以上。知道了这个数据我非常震惊

2、,以前进行的活动大都是找各方面的黑客软件然后学习这个软件怎么用,但是众所周知,攻击型的黑客软件都是各大杀毒软件的活靶子,基本上几天就不能用了,所以学习了这些软件的原理,我也能写几行代码,不再依赖黑客软件,就算汇编语言难掌握,也可以保存好常用的代码,其使用方法是比较简单的,下面是我学习的过程,由于没有经验,肯定有不少疏漏,也肯定不少地方绕了弯路,但自己学的过程中也获得了更多乐趣和收货时的喜悦,下面是具体介绍。我用的是windowsxpsp3编程软件是vc6.0。还用到了olldbg2.0。都是很常用的工具

3、。先介绍一下缓冲区溢出攻击的基础知识储备,进程内存空间是我最先接触的,现在看来也是最必要的基础,windows系统核心内存区间0xFFFFFFFF~0x80000000(4G~2G)为Win32操作系统保留用户内存区间0x00000000~0x80000000(2G~0G)堆:动态分配变量(malloc),向高地址增长进程使用的内存可以按照功能大致分成以下4个部分。(1)代码区:这个区域存储着被装入执行的二进制机器代码,处理器会到这个区域取指并执行。(2)数据区:用于存储全局变量等。(3)堆区:进程可以

4、在堆区动态地请求一定大小的内存,并在用完之后归还给堆区。动态分配和回收是堆区的特点。(4)栈区:用于动态地存储函数之间的调用关系,以保证被调用函数在返回时恢复到调用函数中继续执行。在Windows平台下,高级语言写出的程序经过编译链接,最终会变成PE文件。当PE文件被装载运行后,就成了所谓的进程。PE文件代码段中包含的二进制级别的机器代码会被装入内存的代码区,处理器将到内存的这个区域一条一条地取出指令和操作数,并送入算术逻辑单元进行运算;如果代码中请求开辟动态内存,则会在内存的堆区分配一块大小合适的区域

5、返回给代码区的代码使用;当函数调用发生时,函数的调用关系等信息会动态地保存在内存的栈区,以供处理器在执行完被调用函数的代码时,返回母函数。文字比较抽象,我是通过下面三张图理解的,而且这部分内容在大学计算机基础里讲过一些。堆栈(简称栈)是一种先进后出的数据表结构。栈有两种常用操作:压栈和出。栈有两个重要属性:栈顶和栈底。内存的栈区实际上指的是系统栈。系统栈由系统自动维护,用于实现高级言的函数调用。每一个函数在被调用时都有属于自己的栈帧空间。当函数被调用时,系统会为这个函数开辟一个新的栈帧,并把它压入栈中,

6、所以正在运行的函数总在系统栈的栈顶。当函数返回时,系统栈会弹出该函数所对应的栈帧空间。win32系统提供了两个特殊的寄存器来标识系统栈最顶端的栈帧。ESP:扩展堆栈指针。该寄存器存放一个指针,它指向系统栈最顶端那个函数帧的栈顶。EBP:扩展基指针。该寄存器存放一个指针,它指向系统栈最顶端那个函数栈的栈底。此外,EIP寄存器(扩展指令指针)对于堆栈的操作非常重要,EIP包含将被执行的下一条指令的地址。函数栈帧:ESP和EBP之间的空间为当前栈帧,每一个函数都有属于自己ESP和EBP指针。ESP表示了当前栈

7、帧的栈顶,EBP标识了当前栈的栈底。在函数栈帧中,一般包含以下重要的信息:局部变量:系统会在该函数栈帧上为该函数运行时的局部变量分配相应2.函数返回地址:存放了本函数执行完后应该返回到调用本函数的母函数(主调函数)中继续执行的指令的位置。在Win32操作系统中,当程序里出现函数调用时,系统会自动为这次函数调用分配一个堆栈结构。函数的调用大概包括下面几个步骤:参数入栈:一般是将被调函数的参数从右到左依次压入系统栈(即调用该函数的母函数的函数栈帧)中。返回地址入栈:把当前EIP的值(当前代码区正在执行指令的

8、下一条指令的地址)压入栈中,作为返回地址。代码区跳转:将EIP指向被调用函数的入口处。栈帧调整:主要是用来保持堆栈平衡,这个过程可以由被调用函数执行,也可以由母函数执行,具体由编译器决定。首先是将EBP压入栈中(用于调用返回时恢复原堆栈),并把母函数的ESP的值送入寄存器EBP中,作为新的基址(新栈帧的EBP实际上保存的是母函数的ESP),最后,为本地变量留出空间,把ESP减去适当的值(注意:内存分配是以字为单位的)下面就是怎样让缓冲区溢出

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。