我一直在阅读有关IFS利用和LD_PRELOAD
权限升级的重写功能。虽然这是两个完全不同的问题,但我决定将它们一起发布,并希望这不是问题。虽然这些都很老,但我被告知他们仍然可以用于特权升级,我很乐意调查。但是,我遇到了一些问题。
所以,让我们首先制作SUID文件/ tmp / suid。
#include <unistd.h>
int main() {
system("/bin/date");
}
这会调用/bin/date
。我们的想法是,我们可以更改内部字段分隔符,并使用当前拥有的权限欺骗文件以运行其他内容。这可以通过使名为 bin 的新文件包含攻击者放入自定义位置的恶意代码来完成(或者可以吗?)。然后我们更改$PATH
变量并将其设置为首先在我们的自定义路径中搜索位置,我们的恶意假二进制文件位于该路径中。然后通过将内部字段分隔符更改为“/”,而不是运行/bin/date
,程序将运行带有参数日期的/tmp/fakepath/bin
,这可能会触发权限提升。
当我尝试dankalia.com描述的方法时,它失败了。 /bin/date
会被执行。如果我只是在控制台中键入bin date
,恶意二进制文件就会启动,但在通过/tmp/suid
调用它时不会。
我认为该漏洞已修补,并且它只是忽略了IFS变量,但随后stackoverflow上的帖子让我感兴趣。 (C: IFS System() Vulnerability)。任何人都可以向我确认这是否有效,以及我做错了什么?感谢。
对于LD_PRELOAD
,我会保持相当简单。
define _GNU_SOURCE
#include <stdio.h>
int puts(const char *str) {
printf("lel");
}
使用以下命令行进行编译:
gcc –Wall –fPIC –shared –o puts.so puts.c –ldl
然后,使用预加载技巧覆盖函数puts
:
LD_PRELOAD=./puts.so ./vuln_program_that_uses_puts
这很有效。但是,在处理SUID文件时以及当我们谈论权限提升时,这种情况不会发生。 LD_PRELOAD
不适用于SUID文件并且有充分的理由。我被告知“你可以让它工作,但这很难”。想法?
提前致谢,对不起的问题感到抱歉。
答案 0 :(得分:1)
我被告知“你可以让它上班,但这很难”。想法?
操作系统对于这些类型的技巧是明智的,现在大多数都得到了修复。一般的想法是setuid
,sudo
,朋友不使用非特权用户的环境。
以下内容提供了更多阅读材料:
如果你想要的只是一个setuid
二进制文件进入系统:
ls
(或其他程序,如date
)sudo
复制到ls
(或date
等其他计划