- 博客(171)
- 收藏
- 关注
原创 【我的 PWN 学习手札】House of Pig
(在比如程序中没有显示malloc只有calloc的条件下)我们期望什么,如何利用?能够利用的mallocmemcpy与free写入并触发劫持程序执行流能够跳转到或触发函数需要控制好IO_FILE结构体的成员满足malloc和memcpy的参数要求因此,需要附近的一块fake chunk,需要劫持控制IO通过获得附近的fake chunk通过劫持,并申请出fake file,布置合适的结构体成员并将vtable指向表。
2025-03-13 22:28:26
807
原创 【我的 PWN 学习手札】House of Emma
参考文献前一篇博客的利用手法有两个关键点,其一是利用进入IO链,其二是劫持全局的指针。然而当遇到不可写的时候,这种方法失效。高版本的libc取消了和等hook,因此在Kiwi失效的情况下,寻找其他合法的vtable表,即在之间的表,看能否被我们利用。主要就是找到了一条利用虚表的链子,通过借助中的函数指针来实现类似劫持Hook从而控制程序执行流的效果。
2025-03-05 17:44:25
989
原创 【我的 PWN 学习手札】House of Kiwi
之前我们利用IO_FILE一般是通过劫持vtable来实现的,虽然不是通过劫持vtable来实现,但实质上是劫持vtable指向的全局的表来实现的。,也就不能利用这种方法,比较玄学需要实际看一下。较高版本的glibc去除了exit hook;而如果程序调用中利用诸如write__exit等函数直接触发系统调用,不走IO结构体调用流程,就难以使用IO的方法来劫持程序执行流程。之所以赋予这个利用手法名,实际上是因为找到了一条“主动触发异常退出”来触发vtable上的相关函数来的实现攻击。
2025-03-02 00:10:41
713
原创 【我的 PWN 学习手札】House of Husk
是利用格式化输出函数如printfvprintf在打印输出时,会解析格式化字符如%x%lld从而调用不同的格式化打印方法(函数)。同时C语言还提供了注册自定义格式化字符的方法。注册自定义格式化字符串输出方法,实际上是通过两张保存在全局的表实现的。为此我们以伪装/篡改这两张表为核心目标,劫持函数指针,从而控制程序流。
2025-02-27 21:23:59
334
原创 【我的 PWN 学习手札】IO_FILE 之 利用IO_validate_vtable劫持程序流
glibc2.24引入了对vtable域的检查,确保vtable指针在之间。如果不满足将跳转到继续执行。可以看到,当时,也即当不为空时会执行函数其中实际上就是"exit hook因此,我们可以通过设置"exit hook",通过写坏vtable来触发程序流的劫持。
2025-02-26 16:39:01
444
原创 【我的 PWN 学习手札】IO_FILE 之 劫持vtable到_IO_str_jumps
glibc-2.24及以后,针对vtable的篡改攻击,增添了对vtable合法性的检查,具体表现为宏宏的定义:也即,vtable的数值需要限定在范围内。因此,对于vtable的劫持,不能到任意地址。不过好在,和都在这个合法范围内,劫持vtable到这两个结构体上,是符合vtable的合法性检查的。但是为什么是这两个结构体?
2025-02-24 09:36:17
316
原创 【我的 PWN 学习手札】IO_FILE 之 FSOP
我们将着重关注vtable中的_IO_file_overflow函数指针。当函数exit时,程序执行_IO_flush_all_lockp 函数。该函数会刷新 _IO_list_all 链表中所有项的文件流,相当于对每个 FILE 调用fflush ,也对应着会调用 _IO_FILE_plus.vtable 中的_IO_overflow。linux IO_FILE 利用_io list all结构体-优快云博客。
2025-01-06 21:26:20
1122
原创 【我的 PWN 学习手札】IO_FILE 之 劫持vtable
【我的 PWN 学习手札】IO_FILE相关几个基本函数的调用链源码-优快云博客【我的 PWN 学习手札】IO_FILE 之 stdin任意地址写-优快云博客【我的 PWN 学习手札】IO_FILE 之 stdout任意地址读-优快云博客经过上述对IO_FILE结构体的初步探究,相信读者也关注到了结构体中的vtable成员,指向了一个函数表,完成对结构体数据的具体操作。
2024-12-31 17:43:00
697
2
原创 【我的 PWN 学习手札】IO_FILE 之 stdout任意地址读
延续上一篇的故事我们知道,利用缓冲区,是为了避免进行频繁系统调用耗费资源。对于stdin来说:这就类似于从海上进货,不可能每次需要多少就让多少船承载多少来;而是尽量装的满满的,虽然你只需要一点,但是多的我可以存在码头仓库,你需要更多直接在仓库拿就好;仓库用完了,再让船满载进货... ...对于stdout来说:类似于从海上发货,不可能每次生产出来一件商品,就让一艘渡轮送出去,这太亏了;因此我们选择在海边码头先屯着,尽可能屯多,或者估计着用户需要期限之前,将囤积的商品一并发出。
2024-12-28 11:28:18
1058
原创 【我的 PWN 学习手札】IO_FILE 之 stdin任意地址写
不直接调用sys_read,而是通过IO_FILE结构,通过设置缓冲区来减小频繁系统调用开销。我们将从IO_FILE相关结构分析,了解这一模式,再探讨利用标准输入(以及_IO_2_1_stdin)劫持所谓的缓冲区到任意地址,实现任意地址写。设置 _IO_read_end 等于 _IO_read_ptr。设置 _flag &~ ( _IO_NO_READS | _IO_LINE_BUF | _IO_UNBUFFERED ) 即 _flag &~ 0x206(后两个置位有时候不影响)。
2024-12-19 21:05:42
1098
原创 【我的 PWN 学习手札】IO_FILE相关几个基本函数的调用链源码
本篇简单罗列的,是glibc版本2.23下的部分源码本篇没有技术性的知识,仅仅做一个调用链的源码整理对fopen、fread、fwrite、fclose四个函数的调用过程,在源码层次进行了一个梳理本篇简单梳理了一下几个基本文件操作函数的调用链,为后续IO_FILE调用链分析做准备。
2024-12-17 20:29:46
327
原创 【PWN · stack | vm逆向】[ 2024 · CISCN 暨 长城杯 ] avm
一个类似于操作系统的虚拟机,但是没有判断写长度,会越界,类似格式化字符串“读”写栈上的数据。所以我就想改ret到ROPchain,但是最后system("/bin/sh\x00")失败了,什么原因捏?
2024-12-16 00:40:51
1191
原创 【我的 PWN 学习手札】House of Einherjar
之前学off-by-null的时候,经典的做法是通过覆盖prev-inuse位,释放后造成堆块重叠再进行后续利用。而house of enherjar相比与off-by-null,需要泄露堆地址,条件更宽裕,能够实现更强的效果。
2024-12-11 23:55:24
634
原创 【我的 Anti-AV 学习手札】DLL注入
无敌舍友s神免杀学了一个阶段,达者为师,向s师傅学习!!ps:我的基础实在薄弱,WIN编程甚至都没做过,所以笔记翔实些。
2024-11-10 23:58:15
1091
原创 【我的 PWN 学习手札】House of Roman
一般来说House of Roman会和IO_File结合在一起,并不需要泄露libc,适用于没有回显的场景中。但是笔者还没学到那里,而且本篇也侧重于House of Roman手法本身。所以会泄露libc(为了one_gadget),再结合House of Roman打__malloc_hook。
2024-11-04 23:28:38
689
原创 【我的 PWN 学习手札】新版本libc下的setcontext与平替gadget
从 libc-2.29 版本起,setcontext 改用 rdx 寄存器来访问 SigreturnFrame 结构,因此无法直接利用 setcontext 的 gadget 将 free 的 SigreturnFrame 结构赋值给寄存器。
2024-10-31 08:55:29
619
原创 【PWN · setcontext】[2024网鼎杯 · 青龙组] PWN4
套的东西比较多,RC4加解密、账号密码爆破、沙箱。不过libc版本2.27,加之存在UAF,所以如果没有那些限制,其实还是很好过的。接下来我将按照我当时做题的思路过一遍。
2024-10-30 09:08:56
1637
5
原创 【我的 PWN 学习手札】setcontext + ROP
setcontext的gadget能够“恢复上下文”,即设置寄存器的值。除了可以利用其执行shellcode,还可以实现ROP来getshell。本篇介绍了利用setcontext+ROP的方法,ORW地打印flag信息。
2024-10-28 20:04:54
1145
原创 【我的 PWN 学习手札】setcontext + shellcode
之后释放一个 SigreturnFrame,寄存器设置如下图所示。程序通过 setcontext gadget 设置寄存器后将 完成栈迁移可程序执行流劫持后程序将执行,此时会调用 mprotect 函数将 free_hook 所在内存页添加 可执行属性并且会将栈迁移至 &free_hook+0x8 的位置。执行完 mprotect 函数后程序将跳转至 shellcode1 执行。shellcode 会向 __free_hook 所在内存页起始位置读入能 orw 的 shellcode2 并跳转 至 shel
2024-10-24 23:58:53
837
原创 【我的 PWN 学习手札】malloc_init_state attack
malloc_consolidate 会根据 global_max_fast 是否为 0 来判断 ptmalloc 是否已经初始化,因此如果能 通过任意地址写将 global_max_fast 置 0 然后触发 malloc_consolidate 就可以调用 malloc_init_state。
2024-10-24 09:08:28
1021
原创 【我的 RT 学习手札】信息收集
相关笔记整理自B站up主泷羽sec全栈渗透测试教学(免费)视频链接为笔记只是方便师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。
2024-10-17 23:22:24
1083
原创 【我的 PWN 学习手札】tcache stash unlink
tcache stashing unlink atttack 主要利用的是 calloc 函数会绕过 tcache 从smallbin 里取出 chunk 的特性。并且 smallbin 分配后,同大小的空闲块挂进会 tcache。攻击可实现两个效果:1、任意地址上写一个较大的数(和unsortedbin attack 类似)2、任意地址分配chunk
2024-10-04 23:42:58
899
原创 【PWN · HOO | HOF | Tcache pthread struct】[2024 · ByteCTF] ezheap
做完后看了几个战队的WP,或多或少方法都有些差异,我的方法可能比较复杂(代码量来看)但是自己上手,遇到问题、想思路什么的,收益颇丰。于是记一篇博客,既是分享,也是总结。还要向各个战队学习,精简、直接、多解、花式利用对笔者来说,算是酣畅淋漓的综合利用,虽然题目不算特别难,但是也能涨涨士气。与诸君共勉。
2024-09-26 21:55:29
1061
原创 【我的 PWN 学习手札】fastbin reverse into tcache —— tcache key 绕过
之前提到过,较高版本的 glibc,设置了 key 对 tcachebin 内的 double free 进行了检查。除了前面几篇手札罗列的绕过方法,今天又遇到一个,特此记录。之前利用 fastbin 来进行绕过,参见而此次总结的,也是利用 tcache stash 的机制。话不多说,进入主题。首先申请释放14个chunk然后申请一个,让 tcachebin 空出一个位置接着利用 double free,再次释放 chunk8。
2024-09-24 00:52:08
560
原创 【我的 PWN 学习手札】House of Botcake —— tcache key 绕过
我们知道,自对 tcachebin 添加了 key 进行了 double free 检查后,利用起来薛微有些困难。double free 绕过检查机制,实则是因为释放时会检查 tcachebin 对应 size 的所有 free chunk。那么如果第二次 free 的 chunk 落入到其他 tcachebin,或者 fastbin,就可以实现绕过。【我的 PWN 学习手札】House of Karui —— tcache key 绕过手法-优快云博客。
2024-09-23 21:34:11
678
原创 【我的 PWN 学习手札】tcache stash with fastbin double free —— tcache key 绕过
tcache key 的引入使得 tcache dup 利用出现了困难。除了简单利用 UAF 覆写 key 或者之外,还可以利用 ptmalloc 中的其他机制进行绕过。
2024-09-21 22:04:43
1240
原创 【我的 PWN 学习手札】House of Karui —— tcache key 绕过
早期版本的 tcachebin 由于毫无保护,导致攻击利用非常容易,成为重灾区。tcache dup,也即 tcachebin 中的 double free 利用手法,是攻击者常常选用的攻击方式。然而,在glibc-2.29开始,添加了对 tcache key,对 double free 进行了检查。本篇介绍的 House of Karui 即是一种非常简单的通过溢出来实现绕过,造成double free的方法。
2024-09-21 20:21:38
722
原创 【我的 PWN 学习手札】tcache extend
tcache 在释放分配时,没有对 chunk 的 size 进行安全检查,导致可以利用溢出实现扩大的溢出写。能够结合 tcache poisoning 实现任意地址 malloc 进行攻击。
2024-09-21 13:16:07
618
原创 【我的 PWN 学习手札】劫持 tcache_perthread_struct
tcache 是 glibc 2.26 (ubuntu 17.10) 之后引入的一种技术,目的是提升堆管理的性能,与 fast bin 类似。tcache 引入了两个新的结构体, tcache_entry 和 tcache_perthread_struct。
2024-09-19 15:06:40
531
原创 【我的 PWN 学习手札】Tcache dup
Tcache dup,实际上是 tcache 的 double free,能达到 UAF 的效果,实现。
2024-09-19 10:11:57
385
原创 【我的 PWN 学习手札】Tcache Poisoning
早期对于 Tcachebin 的引入,在提高分配释放效率的同时,也因毫无保护而变得尤为好攻击和利用。自 glibc-2.32 以后添加了 key 等保护机制,现在的 tcachebin 利用起来变得困难。不过本篇讨论的还是早期的 tcachebin,能够简单地通过 UAF 实现任意地址 malloc。
2024-09-19 09:22:08
779
原创 【我的 PWN 学习手札】Largebin Attack(<= glibc-2.38可利用)
早期的 Largebin Attack,通过修改 largebin 中 free chunk 的 bk 和 bk_nextsize 指针域,能够实现任意地址写堆地址。然而在 glibc >= version2.30 后,增加了安全检查,释放大于 largebin 中最大 chunk 的情况来实现利用已很难实现。而释放小于 largebin 中最小 chunk 的插入分支,并没有安全检查,依旧可以实现利用,但是只能通过 bk_nextsize 来实现单个地址的写入堆地址。
2024-09-19 02:10:50
690
原创 【我的 PWN 学习手札】Largebin Attack(< glibc-2.30)
Largebin 与 smallbin unsortedbin 在组织结构上,除了通过 fd 和 bk 字段的双向链表组织,还存在fd_nextsize 和 bk_nextsize 字段。因此,当进行 free 或者 malloc 时,这些字段有着与此前不同的写逻辑。largebin attack 就是利用 largebin 的这一组织特性进行利用的。
2024-09-18 18:37:00
991
2
原创 【我的 PWN 学习手札】Unsortedbin Attack
Unsortedbin Attack不能说是一种getshell的方式,而只能说是一种利用手法。在glibc2.28之前有效,条件是存在uaf,效果是能在某一地址写一个大数(glibc上的一个地址)。
2024-09-16 22:51:37
767
原创 【我的 PWN 学习手札】Fastbin Double Free
Fastbin的Double Free实际上还是利用其特性产生UAF的效果,使得可以进行。与简单的UAF下的FastbinAttack相比,可以在没有edit,仅能add时写的情境下实现攻击
2024-09-14 19:18:00
710
原创 【我的 PWN 学习手札】Fastbin Attack
Fastbin Attack主要是利用了Fastbin单链表管理,如果能够利用UAF等漏洞,将Fastbin链表上的free chunk的fd写数据,即可实现任意地址分配,进而实现任意地址读写 本篇涉及到的保护机制只有一个:取出的fastbin chunk,size应该在对应取出的fastbin范围内 二、利用手法(1)分配到任意地址(__malloc_hook周边)通过修改free chunk的fd指针造成分配到任意地址, 需要满足size条件。通过任意地址写来利用getshell,劫持ho
2024-09-13 21:42:25
865
原创 【我的 PWN 学习手札】Unlink Attack
在除了fastbin、tcachebin的其他空闲堆块的管理bin中,如shortbin、largebin、unsortedbin,内部组织都是双向链表。如下图(示意图来自好好说话之unlink-优快云博客当需要将second_chunk脱链时,使用unlink对second_chunk操作。不难看出,实际上是这样一个过程:我的上一个的下一个=我的下一个,我的下一个的上一个=我的上一个这样“我”就可以取出,因为链上已经没有指针指向“我”,即所谓的脱链。
2024-09-13 18:06:40
1454
原创 【我的 PWN 学习手札】Unsortedbin Leak
main_arena 是一个 struct malloc_state 类型的全局变量,是 ptmalloc 管理主分配区的唯一实例。说到全局变量,立马可以想到他会被分配在 .data 或者 .bss 等段上,那么如果我们有进程所使用的 libc 的 .so 文件的话,我们就可以获得 main_arena 与 libc 基地址的偏移,从而获取 libc的基地址。由于 unsorted bin 是双向链表,因此在 unsorted bin 链表中必有一个节点的 fd 指针会指向main
2024-09-12 20:33:13
1079
原创 【PWN · tcache | UAF】[2024 · 长城杯] KyLinHeap
关注glibc版本,审出UAF,即可利用tcachebin attack打__malloc_hook的ogg。
2024-09-10 16:14:31
547
蒟蒻自制的俄罗斯方块大作业!Win32框架下的最终作业!
2022-11-19
新电脑环境,python关于转义字符的报错
2023-06-07
TA创建的收藏夹 TA关注的收藏夹
TA关注的人