pwn题堆利用的一些姿势 -- exit_hook

pwn题堆利用的一些姿势 – free_hook
pwn题堆利用的一些姿势 – malloc_hook
pwn题堆利用的一些姿势 – IO_FILE
pwn题堆利用的一些姿势 – setcontext

概述

  在做堆题的时候,经常会遇到保护全开的情况,其中对利用者影响最大的是 PIE 保护和 Full RELRO ,NX 保护和栈保护对堆利用来说影响都不大,一般利用也不会往这方面靠。开了 PIE 保护的话代码段的地址会变,需要泄露代码段基地址才能利用存储在 bss 段上的堆指针;开了 Full RELRO 的话,则意味着我们无法修改 got 表,导致无法修改其它函数 got 表指向 system ,进一步获取到 shell 。因此也就有了我这一系列文章的目的,在 got 表无法被修改时,我们往往利用的就是下面的一些 hook + onegadget 来达到我们的目的。
  主要分为以下几个系列:malloc_hook --> free_hook --> IO_FILE --> setcontext --> exit_hook。

exit_hook 介绍

  首先我们来认识一下 exit_hook ,编写如下测试代码,然后再用对应的 libc 去编译。

#include <stdio.h>


int main() {
   

    printf("hello\n");
}

  编译命令如下,使用对应的 ld 和 libc 进行编译。这里注意一定要使用相应的 libc 和动态链接器进行编译调试,否则即使使用 patchelf 或者 python 修改加载的动态链接器和 libc 也无法获得正确的偏移。

$ gcc test.c -o test -Wl,--rpath=/usr/local/libc/ -Wl,--dynamic-linker=/usr/local/libc/ld-2.23.so 

  这里我们使用的是 libc-2.23.so 版本,然后在 gdb 中进行调试。通过调试我们可以发现,所有程序即使没有明确调用 exit 函数,最后在__libc_start_main中也会主动调用 exit 函数,而 exit_hook 就是指的 exit 函数执行过程中的两个子函数调用。

exit
  在 exit 执行过程中,会调用两个函数,一个是__rtld_lock_lock_recursive,另一个是__rtld_lock_unlock_recursive,这两个函数在 libc-2.23.so 中的偏移如下截图所示。首先_rtld_g

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值