直接修改栈上的ret地址,leak栈地址方法参见这里
修改 __malloc_hook/__free_hook/__realloc_hook... 为想要跳到的地址
修改 __libc_atexit , __start___libc_atexit 到 __stop___libc_atexit 间存放了相关的hook函数地址,这两个符号无法用 libc.symbols[] 找到,可以gdb+调试符号找
修改 _rtld_global.__rtld_lock_unlock_recursive ,
gdb里找 _rtld_global._dl_rtld_unlock_recursive
https://blog.csdn.net/qq_43116977/article/details/105485947
house of husk,需要调用了printf系函数且使用了任意格式化字符串(%?,?可以是任意ascii字符)
能够将__printf_function_table和__printf_arginfo_table都修改为任意合法可读地址,并将__printf_function_table[spec] 或 __printf_arginfo_table[spec] 设置为想要跳到的地址
(spec为使用的格串,例如 %s 则为 's' 的ascii码,也就是115,实际offset还需要*指针大小)
通常通过两次largebin attack完成
在正常退出时,.fini_array里面的函数指针会被ld反向依次调用