Linux 缓冲区溢出环境变量

2024-05-03

我一直在审查不同类型的缓冲区溢出,并遇到了一个我不记得为什么会发生的问题。下面的代码是我尝试执行缓冲区溢出的程序:

#include <stdio.h>

void func(char *buff){  
    char buffer[5];
    strcpy(buffer, buff);
    printf("%s\n", buffer);
}

int main(int argc, char *argv[]){
    func(argv[1]);
    printf("I'm done!\n");
    return 0;
}

程序的核心概念很简单,我只是溢出缓冲区来覆盖返回地址func()。当我给它一个地址时,一切都很好,例如0x0804850c这恰好是<_fini>的程序。当我使用该地址实现溢出时,最终结果是程序“优雅地”退出而不打印I'm done!。我现在遇到的问题是当我尝试将返回地址重定向到位于以下位置的环境变量时0xbfffd89.

位于该特定环境变量中的 shell 代码应该在执行完命令后退出程序hello。然而这种情况并没有发生,程序只是简单地分段错误,仅此而已。 shell 代码已经被证实可以在我之前编写的测试 shell 代码的程序中工作。任何人都知道为什么这不起作用。谢谢


环境变量位于具有读写权限但没有执行权限的内存区域。我很容易地重现了这一点,如下所示:

#include <stdio.h>
#include <stdlib.h>

int
main(int argc, char **argv)
{
void (*function)(void);

        function = (void (*)(void))getenv("PATH");
        function();
        return 0;
}

运行在gdb, 我懂了:

Program received signal SIGSEGV, Segmentation fault.
0x00007fffffffeb51 in ?? ()
(gdb) 

然后我查找地址 0x00007fffffffeb51 如果/proc/PID/maps并发现这样一行:

7ffffffde000-7ffffffff000 rw-p 00000000 00:00 0                          [stack]

有一个-哪里的x通常会找到(执行)位。

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

Linux 缓冲区溢出环境变量 的相关文章

随机推荐

  • 如何在 JasperReports 中解码 html 实体

    我有一些用 JasperReports 编写的报告 它们按字面意思显示 html 实体 例如 项目符号点 使用 html 实体文本表示显示 8226 你知道有什么办法吗 In the textField设置markup属性为html 这是如
  • 简化情况下能否保证mqtt消息送达顺序?

    如果只有一个代理 一个发布者 一个主题和干净的会话 在这个简化的情况下 能否保证订阅者端的消息传递顺序与发布者端的发送顺序相同 会受到QoS的影响吗 Section 4 6 http docs oasis open org mqtt mqt
  • IQKeyboardManager 从 UITextField 导航到 UITextView

    IQKeyboardManager在键盘上方的工具栏中提供箭头以从一个跳转UITextField到另一个 但我正在寻找是否可以在混合之间跳转UITextFields and UITextViews 我知道完成此任务的正常程序 但我有兴趣知道
  • 更改 Visual Studio 2013 IDE 中选项卡的字体颜色

    我找不到如何更改 Visual Studio 2013 IDE 中选项卡的字体颜色 环境 gt 字体和颜色没有任何允许这样做的内容 我看不出有什么其他的帮助 我的问题是 所选页面在相对较暗的背景上有粗体黑色字体 我必须睁大眼睛才能看到选择了
  • 导入错误:无法导入名称 urandom

    我正在构建一个新的 Linux 环境 并在 Python 上看到以下错误 python c import random Traceback most recent call last File
  • Flask-httpauth: get_password 装饰器如何为 basic-auth 工作?

    我想知道有没有人用过这个烧瓶延伸 https github com miguelgrinberg flask httpauth简化 http basic auth 基本上我不明白这个example https github com migu
  • Sublime Text 2 将颜色粘贴到 MS Word

    我想将代码粘贴到 Word 文档中 同时保留突出显示的彩色文本 有没有办法做到这一点 您可以安装高亮插件 https github com n1k0 SublimeHighlight然后使用SublimeHighlight copy to
  • JavaScript 中 == 和 === 的区别[重复]

    这个问题在这里已经有答案了 有什么区别 and 在 JavaScript 中 我也见过 and 运营商 还有更多这样的运营商吗 看看这里 http longgoldenears blogspot com 2007 09 triple equ
  • 无法加载标签“s:form”的标签处理程序类“org.apache.struts2.views.jsp.ui.FormTag”

    如果我在 NetbeansIDE 中运行代码 它会显示以下错误 org apache jasper JasperException InvestorConfirm jsp 53 12 PWC6032 无法加载标签处理程序类 org apac
  • 在列表视图中颤动网格视图

    我想构建像 Ios 应用商店这样的设计 如下图所示 我想要实现的是有 5 个顶级类别 每个类别都有显示图像的网格 我这样尝试过 return new Scaffold backgroundColor Colors white appBar
  • 可重用的 Tensorflow 卷积网络

    我想重用来自Tensorflow 专业人士的 MNIST CNN 示例 http www tensorflow org tutorials mnist pros index md 我的图像尺寸为 388px X 191px 只有 2 个输出
  • Spring方法获取给定类型的所有bean

    我试图从一个相同类型的豆子中获取所有豆子FileSystemXmlApplicationContext 我正在使用factory getBeansOfType SomeType class 但我注意到它只返回顶级 bean 是否有任何其他方
  • 关于使用outer()和用户定义函数的简单问题?

    gt fun1 lt function x y x y gt outer seq 1 5 length 5 seq 6 10 length 5 fun1 1 2 3 4 5 1 7 8 9 10 11 2 8 9 10 11 12 3 9
  • F1 2019 UDP解码

    我目前正在为 F1 方向盘开发自己的显示器 F1 2019 由codemasters提供 通过UDP发送数据 该数据存储在字节数组中 我在解码返回的数组时遇到一些问题 问题是我得到了很多信息 但我不知道如何处理它们 我将向您介绍我所尝试过的
  • 如何在 mysql 正则表达式中匹配大写 ÅäÖ

    当我在 MySQL 中进行 REGEXP 比较时 我得到了瑞典字符大写版本的一些奇怪结果 我正在使用 utf8 swedish ci 排序规则 我想查找大写单词 SELECT ster REGEXP BINARY A Z a z 应该返回
  • 不区分大小写的关键字匹配

    我正在编写一种用于解析计算机语言的语法 可以与解析 Eyapp http search cpan org casiano Parse Eyapp 1 182 lib Parse Eyapp pod 这是一个 Perl 包 可以简化常规语言解
  • 优化 SELECT 和 WHERE 子句中的存储函数调用

    我有一个具有以下结构的 SQL 查询 SELECT storedfunc param table field as f FROM table WHERE storedfunc param table field lt value ORDER
  • 如何默认选中collection_check_boxes?

    我试图默认选中这一行 In db t text committed 我尝试过的变体checked true 但也许我忽略了一些事情 这是Gist http gist github com RallyWithGalli c66dee6dfb9
  • Struts 2 - 使用 CKEditor 拦截上传的图像文件

    我有一个CKEditor在网站的不同页面上 所以我将上传内容设置为true以及让它工作的所有配置内容 并且图像上传工作得很好 Send it to the Server 标签 但从这里我想拦截或互动upload函数能够将图像上传到文件夹中
  • Linux 缓冲区溢出环境变量

    我一直在审查不同类型的缓冲区溢出 并遇到了一个我不记得为什么会发生的问题 下面的代码是我尝试执行缓冲区溢出的程序 include