缓冲区溢出实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三:缓冲区溢出实验
缓冲区溢出实验
实验目的:
(1)学会用反汇编调试程序,观察变量、堆栈数据变化情况
(2)清楚缓冲区溢出原理
(3)进一步思考如何防范基于缓冲区溢出的攻击
硬件环境:
处理器:Intel(R) Core(TM)i3-2310M CPU @2.10GHZ 2.10GHZ
内存:4.00G
软件环境:
Windows 7
Visual Studio C++6.0
实验步骤:
首先观察老师给的代码,初步了解了代码执行之后会发生的结果,以及所造成的后果。
代码如下:
#include
#include
#include
main()
{
char passwd[8] = {"2e4rfe"};
char yourpasswd[8] = {""};
again:
puts("please input passwd?");
gets(yourpasswd);
if (strcmp(yourpasswd, passwd)==0)
goto ok;
puts("passwd error");
goto again;
exit(-2);
ok:
puts("correct!");
// do work you want
getchar();
return 0;
}
然后利用VC++6.0进行反汇编调试:
1.初始状态如下:
红色区域为堆栈内容
2.password存入堆栈(红色区域)和yourpassword也存入堆栈(红色区域)位于password前面
3此时接着往下运行,我们可以发现yourpassword是8位的,我们写入了10位数据qqqqqqqqqq,将产生溢出,qq将溢出,因为password位于yourpassword之后,所以yourpassword溢出的2位数据qq将覆盖password的前两位2e。“.”表示读取到此。
下图可以看出此时qq溢出:
5第二次循环时因为“.”表示读取到此处,所以password因为yourpassword的溢出变为qq此时我们再输入密码qq将匹配正确
密码正确如下: