关于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...
劫持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; ...
关于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...
关于largebin attack
0x00一直想要学习_IO_FILE攻击却一直没有腾出时间去学,就先记录一下经常与之结合使用的largebin attack来督促一下自己吧参考博客浅析Large_bins_attack在高低版本的利用-先知社区好好说话之Large Bin Attack_largebin attack-CSDN博客 0x01 关于largebinsGlibc 的 largebins 共 63 个(索引 64–126),每个 bin 负责管理一个连续的大小区间分别为0x4000x430,0x4400x470,0x4800x4b0,0x4c00x4f0,以此类推。故而进行largebin attack时应该选择申请大小在同一个bin下的chunk每一个largebin与unsorted...
malloc位于栈上的chunk
0x00 Background笔者打nssctf上的一题打了两天才通,收获颇多,记录一下。pwn攻击不应该孤立的看。换句话说,要无所不用其极,哪种攻击好使就用哪种。现在就来浅浅分析一下在堆中对栈的攻击。(手法很多,后面慢慢学慢慢补充吧 0x01 利用environ变量以下调试以[NSSRound#21Basic]want_girlfriend(glibc2.35)的程序来演示。在linux环境下,程序存在一个全局变量(char**)environ,位于libc数据段,与libcbase存在固定偏移 1environ_addr=libcbase+libc.sym["environ"] environ指向一个指针数组,数组中每个指针指向一个环境变量字符串,而环境变量字符串是位于栈区的。 1234pwndbg> p &environ$1 = (<data variable, no debug info> *) 0x7ffff7e22200 <environ>pwndbg> x/gx...
不同版本下glibc有关堆的管理和保护
0x00记录一下不同版本glibc下的堆管理保护机制的变化(开个坑,以后慢慢记录补充 先贴上几篇参考博客 不同版本glibc的堆管理和新增保护机制 - Luexpglibc各版本的堆保护 | jkilopu’s blogGlibc中堆管理的变化 | 白里个白Glibc高版本堆利用方法总结 - LynneHuan - 博客园然后ubuntu和glibc不同版本的对应关系 12345678910111213ubuntu-libc version2.23=“16.04”2.24=“17.04”2.26=“17.10”2.27=“18.04”2.28=“18.10”2.29=“19.04”2.30=“19.10”2.31=“20.04”2.32=“20.10”2.33=“21.04”2.34=“22.04” 0x01 关于tcachebins在glibc2.26+,引入了tcachebins有两个比较关键的函数tcache_get()和tcache_put()(以下为glibc2.28中的源码) 1234567891011121314151617181920static...
劫持tcache_perthread_struct
0x00 关于tcache_perthread_structtcache 是 glibc 2.26 (ubuntu 17.10) 之后引入的一种技术,目的是提升堆管理的性能,与 fastbin 类似。 tcache 引入了两个新的结构体,tcache_entry和 tcache_perthread_struct 。两个结构体源码如下 12345678910typedef struct tcache_entry{ struct tcache_entry *next;} tcache_entry;typedef struct tcache_perthread_struct{ char counts[TCACHE_MAX_BINS];//0x40 tcache_entry *entries[TCACHE_MAX_BINS];//0x40} tcache_perthread_struct; 12TCACHE_MAX_BINS:# define TCACHE_MAX_BINS ...