- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
缓冲区溢出光速入门
适用:对缓冲区溢出感兴趣但一直不得要领的广大人民群众
作者:watercloud@xfocus.org
日期:2006-2 月编写,2007-9月修订
缓冲区溢出基基础
缓冲区溢出通常是向数组中写数据时,写入的数据的长度超出了数组原始定义的大小。
比如前面你定义了 int buff[10],那么只有buff[0] - buff[9]的空间是我们定义 buff时申请的合法空间,但后来往里面写入数据时出现了buff[12]=0x10 则越界了。C语言常用的
strcpy、sprintf、strcat 等函数都非常容易导致缓冲区溢出问题。
查阅C 语言编程的书籍时通常会告诉你程序溢出后会发生不可预料的结果。在网络安
全领域,缓冲区溢出利用的艺术在于让这个“不可预料的结果”变为我们期望的结果。
看下面这个演示程序:buf.c
/* buffer overflow example by watercloud@xfocus.org */
#includestdio.h
void why_here(void) /*这个函数没有任何地方调用过 */
{
printf(why u here ?!\n);
_exit(0);
}
int main(int argc,char * argv[]){
int buff[1];
buff[2]=(int)why_here;
return 0;
}
在命令行用 VC的命令行编译器编译(在 Linux下用 gcc编译并运行也是同样结果):
C:\Tempcl buf.c
运行程序:C:\Tempbuf.exe
why u here ?!
仔细分析程序和打印信息,你可以发现程序中我们没有调用过 why_here函数,但该函数却
在运行的时候被调用了!!
这里唯一的解释是 buff[2]=why_here;操作导致了程序执行流程的变化。
要解释此现象需要理解一些C语言底层(和计算机体系结构相关)及一些汇编知识,尤其是
“栈”和汇编中 CALL/RET的知识,如果这方面你尚有所欠缺的话建议参考一下相关书籍,
否则后面的内容会很难跟上。
假设你已经有了对栈的基本认识,我们来理解一下程序运行情况:
进入 main函数后的栈内容下:
[ eip ][ ebp ][ buff[0] ]
高地址 ---- 低地址
以上 3个存储单元中 eip为 main函数的返回地址,buff[0]单元就是 buff申明的一个 int
空间。程序中我们定义 int buff[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:\Temptype tex.asm
TITLE tex.c
.386P
include listing.inc
if @Version gt 510
.model FLAT
else
_TEXT SEGMENT PARA USE32 PUBLIC CODE
_TEXT ENDS
_DATA SEGMENT DWORD USE32 PUBLIC DATA
_DATA ENDS
CONST SEGMENT DWORD USE32 PUBLIC CONST
CONST ENDS
_BSS SEGMENT DWORD USE32 PUBLIC BSS
_BSS ENDS
$$SYMBOLS SEGMENT BYTE USE32 DEBSYM
$$SYMBOLS ENDS
_TLS SEGMENT DWORD USE32 PUBLIC TLS
_TLS ENDS
FLAT GROUP _DATA, CONST, _BSS
ASSUME CS: FLAT, DS: FLAT, SS: FLAT
endif
INCLUDELIB LIBC
INCLUDELIB OLDNAMES
_DATA SEGMENT
$SG775 DB why u here ?!, 0aH, 00H
_DATA ENDS
PUBLIC _why_here
EXTRN _printf:NEAR
EXTRN __e
您可能关注的文档
最近下载
- 新苏教版科学六年级上实验报告单.pdf VIP
- 2024建筑信息模型数据资产价值评估规范第1部分:公路工程.docx VIP
- 2024年碳排放核算员职业理论考试题库及答案.docx VIP
- 红色文化融入小学道德与法治课堂的教学策略探索.docx VIP
- 退役军人适应性培训实务.pptx VIP
- 红色文化融入小学美术课堂的教学策略.docx VIP
- (高清版)-B-T 40120-2021 农业灌溉设备 灌溉用热塑性可折叠软管 技术规范和试验方法.pdf VIP
- 勤俭节约,反对铺张浪费 课件 主题班会.pptx VIP
- 电影院装饰工程合同.doc VIP
- 半山半岛邮轮策划活动方案.ppt VIP
文档评论(0)