io_file

 

 

 

 

houseoforange_hitcon_2016

https://blog.csdn.net/yongbaoii/article/details/114649586?utm_source=app&app_version=4.18.0&code=app_1562916241&uLinkId=usr1mkqgl919blen

 

 

topchunk的size修改条件

  1. topchunk size > MINSIZE(0x10)
  2. top chunk inuse位为1
  3. 修改之后的 size 必须要对齐到内存页(页大小一般为0x1000)

 

 

大佬 blog:

Pwn_IO_FILE - SkYe Wiki (mrskye.cn)

堆中global_max_fast相关利用 - 先知社区 (aliyun.com)

 

例题:justpwnit      

 

 

fastbin[0]有时候距离main_arena的偏移为8有时候为16,所以公式不能直接套(老版本glibc的main_arena 结构中没有第二个 qword,have_fast_bin。老版本中的0x20 fastbin 在arena + 8, 新版本的在arena + 0x10。)

 

 

 

 _free_buffer距vtable的偏移是0x10

 

 

 

 参考blog:https://www.anquanke.com/post/id/258512

 

_IO_flush_all_lockp调用函数的时机包括:

  • libc执行abort函数时。
  • 程序执行exit函数时。
  • 程序从main函数返回时。

 

fsop

 

 

 

 

IO_FILE中glibc2.24,利用_IO_str_jumpsz中的_IO_str_finish

我们可以将vtable的地址覆盖成_IO_str_jumps-8的地址,这样会使得_IO_str_finish函数成为了伪造的vtable地址的_IO_OVERFLOW函数(因为_IO_str_finish偏移为_IO_str_jumps中0x10,而_IO_OVERFLOW为0x18)。这个vtable(地址为_IO_str_jumps-8)可以绕过检查,因为它在vtable的地址段中。

 

 

stdin标准输入缓冲区进行任意地址写

 

 

stdout标准输入缓冲区进行任意地址读写

任意写

 

 

任意读

flag &=~ 8

 

 

 

 

 

注:会有printf输出时,会多一个条件

 

 

 

 

利用stdout 来泄露地址

 

 

 

参考blog:

IO FILE 之任意读写 « 平凡路上 (ray-cp.github.io)

Pwn_IO_FILE - SkYe Wiki (mrskye.cn)

 

 
 
 
posted @ 2021-11-26 17:35  ATKevin  阅读(50)  评论(0编辑  收藏  举报