码迷,mamicode.com
首页 > 其他好文 > 详细

缓冲区溢出漏洞

时间:2015-04-03 22:19:33      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:

缓冲区溢出就是在大缓冲区数据向小缓冲区复制的过程中,由于没有注意到小缓冲区的边界,“撑爆”了较小的缓冲区,从而冲掉了和小缓冲区相邻内存区域的其他数据而引起的内存问题。缓冲区溢出是常见的内存错误之一,成功的利用该漏洞可以修改内存中变量的值,甚至可以劫持进程,执行恶意代码最终获得主机的控制权。

进程使用的内存按照功能大致分为以下四个部分:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!