Fastbin attack】的更多相关文章

Fastbin Attack 暂时接触到了两种针对堆分配机制中fastbin的攻击方式,double free和house of spirit Double free 基本原理 与uaf是对free之后的指针直接进行操作不同,double free通过利用fastbin对堆的分配机制,改写在fastbin中的chunk,实现对指定内存的堆块分配. 先正常释放chunk1和chunk2 此时重新释放chunk1(连续两次释放相同的堆块会报错) double free通过在fastbin数组中形成m…
ptmalloc ptmalloc的基本思路是将堆上的内存区域划分为多个chunk,在分配/回收内存时,对chunk进行分割.回收等操作.在32位系统下,chunk头的大小为8 Bytes,且每个chunk的大小也是8 Bytes的整数倍. chunk头包括以下两部分: prev_size: 如果当前chunk的相邻前一chunk未被使用,prev_size为此前一chunk的大小 size: 当前chunk的大小.由于chunk大小是8的整数倍,所以此size的后3 bit被用于存储其他信息.…
Fastbin attack 本文参考了ctf-wiki 和glibc 要了解fastbin attack,我们先要了解fastbin的机制.由于libc2.26后加入了tcache机制,我们这里就只分析glibc 2.23. 下面的代码选自glibc 2.23 (有删除) static void _int_free (mstate av, mchunkptr p, int have_lock) { size = chunksize (p); //获取p的size check_inuse_chu…
fastbin attack学习小结   之前留在本地的一篇笔记,复习一下. 下面以glibc2.23为例,说明fastbin管理动态内存的细节.先看一下释放内存的管理: if ((unsigned long)(size) <= (unsigned long)(get_max_fast ())// 检查chunk大小是否大于max_fast的大小,如果是,则chunk进入Fastbins进行处理#if TRIM_FASTBINS /* If TRIM_FASTBINS set, don't pl…
前言 ​ 对一些有趣的堆相关的漏洞的利用做一个记录,如有差错,请见谅. ​ 文中未做说明 均是指 glibc 2.23 ​ 相关引用已在文中进行了标注,如有遗漏,请提醒. 简单源码分析 ​ 本节只是简单跟读了一下 malloc 和 free 的源码, 说的比较简单,很多细节还是要自己拿一份源代码来读. 堆中的一些数据结构 堆管理结构 struct malloc_state { mutex_t mutex; /* Serialize access. */ int flags; /* Flags (…
前言 off by null 是一个比较有意思的技术 下面通过 hctf2018 的 heapstrom_zero 实战一波. 相关文件(exp, 题目)位于 https://gitee.com/hac425/blog_data/blob/master/off_by_null/ 注:为了调试的方便,修改了一些代码. 原始题目链接 https://github.com/veritas501/hctf2018 程序分析 直接拿源码分析,程序是一个比较简单的菜单程序 int main(void){ i…
概述 这次的胖哈博杯我出了Pwn400.Pwn500两道题目,这里讲一下出题和解题的思路.我个人感觉前两年的Pwn题更多的是考察单一的利用技巧,比我这有个洞怎么利用它拿到权限.但是我研究了一些最近的题目发现,Pwn题目逐步从考察利用技巧变为考察逻辑思维. 我这次的两道题目主要是围绕IO_FILE的利用展开,其次是注重考察利用思路. Pwn400 漏洞 Welcome to life Crowdfunding~~ ============================== 1.Create a…
题目位置 https://gitee.com/hac425/blog_data/tree/master/wdb babyheap 通过分配和释放构建 2 个 fastbin 链 利用 show 功能, leak heap 的基地址 然后可以在 heap 伪造 fastbin , 造成 overlap chunk 修改 chunk size ,同时伪造 free chunk unlink 攻击 , 可以控制 ptr_table 然后通过 修改 edit_count 实现多次写 改 __free_h…
前言 又是一道令人怀疑人生的 baby 题. 这道题利用思路非常巧妙,通过 堆溢出 和 fastbin 的机制构造了 information leak, 然后通过 fastbin attack 可以读写 malloc_hook , 然后使用 one_gadget 来 getshell. 题目和 idb 文件:https://gitee.com/hac425/blog_data/tree/master/babyheap 正文 程序涉及的结构体 info 的结构如下,可以通过 allocate 功能…
前言 对 0ctf2018 的 pwn 做一个总结 正文 babystack 漏洞 非常直接的 栈溢出 ssize_t sub_804843B() { char buf; // [esp+0h] [ebp-28h] return read(0, &buf, 0x40u); } 这个题的难点在于 用 python 启动了该程序同时过滤了 stdout 和 stdout #!/usr/bin/python -u # encoding: utf-8 from pwn import * import r…
前言 这是前几天国外一个 老哥 提出的一种思路 ,学习了一下感觉其中的堆布局的手法还不错,做个分享与记录. 这种利用手法的主要特点是不需要 leak libc的地址,通过 堆内存的布局 和 堆相关的漏洞(uaf 等) 就可以 getshell.下面一个示例的题目为例介绍一下 相关文件位于 http://t.cn/Ru0eX62 漏洞分析 查看开启的保护措施 04:44 haclh@ubuntu:house_of_roman $ checksec ./new_chall [*] '/home/ha…
前言 本文对强网杯 中除了 2 个内核题以外的 6 个 pwn 题的利用方式进行记录.题目真心不错 程序和 exp: https://gitee.com/hac425/blog_data/blob/master/qwb2018/ 正文 silent 漏洞 在 free 的时候指针没有清空,而且程序没有 检测指针是否已经被释放 double free, 后面的 编辑功能也没有检验指针是否已经被 free ,所以 uaf signed __int64 free_() { int i; // [rsp…
备个份,慢慢写总结 1 first_fit #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { printf("This file doesn't demonstrate an attack, but shows the nature of glibc's allocator.\n"); printf("glibc uses a first-fit…
fastbin attack + unsortedbin attack + __malloc_hook 的基础利用 题目下载 : https://uaf.io/assets/0ctfbabyheap 本题是2017 0ctf 很简单的一道题 先来看一下题目的基本信息 $ checksec babyheap Arch: amd64-64-little RELRO: Full RELRO Stack: Canary found NX: NX enabled PIE: PIE enabled $ ./…
HITCON-Training-Writeup 原文链接M4x@10.0.0.55 项目地址M4x's github,欢迎star~ 更新时间5月16 复习一下二进制基础,写写HITCON-Training的writeup,题目地址:https://github.com/scwuaptx/HITCON-Training Outline Basic Knowledge Introduction Reverse Engineering Static Analysis Dynamic Analysis…
本文由“合天智汇”公众号首发,作者:b1ngo Ripple 20:Treck TCP/IP协议漏洞技术分析 Ripple20是一系列影响数亿台设备的0day(19个),是JSOF研究实验室在Treck TCP/IP协议栈中发现的[1],该协议栈广泛应用于嵌入式和物联网设备.而由于这些漏洞很底层,并且流传版本很广(6.0.1.67以下),通过供应链的传播,使得这些漏洞影响十分广泛和深远.这也是这个漏洞代称Ripple的由来:The damaging effects of a these vuln…
get_started_3dsctf_2016 关键词:ROP链.栈溢出.mprotect()函数 可参考文章(优质): https://www.cnblogs.com/lyxf/p/12113401.html #!python #coding:utf-8 from pwn import * from LibcSearcher import * context.log_level = 'debug' #context.arch = 'i386' elf = ELF('./get_started_…
Unlink 本文参考了CTF-wiki 和glibc 源码 原理: 我们在利用 unlink 所造成的漏洞时,其实就是借助 unlink 操作来达成修改指针的效果. 我们先来简单回顾一下 unlink 的目的与过程,其目的是把一个双向链表中的空闲块拿出来,然后和前后物理相邻的 free chunk 进行合并.其基本的过程如下 类似于我们学数据结构时学的从双向链表中删除一个节点的操作. 古老的 unlink 在最初 unlink 实现的时候,其实是没有对双向链表检查的,也就是说,没有以下的代码…
0ctf_2017_babyheap 首先检查一下保护 IDA 分析好的代码如下 首先申请了一块内存地址用来存放结构体数组,地址随机. 堆题常见的几个功能.我们来看看add 这里申请内存用的是calloc struct block{ unsigned int inuse; unsigned int size; char * chunkptr; } 这里没有检查size,size可以为任意值.造成堆溢出. delete函数free后指针清零 show 就是打印出chunk_ptr的内容. 好了,至…
babyshellcode 这题考无write泄露,write被沙盒禁用时,可以考虑延时盲注的方式获得flag,此exp可作为此类型题目模版,只需要修改部分参数即可,详细见注释 from pwn import * from pwn import p64,u64,p32,u32,p8 from pwnlib import timeout context.arch = 'amd64' # context.log_level = 'debug' context.terminal = ['tmux','…
0ctf_2017_babyheap 附件 步骤: 例行检查,64位程序,保护全开 本地试运行一下,看看大概的情况,经典的堆题的菜单 main函数 add() edit() delete() show() 利用思路 edit存在堆溢出,可以通过重叠堆来泄露libc 然后利用fastbin attack,修改malloc_hook为one_gadget 利用过程 首先来构造重叠堆 先申请3个chunk, add(0x10)#0 add(0x10)#1 add(0x80)#2 来看一下堆的布局 2.…
ciscn_2019_n_3 附件 步骤 例行检查,32位,开启了nx和canary保护 本地试运行一下,经典的堆题的菜单 3.32位ida载入 new(),申请了两个chunk,第一个chunk(13行)固定大小0xC,存放的是rec_int_print和rec_int_free函数的地址,第二个chunk(32行),是我们申请的chunk del() 如果值是整数,直接 free chunk 如果值是字符串,则 chunk 和存储字符串的 chunk 都要 free.注意这里只是进行了 fr…
[BUUCTF]PWN--babyheap_0ctf_2017 附件 步骤: 例行检查,64位,保护全开 试运行一下程序,看到这个布局菜单,知道了这是一道堆的题目,第一次接触堆的小伙伴可以去看一下这个视频,我也刚接触堆不久,有些地方我也讲不清楚 ida载入,先看一下main函数,做堆题的时候需要将程序给理清楚了,这边的几个选项函数一开始不是如图所示的,我们可以右击给他重新命名一下,为了让我们看的更清楚 add,就是简单的创建一个chunk 在创建堆时有一个结构体,这个结构体大概是这样的: str…
roarctf_2019_easy_pwn 附件 步骤: 例行检查,64位程序,保护全开 试运行一下程序,看看大概的情况,经典的堆块的菜单 64位ida载入,改了一下各个选项的函数名,方便看程序(按N) add edit free show 这道题的思路是通过 offbyone来构造重叠chunk,达到任意地址分配chunk的效果,然后修改malloc_hook地址处的内容为one gadget地址 首先利用Unsorted bin泄露libc的地址 我们先申请4个chunk add(0x18)…
温故而知新,可以为师矣.所以花了几天时间重新做了下 buuctf 的 pwn 题,先发下第一页共 32 题的题解.还有如果题解都很详细那么本文就太长了,写起来也浪费时间,所以比较简单的题就直接丢 exp 了,不懂可以去看其他人的题解,难的题我觉得我写的题解应该是挺详细的.截至到发文日期,只要是涉及 libc 的题目的 exp 都是能打通远程的.如有错误评论欢迎指正. test_your_nc 直接 nc 连接即可得到 shell rip 简单的 ret2text ,不过靶机是 ubuntu18…
linux下的fastbin是ctf中pwn题的重点出题点.去年(2015)中,XCTF就有两站是使用fastbin的利用作为pwn400的压轴题来出现,这也是我刚开始接触fastbin的利用,参考了k0sh1师傅写在freebuf上的一篇文章.我写了几个demo来说明问题. 目录 1.关于fastbin 2.覆盖fd指针实现利用 3.任意地址free实现利用(House of Spirit) 1.关于fastbin 我们一般熟悉的堆都是双链表的chunk,但是对于大小为(16 Bytes~ 6…
largebin attack 由这个名字就可以看出是对 largebin 进行的操作,需要的条件是存在 UAF 或者可以构造出 UAF.实现的功能是: 1.任意地址写入一个大数字 2.实现任意地址分配(这个好像也叫 house of strom,以后另开一章来记) 关键源码: else { victim_index = largebin_index (size); bck = bin_at (av, victim_index); fwd = bck->fd; /* maintain large…
这一阵花了些时间,把 cocos2d-html5 里的sample 游戏<Fruit Attack>给移植到了WP8上来,目前已经实现了基本的功能,但是还有几个已知的bug,比如WP8只支持WAV格式 的音乐,而我没有去转格式, 所以无法播放声音: 提示手势的显示位置有问题:源代码的执行效率过低等,但是对于初级的学习应该还是有一定参考意义的,我也加入了自己的一部分注释. 应该说移植的过程还是比较顺利的,毕竟API都是兼容的.但是因为原游戏并不是多分辨率适配的,图片等资源都不是太合适,再加上缺乏…
https://www.owasp.org/images/0/04/Roberto_Suggi_Liverani_OWASPNZDAY2010-Defending_against_application_DoS.pdf slowloris http://www.huffingtonpost.co.uk/-frontier/slow-loris_b_8541930.html 蜂猴 懒猴 slow:    adj. 1.慢的,缓慢的 (opp. fast; qu ... loris:    n. (…
题目链接: 传送门 Cells Not Under Attack time limit per test:2 second     memory limit per test:256 megabytes Description Vasya has the square chessboard of size n × n and m rooks. Initially the chessboard is empty. Vasya will consequently put the rooks on t…