缓冲区溢出攻击初学者手册.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
缓冲区溢出攻击初学者手册

缓冲区溢出会出现在和用户输入相关缓冲区内,在一般情况下,这已经变成了现代计算机和网络方面最大的安全隐患之一。这是因为在程序的基础上很容易出现这种问题,但是这对于不了解或是无法获得源代码的使用者来说是不可能的,很多的类似问题就会被利用。本文就的目的就是教会新手特别是C程序员,说明怎么利用这种溢出环境。-?Mixter1?内存注:我在这里的描述方法为:大多数计算机上内存作为进程的组织者,但是它依赖处理器结构的类型。这是一个x86的例子,同时也可以应用在sparc上。缓冲区溢出的攻击原理是覆盖不能重写随机输入和在进程中执行代码的内存。要了解在什么地方和怎么发生的溢出,就让我们来看下内存是如何组织的。页是使用和它相关地址的内存的一个部分,这就意味着内核的进程内存的初始化,这就没有必要知道在RAM中分配的物理地址。进程内存由下面三个部分组成:代码段,在这一段代码中的数据是通过处理器中执行的汇编指令。该代码的执行是非线性的,它可以跳过代码,跳跃,在某种特定情况下调用函数。以此,我们使用EIP指针,或是指针指令。其中EIP指向的地址总是包含下一个执行代码。数据段,变量空间和动态缓冲器。堆栈段,这是用来给函数传递变量的和为函数变量提供空间。栈的底部位于每一页的虚拟内存的末端,同时向下运动。汇编命令PUSHL会增加栈的顶部,POPL会从栈的顶部移除项目并且把它们放到寄存器中。为了直接访问栈寄存器,在栈的顶部有栈顶指针ESP。2?函数函数是一段代码段的代码,它被调用,执行一个任务,之后返回执行的前一个线程。或是把参数传递给函数,通常在汇编语言中,看起来是这样的(这是一个很简单的例子,只是为了了解一下概念)。memory?addresscode0x8054321pushl?$0x00x8054322call?$0x80543a0?0x8054327ret0x8054328leave...0x80543a0popl?%eax0x80543a1addl?$0x1337,%eax0x80543a4ret这会发生什么?主函数调用了function(0);变量是0,主要把它压入栈中,同时调用该函数。函数使用popl来获取栈中的变量。完成后,返回0×8054327。通常情况下,主函数要把EBP寄存器压入栈中,这是函数储存的和在结束后在储存的。这就是帧指针的概念,允许函数使用自己的偏移地址,在对付攻击时就变的很无趣了。因为函数将不会返回到原有的执行线程。我们只需要知道栈是什么样的。在顶部,我们有函数的内部缓冲区和函数变量。在此之后,有保存的EBP寄存器(32位,4个字节),然后返回地址,是另外的4个字节。再往下,还有要传递给函数的参数,这对我们来说没有意义。在这种情况下,我们返回的地址是0×8054327。在函数被调用时,它就会自动的存储到栈中。如果代码中存在溢出的地方,这个返回值会被覆盖,并且指针指向内存中的下一个位置。3?一个可以利用的程序实例让我们假设我们要利用的函数为:void?lame?(void)?{?char?small[30];?gets?(small);?printf(%s\n,?small);?}main()?{?lame?();?return?0;?}?Compile?and?disassemble?it:#?cc?-ggdb?blah.c?-o?blah/tmp/cca017401.o:?In?function?lame:/root/blah.c:1:?the?gets;?function?is?dangerous?and?should?not?be?used.#?gdb?blah/*?short?explanation:?gdb,?the?GNU?debugger?is?used?here?to?read?the???binary?file?and?disassemble?it?(translate?bytes?to?assembler?code)?*/(gdb)?disas?mainDump?of?assembler?code?for?function?main:0x80484c8?:???????pushl??%ebp0x80484c9?:?????movl???%esp,%ebp0x80484cb?:?????call???0x80484a0?0x80484d0?:?????leave0x80484d1?:?????ret?(gdb)?disas?lameDump?of?assembler?code?for?function?lame:/*?saving?the?frame?pointer?onto?the?stack?right?before?the?ret?address?*/0x80484a0?:???????pushl??

文档评论(0)

jiupshaieuk12 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档