CTF pwn题堆入门 -- Large bin

CTF pwn题堆入门 – Tcache bin
CTF pwn题堆入门 – Fast bin
CTF pwn题堆入门 – Unsorted bin

序言

  无奈于pwn题中与堆相关的东西实在是比较多,加上到了2021年的现在,ctf比赛中一来就是堆题,还都是新版本libc,对我这种新手中的新手实在不太友好,以此写下这个系列文章,记录自己学习堆漏洞利用过程中的点滴,同时也是个总结吧。结合自己做题的理解,将堆攻击常见的手段和方式按照一定的规律记录下来。
  本文章系列将分成五大块,即tcache bin --> fast bin --> unsorted bin --> small bin --> large bin。

概述

  large bin采用双链表结构,libc-2.23版本下64位机器上,最小为0x400(1024字节),里面的chunk从头结点的fd指针开始,按大小顺序排列。不同于fast bin, small bin, unsorted bin的结构,当属于large bin的chunk被释放时,chunk中还会有fd_nextsize和bk_nextsize指针,分别指向前后第一个与本身chunk大小不同的chunk。当然也就是链表中加入了大小不同的chunk时,这两个指针才会被修改。

攻击方式

分配堆到目的地址

house of force

  这里我将house of force总结在large bin的攻击方式里,当然实际上不太恰当,但是house of force的攻击原理是尝试从heap中分配一个非常大的内存,使得可以将chunk分配在高地址的libc中或者进一步让其溢出分配到低地址上的用户代码段中。所以我们可以将其归纳在这里,方便记忆和理解。
  要实现house of force攻击,我们需要两点,一是修改Top chunk size为非常大的数,方便我们可以进行任意大的内存分配;二是分配大内存后,Top chunk剩余size必须大于:X(我们想要在目标地址分配的chunk大小,包括头部信息)+ MINSIZE(大小为0x20),这样才能让我们在目标地址处进一步分配X大小的chunk。具体细节见下面代码:

#include <stdio.h>
#include <stdlib.h>

// 将堆分配到这里-->bss段
char bss_var[] = "aaaaaaaa";

int 
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值