随笔分类 - CTF
摘要:1.1.24 musl pwn 关键源码 static void unbin(struct chunk *c, int i) { if (c->prev == c->next) // 若 bin 只有一个 chunk,将 bin 设为空 bin a_and_64(&mal.binmap, ~(1UL
阅读全文
摘要:####exp from pwn import* context.log_level = 'debug' context.arch = 'amd64' #s = process('./examination') s = remote('124.70.130.92',60001) libc = ELF
阅读全文
摘要:#kernel UAF && 劫持tty_struct ####ciscn2017_babydriver exp1 fork进程时会申请堆来存放cred。cred结构大小为0xA8。修改cred里的uid,gid为0,即可get root #include <string.h> #include <
阅读全文
摘要:#kernel ROP 借助qwb-2018 core这道题目来熟悉一下,kernel rop及ret2usr 首先看一下启动脚本 发现没有开什么保护,只开了一个kaslr,为了方便调试我们在这里把它改成nokaslr关闭即可。 再来看一下init文件 看一下这个里面的几行命令是什么意思 1、mou
阅读全文
摘要:house of storm 是一个结合了 unsorted bin 和 largebin attack 的危害性极高的组合漏洞。其效果是可以实现任意地址申请一个堆块,他的思想主要就是通过 unsorted bin 和 largebin attack 来伪造并链进一个 unsorted bin。 利
阅读全文
摘要:largebin attack 由这个名字就可以看出是对 largebin 进行的操作,需要的条件是存在 UAF 或者可以构造出 UAF。实现的功能是: 1、任意地址写入一个大数字 2、实现任意地址分配(这个好像也叫 house of strom,以后另开一章来记) 关键源码: else { vic
阅读全文
摘要:摆烂很长时间之后,终于下定决心来看点新的东西。正好 winmt 师傅前不久把他 pig 修好的附件发给我了,我就借此来学习一下新版本的 IO_FILE 及 house of pig。 新版本的 IO_FILE 利用的函数是老版本中喜欢用的 _IO_str_overflow,我们来看一下 glibc
阅读全文
摘要:之前写过一篇 IO_FILE——leak 任意读,但是在学习的时候偷懒了,没有深入去看,这次碰到 winmt 师傅出的题,就傻眼了,故再写一篇博客来记录一下。 例题 ctfshow Incomplete Menu : 洞在 edit 里,可以超过 size 进行一个置零的操作。 这里还是考虑利用 _
阅读全文
摘要:没有附件,只能对着别人文章硬看了。(哪个师傅有附件的话联系我一下,感激不尽) 从肥猫师傅本人的 文章 中得知使用 kiwi 的条件有两点: 1、能够触发 __malloc_assert 2、有任意写的能力,修改 _IO_helper_jumps 结构体 kiwi 的流程是 __malloc_asse
阅读全文
摘要:在堆题没有show函数时,我们可以用 IO_FILE 进行leak,本文就记录一下如何实现这一手法。 拿一个输出函数 puts 来说,它在源码里的表现形式为 _IO_puts 。 _IO_puts (const char *str) { int result = EOF; _IO_size_t le
阅读全文
摘要:看 glibc 2.32 源码: /* Safe-Linking: Use randomness from ASLR (mmap_base) to protect single-linked lists of Fast-Bins and TCache. That is, mask the "next
阅读全文
摘要:2.27 之前的 off by null 的利用手法总体来说比较简单伪造一个 presize 即可,但是在 glibc 2.29的更新当中,unlink 里加入的 presize check 使得之前的利用手法不再有效,并且 off by null 的难度提高不少。 /* consolidate b
阅读全文
摘要:tcache stashing unlink atttack 主要利用的是 calloc 函数会绕过 tcache 从smallbin 里取出 chunk 的特性。并且 smallbin 分配后,同大小的空闲块挂进会 tcache。这个攻击可实现两个效果: 1、任意地址上写一个较大的数(和unsor
阅读全文
摘要:推迟了好久的复现,那就在情人节这个特殊的日子复现一波吧。这题除了 ora 之外特别的地方就是用到了 retf 来进行 32 位和 64 位的切换。参考了 winmt 师傅的博客复现了一下。 import time from pwn import * context.arch = 'amd64' #c
阅读全文
摘要:在 glibc 2.29 当中 tcache 增加了 key 字段,让原本的 tcache-dup 不像原来那么简单了。一般来说我们需要破坏 key 字段,才能继续进行 double free。而 house of botcake 采用的思想是避免出现 key 字段那么就无需覆盖。他是在填满 tca
阅读全文
摘要:off-by-null + unlink from pwn import * context.arch = 'amd64' context.log_level = 'debug' s = process('./ciscn_2019_es_4') #s = remote('node4.buuoj.cn
阅读全文
摘要:setcontext+orw 大致可以把2.27,2.29做为两个分界点。 我们先来讨论 2.27 及以下的 setcontext + orw 的写法。 首先 setcontext 是什么?了解过 SROP 的师傅应该知道 pwntools 自带了一款可以控制寄存器值的工具。模板如下: frame
阅读全文
摘要:FSOP 是 File Stream Oriented Programming 的缩写。所有的 _IO_FILE 结构会由 _chain 字段连接形成一个链表,由 _IO_list_all 来维护。而 FSOP 的核心思想就是劫持通过 _IO_list_all 的值来伪造链表和其中的 _IO_FIL
阅读全文
摘要:_fileno 是 stdin 文件里的一个字段,在 x64 系统里,偏移为 0x70。 以下是 IO_FILE 结构体: struct _IO_FILE { int _flags; /* High-order word is _IO_MAGIC; rest is flags. */ #define
阅读全文
摘要:House of force是一个堆的小利用技巧,要想利用它需要满足两个条件: 1、可以通过溢出修改 top chunk 的 size 2、分配堆的大小没有限制 通过把 top chunk 的size 改的很大,再malloc一个特定的size,使 top chunk 的位置 恰好在目标位置 -0x
阅读全文