缓冲区溢出光速入门

缓冲区溢出光速入门

ID:9996163

大小:346.50 KB

页数:10页

时间:2018-05-20

缓冲区溢出光速入门_第1页
缓冲区溢出光速入门_第2页
缓冲区溢出光速入门_第3页
缓冲区溢出光速入门_第4页
缓冲区溢出光速入门_第5页
资源描述:

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

1、缓冲区溢出光速入门适用:对缓冲区溢出感兴趣但一直不得要领的广大人民群众作者:watercloud@xfocus.org日期:2006-2月编写,2007-9月修订缓冲区溢出基基础缓冲区溢出通常是向数组中写数据时,写入的数据的长度超出了数组原始定义的大小。比如前面你定义了intbuff[10],那么只有buff[0]-buff[9]的空间是我们定义buff时申请的合法空间,但后来往里面写入数据时出现了buff[12]=0x10则越界了。C语言常用的strcpy、sprintf、strcat等函数都非常容易导致缓冲区溢出问题。查阅C语言编程的书籍时通常

2、会告诉你程序溢出后会发生不可预料的结果。在网络安全领域,缓冲区溢出利用的艺术在于让这个“不可预料的结果”变为我们期望的结果。看下面这个演示程序:buf.c/*bufferoverflowexamplebywatercloud@xfocus.org*/#includevoidwhy_here(void)/*这个函数没有任何地方调用过*/{printf("whyuhere?!");_exit(0);}intmain(intargc,char*argv[]){intbuff[1];buff[2]=(int)why_here;retu

3、rn0;}在命令行用VC的命令行编译器编译(在Linux下用gcc编译并运行也是同样结果):C:Temp>clbuf.c运行程序:C:Temp>buf.exewhyuhere?!仔细分析程序和打印信息,你可以发现程序中我们没有调用过why_here函数,但该函数却在运行的时候被调用了!!这里唯一的解释是buff[2]=why_here;操作导致了程序执行流程的变化。要解释此现象需要理解一些C语言底层(和计算机体系结构相关)及一些汇编知识,尤其是“栈”和汇编中CALL/RET的知识,如果这方面你尚有所欠缺的话建议参考一下相关书籍,否则后面的内容会

4、很难跟上。假设你已经有了对栈的基本认识,我们来理解一下程序运行情况:进入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函数

5、的返回地址改为了why_here函数的入口地址。这样main函数结束后返回的时候将这个地址作为了返回地址而加以运行。上面这个演示是缓冲区溢出最简单也是最核心的溢出本质的演示,需要仔细的理解。如果还不太清楚的话可以结合对应的汇编代码理解。用VC的命令行编译器编译的时候指定FA参数可以获得对应的汇编代码(Linux平台可以用gcc的-S参数获得):C:Temp>cl/FAtex.cC:Temp>typetex.asmTITLEtex.c.386Pincludelisting.incif@Versiongt510.modelFLATelse_TEXT

6、SEGMENTPARAUSE32PUBLIC'CODE'_TEXTENDS_DATASEGMENTDWORDUSE32PUBLIC'DATA'_DATAENDSCONSTSEGMENTDWORDUSE32PUBLIC'CONST'CONSTENDS_BSSSEGMENTDWORDUSE32PUBLIC'BSS'_BSSENDS$$SYMBOLSSEGMENTBYTEUSE32'DEBSYM'$$SYMBOLSENDS_TLSSEGMENTDWORDUSE32PUBLIC'TLS'_TLSENDSFLATGROUP_DATA,CONST,_BSSAS

7、SUMECS:FLAT,DS:FLAT,SS:FLATendifINCLUDELIBLIBCINCLUDELIBOLDNAMES_DATASEGMENT$SG775DB'whyuhere?!',0aH,00H_DATAENDSPUBLIC_why_hereEXTRN_printf:NEAREXTRN__exit:NEAR_TEXTSEGMENT_why_herePROCNEARpushebpmovebp,esppushOFFSETFLAT:$SG775call_printfaddesp,4push0call__exitaddesp,4popebpr

8、et0_why_hereENDP_TEXTENDSPUBLIC_main_TEXTSEGMENT_buff$=-4;siz

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

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

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