劫持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...
关于largebin attack
0x00一直想要学习_IO_FILE攻击却一直没有腾出时间去学,就先记录一下经常与之结合使用的largebin attack来督促一下自己吧参考博客浅析Large_bins_attack在高低版本的利用-先知社区好好说话之Large Bin Attack_largebin attack-CSDN博客 0x01 关于largebinsGlibc 的 largebins 共 63 个(索引 64–126),每个 bin 负责管理一个连续的大小区间分别为0x400~0x430,0x440~0x470,0x480~0x4b0,0x4c0~0x4f0,以此类推。故而进行largebin attack时应该选择申请大小在同一个bin下的chunk每一个largebin与unsorted...
malloc位于栈上的chunk
0x00 Background笔者打nssctf上的一题,记录一下。pwn攻击不应该孤立的看。换句话说,要无所不用其极,哪种攻击好使就用哪种。现在就来浅浅分析一下在堆中对栈的攻击。(手法很多,后面慢慢学慢慢补充吧 0x01 利用environ变量以下调试以[NSSRound#21Basic]want_girlfriend(glibc2.35)的程序来演示。在linux环境下,程序存在一个全局变量(char**)environ,位于 libc 数据段,与 libc_base 存在固定偏移 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 ...
关于fastbin attack与unsortedbin leak
0x00以三道循序渐进的题目为例来分析吧。 0x01 hitcontraining_uaf / hacknote复盘/uaf/heapoverflow题目源码如下 123456789101112131415161718192021222324252627282930313233343536373839404142int __cdecl __noreturn main(int argc, const char **argv, const char **envp){ int v3; // eax char buf[4]; // [esp+0h] [ebp-Ch] BYREF int *p_argc; // [esp+4h] [ebp-8h] p_argc = &argc; setvbuf(stdout, 0, 2, 0); setvbuf(stdin, 0, 2, 0); while ( 1 ) { while ( 1 ) { menu(); read(0, buf,...
LitCTF2025PWN方向wp
0x002025-6-30:犯懒了,仅仅复现了nc这道题目2025-9-21补:wmctf强度太大,回过头来复现一下这个,放松一下身心 0x01 nc把附件拖进ida发现得出了我看不懂的一坨玩意在re手的指导下,直接用vscode打开得到了一段python代码,如下 12345678910111213#!/bin/python3import osprint("input your command")blacklist = ['cat','ls',' ','cd','echo','<','${IFS}','sh','\\']while True: command = input() for i in blacklist: if i in command: exit(0) ...
御网杯2025PWN方向wp
Canary复盘/ret2text/canary/伪随机数题目源码如下 123456__int64 __fastcall main(__int64 a1, char **a2, char **a3){ sub_401296(); sub_4013C7(); return 0LL;} 两个函数分别如下 12345678910111213141516171819void sub_401296(){ int v0; // eax int fd; // [rsp+Ch] [rbp-4h] setbuf(stdin, 0LL); setbuf(stdout, 0LL); setbuf(stderr, 0LL); fd = open("/dev/urandom", 0); if ( fd == -1 ) { printf("can't open /dev/urandom"); exit(-1); } read(fd,...


