缓冲区溢出之栈溢出原理(下篇)

0x01 字符串操作函数strcpy

中篇上篇对栈进行了分析

1、strcpy的原型:char *strcpy(char *dest, const char *src) 意思是将src源地址的字符串复制到目标地址dest,这个函数有一个缺陷就是目标地址的大小无法预测,如果源地址大于目标地址则会发生溢出,之后微软做了安全函数的处理
2、实例程序(上篇的)和逻辑图
在这里插入图片描述在这里插入图片描述
3、修改一下这个程序,将指针str指向的字符串拷贝到str_2的地址中
在这里插入图片描述
4、逻辑图
在这里插入图片描述
5、这样的话溢出所需要的字节数就是4*10=40(从0x240FF00算起),刚好40个字节,我们的shellcode(漏洞验证代码)也就是str指针指向的字符串长度也是40个字节,OD载入运行到main函数结束处,观察堆栈窗口
在这里插入图片描述
6、返回地址0x240FF24已经变成了AAAA的16进制小尾方式的地址0x41414141
在这里插入图片描述
7、最后程序运行出错,不知道41414141这个地址在哪里
在这里插入图片描述

原文地址:https://www.cnblogs.com/csnd/p/11800545.html