【Pwn】对64位程序的exploit.py运行报错“timeout: the monitored command dumped core\n“

刷题时偶然发现的64位程序的堆栈平衡问题
题目:
ciscn_2019_en_2

运行exp时发现报错:

在这里插入图片描述
这里是栈没有对齐
64位程序相对于32位多了堆栈需要平衡的问题

  1. 如果要返回父程序,则当我们在堆栈中进行堆栈的操作的时候,一定要保证在RET这条指令之前,ESP指向的是我们压入栈中的地址。
  2. 如果通过堆栈传递参数了,那么在函数执行完毕后,要平衡参数导致的堆栈变化。

含义:

  • 当函数在一步步执行的时候 一直到ret执行之前,堆栈栈顶的地址 一定要是call指令的下一个地址。
  • 函数执行前一直到函数执行结束,函数里面的堆栈是要保持不变的。
  • 如果堆栈变化了,那么,要在ret执行前将堆栈恢复成原来的样子。
修改exp:

在这里插入图片描述
在第二个payload溢出返回点加入‘ret’,使其栈对齐

再次运行:

在这里插入图片描述
发现没有出错~

在这里插入图片描述
成功拿到flag!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值