啥也不会还想学PWN

今天接着学习栈溢出的基本知识。

学习栈溢出首先就要明白栈溢出的过程。我们直接拿实例来学习(这样效率会高一点)

如上图所示,这是一个栈段的简化图。栈由高地址向低地址增长,图中上方是高地址,下方是低地址。我们看,buf 的长度为80,紧邻b函数的rbp指针和返回地址。此时,整个栈没有问题,没有发生栈溢出。可是,buf的长度是可以人为改变的,那么如果我们向buf中读入的长度超过80字节呢?我们假设,向buf中读入:'X'*80+'A'*8+'B'*8,这样,长度超过,发生栈溢出。那么,就会发生下面图中的情况:

和第一幅图对比,能看到,原本存储b函数的rbp地址的内容,都被覆盖成了“AAAAAAAA”这样的无效内容,返回地址也被覆盖成了“BBBBBBBB”。这个时候,如果返回地址,那么就会产生错误,因为这串无效字符被翻译为二进制后将不会是一个合法地址。

换一个想法,如果我们想达到攻击的效果,那么我们是不是在那些“无效内容”中操作就可以了?

假设我们想让程序跳转到一个目标地址:target addr 。那,在我们知道目标所开辟的这段这段栈空间的大小后,我们先让垃圾内容填充这些大小的空间,然后再写上这个目标的target addr,就可以了。如下图:

 这就是大致过程吧。

好,今天的栈溢出过程就到这,慢慢来吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值