前言
最近感觉apple2和cat有些利用条件搞混了,就想出一篇博客总结一下。
house of apple2
调用链:
exit -->> __run_exit_handlers -->> _IO_cleanup -->> _IO_flush_all_lockp
-->> _IO_wfile_overflow -->> _IO_wdoallocbuf -->> _IO_WDOALLOCATE
-->> *(fp->_wide_data->_wide_vtable + 0x68)(fp)/
*(fp->_wide_data->_wide_vtable->_doallocate)(fp)
绕过检查:
- f->flags!=0x8 && f->flags!=0x800 && f->flags!=0x2
- fp->_mode <= 0 && fp->_IO_write_ptr > fp->_IO_write_base(这个一般不用考虑,只要你用largbinattack将堆块地址写到全局变量里面,一般就会满足,满足不了看下一个条件)
fp->_mode > 0 && (fp->_wide_data->_IO_write_ptr> fp->_wide_data->_IO_write_base)
- vtable设置为_IO_wfile_jumps使其能成功调用_IO_wfile_overflow即可
- _wide_data设置为可控堆地址hea