我可是会飞的啊 主要方向:re,pwn

归档

2024 年 03 月

前言 比赛总共4个pwn,做了2个,剩下1个没看,1个没懂 pwn - betterthanu 题目分析 给出了源码: #include <stdio.h> #include <string.h> #include <stdlib.h> #include <stdint.h> FILE *flag
简介 对IO_FILE的一种利用方法是,不修改虚表,修改IO_FILE结构中的数据指针,可以实现任意地址读和任意地址写 IO_FILE 结构 pwndbg> dt FILE FILE +0x0000 _flags : int +0x0008 _IO_rea
源码分析 IO_validate_vtable 位于:libio/libioP.h /* Perform vtable pointer validation. If validation fails, terminate the process. */ // 确保vtable指针合法,不然
简介&前言 FILE 在 Linux 系统的标准 IO 库中是用于描述文件的结构,称为文件流。 FILE 结构在程序执行 fopen 等函数时会进行创建,并分配在堆中。我们常定义一个指向 FILE 结构的指针来接收这个返回值。 libioP.h 的定义:_IO_list_all 全局变量 #incl
简介&前言 这是IO_FILE篇的第四个函数分析:fclose,文件流的关闭操作,一览文件流的关闭流程:先刷新写缓冲区,再断链,关闭文件描述符,释放文件结构体 到这里IO FILE常用的4个函数分析完了,下一篇开始将进入文件流利用相关的内容 源码分析 _IO_new_fclose 位于:libio/

2024 年 02 月

简介&前言 这是IO_FILE篇的第三个函数分析:fwrite,本文分析了fwrite的主要流程,fwrite如何写入文件,以及其中各缓冲区的使用: 这里主要涉及的几个缓冲区指针: // write 缓冲区指针 wchar_t *_IO_write_base; /* Start of put a
简介&前言 这是IO_FILE篇的第二个函数分析:fread,本文分析了fread的流程,fread如何读取文件内容返回,fread中的各种缓冲区的使用: // 读取缓冲区,base是起始地址,end是结束地址,ptr是指针 wchar_t *_IO_read_ptr; /* Current r
简介&前言 最近学习各种堆利用技术,发现到处都有用到对 IO 的攻击,但是对 IO_FILE 的了解很模糊,这次来好好探索一下 IO_FILE 的内部,以 libc 2.35 源码为例进行分析学习 fopen做的事情,简单来说就是创建FILE结构体,初始化内容并链接进入_IO_list_all链表中

2024 年 01 月

简介 介绍部分来自参考资料[0],其余内容参考自glibc malloc源码,探究了the house of storm的完整过程,以及一个实例练习 漏洞成因 堆溢出、use after free、edit after free 适用范围 2.23——2.29 可以进行 unsortedbin at
简介 本文参考自 how2heap 和 malloc.c 源码进行介绍,介绍2.23和2.35情况下的largebin attack 漏洞原因 Use-After-Free,overflow write 适用范围: libc 2.23 - 至今 可以伪造largebin chunk的bk_nexts
简介 介绍部分来自参考资料[0],其余内容参考自glibc malloc源码,介绍了其中用到的两个部分fastbin dup和unsortedbin attack,探究了the house of roman的过程,概率的计算,如何爆破,鉴于原理简单和成功率极低,就不做额外实验了 漏洞成因 use a
简介 本文参考自how2heap和malloc.c源码进行介绍 漏洞原因 Overflow,WAF 适用范围: libc 2.23~至今 可以伪造 fastbin chunk 的 fd 指针 利用原理 修改fastbin chunk 的fd指针指向fake fastbin chunk,使得链表指向伪
简介 介绍部分来自参考资料[0],其余内容参考自glibc malloc源码,本文结合源码探讨了malloc中的多种机制:包括malloc consolidation,unsortedbin sort,mmap,heap grow等 漏洞成因 overflow write、use after fre
unlink_chunk /* Take a chunk off a bin list. */ static void unlink_chunk(mstate av, mchunkptr p) { // 安全检查:如果当前chunk的大小不等于next chunk的prev_size,说明