文章预览
点击蓝字 关注我们 日期:2024.07.01 作者:H4y0 介绍:Linux_io_FILE基础知识。 0x00 前言 _IO_FILE 利用已成为 CTF 中 PWN 题的常规利用思路,逐渐成为基础知识,上篇文章已经介绍了 _IO_FILE 的结构及标准 I/O 流相关内容,本文将介绍 vtable 及与 vtable 相关的劫持程序流的方法。 0x01 伪造vtable 借用 Wiki 上的例子: # define system_ptr 0x7ffff7a52390; int main ( void ) { FILE *fp; long long *vtable_ptr; fp=fopen( "123.txt" , "rw" ); vtable_ptr=*( long long *)(( long long )fp+ 0xd8 ); //get vtable memcopy(fp, "sh" , 3 ); vtable_ptr[ 7 ]=system_ptr //xsputn fwrite( "hi" , 2 , 1 ,fp); } 使用 glibc-2.23 进行编译, glibc2.23 版本下,位于 libc 数据段的 vtable 是不可以进行写入的,但是可以通过伪造 vtable 并且修改 _IO_FILE_plus->vtable 这个指针来实现劫持程序流程。 简单介绍一下 fwrite 函数。 _IO_size
………………………………