在启用 NX (DEP) 和 ASLR 的 x86-64 上利用基于字符串的溢出

2024-07-03

考虑以下易受攻击的代码/程序:

#include <string.h>

int main(int argc, char *argv[]) {
    char buf[16];
    strcpy(buf, argv[1]);

    return 0;
}

在启用了 NX 和 ASLR 的运行 Linux 的 IA-32(x86、32 位)上,我将使用 GOT 覆盖技术来利用这一点,该技术主要包括以下步骤:

  1. 缓冲区溢出直至 RIP
  2. 用以下地址覆盖 RIPstrcpy@plt
  3. 使用干净的小工具.text, e.g. pop edi ; pop ebp ; ret,作为返回地址strcpy
  4. 写下论据strcpy: &bss-地址作为目的地和一个字节/bin/sh using .text
  5. 重复步骤2-4,直到/bin/sh已完全写入&bss
  6. 覆盖 GOT 条目strcpy with system(使用偏移量,需要了解所使用的 Libc 版本 - 让我们在这里忽略这一点)
  7. Write strcpy@plt在堆栈上,后面是一些 4 字节块,最后是地址&bss这指向/bin/sh
  8. Profit

我想在 x86-64 上利用此漏洞,并启用相同的缓解措施。但这比想象的要困难。基本上有以下几个原因:

  1. x86-64 基于寄存器的调用约定:函数参数使用寄存器传递,而不是堆栈。因此,需要一些额外的 ROP-gadget 将参数从堆栈传输到适当的寄存器中。这是一个小问题,但也受到以下问题的影响:
  2. 64位返回地址:x86-64 中的 RIP 指向.text它甚至不是 32 位长。因此,必须在堆栈上写入 NULL 字节以链接函数调用。基本上,可以使用链式调用根据需要写入尽可能多的 NULL 字节strcpy并利用 NULL 终止字符strcpy总是写。但一个人只能打电话strcpy仅覆盖 RIP 的最低有效字节一次。

    |0x00000000|        (most significant bytes)
    |0x00deadbe| <- RIP (least significant bytes)
    |0x41414141|
    |0x41414141| <- SFP
    |   ...    | 
    

这些是我在启用 NX 和 ASLR 的 x86-64 上利用该程序时遇到的主要问题。有什么技术可以解决这些问题吗?或者 x86-64 真的可以阻止有效的 shell 打开漏洞吗?


x86-64 无法阻止此类攻击。看到这个tutorial https://blog.techorganic.com/2015/10/09/a-rop-primer-solution-64-bit-style/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在启用 NX (DEP) 和 ASLR 的 x86-64 上利用基于字符串的溢出 的相关文章

  • 对于 Linux 上的 ARM,从 *.hex 转换为 *.bin

    我想使用以下命令将程序上传到我的 STM32F4 Discovery 板st flash命令 问题是当我尝试上传 hex 或 elf 文件时 它不起作用 我尝试了多种方法 例如使用 xxd 从 elf 或 hex 转换为 bin 但当我上传
  • linux模块编译缺少asm文件夹

    我正在尝试编译一个驱动程序 我的内核版本是3 2 0 27 generic 我留下的只包括我需要的 include
  • 获取读取之前在串行端口上等待的字节数,linux

    我正在将 Win32 串行类转换为 Linux Ubuntu 该串行类所需的功能之一是 查看 串行缓冲区 以查看在读取串行端口之前串行端口上正在等待多少字节 在这种修脚情况下 我只需要知道端口上是否有任何字节 然后再尝试读取它 在Windo
  • Linux Sync() 等效 Windows API

    Linux sync API 会将内存中缓冲的任何数据写入磁盘 Windows 中是否有等效的调用 The 刷新文件缓冲区 http msdn microsoft com en us library windows desktop aa36
  • Linux命令获取物理内存,仅获取值

    在Linux中cat proc meminfo grep MemTotal回来MemTotal 12298824 kB 我只想要这里的数字 所以我写了cat proc meminfo grep MemTotal cut d f2这给了我12
  • 使用 fork/execvp 和系统调用之间的区别

    使用 system 执行二进制文件与使用 fork execvp 组合执行二进制文件有什么区别 安全性 可移植性 性能方面是否存在差异 系统还使用了一个fork exec 组合 如果你这样做fork exec您自己可以与正在运行的进程并行执
  • 使用脚本取消设置 PDF 字体

    我正在使用 xhtml2pdf 库自动创建 PDF 几个月前我有过这个问题 https stackoverflow com questions 25203219 xhtml2pdf doesnt embed helvetica 库嵌入了我没
  • 部分程序的性能统计

    perf 是否可以仅收集程序执行的一部分的硬件计数器统计信息 如果是这样 怎么办 likwid 提供了能够定义命名区域的功能 但如果这可以在仅安装了 perf 的系统上实现 那就太好了 之前的一些问题已经返回了相关答案 但仍然存在一些不足
  • 使用 ssh 启用无密码身份验证[重复]

    这个问题在这里已经有答案了 如何使用 SSH 启用无密码身份验证 这是我在寻找 ssh 文件夹时得到的 bash 3 00 cd ssh bash 3 00 pwd home uname ssh bash 3 00 ls lt total
  • 什么是文件通配符?

    我只是想知道什么是文件通配符 我以前从未听说过它 当我尝试在网上查找它时也找不到它的定义 通配符是 and 以及您可能熟悉的其他一些模式匹配器 通配符解释标准通配符 和 方括号中的字符列表以及某些其他特殊字符 例如用于否定匹配意义的 当 s
  • 在远程机器上执行部分 shell 脚本

    我正在通过 shell 脚本登录远程计算机 通过将 ssh 命令放在脚本中 在 ssh 命令之后 脚本的其余行将在当前计算机而不是远程计算机上执行 如何使其余的 shell 脚本行在远程计算机上执行 可以说这是我的脚本 ssh userna
  • 在 docker 容器内挂载 cgroup

    我对一个遵循流程模型的组件进行了 Docker 化 主进程多次分叉自身 我想在 docker 容器内建立一个 cgroup 层次结构 以根据每个进程改变 CPU 和内存限制 有没有一种方法可以在不使用 privileged 或 CAP SY
  • CPU缓存抑制

    假设我有事实上的标准 x86 CPU 具有 3 级高速缓存 L1 L2 专用和 L3 在内核之间共享 有没有一种方法可以分配共享内存 其数据不会缓存在L1 L2私有缓存上 而只会缓存在L3上 我不想从内存中获取数据 这成本太高 但我想尝试一
  • Docker 容器中 GUI 应用程序的 X11 转发

    我目前正在尝试在 docker 容器中运行一些 GUI 应用程序 我一直在尝试那些杰西 弗雷泽尔 https github com jessfraz at github https github com jessfraz dockerfil
  • Linux中“进程”、“线程”、“任务”和“作业”之间有什么区别和关系?

    当我学习 Web 后端编程时 我对 Linux 中使用的一些术语相当困惑 Linux中 进程 线程 任务 和 作业 之间有什么区别和关系 进程和线程之间的区别对于所有操作系统来说都是相当普遍的 进程通常代表一个独立的执行单元 拥有自己的内存
  • Linux 共享库中缺少函数

    我支持一个 Linux 程序 该程序允许用户编写自己的基于 so 文件的插件 这些插件在运行时使用 dlopen 加载 有时 用户会忘记在 makefile 中包含包含必要函数定义的 C 文件 当插件管理器使用 dlsym 从依赖于这些缺失
  • 如何修复 Linux 上 npm 上的连接 ENETUNREACH

    我没有使用代理 我只是一个试图学习如何开发的菜鸟create react app在我的机器本地 linux 这是的输出tracepath registry npmjs org 1 LOCALHOST 0 020ms pmtu 1500 1
  • 将符号限制为 Linux 可执行文件的本地范围

    任何人都可以建议我们限制将符号导出到全局符号表的某种方法吗 提前致谢 Hi 感谢回复 实际上 我有一个可执行文件 它静态链接到第三方库 例如 ver1 a 并且还使用第三方 so 文件 该文件再次与相同的库链接 但不同版本 例如 ver2
  • ICMP 套接字(Linux)

    IP协议下可以使用ICMP套接字吗 也许是这样的 socket PF INET
  • chmod:如何仅向已具有执行权限的文件递归添加执行权限[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我注意到 chmod R a x为所有文件添加执行权限 而不仅仅是当前可执行的文件 有没有办法只为那些已经为用户权限设置了执行集的文件添加执行权限 U

随机推荐

  • 在 postgres 函数中返回 select * 结果

    我正在尝试在 postgres 函数中返回查询结果 我尝试了这个并且工作得很好 CREATE OR REPLACE FUNCTION getIncomingAreaMovements v1 integer RETURNS integer A
  • 从源代码创建 jfreechart-1.5.3 JAR

    我的程序正在尝试从旧版本的 JFreeChart 升级 我们正在使用ant questions tagged ant编译 JFreeChart 并将其作为 jar 文件导入 我正在尝试获得新的jfreechart 1 5 3使用以下命令将源
  • 在 postgres 函数中返回 select * 结果

    我正在尝试在 postgres 函数中返回查询结果 我尝试了这个并且工作得很好 CREATE OR REPLACE FUNCTION getIncomingAreaMovements v1 integer RETURNS integer A
  • 如何访问 AngularJS 承诺链中前一个承诺的结果? [复制]

    这个问题在这里已经有答案了 我有以下代码 authService authenticate then function user return Task all user user then function tasks How to ac
  • 如何访问 AngularJS 承诺链中前一个承诺的结果? [复制]

    这个问题在这里已经有答案了 我有以下代码 authService authenticate then function user return Task all user user then function tasks How to ac
  • 如何使用PHP从文件夹中一张一张取出图片并显示在页面中

    如何从文件夹中获取图像并将其显示在页面中 我是否可以在 php 本身中调整它的大小 或者我必须调整它的大小并单独上传它以将其显示为缩略图 这是遍历目录并对图像文件执行某些操作的基本结构 给定 images 是与脚本同一目录中的目录 imag
  • 如何使用PHP从文件夹中一张一张取出图片并显示在页面中

    如何从文件夹中获取图像并将其显示在页面中 我是否可以在 php 本身中调整它的大小 或者我必须调整它的大小并单独上传它以将其显示为缩略图 这是遍历目录并对图像文件执行某些操作的基本结构 给定 images 是与脚本同一目录中的目录 imag
  • 在networkx和python中查找距离内的节点

    networkx 有没有办法找到距特定节点一定距离内的所有节点 如图所示 我指定一个节点和一个距离 然后返回该距离内的所有节点 这是假设我为每个边添加了权重 或者 有没有办法找到距特定节点指定度数内的所有节点 例如 与特定节点相距 2 度以
  • 在networkx和python中查找距离内的节点

    networkx 有没有办法找到距特定节点一定距离内的所有节点 如图所示 我指定一个节点和一个距离 然后返回该距离内的所有节点 这是假设我为每个边添加了权重 或者 有没有办法找到距特定节点指定度数内的所有节点 例如 与特定节点相距 2 度以
  • 选择重叠的时间范围

    T SQL 日期时间问题 我有一组时间范围 在这些时间范围内 可能存在一组重叠的时间范围 我称之为 阻塞 时间 封锁的时间不会超过一天 我想要做的就是分割时间以排除被阻止的时间 基本上给我没有 被阻止 的时间范围 可以安全地假设阻塞时间不能
  • 选择重叠的时间范围

    T SQL 日期时间问题 我有一组时间范围 在这些时间范围内 可能存在一组重叠的时间范围 我称之为 阻塞 时间 封锁的时间不会超过一天 我想要做的就是分割时间以排除被阻止的时间 基本上给我没有 被阻止 的时间范围 可以安全地假设阻塞时间不能
  • 如何在TensorFlow中设置权重成本强度?

    我正在尝试在我的深度学习项目中使用 TensorFlow 当我使用动量梯度下降时 权重成本强度是如何设置的 此中的 formula https i stack imgur com 305RE jpg 权重成本 衰减术语不属于 TensorF
  • 如何在TensorFlow中设置权重成本强度?

    我正在尝试在我的深度学习项目中使用 TensorFlow 当我使用动量梯度下降时 权重成本强度是如何设置的 此中的 formula https i stack imgur com 305RE jpg 权重成本 衰减术语不属于 TensorF
  • 如何使用 Windows 命令行关闭 Firefox 中的最后一个选项卡

    我正在创建一个批处理文件来处理 Firefox 选项卡 我想使用 Windows 命令关闭 Firefox 中的最后一个选项卡 我已经尝试使用标题名称执行此命令 taskkill IM firefox exe FI WindowTitle
  • 如何使用 Windows 命令行关闭 Firefox 中的最后一个选项卡

    我正在创建一个批处理文件来处理 Firefox 选项卡 我想使用 Windows 命令关闭 Firefox 中的最后一个选项卡 我已经尝试使用标题名称执行此命令 taskkill IM firefox exe FI WindowTitle
  • MP4 视频在 flowplayer 中启动之前有很长的延迟

    我网站上的 Flowplayer 在 flv 格式下运行良好 但对于 mp4 格式 它首先下载整个文件 然后开始流式传输 有什么解决办法吗 我是否必须对 Flowplayer 的设置进行一些更改 或者甚至有解决方案可以解决此问题 谢谢 我和
  • MP4 视频在 flowplayer 中启动之前有很长的延迟

    我网站上的 Flowplayer 在 flv 格式下运行良好 但对于 mp4 格式 它首先下载整个文件 然后开始流式传输 有什么解决办法吗 我是否必须对 Flowplayer 的设置进行一些更改 或者甚至有解决方案可以解决此问题 谢谢 我和
  • angularjs orderBy 具有多个功能,如何反转?

    我有一个 ng repeat 迭代一组对象 需要一些函数来提取我想要排序的值 我的 ng repeat 看起来像这样 ng repeat row in rows orderBy sortFnOne sortFnTwo 我遇到的问题是 我希望
  • angularjs orderBy 具有多个功能,如何反转?

    我有一个 ng repeat 迭代一组对象 需要一些函数来提取我想要排序的值 我的 ng repeat 看起来像这样 ng repeat row in rows orderBy sortFnOne sortFnTwo 我遇到的问题是 我希望
  • 在启用 NX (DEP) 和 ASLR 的 x86-64 上利用基于字符串的溢出

    考虑以下易受攻击的代码 程序 include