sprint 写入输入缓冲区_缓冲区溢出之栈溢出pwnme

本文介绍了缓冲区溢出的概念,特别是栈溢出的原理,包括PUSH、POP操作,EIP和EBP寄存器的作用。通过分析栈溢出实例pwnme,阐述了如何利用栈溢出构造shellcode并控制程序流程。
摘要由CSDN通过智能技术生成

声明:由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,知微安全以及文章作者不为此承担任何责任。知微安全拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经知微安全允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。

0x01 缓冲区?溢出?缓冲区溢出?

刚开始看缓冲区溢出的时候,满脑子都是疑问三连,缓冲区溢出是什么?为什么会溢出?溢出了会咋样? 684e12c930cef0d8bc838c4d6f60b791.png 好的,一一梳理,先明确一些基础概念。 什么是缓冲区? 缓冲区是程序运行期间在内存中分配的一个连续的空间,用于保存包括字符数组在内的各种数据类型。从磁盘里取信息时,先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,这样就可以减少磁盘的读写次数,再加上计算机对缓冲区的操作效率高于对磁盘,因此可提升运行速度。 什么是溢出? 溢出就是所填充的数据超出了原有的分配空间,就像容量500ml的水杯被倒入了700ml的开水。 什么是缓冲区溢出? 缓冲区溢出就是指就是向固定长度的缓冲区中写入超出其预先分配长度的内容,造成缓冲区中数据的溢出,从而覆盖了缓冲区周围的内存空间。因此,攻击者可以借此精心构造填充数据,导致程序运行失败,或改变程序原有的跳转,去执行恶意指令,最终获取控制权。常见的缓冲区溢出有栈溢出、堆溢出、BSS溢出和格式化串溢出,本文主要介绍栈溢出。

0x02 栈溢出原理

当程序运行时,计算机会在内存区域中开辟一段连续的内存块,包括代码段、数据段和堆栈段三部分,存放形式如下图: a8d5cd0050114c2309452a0e95ecdd38.png 代码段 (.text)存放着程序的机器码和只读数据,可执行指令就是从代码段中取的。 数据段 包括(.data)和(.bss),数据段(.data)存放全局和静态的已初始化变量,数据段(.bss)存放全局和静态的未初始化变量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值