第一范文网 - 专业文章范例文档资料分享平台

C语言源程序的缓冲区溢出漏洞分析及解决方案(2)

来源:用户分享 时间:2021-06-03 本文由软妹界大佬 分享 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

266沈 阳 化 工 学 院 学 报 2008年

printf(d%s\nd,buffer);}

voidmain(){

charstr[16]={.a.,.a.,.a.,.a.,.a.,.a.,.a.,.a.,.a.,.a.,.a.,.a.,.a.,.a.,.a.,0};

function(str);

}

当主函数调用function时先将str参数入栈,而后是指令寄存器EIP,基址寄存器EBP,最后将function函数中的局部变量buffer入栈.当执行strcpy函数的时候,要将参数str传过来的16个字符送入字符数组长度仅为1的buffer中.此时会产生数组越界,即buffer这个缓冲区溢出了!具体描述如图1所示

.

char*strcpy(char*dst,constchar*src){

char*address=dst;

while(*dst++=*src++); returnaddress;

}

代码3:C库函数中的strcat函数原型char*strcat(char*dst,char*src){

char*cp=dst; while(*cp)

++cp; /*Findtheendofdst*/ while(*cp++=*src++) /*Copysrctotheendofdst*/

returndst;}

11211 stropy函数

代码2是C库函数中的stropy函数.函数功能是将源串src传入到目的串dst中.实现此功

图1 代码1调用function函数时的内存变化

由于buffer只申请了一个单位的空间,向buffer传数据时多余的15个字符将沿栈顶向栈底压入,填充并覆盖了EBP,EIP和str的内容.注意此时EIP的内容被改变了!如果攻击者将这个缓冲区溢出后,将EIP的内容填充为一段恶意代码的地址,那么当程序溢出后便会立即跳到这段已经准备好的恶意代码处去执行.这时攻击者的企图便得逞了.

观察并调试过以上程序后,可以了解到,程序中引用的strcpy函数并没有对所操作的参数buffer的边界进行校验,而是直接不加判别的将str中的数据传了过去,包括str的结束标志.正是由于有这种漏洞的存在,才使C或C++中缓冲区溢出攻击有可乘之机.在程序连接和编译的时候都没有给出出错信息,直到程序执行时才可以使程序员意识到这样的一个错误存在.C语言数组的越界问题在其他文献中也有详细提及

[4]

能用了一个while语句,其中将src中的每个元素赋给了dst的元素.在判断时仅仅判断了src串是否结束,如果结束就结束循环.而并没有判断dst串是否结束,没有判断dst是否到了临界边缘.导致即使dst的长度小于src,函数仍允许src赋值给dst.则dst这个缓冲区被溢出了!这个不判断结束边界的函数存在着缓冲区溢出漏洞.

11212 strcat函数

代码3是C库函数中的strcat函数.函数功能是将源串src接到目的串dst的后面.虽然在第一个while语句中函数判断了cp即dst的边界,但结束后,在第二个while中还是继续将src中的字符赋给cp.很明显,第一个while判断cp是否结束,并不是考虑到会溢出,而只是想让src接在dst的尾部.那么同样cp缓冲区被溢出了!所以此函数也存在漏洞.

综上两个C函数,可以清晰地看到,最直接的导致缓冲区溢出的函数漏洞就是对变量不进行边界校验.当堆栈溢出时覆盖了栈低端的其他空间尤其是指令寄存器中的EIP.诸如此类的C函数还有许多,在此不一一列举.

.对C语言中的一些导致缓冲区漏洞的典

型函数的源代码及漏洞根源作一讨论.112 存在漏洞的C函数(strcpy和strcat)

搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新经管营销C语言源程序的缓冲区溢出漏洞分析及解决方案(2)全文阅读和word下载服务。

C语言源程序的缓冲区溢出漏洞分析及解决方案(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/wenku/1209853.html(转载请注明文章来源)
热门推荐
Copyright © 2018-2022 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top