溢出漏洞是一种计算机程序的可更正性缺陷,全名为“缓冲区溢出漏洞”,由程序中某个或某些输入函数对接收数据的边界验证不严密造成的。
通过数组越界的操作解析缓冲区溢出漏洞。
程序:越界访问值(工具:vs2008)
#include <stdio.h>
#include <stdlib.h>
int main(){
int a[20];
int i;
for (i=0;i<20;i++)
a[i]=i*2;
printf("a[20]=%d
",a[20]);
system("pause");
return 0;
}
在printf("a[20]=%d
",a[20]);处下断点,调试执行。程序为a[0]-a[19]赋了值,a[20]处于数组外,尝试读取其值。查看EBP=00CEFED0,[EBP-4]=cccccccc,它即为a[20]的值。
退出调试,执行代码,可见a[20]的值为-858993460,使用计算器,可知其16进制为cccccccc,符合预期。
程序:越界赋值(工具:vs2008)
#include <stdio.h>
int main(){
int a[20];
int i;
for (i=0;i<20;i++)
a[i]=i*2;
a[20]=1;
printf("a[20]=%d
",a[20]);
system("pause");
return 0;
}
分别在a[20]=1;和printf("a[20]=%d
",a[20]);加断点,调试执行。
第一次停留后,EBP=0030FEB0,搜索这个地址,可见内容,【EBP-4】=cccccccc。
执行此语句,可见【EBP-4】=1,成功越界赋值。