标签:
缓冲区溢出就是在大缓冲区数据向小缓冲区复制的过程中,由于没有注意到小缓冲区的边界,“撑爆”了较小的缓冲区,从而冲掉了和小缓冲区相邻内存区域的其他数据而引起的内存问题。缓冲区溢出是常见的内存错误之一,成功的利用该漏洞可以修改内存中变量的值,甚至可以劫持进程,执行恶意代码最终获得主机的控制权。
进程使用的内存按照功能大致分为以下四个部分:
1、代码区:这个区域存储着被装入执行的二进制机器代码,处理器会到这个区域取指并执行。
2、数据区:用于存储全局变量
3、堆区:进程可以在堆区动态的请求一定大小的内存,并在用完之后还给堆区。动态分配和回收是堆区的特点。
4、栈区:用于动态的存储函数之间的调用关系,以保证被调用函数在返回时恢复到母函数中继续执行。
栈溢出漏洞例子:
#include <stdio.h>
#define PASSWORD "1234567"
int verify_password (char *password)
{
int authenticated;
char buffer[8];//add local buffer to be overflowed
authenticated = strcmp(password,PASSWORD);
strcpy(buffer,password);//over flowed here !
return authenticated;
}
main()
{
int valid_flag=0;
char password[1024];
while(1)
{
printf("please input password: ");
scanf("%s",password);
valid_flag=verify_password(password);
if(valid_flag)
{
printf("incorrect password !\n");
}
else
{
printf ("congratulations !"\n);
break;
}
}
}
标签:
原文地址:http://www.cnblogs.com/qsjmobilesec/p/4391015.html