缓冲区溢出还是问题吗?C++/CLI安全编码
栈上的返回值在何处被地址值所覆盖,在这,并没有修改堆栈上的其他任何字节(包括"密探"),使得运行时的系统很难发现这次攻击。结果,控制权在GetPassword()函数返回时,传到了shellcode中。
让我们再来回顾一下,首先,它演示了堆栈上的返回地址仍可被覆盖--甚至在打开缓冲区安全检查(/GS)的情况下,这些安全检查只会减轻声明在堆栈上的自动变量缓冲区溢出;其次,它也说明了一个在Visual Studio 2005环境中编译时毫无警告信息的程序并不是没有漏洞可言。例3就消除了这个缓冲区溢出,在发送消息之前,lpszPassword的第一个字设为以TCHAR表示的缓冲区大小,对Unicode文本而言,这表示字符数。第一个字中的大小被复制进来的字符数所覆盖,同样,对编辑控件来说,复制进来的字符串并不包含一个null结尾字符,返回值(所复制的TCHAR数)必须再设为以null结尾的字符串。 例3:
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |