【问题标题】:Override exec systemcall with absolute path用绝对路径覆盖 exec 系统调用
【发布时间】:2014-02-03 08:59:56
【问题描述】:

这是系统安全的功课。

作业有 2 个部分。给出了 2 个可执行文件。 exectestexectestsecure

反编译后发现如下:

执行测试

...
execv("ls",...);
...

exectestsecure

...
execv("/bin/ls",...);
...

目标是打印 Hello, World! 而不是运行 ls 命令。

对于第一部分,我创建了 helloworld 程序并将其编译为 ls,在我的主目录中。然后我将我的主目录添加到 PATH。

我不明白我能为 exectestsecure 做什么,它使用绝对路径。

以 root 身份运行 exectestsecure 可以获得奖励积分。奖金使用带有 setuid(0) 的可执行文件,并具有正确的权限。我认为如果我找到一种方法来劫持对 /bin/ls 的调用,我也可以回答奖金问题。

【问题讨论】:

    标签: linux security exec system-calls


    【解决方案1】:

    如果 libc 是动态链接的,您可以尝试使用 LD_PRELOAD 覆盖 execv()。您将需要的一些工具:objdump、dlsym、strace。以here为例,找到要关注的路径。

    【讨论】:

    • 我试图使用这种方法劫持对 execv() 的调用(它是在课堂上教授的)。由于某种原因,运行可执行文件时运行的是系统版本的 execv()。难道我做错了什么?编辑:我不是 exectestsecure 的所有者,它有 setuid 作为 root,也许这就是为什么?
    • 我会开始检查 libc 是否实际上是动态链接的。那你排除这条路了吗?如果是,为什么?这是你必须自己回答的问题。 “它不起作用”不足以关闭这条线......您需要了解它不起作用的“原因”并继续 - 这是您的作业:)
    • 感谢您的回复。我检查了,是的,它是动态链接的。 exectestsecure 提升权限这一事实是否会“重置”我动态加载的任何库?
    • 如果可执行文件不是 suid-root 它应该(必须!)工作。对于奖励积分,它并不像您想象的那么直接,因为 libc 在运行 suid-root 可执行文件时会重置 一些 环境变量,LD_PRELOAD 就是其中之一......这将是一个非常巨大的安全漏洞,不是吗?也这样觉得?我认为你需要调查你的二进制文件,看看它是否可以通过一些缓冲区溢出或测试本身的其他弱点来利用。祝你好运!
    • 谢谢!是的,正如我所见,它确实重置了 LD_PRELOAD。 excersize 明确指出“假设没有缓冲区溢出是可能的”(即使是这样)。我的主要路径是更改 execv 在内存中使用的绝对路径,但内存保护不允许这样做。既然不能用chroot,恐怕也没有别的办法(至少我知道)。
    猜你喜欢
    • 2018-11-30
    • 2011-02-19
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    • 2012-04-08
    • 2020-08-25
    • 2011-05-02
    相关资源
    最近更新 更多