首页 > 其他分享 >PWN系列-Unsorted Bin Attack

PWN系列-Unsorted Bin Attack

时间:2024-05-22 17:32:14浏览次数:27  
标签:Bin Unsorted chunk bk Attack unsorted av PWN

PWN系列-Unsorted Bin Attack

概述

Unsorted Bin Attack,顾名思义,该攻击与 Glibc 堆管理中的的 Unsorted Bin 的机制紧密相关。

Unsorted Bin Attack 被利用的前提是控制 Unsorted Bin Chunk 的 bk 指针。

Unsorted Bin Attack 可以达到的效果是实现修改任意地址值为一个较大的数值。

Unsorted Bin 回顾

在介绍 Unsorted Bin 攻击前,可以先回顾一下 Unsorted Bin 的基本来源以及基本使用情况。

基本来源

  1. 当一个较大的 chunk 被分割成两半后,如果剩下的部分大于 MINSIZE,就会被放到 unsorted bin 中。
  2. 释放一个不属于 fastbin 的 chunk,并且该 chunk 不和 top chunk 紧邻时,该 chunk 会被首先放到 unsorted bin 中。关于 top chunk 的解释,请参考下面的介绍。
  3. 当进行 malloc_consolidate 时,可能会把合并后的 chunk 放到 unsorted bin 中,如果不是和 top chunk 近邻的话。

基本使用情况

  1. Unsorted Bin 在使用的过程中,采用的遍历顺序是 FIFO,即插入的时候插入到 unsorted bin 的头部,取出的时候从链表尾获取
  2. 在程序 malloc 时,如果在 fastbin,small bin 中找不到对应大小的 chunk,就会尝试从 Unsorted Bin 中寻找 chunk。如果取出来的 chunk 大小刚好满足,就会直接返回给用户,否则就会把这些 chunk 分别插入到对应的 bin 中。

Unsorted Bin Leak

在介绍 Unsorted Bin Attack 之前,我们先介绍一下如何使用 Unsorted Bin 进行 Leak。这其实是一个小 trick,许多题中都会用到。

Unsorted Bin 的结构

Unsorted Bin 在管理时为循环双向链表,若 Unsorted Bin 中有三个 bin,那么该链表结构如下

image-20240522170755052

在申请到Unsorted Bin后可以想办法输出chunk的内容,这样就可以泄露main_arena的一个地址,通过计算就可以得到libc的基地址了。

Unsorted Bin Attack 原理

glibc/malloc/malloc.c 中的 _int_malloc 有这么一段代码,当将一个 unsorted bin 取出的时候,会将 bck->fd 的位置写入本 Unsorted Bin 的位置。

/* remove from unsorted list */
victim = unsorted_chunks (av)->bk
bck = victim->bk
unsorted_chunks (av)->bk = bck
bck->fd = unsorted_chunks (av)//此时fd中存放的是main_arena的地址
//

这里一行代码一行代码进行解释

victim = unsorted_chunks (av)->bk

unsorted_chunks (av)->bk其实就是chunk3,所以此时victim就是chunk3

bck = victim->bk

此时bck就是chunk3的bk值

unsorted_chunks (av)->bk = bck

如果我们没有修改chunk3的bk值,这一步其实就是让unsorted_chunks (av)->bk指向chunk2,如果我们修改了chunk3的bk值,这里就是指向了我们修改的target_addr了,unsortedbin attack之后不能在遍历`unsorted bin链了,因为此时的main_arena的bk已经被我们改为target_addr,av->bk索引到的地址是一般是无法绕过check的。

bck->fd = unsorted_chunks (av)

这里的bck->fd其实就是chunk3->bk->fd,正常情况下这步是将unsorted_chunks (av)写入chunk2的fd,如果我们修改了chunk3的bk的话,这里就会将unsorted_chunks (av)写入chunk3->bk->fd(也就是chunk3->bk+0x10)的位置,所以这里一般会写_IO_list_all-0x10来进行劫持。

换而言之,如果我们控制了 bk 的值,我们就能将 unsorted_chunks (av) 写到任意地址。

几乎全部都是抄的ctf-wiki,学到很多,记录在此供自己日后再次学习。

参考文章:https://ctf-wiki.org/pwn/linux/user-mode/heap/ptmalloc2/unsorted-bin-attack/

标签:Bin,Unsorted,chunk,bk,Attack,unsorted,av,PWN
From: https://www.cnblogs.com/xiaochange/p/18206762

相关文章

  • 在Flink中jackson-databind包下的ObjectMapper处理大写字段问题
    需要加上配置,不然解析会失败,产生一个空对象objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES,true);//忽略大小写代码:publicclassStreamingJob{publicstaticvoidmain(String[]args)throwsException{finalLoggerlogger......
  • 学习笔记:Miller-Rabin 与 Pollard-Rho
    Miller_Rabin首先考虑方程\(x^2\equiv1\pmodn\)。可以写成\((x+1)(x-1)=kn\)。当\(n\)为素数时,只可能\(n\midx+1\)或\(n\midx-1\),反之合数不满足。得到结论:在模素数意义下,一个数的平方等于\(1\)当且仅当这个数同余于\(1\)或\(-1\)。我们知道,......
  • Android Binder 学习
    AndroidBinderAndroid作为多进程操作系统,每个功能模块都是一个独立的进程,特别是hal层将底层硬件隔离开,进程通信会频繁的发生,为了更好的在进程间通信,Android开发了Binder模块专门用于解决该问题。前置知识介绍进程执行过程Linux下进程通信方式Binder概述AndroidBin......
  • mdk生成bin文件,stm32 bootloader跳转地址问题
    stm32的bootloader使用ymodem烧写app程序,app程序不能使用hex文件hex文件带了地址信息,需要使用bin文件作为app程序写入打开魔术棒在这里填入fromelf-bin-output./stm32f103_app/stm32f103_app.bin./stm32f103_app/stm32f103_app.axf   其中./表示项目所在位置,居......
  • 百度 Apollo 自定义模块发布——使用 Python 语言(bazel 编译 Python 模块)_bazel-bin b
    CSDN搬家失败,手动导出markdown后再导入博客园BinaryvsComponent首先说明下,Apollo的核心概念是组件,通过组件可以实现资源的自动管理和调度。CyberRT中只能使用C++语言实现Component,Python版的API只能用来写传统的二进制可执行文件,参考官方文档中这两种方式的区别:B......
  • CTFshow pwn075
    CTFshowpwn075题目描述:栈空间不够怎么办?首先检查保护:32位开启NX保护,部分开启RELRO,放入ida中看有两次输入点,输入只能到返回地址,所以考虑用到栈迁移exp:frompwnimport*p=remote("pwn.challenge.ctf.show",28276)elf=ELF("./pwn75")#p=process([elf.path])#l......
  • 01_WPF+Prism登录之PasswordBox的Binding
    #region登录信息///<summary>///密码///</summary>privatestring_Pwd;///<summary>///密码///</summary>publicstringPwd{get{return_Pwd;}......
  • C++_交叉编译和pybind11
    编译本地编译和交叉编译本地编译当前平台编译交叉编译交叉编译是指在一个平台上编译另一个平台上运行的代码。在C++中,交叉编译通常涉及以下步骤:安装交叉编译工具链。配置编译环境。使用工具链编译代码。首先,确保安装了交叉编译工具链,例如gcc-arm-l......
  • 部署freeipa中报错:Command '/bin/systemctl start certmonger.service' returned non-
    cat/etc/dbus-1/system.d/certmonger.conf<allowsend_destination="org.fedorahosted.certmonger"send_interface="org.fedorahosted.certmonger"/><allowsend_destination="org.fedorahosted.certmonger"......
  • pwn知识——House of Botcake
    个人理解感觉HouseofBotcake就是doublefree+overlapping+_IO_FILEattack的结合使用,需要对堆结构有着较为详细的理解,也要有能管理堆顺序的能力,建议写题的时候还是标一标堆的index,这样在利用堆的时候会比较方便些HouseofBotcake想要利用这个攻击,我们得先了解_IO_FILE的......