CTF-PWN栈迁移

本文介绍了栈帧的概念,特别是在C语言函数调用中的作用。栈迁移是一种利用栈溢出漏洞进行攻击的技术,当常规栈空间不足时,通过控制ebp和ret来拓展栈空间。文章详细解析了栈迁移的条件、原理和攻击过程,并提供了一个实例来说明如何在main函数调用漏洞函数时实施栈迁移攻击。同时,文中还提及了攻击过程中需要的连续两次leave_ret操作和栈帧结构的关键作用。
摘要由CSDN通过智能技术生成

栈帧介绍

C语言函数调用栈帧_大佬菜菜带带的博客-CSDN博客

栈迁移背景

在栈溢出构造rop链时,有时我们会遇到构造空间不够的情况。比如我们需要构造0x30字节的数据,而read()只能读入0x28字节。但是我们可以控制ebp及ret的值,此时可以利用栈迁移的方法拓展栈空间。

栈迁移条件

能够控制rbp及ret的值。

拥有一块可执行的内存,并且可以连续两次控制该内存。

栈迁移原理

在函数调用完返回时,会执行leave,ret两条汇编指令。

leave: mov esp ebp; pop ebp
ret : pop eip

根据栈帧的结构,pop ebp后栈顶位置就是要pop到eip中的值,即此时ret返回的地址为栈顶esp指向的内存中的地址,而esp指向的位置又可以由mov esp ebp控制。所以只要我们控制了ebp的地址,就可以间接控制函数的返回地址,从而达到攻击的目的。在攻击时我们需要连续两次执行leave_ret,从而控制函数返回地址。而一般函数在返回时会自动执行一次leave_ret。我们在攻击时,先将ebp地址改为我们所需要的地址,再将ret地址改为leave_ret的地址,便可达到连续两次执行leave_ret的目的。

攻击过程

我们以main函数调用漏洞函数fun()为例演示攻击过程

 

例题

链接:https://pan.baidu.com/s/1Lam6HamM0BWZgXh2RHCPrg?pwd=yk2j 
提取码:yk2j

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

更正了一张图片,最上面的彩色区域为bss段,即shellcode所在的区域。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值