星盟-pwn-babyheap

本文详细分析了一个涉及堆管理的网络安全问题。通过off by one漏洞,利用堆重叠获取libc基地址,然后通过修改global_max_fast实现fastbin攻击,进一步篡改malloc_hook。最终,通过精心设计的realloc操作,利用one_gadget实现特权升级。文章提供了详细的解题思路和exploit实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本题的注意点

  • 程序更改了global_max_fast的大小,导致我们释放的chunk无法进入fastbin中,都会进入unsortedbin里面

在这里插入图片描述

程序分析

直接切入正题:

在这里插入图片描述

  • add():允许申请1-111大小的chunk
  • del():没有uaf
  • edit():使用strlen的返回值作为read的参数,off by one漏洞,申请0x?8的大小chunk时填充满该chunk,再次编辑该chunk,strlen就会将下一个chunk的size也也算作一个字节,所以我们可以控制chunk的size位
  • show():正常输出

程序情况列述

  1. chunk会进入unsorted bin,不修改global_max_fast则无法使用fastbin attack
  2. 存在off by one 可以使用堆重叠,能够获取libc基地址

解题思路

  1. 堆重叠获取libc_base地址
  2. 使用unsorted attack更改global_max_fast,使chunk进入fastbin
  3. 使用fastbin attack更改malloc_hook为one_gadget

detailed procedures

  • 注:结合exp来理解

  • 申请4个chunk,利用chunk0修改chunk1的size使其包含chunk1,chunk2

  • 再次申请大小为0x18的chunk,打印出chunk2即得到main_arena_addr+offset(该offset可以gdb调试得知其偏移,前提是本地环境和远端一致否则远端打不通)

  • 后面的一系列操作就是heap重叠,利用一个chunk去改写另外一个chunk的bk(unsorted attack),heap重叠图在下面

  • 修改了global_max_fast,使用fastbin attack伪造chunk修改malloc_hook为realloc_hook

  • 修改realloc_hook为one_gadget原因如下,其要求一个都不满足

在这里插入图片描述

在这里插入图片描述

  • 所以我们这里使用realloc来使得rsp+0x30为null,具体可以参考下面博客链接
  • realloc之前会有以下操作,我们可以利用这些push和sub0x38来使得rsp+0x30为null,执行完这个操作就会call realloc,因为我们把malloc改成了realloc,realloc改成了one_gadget所以,就会call one_gadget,那么我们计算的时候要把call 抬高栈的8算上去

在这里插入图片描述

exp

#!/usr/bin/python3
# -*- coding:utf-8 -*-

from pwn import *

context.arch = 'amd64'
# context.log_level = 'debug'

sh = process('./babyheap')
#sh = remote('nc.eonew.cn', 10502)
libc = ELF('./libc-xm/libc-2.23-babyheap.so')

gdb.attach(sh,'''

b *$rebase(0xbfc)	
b *$rebase(0xcdb)
b *$rebase(0xe50)
b *$rebase(0xdc2)

''')

def add(size, data):
    sh.sendlineafter(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值