缓冲区溢出实验(选做)
缓冲区溢出实验(选做)
1.实验环境:使用Windows XP,VC6环境
2.缓冲区溢出概念:缓冲区溢出是一种常见且危害很大的系统攻击手段,通过向程序的缓冲区写入超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其他的指令,以达到攻击的目的。
3.代码编写:C语言编程中,一些不作边界检查的字符串拷贝函数(如strcpy)容易造成缓冲区溢出。
经过编写与调试,最终成功调试的代码如下(出现溢出的):
#include "string.h"
\#include "stdio.h"
\#include<windows.h>
char name[]="AAAAAAAAAABCD";(实际截图略有修改)
int main()
{
char output[8];
strcpy(output, name);//内存拷贝,如果name长度超过8,则出现缓冲区溢出
for(int i=0;i<8&&output[i];i++)
{
printf("\\0x%x",output[i]);
}
printf("\n");
return 0;
}
4.代码验证原理:在程序中建立了一个字符串数组,长度为8,但输入内容超过8位,在内存拷贝的过程中出现缓冲区溢出,因此在终端只能显示八位十六机制数,并显示报错(不同系统中可能并不相同),而在修改代码后,实际输入位数小于或等于8位时,便可以完全输出并不再报错。
5.实验结果截图:
6.总结预防缓冲区溢出的方法:
(1)关闭不常使用的端口与服务,这些未关闭的端口、服务很容易成为黑客的攻击目标,一个合格的管理员应该清楚自己主机上所安装、运行的各种端口与服务,并多次多加防范
(2)拥有良好的代码编写规范,严格按照标准代码编写规范进行编写,而不要图省事,养成不良编写习惯,尽量避免代码中的安全隐患。
(3)及时更新系统并安装安全补丁,一些大的漏洞一经公布便会有系统厂商推出相应的安全补丁
(4)以所需的最小权限使用电脑,避免黑客直接利用被攻击者的账户进行攻击
(5)经常检查防火墙等安全软件,一旦出现异常流量波动便立刻检查是否遭受攻击,避免更多的损失。