house of apple
条件:
- 从
main
函数返回或能调用exit
函数 - 能泄漏出
heap
地址和exit
地址 - 能使用一次
largebin attack
当程序从main
函数返回或执行exit
函数时,均会调用fcloseall
函数
该调用链为:
- exit
- fcloseall
- _IO_cleanup
- _IO_flush_all_lockp_
- _IO_OVERFLOW
- _IO_flush_all_lockp_
- _IO_cleanup
- fcloseall
最后会遍历_IO_list_all
存放的每一个IO_FILE
结构体,如果满足条件的话,会调用每个结构体中vtable->_overflow
函数指针指向的函数
使用largebin attack
可以劫持_IO_list_all
变量,将其替换为伪造的IO_FILE
结构体,而在此时,我们仍可以继续利用某些IO
流函数去修改其它地方的值。要想修改其它地方的值,就离不开_IO_FILE
的一个成员_wide_data
的利用
house of apple
http://example.com/2025/03/31/house-of-apple/