
利用思路利用_IO_wfile_jumps函数中的_IO_wfile_seekoff函数,在转到调用_IO_switch_to_wget_mode函数进行攻击。
调用链:_IO_wfile_jumps ——> _IO_wfile_seekoff ——> _IO_switch_to_wget_mode(fp)
gdb中结构如下:相比于House_of_emma,House_of_cat可以进行FSOP,具体操作为:改虚表指针vtable为_IO_wfile_jumps+0x10并结合_malloc_assert触发;
利用条件
任意写一个可控地址(如largebin_attack)
泄露libc和heap
触发:
调用exit或从main退出
puts、printf函数调用
_malloc_assert
在最后一步调用中:此时的rdi是我们传入的堆地址,那么此时我们泄露libc后,rdi、rax、rdx我们就都可以自主控制了,而利用这个 call [rax + 0x18] 汇编代码我们就可以执行我们控制的rax寄存器的地址。主要是这四句,也就是红框中汇编:
rax1 ...