缓冲区溢出原理简单介绍
传送门:缓冲区溢出的基本原理(一).
一句话概括: 由于程序的运行机制,假设利用strcpy()函数进行字符串赋值,因
定义字符串长度及传入字符串长度不一致(过长),从而占用了ebp(栈底)和call(函数)返回地址的栈区。基于此可利用修改函数调用结束后的返回地址,从而使计算机毫不犹豫的执行由我们编写的代码(shellcode)
调用前:
push eip
push ebp
mov ebp,esp
调用完:
mov esp,ebp
pop ebp
ret
#include<stdio.h> //引入头文件
#include<string.h>
#include<windows.h>
char name[] = "zhemuzhemumuXXXX"; //定义全局变量
int main() //返回值 主函数main()
{
LoadLibrary("user32.dll");
char buffer[8]; //开辟8个字节的空间用来存储变量name
strcpy(buffer,name); //内置函数(作用):将变量name内容赋值给buffer变量
printf("%s\n",buffer); //输出在控制台
getchar(); //方便观察 作用:等待用户输入按键
return 0; //返回值
}
text3.c中 ,变量name赋值给buffer后并引起缓冲区溢出,其中mumu占用ebp栈底数据,而XXXX为返回的地址。