一、 实验目的
通过实验,使我们对缓冲区溢出攻击的原理更加了解,对此攻击方式更加得心应手。
二、 实验原理
当向缓冲区里写入的数据超过了为其分配的大小时,就会发生缓冲区溢出。攻击者可以利用缓冲区溢出来窜改进程运行时栈,从而改变程序的正常流向。
三、 实验分析
1) main函数在调用f函数前,首先将参入的参数压入栈中;
2) 接着,将当前程序执行的下一个的位置EIP加入栈中,后面f函数返回时用;
3) 进入f函数,f函数首先将当前的EBP压入栈中,接着mov esp, ebp(将EBP指向当前的栈顶),接着以EBP为基础构建自己的函数帧结构。函数帧结构中包含当前函数的局部变量(攻击的示例程序的buffer变量及在这里面)
4) 在f函数执行完成后,会将栈中的EBP值弹出,恢复到EBP寄存器中,还原ESP寄存器,接着弹出EIP变量,程序根据EIP变量指向的位置接着执行main函数后面的程序部分。
图1
main函数调用f函数的栈结构如下图所示:
图2
对buf进行数据拷贝,得到的结果如下图所示:
图3
四、 实验步骤
首先,就像教程上做的,将32位编程的一些库加进去: