- 1、本文档共39页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
05(缓冲区溢出及中间人欺骗)
网络安全攻击术 缓冲区溢出与中间人欺骗 1. 缓冲区溢出 缓冲区溢出攻击是目前很流行的一种攻击技术。当目标系统收到了超过了它的最大能接收的数据量的时候,将发生缓冲区溢出。 这些多余的数据将覆盖实际的程序数据,缓冲区溢出使目标系统的程序被修改,经过这种修改的结果是在系统中产生一个后门或者使系统产生严重错误。 通过缓冲区溢出进行的攻击占所有系统攻击总数的50%以上。 1.1 缓冲区溢出的原理 缓冲区是内存中存放数据的地方。在程序试图将数据放到计算机内存中的某一位置,但没有足够空间时会发生缓冲区溢出。 通常为了不占用太多的内存,程序在运行时才决定给他们分配多少内存。如果程序在动态分配缓冲区放入太多的数据就会溢出,漏到了别的地方。 1.1 缓冲区溢出的原理 一个程序在内存中通常分为代码段、数据段和堆栈段三部分。 代码段里放着程序的机器码和只读数据。 数据段放的是程序中的静态数据。 动态数据则通过堆栈来存放。 1.1 缓冲区溢出的原理 1.1 缓冲区溢出的原理 当程序中发生函数调用时,计算机做如下操作: 首先把参数压入堆栈; 然后保存指令寄存器(IP)中的内容作为返回地址(RET); 第三个放入堆栈的是基址寄存器(BP); 然后把当前的栈指针(SP)拷贝到BP,做为新的基地址; 最后为本地变量留出一定空间,把SP减去适当的数值。 1.1 缓冲区溢出的原理 void func1(char * input) { char buffer[16];? strcpy(buffer, input); } ? void main() { ? char longstring[256]; ? int i;? ? for( i = 0; i 255; i++) ??? longstring [i] = B;? ? func1(longstring); } 1.1 缓冲区溢出的原理 程序执行的结果是“Segmentation fault”或类似的出错信息。 因为从buffer开始的256个字节都将被* input的内容B覆盖,包括EBP, EIP,甚至*input。B的16进值为0x41,所以函数的返回地址变成了0这超出了程序的地址空间,所以出现段错误。 1.1 缓冲区溢出的原理 单单的缓冲区溢出,并不会产生安全问题。只有将溢出送到能够以root权限运行命令的区域才行。这样,一个缓冲区利用程序将能运行的指令放在了有root权限的内存中,从而一旦运行这些指令,就是以root权限控制了计算机。 缓冲区溢出攻击通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。 1.2 缓冲区溢出漏洞攻击方式 缓冲区溢出漏洞可以使黑客取得机器的控制权甚至是最高权限。一般利用缓冲区溢出漏洞攻击root程序。 黑客要达到目的通常要完成两个任务: 1.在程序的地址空间里安排适当的代码; 2.通过适当的初始化寄存器和存储器,让程序跳转到安排好的地址空间执行。 A. 在程序的地址空间里安排适当的代码 在程序的地址空间里安排适当的代码往往是相对简单的。如果要攻击的代码在所攻击程序中已经存在了,那么就简单地对代码传递一些参数,然后使程序跳转到目标中就可以完成了。 另一种方式称之为“植入法” 。当向要攻击的程序里输入一个字符串时,程序就会把这个字符串放到缓冲区里,这个字符串包含的数据是可以在这个所攻击的目标的硬件平台上运行的指令序列。缓冲区可以设在:堆栈和静态数据区(初始化或者未初始化的数据)等的任何地方。也可以不必为达到这个目的而溢出任何缓冲区,只要找到足够的空间来放置这些攻击代码就够了。 B. 控制程序转移到攻击代码的形式 缓冲区溢出漏洞攻击都是在寻求改变程序的执行流程,使它跳转到攻击代码,最为基本的就是溢出一个没有检查漏洞的缓冲区,这样做就会扰乱程序的正常执行顺序。 原则上来讲攻击时所针对的缓冲区溢出的程序空间可为任意空间。但因不同地方的定位相异,所以也就带出了多种转移方式。 (1)Activation Records(激活记录) 当一个函数调用发生时,堆栈中会留驻一个Activation Records,它包含了函数结束时返回的地址。执行溢出这些自动变量,使这个返回的地址指向攻击代码,再通过改变程序的返回地址。当函数调用结束时,程序就会跳转到事先所设定的地址,而不是原来的地址。这样的溢出方式也是较常见的。 (2)Function Pointers(函数指针) Function Pointers可以用来定位函数的地址空间,攻击时只需要在任意空间里的Function Pointers邻近处找到一个能够溢出的缓冲区,然后用溢出来改变Function Pointers。当
您可能关注的文档
最近下载
- 存储网络配置指导华为oceanstor sns2124 2224 2248 3096 5192 5384产品概述.pdf VIP
- YB∕T 4001.3-2020- 钢格栅板及配套件 第3部分:钢格板楼梯踏板.pdf VIP
- 中国钢结构制造企业资质管理规定(暂行).pdf
- VTE的治疗与预防.pptx VIP
- (公共英语等级考试三级大纲词汇4107个记忆情况.doc VIP
- [医疗机构设置审批有关规定.doc VIP
- 建设工程档案管理课件.ppt VIP
- DD 2019-02 固体矿产地质调查技术要求(1:50000).pdf VIP
- xx太阳能发电公司50MWp光伏电站项目安全设施设计专篇.pdf VIP
- 物业管理单位服务费用测算明细表.pdf VIP
文档评论(0)