01
栈溢出
如果向栈上声明的缓冲区中复制数据,但是复制到数据量又比缓冲区大的时候,就会发生栈溢出。
在栈上声明的各种变量的位置紧临函数调用程序的返回地址。若用户输入的数据未经验证就传递给strcpy这样的函数,则会导致变量值被攻击者指定的值所改写或调用函数的返回地址将被攻击者选择的地址所覆盖,打乱程序正常运行流程,转而执行恶意代码。
防范栈溢出的有效方法有:禁止栈执行,从而阻止攻击者植入恶意代码;编写安全可靠的代码,始终对输入的内容进行验证;利用编译器的边界检查实现栈保护。
02
栈溢出实验分析
1、打开vc6,新建一个C++ Source File,取名为zhanyichu。
2、输入以下代码,并编译。
using namespace std;
void function(string str)
{
int x = 10;
char buf[10];
strcpy(buf, str.c_str());
cout << "x = " << x << endl;
}
int main(int argc, char* argv[])
{
string test;
cout << "Please input a string:t";
cin >> test;
function(test);
system("pause");
return 0;
}
3、运行程序,先输入10个字符以内的字符串,得到一个x的值;
4、再输入大于10个的字符串。可以看出,字符串超过了一定长度之后,会导致x的值的变化,这就是溢出的结果。
5、实验完毕,关闭虚拟机和所有窗口。
如有侵权,请联系删除。
扫码关注我们
查看更多精彩内容
原文始发于微信公众号(长风实验室):溢出漏洞-栈溢出漏洞与原理分析
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论