最近在打比赛的时候,一眼就知道咋做了,打exit_hook为one_gadget
但是泄露出libc之后,没法找到exit_hook的偏移,所以没能拿到一血。搜了好多,
总结大概就是exit_hook不是真实存在的,而是函数指针,所以找到合适的函数指针就可以,在看了好多文章之后,发现,一个是改 rtld_lock_default_lock_recursive 或 rtld_lock_default_unlock_recursive 为 one_gadget , 另一个更通用就是改 rtld_lock_default_lock_recursive 和 rtld_lock_default_unlock_recursive 为 system ,并且把 _rtld_global._dl_load_lock.mutex的值改为 /bin/sh\x00。
_rtld_global 与的 ld 的偏移不变,而 ld 与 libc 的偏移也不变,而如果题目只给了一个libc文件,那么就能找另一个了,就是__libc_atexit,
可以在给的libc文件里找__libc_atexit的偏移,应该是在最下面
然后把这个指针改为one_gadget就可以碰运气了