网络渗透技术入门篇.doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
网络渗透技术入门篇 2011-08-18 09:59:21????来源: 互联网 缓冲区溢出通常是向数组中写数据时,写入的数据的长度超出了数组原始定义的大小。 比如前面你定义了intbuff[10],那么只有buff[0]-buff[9]的空间是我们定义buff时 申请的合法空间,但后来往里面写入数据时出现了 ... 缓冲区溢出通常是向数组中写数据时,写入的数据的长度超出了数组原始定义的大小。 比如前面你定义了intbuff[10],那么只有buff[0]-buff[9]的空间是我们定义buff时 申请的合法空间,但后来往里面写入数据时出现了buff[12]0x10则越界了。C语言常用的 strcpy、sprintf、strcat等函数都非常容易导致缓冲区溢出问题。 ? ? 查阅C语言编程的书籍时通常会告诉你程序溢出后会发生不可预料的结果。在网络安 全领域,缓冲区溢出利用的艺术在于让这个“不可预料的结果”变为我们期望的结果。 看下面这个演示程序:buf.c /*buffer overflow exampleby 2133529@*/ #includestdio.h voidwhy_here(void) /*这个函数没有任何地方调用过*/ { ? ?? ???printf(whyu here?! ); ? ?? ???_exit(0); } intmain(intargc,char * argv[]) { ? ?? ???intbuff[1]; ? ?? ???buff[2] (int)why_here; ? ?? ???return 0; } 在命令行用VC的命令行编译器编译(在Linux下用gcc编译并运行也是同样结果): C:\Tempclbuf.c 运行程序: C:\Tempbuf.EⅩE whyu here?! 仔细分析程序和打印信息,你可以发现程序中我们没有调用过why_here函数,但该函数却 在运行的时候被调用了!! 这里唯一的解释是buff[2]why_here;操作导致了程序执行流程的变化。 要解释此现象需要理解一些C语言底层(和计算机体系结构相关)及一些汇编知识,尤其是 “栈”和汇编中CALL/RET的知识,如果这方面你尚有所欠缺的话建议参考一下相关书籍, 否则后面的内容会很难跟上。 假设你已经有了对栈的基本认识,我们来理解一下程序运行情况: 进入main函数后的栈内容下: [ eip ][ ebp ][buff[0]] 高地址??----? ?? ?? ?低地址 以上3个存储单元中eip为main函数的返回地址,buff[0]单元就是buff申明的一个int 空间。程序中我们定义intbuff[1],那么只有对buff[0]的操作才是合理的(我们只申请 了一个int空间),而我们的buff[2]why_here操作超出了buff的空间,这个操作越界了, 也就是溢出了。溢出的后果是:对buff[2]赋值其实就是覆盖了栈中的eip存放单元的数 据,将main函数的返回地址改为了why_here函数的入口地址。这样main函数结束后返回的时候将这个地址作为了返回地址而加以运行。 上面这个演示是缓冲区溢出最简单也是最核心的溢出本质的演示,需要仔细的理解。如果还 不太清楚的话可以结合对应的汇编代码理解。 用VC的命令行编译器编译的时候指定FA参数可以获得对应的汇编代码(Linux平台可以用 gcc的-S参数获得): C:\Tempcl/FA tex.c C:\Temptypetex.asm ? ?? ???TITLE??tex.c ? ?? ???.386P include listing.inc if@Version gt510 .modelFLAT else _TEXT??SEGMENTPARA USE32PUBLIC CODE _TEXT ENDS _DATA??SEGMENTDWORDUSE32PUBLIC DATA _DATA??ENDS CONST??SEGMENTDWORDUSE32PUBLIC CONST CONST ENDS _BSS??SEGMENTDWORDUSE32PUBLIC BSS _BSS??ENDS $$SYMBOLS? ?? ?? ? SEGMENTBYTEUSE32 DEBSYM $$SYMBOLS? ?? ?? ? ENDS _TLS??SEGMENTDWORDUSE32PUBLIC TLS _TLS??ENDS FLAT??GROUP_DATA,CONST,_BSS ? ?? ?? ?ASSUME CS:FLAT,DS:FLAT,SS:F

文档评论(0)

qwd513620855 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档