缓冲区溢出:栈溢出、格式化字符串和堆溢出

一、栈溢出

1、定义

栈溢出:在C语言中,栈溢出是由于C语言系列没有内置检查机制来确保复制到缓冲区的数据不得大于缓冲区的大小,因此当这个数据足够大的时候,将会溢出缓冲区的范围。

2、栈的操作

后入先出,后放入栈中的先出栈,从栈顶出栈
进栈:PUSH,将元素放入栈中
出栈:POP,从栈顶取最上方元素拿出
栈顶指针:ESP,ESP是栈指针寄存器,其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶
栈低指针:EBP,EBP是基址指针寄存器,其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部。

3、栈溢出

二、格式化字符串漏洞

1、原理

格式化字符串%n ,它的功能是将%n之前打印出来的字符个数,赋值给一个变量。
格式化字符串%x,它的作用是输出16进制数,可以利用它来输出内存中的地址。
直接使用printf ()时,若输入的scanf字符串包含%x,会按照格式化字符串打印出
在使用printf(%x)时,会输出一段内存地址,可以用数组来进行地址定位。
然后使用printf(%n)进行内容更改

堆溢出

1、原理

用精心构造的数据去溢出下一个块的块首,改写块首中的前向指针和后向指针,这种能够向内存任意位置写入任意数据

参考:
百度百科
https://blog.csdn.net/yan_star/article/details/88937283
https://blog.csdn.net/qq_43394612/article/details/84900668

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容