栈溢出—栈结构

栈帧结构概览

在这里插入图片描述

  • 父函数栈帧的栈底指针的值与子函数栈帧紧邻,以方便恢复父函数栈底指针
  • 局部变量保存在栈帧的local variabls,这里也是最容易发生栈溢出的位置,这里受用户控制,如果写入的超长,会覆盖到其他的控制信息
  • 子函数所用的参数保存在父函数的arguments
  • ebpesp中间是一个栈帧。紧邻高地址就是父函数的栈帧

在这里插入图片描述

  • 定义
    • esp用来存储函数调用栈的栈顶地址,在压栈和退栈时发生变化
    • ebp用来存储当前函数状态的基地址,在函数运行时不变,可以用来索引确定函数参数或局部变量的位置
    • eip用来存储即将执行的程序指令的地址
      将被调用的函数的参数压入栈内是倒序压入

发生函数调用时,栈发生的变化

- 先将被调用函数的参数按照逆序依次压入栈。如果被调用函数不需要参数,则没有这一步骤
- 这些参数会保存在调用函数的函数状态内,之后压入栈内的数据都会作为被调用函数的函数状态来保持
- 在压入所有参数后,会将调用函数进行调用后的下一条指令地址作为返回地址压入栈内,使得调用函数的`eip`信息得以保存
- 再将当前的`ebp`寄存器的值即调用函数的基地址压入栈内,并更新`ebp`寄存器的值为当前栈顶的地址

在这里插入图片描述

  • 再之后将被调用函数的局部变量压入栈内
    栈顶永远是当前正在执行的指令所属的函数对应的栈帧

程序执行完毕返回的过程

- 先将被调用函数的局部变量弹出栈外,将esp增大到ebp,相当于esp-ebp中间的空间不再使用
- 将调用函数的ebp弹出栈外,并存到eip寄存器内
- 至此调用函数的函数指令就全部恢复了
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PWN是一种以攻破计算机系统中的漏洞为目的的竞赛类型,参赛者需要利用漏洞进行攻击并获取系统权限。在ctfshow PWN中,溢出是一种常见的攻击方式。 根据提供的引用,我了解到溢出是一种通过向程序输入过长的数据导致数据溢出的一种攻击手段。是一种数据结构,用于存储程序的局部变量和函数调用的返回地址等信息。当程序接收到超出空间大小的数据时,溢出的数据会覆盖到上的其他数据,从而可能改变程序的执行流程。 根据引用,在ctfshow PWN中,参赛者可以利用溢出漏洞来控制程序的执行流程。通过向程序输入特制的数据,可以覆盖控制流中的返回地址,使程序跳转到攻击者精心构造的代码,从而达到获取系统权限的目的。 具体来说,参赛者可以通过向程序发送超出预期的数据,覆盖上的返回地址,使其指向攻击者准备好的恶意代码,从而实现溢出攻击。攻击者可以利用此漏洞来执行任意代码,包括获取系统权限、执行恶意操作等。 引用和引用提供了一些示例代码,演示了如何利用溢出漏洞进行攻击。这些代码使用Python的pwn库来与目标程序进行交互,并通过构造特制的payload来触发溢出漏洞,最终实现控制程序执行流程的目的。 需要注意的是,溢出是一种非常危险的漏洞,合法的程序设计应该避免出现此类问题。在实际应用中,为了防止溢出攻击,开发者需要加强输入验证和数据处理等安全机制。 总结起来,ctfshow PWN溢出是一种通过向程序输入过长数据导致溢出的攻击方式,在该竞赛中常用于获取系统权限和执行恶意操作。攻击者可以利用漏洞覆盖返回地址,使程序执行恶意代码。然而,溢出是一种危险的漏洞,合法的程序设计应该避免此类问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [ctfshow pwn4](https://blog.csdn.net/qq_39980610/article/details/126461902)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [ctfshow pwn5](https://blog.csdn.net/qq_39980610/article/details/126462163)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值