House of Orange 概述House of Orange 的利用比较特殊,首先需要目标漏洞是堆上的漏洞但是特殊之处在于题目中不存在 free 函数或其他释放堆块的函数。我们知道一般想要利用堆漏洞,需要对堆块进行 malloc 和 free 操作,但是在 House of Orange 利用中无法使用 free 函数,因此 House of Orange 核心就是通过漏洞利用获得 free 的效果。 原理如我们前面所述, 2024-09-12 堆 #House of Orange
通过 realloc_hook 调整栈帧使 onegadget 生效 前言在某些堆的题目当中,由于限制只能使用 house of spirit 等方法劫持 malloc_hook ,这种情况一般是往 malloc_hook 写入 onegadget ,再次申请堆来 getshell 。 由于栈帧情况不满足,查询到的所有 onegadget 可能都打不通,这时就可以考虑下用 malloc_hook 和 realloc_hook 结合。先通过 realloc调整栈帧,然 2024-08-19 堆 #onegadget
wustctf2020_closed IDA反编译伪代码 文件相关知识这题就是一个Linux命令 exec 1>&0 现在来解释一下 close(1);close(2); 我们的目的是要得到shell,官方wp给的是此处可以输入串:$0然后可以执行新的命令exec 1>&0以及其他以查看到flag 那么这条语句是什么意思呢?其中的0和1是指什么呢? 0和1是linux下的文件描述符。 在Linux中一切皆 2024-08-03 BUUCTF刷题 #Linux命令 #文件操作
Fastbin Attack 介绍fastbin attack 是一类漏洞的利用方法,是指所有基于 fastbin 机制的漏洞利用方法。这类利用的前提是: 存在堆溢出、UAF等能控制chunk内容的漏洞 漏洞发生于fastbin类型的chunk中 fastbin attack大致可以分为一下几类: Fastbin Double Free House of Spirit Alloc to Stack Arbitrary A 2024-08-03 堆 #Fastbin Attack
House of Spirit攻击 原理House of Spirit是一种堆利用方法,其核心在于通过任意地址的释放达到篡改地址的目的。 利用条件: 在目标地址周围能够伪造一个堆块。 能对伪造堆块地址周围进行一次释放(即将伪造的堆块地址作为free函数的参数进行一次释放操作) 释放之后能够重新申请得到这个堆块并篡改目标地址的内容 这里给出一个POC代码如下: 12345678910111213141516171819202122 2024-08-02 堆 #House of Spirit
House of Force攻击 原理House Of Force 是一种堆利用方法,但是并不是说 House Of Force 必须得基于堆漏洞来进行利用。如果一个堆 (heap based) 漏洞想要通过 House Of Force 方法进行利用,需要以下条件: 能够以溢出等方式控制到 top chunk 的 size 域 能够自由地控制堆分配尺寸的大小 House Of Force 产生的原因在于 glibc 对 to 2024-08-01 堆 #House-of-Force
UAF漏洞 什么是UAFUAF就是Use After Free,简单来说就是释放后再次被使用,分为一下几种情况: 内存块被释放后,其对应的指针被设置为 NULL , 然后再次使用,自然程序会崩溃。 内存块被释放后,其对应的指针没有被设置为 NULL ,然后在它下一次被使用之前,没有代码对这块内存块进行修改,那么程序很有可能可以正常运转。 内存块被释放后,其对应的指针没有被设置为 NULL,但是在它下一次使用 2024-08-01 堆 #UAF
一次艰难的堆探索 堆的认识初始堆 是虚拟地址空间的的 一块连续的线性区域 提供动态分配的内存,允许程序申请大小未知的内存 在用户与操作系统之间,作为动态内存管理的中间人 响应用户的申请内存请求, 向操作系统申请内存,然后将其返回给用户程序 管理用户所释放的内存,适 时归还给操作系统 堆区域为Data上边,增长方向为低地址到高地址 shared libraries也是堆区域 申请内存的系统调用 对于主线程 2024-07-26 堆
绕过保护之Canary 初识Canary关于canary说白了就是一个防止栈溢出的手段,一般情况下是在栈底前边设置一个值,在进程结束时,对比这个值有没有被篡改,如果篡改就退出。具体汇编如下函数开始前在函数序言部分会取 fs 寄存器 0x28 处的值,存放在栈中 rbp-0x8 的位置(32位ebp-0x4。但是这个位置不是绝对的,可以通过ida分析)。 这个操作即为向栈中插入 Canary 值 12mov rax, 2024-07-18 栈 #栈
not_the_same_3dsctf_2016 not_the_same_3dsctf_2016查看保护就不说了 IDA反编译发现为静态编译,不用找libc了这点节省不少功夫。打开main函数,发现栈溢出漏洞偏移为45,这个是根据gdb的cyclic算出来的发现后门函数get_secret,功能是把flag读取赋值给fl4g初步思路为通过栈溢出,调用get_secret,再通过write函数读取fl4g 方法一 通过栈溢出调用后门函数12345 2024-07-18 BUUCTF刷题 #mprotect