缓冲区溢出

(一)实验内容
1、理解缓冲区溢出的基本原理。
2、利用函数strcpy()编程实现一个简单的缓冲区溢出实例。
3、总结预防缓冲区溢出的方法。
(二)实验验证原理
1、缓冲区溢出:缓冲区溢出是一种常见且危害很大的系统攻击手段,通过向程序的缓冲区写入超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其他的指令,以达到攻击的目的。
2、C语言编程中,一些不作边界检查的字符串拷贝函数(如strcpy)容易造成缓冲区溢出。
(三)实验代码

#include <stdio.h>
int main(int argc, char *argv[])
{
    char sz1[8];
    char sz2[8];
    memset(sz1,0x00,sizeof(sz1));
    strcpy(sz1,"hello");
    printf("sz1=[%s]\n",sz1);
    while(1)
    {
        memset(sz2,0x00,sizeof(sz2));
        printf("please input passwd:\n"); 
        scanf("%s",sz2);
        printf("---sz1=[%s]\n",sz1);
        printf("---sz2=[%s]\n",sz2);
        if(0 == strcmp(sz1,sz2))
        {            
            printf("----hello world-----\n");
            break;
        }
        else
        {
            printf("----ERROR----\n");
            continue;
        }
    }
    return 0;
}

(四)实验过程
正常输入:

错误输入:

溢出输入:

(五)预防缓冲区溢出方法:
在编写程序过程中,程序员有责任和义务养成安全编程的思想,应该熟悉那些可能会产生漏洞或需慎用的函数,清楚那些在编程中要小心使用的函数(特别是在使用C语言时),例如:gets()、strcpy()等等。在软件测试阶段,要专门对程序中的每个缓冲区作边界检查和溢出检测。同时,还应该添加保护,让攻击者无法执行缓冲区内的命令。但是,由于程序编写者的经验不足和测试工作不够全面、充分,目前还不可能完全避免缓冲区溢出漏洞,因此这些漏洞在已经使用以及正在开发的软件中还是有存在的可能,还需要在使用软件时,对它做实时的监测。

posted @ 2021-10-31 16:07  20191318王泽文  阅读(152)  评论(0)    收藏  举报