编写返回libc攻击,但libc加载到内存中的0x00处

2023-12-12

我正在为我的系统安全课程编写返回 libc 攻击的文章。首先,存在漏洞的代码:

//vuln.c
#include <stdio.h>
#include <stdlib.h>

int loadconfig(void){
  char buf[1024];
  sprintf(buf, "%s/.config", getenv("HOME"));
  return 0;
}

int main(int argc, char **argv){
  loadconfig();
  return 0;
}

我想使用返回libc 攻击。编译并调试程序:

$ gcc -g -fno-stack-protector -o vuln vuln.c
$ gdb vuln
(gdb) break loadconfig
(gdb) run
Reached breakpoint blah blah blah.
(gdb) p $ebp
$1 = (void *) 0xbfffefb0
(gdb) p system
$2 = {<text variable, no debug info>} 0x0016db20 <system>
(gdb) p exit
$3 = {<text variable, no debug info>} 0x001639e0 <exit>
(gdb) x/2000s $esp
...
0xbffff5af:    "SHELL=/bin/bash"

为了执行攻击,我想将缓冲区溢出到loadconfig的返回地址(又名$esp+4),将其替换为返回地址system,那么返回地址为exit (since system期望一个真实的返回地址),然后是命令名称(SHELL=/bin/bash加 6,修剪SHELL=部分)。这应该可以通过制作一个$HOME1024 个字符的环境变量,然后是小端地址system, exit, and /bin/bash.

然而,对于我尝试过的每台计算机,system被加载到以 0x00 开头的地址,这将以 null 终止字符串sprintf正在阅读并停止攻击。有什么办法可以强制libc加载到内存中的其他位置,还是我误解了攻击?

作为参考,我在 VirtualBox(Windows 主机)中运行 Ubuntu Server 11.10 虚拟机,其中gcc版本 4.6.1 和gdb版本7.3-2011.08。编辑:ASLR被禁用,我编译了-fno-stack-protector删除金丝雀。由于我没有从堆栈中执行任何内容,所以我不需要execstack it.


将重要的 libc 函数映射到包含 NULL 字节的地址的行为称为 ASCII 保护。 此保护是一部分RedHat Exec-shield目前已在最新的 ubuntu 发行版上启用link要禁用它,您必须以 root 身份运行:

sysctl -w kernel.exec-shield=0

正如所解释的here

顺便说一句,您可以找到有关如何绕过 ASCII 防护的有趣材料这里是exploit-db

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

编写返回libc攻击,但libc加载到内存中的0x00处 的相关文章

随机推荐

  • 带变量的 SQL 查询

    我正在为学校做 PAT 我正在执行以下操作 我该如何纠正它 我想发送一个已输入的电子邮件地址 name ID 数字 出生日期 gender town一切都是字符串我的声明是 Adoquery1 sql text insert into be
  • Accepts_nested_attributes_for 部分的 AJAX 更新

    我当前的工作环境是Rails2 3 8 我的公司没有迁移到 Rails 3 的原因有很多 我正在尝试通过 AJAX 调用更新多模型表单的元素 这个想法是根据用户如何选择或填写其他字段来替换某些下拉列表 我之前曾设法通过使用基于非表单的部分来
  • python 中嵌套列表的意外行为

    我有一个名为的嵌套列表basic我想更改其中一项 我假设了以下行为 expected 9 0 unexpected 9 9 basic 0 0 basic 0 0 9 print basic expected this is true 然而
  • C : 这个数组初始化合法吗?

    int ar 1 2 3 这段代码合法吗 我的本意是这样的 int ar 1 2 3 是的 C89 和 GNU89 中的初始化列表中都允许使用杂散逗号 在采用可选 可变参数的宏中非常有用 请参阅第 3 5 7 节ANSI C 标准对于定义它
  • 我什么时候需要重新编译 Jasper 报告

    我正在使用 JasperReporting 引擎 我需要优化报告性能 目前 我的应用程序每次都从 jrxml 文件编译报告 因为我现在不更改报告 并且应用程序无法生成用户定义的报告 我应该编译它们一次并在将来使用 jasper 文件 我对吗
  • 动态更改“模板”layout.updatemenus[] Dropdown

    我有一个 Python Dash 应用程序 它显示只有一个跟踪的 Plotly graph object timeline 我认为这个问题不应该取决于跟踪的数量 我想要一个layout updatemenus下拉按钮 它允许我更改图形的模板
  • 返回鼠标Tkinter下图像像素的RGB颜色

    我正在尝试从图像中鼠标单击的位置获取 RGB 值 我试图仅使用 Tkinter 来完成这一切 以保持代码简单 并且由于某种原因我无法正确安装 PIL 并且我不知道这是否可能 感谢您的帮助 我很困惑 from serial import im
  • 使用 AlertDialog 的模态对话框功能

    我想保留AlertDialog直到用户按下其上的任何按钮为止 换句话说 即使用户按下任何其他区域 如其父区域 或按下后退按钮 对话框仍必须保持焦点 请告诉我要使用哪种 Android 4 0 API 方法 提前非常感谢 use setCan
  • 在 BitBucket 上为许多用户和补丁使用 Mercurial 补丁队列存储库

    很抱歉这个由多个部分组成的问题 但我很难理解将 Mercurial 补丁队列与 BitBucket 结合使用的预期方法 而且 Google 也没有提供太多帮助 我希望描述一些 MQ 概念的一个答案能够同时涵盖许多问题 我读过了http ch
  • jQuery 可排序取消事件(如果无效)

    我有一个可排序的列表 在开始排序之前 我想检查该列表的所有元素是否有效 如果没有 请取消活动并保持列表不变 您可以在这里找到代码http jsfiddle net DZYW5 4 当我使用它时 事件被取消 但元素被删除 start func
  • 如何在 Helm for Kubernetes 中循环不同的模板?

    我想部署具有不同图像 端口等但具有非常相似的其他属性的多个 Pod 部署 所以我想声明一个deployment yaml文件看起来像这样 range Values types apiVersion extensions v1beta1 ki
  • 如何将这些功能组合起来而不重复呢?

    由于所有 3 个产品功能都有相同的产品列表 我如何将这些多个功能合并为一个 这样我就可以避免在这里重复 所有功能都有产品列表 只是货币不同 如何将这三个功能合二为一 有人可以建议我吗 谢谢 function ProductDataRende
  • OpenCV:删除图像的背景

    我正在使用 Opencv 和 python 来检测形状 然后裁剪它们 我已经成功地做到了这一点 但是现在我正在尝试拍摄裁剪后的图像并删除它们的背景 该图像内部有一个圆圈 周围是灰色 它可以是灰色的 甚至可以是不止一种颜色 如何删除圆形边框周
  • 将 TextView 与进度条的进度对齐

    我怎样才能对齐TextView随着水平的进展ProgressBar 我想放一个TextView就在进度位置的上方ProgressBar 进度可能会改变 另外 我想要TextView尽管文本长度可能会改变 但要保持在一行中 在包含 TextV
  • 使用C#程序启动Dll

    我有一个 C 表单应用程序 我创建了一个 Dll 现在我想使用该程序启动该 dll 我该怎么做 include
  • Tkinter 使用菜单栏命令无意递归...原因?

    我正在尝试使用Python GUI制作tkinter 我需要一个菜单 项来打开主窗口的另一个副本 我尝试执行以下代码 当我运行该程序时 它冻结了一点 然后打开了大量窗口 最后打印的错误消息如下 我有两个问题 如何完成使 新建 按钮打开新窗口
  • 如何在 Linux 无头服务器上安装 chrome 扩展

    我需要在无头服务器上安装 chrome 扩展 一种方法是使用组策略 我正在寻找其他方法来做到这一点 对于 Firefox 我只需将我的 XPI 扩展 放在配置文件目录 扩展文件夹中 Firefox 就会选择该扩展 我想知道对于 chrome
  • 如何交错两个不同长度的列表?

    我想写一个函数twolists给出的结果如下 outcome twolists w x y z print outcome w x y z outcome twolists 0 1 w x print outcome 0 w 1 x out
  • 如何在 Java 9 统一日志记录中使用带有冒号的 Windows 文件名?

    java11 Xlog gc file c max txt version 0 002s error logging Invalid decorator max txt Invalid Xlog option Xlog gc file c
  • 编写返回libc攻击,但libc加载到内存中的0x00处

    我正在为我的系统安全课程编写返回 libc 攻击的文章 首先 存在漏洞的代码 vuln c include