exit_hook和setcontext

文章目录

  • exit_hook
    • 概述
    • 例题:
      • 思路:
    • 利用:
  • setcontext
      • glibc-2.27以及 之前
      • glibc-2.29以及之后:

exit_hook

概述

大佬文章:exit_hook在pwn题中的应用 - 不会修电脑 - 博客园 (cnblogs.com)

  1. exit_hook :是程序在执行exit函数时,会去该位置拿一个函数指针,进而执行的一段程序,如果能修改掉这个函数指针就能挟持程序的控制流,执行想要的gadget。

  2. 观察执行exit函数时程序的运行状态:

    #include <stdio.h>
    #include <stdlib.h>int main(){exit(0);return 0;
    }

    这里用libc-2.32.so演示一下exit的调用过程:

    先进__run_exit_handlers函数:

    image-20240830171426484

    这里会调用到**_dl_fini函数** ,进入:

    image-20240830171522513

    _dl_fini函数开头的for循环中就调用到了rtld_lock_default_lock_recursive函数 ,可以看到该函数的地址是直接通过*(rip + 偏移)拿到的:

    image-20240830171629852

    在ida中反汇编一下ld文件,找到_dl_fini函数,可以看到该处的汇编指令是直接通过 _rtld_local拿到的 _dl_rtld_lock_recursive地址:

    image-20240830173206928

    gdb看一下_rtld_local的结构,可以看到两个函数指针的位置,所以只要我们覆盖掉指针的值即可挟持程序的控制流了:

    image-20240830173430954

    这里再反过来看一下_dl_fini函数的源码:

    void
    _dl_fini (void)
    {/* Lots of fun ahead.  We have to call the destructors for all stillloaded objects, in all namespaces.  The problem is that the ELFspecification now demands that dependencies between the modulesare taken into account.  I.e., the destructor for a module iscalled before the ones for any of its dependencies.To make things more complicated, we cannot simply use the reverseorder of the constructors.  Since the user might have loaded objectsusing `dlopen' there are possibly several other modules with itsdependencies to be taken into account.  Therefore we have to startdetermining the order of the modules once again from the beginning.  *//* We run the destructors of the main namespaces last.  As for theother namespaces, we pick run the destructors in them in reverseorder of the namespace ID.  */
    #ifdef SHAREDint do_audit = 0;again:
    #endiffor (Lmid_t ns = GL(dl_nns) - 1; ns >= 0; --ns){/* Protect against concurrent loads and unloads.  */__rtld_lock_lock_recursive (GL(dl_load_lock)); // 这里直接调用没有判断条件unsigned int nloaded = GL(dl_ns)[ns]._ns_nloaded;/* No need to do anything for empty namespaces or those used forauditing DSOs.  */if (nloaded == 0
    #ifdef SHARED|| GL(dl_ns)[ns]._ns_loaded->l_auditing != do_audit
    #endif)__rtld_lock_unlock_recursive (GL(dl_load_lock)); // 这里有一个if判断条件通过才能调用else{/* Now we can allocate an array to hold all the pointers andcopy the pointers in.  */struct link_map *maps[nloaded];unsigned int i;struct link_map *l;assert (nloaded != 0 || GL(dl_ns)[ns]._ns_loaded == NULL);for (l = GL(dl_ns)[ns]._ns_loaded, i = 0; l != NULL; l = l->l_next)/* Do not handle ld.so in secondary namespaces.  */if 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/413889.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【单片机开发】IAP技术详解及应用

【前言】 在单片机开发过程中&#xff0c;程序的烧录是一个至关重要的环节。随着技术的不断演进&#xff0c;单片机烧录方式也日益多样化。 【单片机开发】单片机的烧录方式详解&#xff08;ICP、IAP、ISP&#xff09;-CSDN博客文章浏览阅读775次&#xff0c;点赞14次&#x…

低空经济概念火爆:无人机飞手人才培养先行

随着科技的飞速发展&#xff0c;低空经济作为新兴的经济形态&#xff0c;正以前所未有的速度崛起&#xff0c;成为推动产业升级和经济发展的新引擎。无人机作为低空经济的重要组成部分&#xff0c;其应用领域已从最初的军事侦察、航拍扩展到农业植保、物流配送、环境监测、应急…

Question mutiple pdf‘s using openai, pinecone, langchain

题意&#xff1a;使用 OpenAI、Pinecone 和 LangChain 对多个 PDF 文件进行提问。 问题背景&#xff1a; I am trying to ask questions against a multiple pdf using pinecone and openAI but I dont know how to. 我正在尝试使用 Pinecone 和 OpenAI 对多个 PDF 文件进行提…

【计算机组成原理】计算机系统的层次结构——计算机软件

计算机系统的层次结构 导读一、计算机软件的分类二、计算机语言三、计算机系统的层次结构3.1 从计算机语言的角度来理解多级层次结构3.2 计算机层次之间的关系3.3 指令集体系结构&#xff08;ISA&#xff09; 结语 导读 大家好&#xff0c;很高兴又和大家见面啦&#xff01;&a…

市占率最高的显示器件,TFT_LCD的驱动系统设计--Part 1

目录 一、简介 二、TFT-LCD驱动系统概述 &#xff08;一&#xff09;系统概述 &#xff08;二&#xff09;设计要点 二、扫描驱动电路设计 &#xff08;一&#xff09;概述 扫描驱动电路的功能 扫描驱动电路的组成部分 设计挑战 驱动模式 &#xff08;二&#xff09…

多目标应用:基于MOPSO的移动机器人路径规划研究(提供MATLAB代码)

一、机器人路径规划介绍 移动机器人&#xff08;Mobile robot&#xff0c;MR&#xff09;的路径规划是 移动机器人研究的重要分支之&#xff0c;是对其进行控制的基础。根据环境信息的已知程度不同&#xff0c;路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或…

Ubuntu上qt使用SSH样式表

SSH样式表 如果学习过web的同学都知道&#xff0c;我们在学习HTML的时候会用到样式表&#xff0c;我们使用它来更改我们的颜色、大小、背景等等。上到后面&#xff0c;老师会说&#xff1a;我们如果在HTML文件中编辑太多的样式&#xff0c;就会让代码看起来非常的繁琐&#xf…

学习计算机网络

a类0~127&#xff0c;b类128~191&#xff0c;c类192~223 网络地址&#xff1a;看子网掩码&#xff0c;分网络位和主机位&#xff0c;后面是主机位&#xff0c;主机位全部为0&#xff0c;网络地址。 直接广播地址&#xff1a;看子网掩码&#xff0c;分网络位和主机位&#xff…

自建一款开源音乐服务-Navidrome

自建一款开源音乐服务-Navidrome Navidrome&#xff0c;一个开源的音乐服务器和播放器&#xff0c;提供了一个优雅且功能丰富的解决方案&#xff0c;让你的音乐库无论在何处都能触手可及。本文将带你一步步搭建自己的Navidrome音乐服务器&#xff0c;让你的音乐生活更加自由和…

【Qt】关于QMenuBar创建方式的讨论

关于QMenuBar创建方式的讨论 如果在创建项目的时候&#xff0c;没有勾选自动生成ui文件&#xff0c;此时上述代码是正确的&#xff1b;而如果勾选了自动生成ui文件&#xff0c;上述代码则会出现内存泄漏的问题。因为Qt已经生成了一个QMenuBar了 由于之前程序已经自己创建好了一…

STM32 系列MCU 开发利器 STM32CubeIDE

前言 由于自己接触较多的 ARM 系列芯片主要是 STM32 系列的&#xff0c;接触过 STM32 F1、F4、L4、H7 等几个系列&#xff0c;使用的 开发工具&#xff0c;主要是 Keil MDK5、IAR&#xff0c;所以也比较关注开发工具的使用。 Keil MDK5、IAR 属于商用收费的功能强大的IDE&…

【MATLAB】matlab生成的图像如何导出(三种方法教会你)

我们经常使用matlab生成各类的图&#xff0c;如何将其导出&#xff0c;导出为何种类型。 方法一&#xff1a;选择 matlab 生成的图形界面 " Figure 1 " 的菜单栏 " 编辑 " — " 复制图窗 " , 就可以将图像拷贝到 Word 文档中 打开 Word 文档 ,…

单片机编程魔法师-消息处理

消息机制 消息处理的编程思路是当某件事产生后只发送一条事件产生消息以通知相应执行机构执行的一种编程思路。 消息定义 什么是消息&#xff0c;消息是一个指示&#xff0c;可以是数字&#xff0c;字符串&#xff0c;字符或者是任何形式的其他标识符 消息定义的形式与消息…

简易的 Websocket + 心跳机制 + 尝试重连

文章目录 演示大纲基础 WebSocket前端: 添加心跳机制前端: 尝试重新连接历史代码 还没有写完&#xff0c;bug 是有的&#xff0c;我在想解决办法了… 演示 大纲 基础的 webSocket 连接前后端&#xff1a;添加心跳机制后端无心跳反应&#xff0c;前端尝试重新连接设置重新连接…

计算多图的等价无向图的邻接链表表示

计算多图的等价无向图的邻接链表表示 摘要:一、引言二、算法思路三、伪代码实现四、C代码实现五、算法分析六、结论摘要: 在图论中,多图(Multigraph)是一种允许边重复以及存在自循环边(即一个顶点到其自身的边)的图。给定一个多图的邻接链表表示,本文旨在探讨如何构造…

PHP软件下载-安装-环境配置

.1.下载 下载地址如下 windows.php.net - /downloads/releases/ 安装包如下. .2.安装 可以在D盘或者E盘的根目录创建一个自定义目录。注意文件夹目录中不能包含中文&#xff0c;不能包含空格等特殊字符。 版本说明&#xff1a; (1)ts表示非线程安全版本。这个安装包还指明了…

c++模拟实现数据结构之vector篇

那么本篇文章是带大家一起实现一下数据结构vector&#xff0c;那么我们现在就进入正题。 目录 接口介绍部分 增加 尾插 指定插入与头插 删除 尾删 指定位置删除 主要代码逻辑 增加 尾插 指定插入与头插 删除 尾删 指定位置删除 一些其他接口的代码逻辑 模拟实现…

django企业开发实战-学习小结

写在前面 初次阅读此书是三年前&#xff0c;当时没经历过完整的项目 觉得这书就是扯淡 后来经历过项目加班与毒打 今天再翻开此书 觉得实乃不可多得之物 花些时间啃下来吧 django版本 3.2 本博客开源项目地址 kimsmith/django企业实战 (gitee.com) 有的代码因为版本混乱报错…

Unity 3D学习资料集合

本文包含了unity3D 游戏开发相关的学习资料&#xff0c;包含了入门、进阶、性能优化、面试和书籍等学习资料&#xff0c;含金量非常高&#xff0c;在这里分享给大家&#xff0c;欢迎收藏。 学习社区 1.Unity3D开发者 Unity3D开发者论坛是一个专注于Unity引擎的开发者社区。在这…

VSCode设置复制 Ctrl+D想下复制

VSCode 默认向下复制当前行是 shift Alt ↓,但是我们习惯了IDE和webStrom的CtrlD的想下复制.下面是VSCode自定义快捷键. VSCode设置复制 CtrlD想下复制 1.文件->首选项->键盘快捷方式(ctrk 在案ctrs)2.输入 copy line down->右键->更改键绑定3.完成 1.文件->首…