gpt4 book ai didi

linux - 在 Linux 中,可执行文件的位置是否会影响 setuid 位的解释方式?

转载 作者:太空狗 更新时间:2023-10-29 11:09:48 25 4
gpt4 key购买 nike

在Linux系统中,setuid程序所在目录的权限是否会影响内核启动进程的方式?我问的原因是,当我在两个不同的目录中编译一个相同的 setuid 程序时,它实际上只假定了一个目录中的用户权限。我在 /tmp/home/flag03 中编译了它,其中 flag03 是我试图访问的用户帐户。当从 /tmp 执行时,它没有按预期提升权限,但它在 /home 下运行。


问题的一些背景:

我正在研究 exploit-exercises.com/nebula 的 03 级.该练习要求您获得对 flag03 用户帐户的访问权限。练习设置为 flag03 用户定期运行 cronjob,这将允许您在特定目录中执行脚本。我的计划是编写一个简单的 bash 脚本,该脚本将编译一个本身启动 bash shell 的 setuid 程序,然后使用 chmod +s 设置 setuid 位。这个想法是,当编译 setuid 程序时,它是由用户 flag03 通过 cronjob 编译的。一旦这个新编译的程序被执行,它将以用户 flag03 的身份启动一个 shell,这就是目标。

这是简单的 setuid 程序(l3.c,基于级别 1 + 2):

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>

int main(int argc, char **argv, char **envp)
{
uid_t uid;
gid_t gid;

uid = geteuid();
gid = getegid();

setresuid(uid,uid,uid);
setresgid(gid,gid,gid);
printf("uid: %d\n", getuid());
printf("gid: %d\n", getgid());
system("/bin/bash");

return 0;
}

为了让它工作,bash 脚本以用户 flag03 的身份编译程序,然后 chmods setuid 位。

#!/bin/bash

#gcc -o /tmp/l3 /tmp/l3.c
#chmod +s,a+rwx /tmp/l3
gcc -o /home/flag03/l3 /tmp/l3.c
chmod +s,a+rwx /home/flag03/l3

/tmp 中生成的可执行文件没有按预期提升权限,但在 /home/flag03 中生成的可执行文件按预期工作。

注意 我刚刚创建了一个新的 bash 脚本,将在 /tmp 中编译的 setuid 程序的版本移动到 /home/flag03,然后重置 setuid 位。从那里执行时,该版本也能正常工作。所以在我看来,setuid 程序所在目录的权限对进程的启动方式有某种影响。也许这与 /tmp 是一个有点“特殊”的目录有关?

感谢您对这个冗长的问题感兴趣!

最佳答案

如果文件系统使用 nosuid 选项挂载,则在执行位于那里的文件时将忽略 suid 位。据我了解,/tmp 通常是一个单独的文件系统(通常是 tmpfs),使用 nosuid 选项安装。此配置的动机是防止除 /tmp(例如 nobody)之外没有可写存储的受损帐户能够生成 suid 二进制文件,这可能用于某些精心设计的多步攻击以提升特权。

关于linux - 在 Linux 中,可执行文件的位置是否会影响 setuid 位的解释方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15377110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com