直接修改栈上的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反向依次调用