关于SROP
0x00想起来好像没学,学一下 0x01 前置知识 signal机制signal机制是类 unix 系统中进程之间相互传递信息的一种方法。一般,我们也称其为软中断信号,或者软中断。比如说,进程之间可以通过系统调用 kill 来发送软中断信号。一般来说,信号机制常见的步骤如下图所示: 内核向某个进程发送 signal 机制,该进程会被暂时挂起,进入内核态。内核会为该进程保存相应的上下文,主要是将所有寄存器压入栈中,以及压入 signal 信息,以及指向 sigreturn 的系统调用地址。此时栈的结构如下图所示,我们称 ucontext 以及 siginfo 这一段为 SignalFrame。需要注意的是,这一部分是在用户进程的地址空间的。之后会跳转到注册过的 signal handler中处理相应的 signal。因此,当 signal handler 执行完之后,就会执行 sigreturn 代码。 对于 signal Frame 来说,会因为架构的不同而有所区别,这里给出 x64 的...
关于house of banana
0x00前脚算是梳理了一下exit的攻击点,想到house of banana是攻击rtld_global结构体,正是对前面梳理的exit攻击点的利用,于是也就记录一下 0x01 house of banana 原理详细见关于exit的利用以及一个程序的开始到结束 | r3t2’s blog中关于_rtld_global结构体攻击点的叙述 1_rtld_global -> _ns_loaded -> link_map -> ((fini_t) array[i]) () house of banana的攻击思路大概就是向_rtld_global结构体中的_ns_loaded写入一个堆地址,在堆中伪造出一个link_map结点。有哪些检查呢?把_dl_fini中的检查翻出来(glibc2.35)先是 1assert (nloaded != 0 || GL(dl_ns)[ns]._ns_loaded == NULL); 这保证了:如果nloaded == 0,则_ns_loaded == NULL;如果_ns_loaded != NULL,则nloaded !=...
关于exit的利用以及一个程序的开始到结束
0x00迎新练习赛@powchan出了一个神人题目It's my 钩,主要是打exit()的几个hook,同时打lilctf2025的一道静态堆题的时候也找到了几篇关于fini_array的利用,也是exit()的一个利用点,于是催生了我记录一下exit()的利用的想法参考博客exit()分析与利用-安全KER - 安全资讯平台以下贴出的glibc源码皆为2.35版本 0x01 exit()的流程注意内核层面的系统调用_exit()和用户层面的exit()是不同的,前者负责释放一个内核层面的资源,比如文件描述符等,后者则是负责释放用户层面的资源,比如io流的缓冲区,tls,等等我们所利用的正是用户层面的exit()现在我们找到exit()的源码 12345voidexit (int status){ __run_exit_handlers (status, &__exit_funcs, true,...
关于stdout的利用
0x00复现LilCTF2025,遇到了一点对_IO_2_1_stdout_的利用,于是记录一下关于stdout的利用 0x01 关于stdoutstdout也就是_IO_2_1_stdout_在 glibc 里,标准 I/O 流 (stdin / stdout / stderr) 都是定义在 libc 的全局变量 123extern struct _IO_FILE_plus _IO_2_1_stdout_;extern struct _IO_FILE_plus _IO_2_1_stdin_;extern struct _IO_FILE_plus _IO_2_1_stderr_; 这几个其实都是_IO_FILE_plus结构体,其_fileno域分别为1,0,2在程序调用puts函数或者printf函数(标准IO函数)时候,使用的都是_IO_2_1_stdout_这个结构体那么write函数呢?其实write函数只是对系统调用的封装,当你调用 write(1, "hi", 2),glibc 内部会直接发起...
关于unsafe unlink与unsortedbin attack
0x00在打lilctf的一道堆题的时候意识到自己还没记录过关于unsafe unlink与unsortedbin attack,于是来记录一下 0x01 关于unsafe unlink从双向链表取出chunk的过程即为unlink(在 glibc 源码中,unlink 是一个宏/函数,用来把一个双向链表中的 bin 链接节点(chunk)移除),如下所示 12345678910111213141516171819202122232425262728293031323334353637383940/* Take a chunk off a bin list. */static voidunlink_chunk (mstate av, mchunkptr p){ if (chunksize (p) != prev_size (next_chunk (p))) malloc_printerr ("corrupted size vs. prev_size"); mchunkptr fd = p->fd; mchunkptr...
记录一次侧信道攻击
0x00 关于侧信道攻击侧信道攻击(Side-Channel Attack)是一类不直接破解算法本身,而是通过分析系统在运行过程中泄露的物理信息来推测机密数据的攻击方式。常见的侧信道信息包括:时间(Time):执行时间的差异可能泄露数据,比如加密运算时间与密钥值有关。功耗(Power):芯片运算时功耗变化可反推出密钥(DPA/SPA)。电磁辐射(EM):运行时发出的电磁波可被采集分析。声学(Acoustic):设备运行的声音差异可能泄露信息(如打印机、键盘声)。缓存行为(Cache):缓存命中/缺失模式可被利用(如 Spectre、Meltdown)。 —- 摘取自ChatGPT-5 0x01...
记非栈上格式化字符串漏洞利用
0x00时值 moectf2025(比赛原因写完过了两个月才发布),虽然已经不是小登了,但还是做几题练练手,顺带总结一下非栈上fmtstr同时补充六届强网拟态线下赛的一道题目 0x01 关于非栈上fmtstr利用之前一直没有专门记录过非栈上fmtstr的利用,姑且提一嘴当我们读入的地址不在栈上时候(位于bss段或者堆上),便不能直接写入地址,所以不好简单的直接进行任意地址写,这时候就需要另一些办法,比较广泛的有利用栈上的指针跳板实现部分地址写(诸葛连弩 or 四马分肥),或者将栈迁移到对应区域,又或者是栈上可能存在着指向link_map的指针,利用其来修改l_addr,劫持fini_array下面用 moectf2025 的 fmt_s 来记录一下指针跳板的利用 0x02 moectf2025 | fmt_S先把源码放出 1234567891011121314int __fastcall main(int argc, const char **argv, const char **envp){ int i; // [rsp+Ch] [rbp-4h] ...
劫持vtable以及FSOP
0x00参考博客IO FILE 之劫持vtable及FSOP-先知社区【我的 PWN 学习手札】IO_FILE 之 FSOP_fsop pwn-CSDN博客【我的 PWN 学习手札】IO_FILE 之 劫持vtable到_IO_str_jumps_pwn vtable-CSDN博客linux IO_FILE 利用_io list all结构体-CSDN博客因为vtable check机制的引入,直接劫持vtable和简单的FSOP在glibc2.24+就已经失效了,如下 123456789101112131415161718#define _IO_MAGIC_MASK 0xFFFF0000static inline const struct _IO_jump_t *IO_validate_vtable(const struct _IO_jump_t *vtable){ uintptr_t ptr = (uintptr_t) vtable; uintptr_t offset = ptr - (uintptr_t) &__io_vtables; if...
关于house of apple
0x00在复现LitCTF2024的heap-2.39时候遇到了house of apple,既然碰到了,那么就学习一下吧!(其实在上学期校赛的时候就碰到了) 0x01 house of apple 原理先贴上roderick01师傅的原创文章镇帖([原创] House of apple 一种新的glibc中IO攻击方法 (1)-Pwn-看雪-安全社区|安全招聘|kanxue.com[原创] House of apple 一种新的glibc中IO攻击方法 (2)-Pwn-看雪-安全社区|安全招聘|kanxue.com[原创]House of apple 一种新的glibc中IO攻击方法 (3)-Pwn-看雪-安全社区|安全招聘|kanxue.com 我们调试demo (姑且先看apple2) _IO_wfile_overflow1234_IO_wfile_overflow _IO_wdoallocbuf _IO_WDOALLOCATE *(fp->_wide_data->_wide_vtable +...
关于_IO_FILE
0x00总结记录一下_IO_FILE的基础知识参考博客linux IO_FILE 利用_io list all结构体-CSDN博客【IO_FILE】源码详解 | Loora1N’s Blog | 鹭雨【PWN】iofile | 狼组安全团队公开知识库 0x01 _IO_FILE结构FILE 在 Linux 系统的标准 IO 库中是用于描述文件的结构,称为文件流。 FILE 结构在程序执行 fopen 等函数时会进行创建,并分配在堆中。我们常定义一个指向 FILE 结构的指针来接收这个返回值。FILE 结构定义在 libio.h 中,如下所示 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566struct _IO_FILE { int _flags; /* High-order word is _IO_MAGIC; rest is flags. */#define...


