_IO_FILE 相关源码阅读(一)——vtable 及其指向的函数:从 __finish 说起
__finish
虚函数主要处理的是对文件结构体的析构操作,同时会根据情况进行对文件进行 close
操作。通过本文的分析,应该可以基本理解 _IO_new_file_finish
、_IO_new_file_write
、__GI__IO_file_seek
、__GI__IO_file_close
等函数的实现。同时可以对面向语言中虚函数的实现有初步的了解,更重要的,可以明白面向对象是一种思维,而不是语法,使用面向过程式语言仍然可以实现面向对象的开发。
PWNABLE.TW-seethefile-WP
首先是前置的小 trick:关于/proc目录
题目提供了读取文件的功能,可以读除了 flag 之外的文件。自然可以想到通过 /proc/self/maps
来 leak 出 libc 的基地址。
然后在退出时

注意到这里有一个 "%s"
可以溢出。一开始也没仔细看,以为 name 是栈上的变量,也没看到后面的 exit(0)
,准备 rop,结果发现 name 在 .bss 段上,难以 rop,但是注意到 fp 变量在 name 后面,所以可以通过溢出覆写 fp。程序没有开启 PIE,所以我们写入的地址是已知的,我们布置好一个 fake_file,让 fp 指向它,在执行 fclose 的时候 getshell 了。

unsorted bin 利用的简单总结
学习堆利用也有一段时间了,基本上就是在和 fastbin 和 unsorted bin 打交道,最近这段时间 tcache 的题也做了一些。套路居多,想想还是应该总结一下。不会写的太详细,也可能无法写全。
…