gpt4 book ai didi

c - 文件系统级别的 SETUID

转载 作者:太空狗 更新时间:2023-10-29 11:30:59 27 4
gpt4 key购买 nike

假设我们正在查看以下场景:

文件 saymyname.c(包括省略)

int main(int argc, char** argv){
system("whoami");
}

构建并设置权限位:

cake@lie> gcc saymyname.c -o saymyname
cake@lie> sudo chown root:root saymyname
cake@lie> sudo chmod u+s saymyname
cake@lie> ./saymyname
cake

天底下的所有资源都告诉我,在用户列上设置 s 权限应该使程序以所有者的权限执行,而不是调用用户的权限。为什么 system("whoami"); 返回 cake

修改程序以手动设置 UID,如下所示:

int main(int argc, char** argv){
setuid(geteuid());
system("whoami");
}

产生预期的结果

cake@lie> ./saymyname
root

一些资源声称 SUID 和 GUID 位经常被忽略。这就是观察到的行为发生的原因吗?如果是这样,有没有办法让它表现得好像它是由 root 执行的,没有 setuid(.)

最佳答案

看起来像由 system() 执行的 bash 会降低权限。在我的测试中,替换指向 dash(而不是 bash)的符号链接(symbolic link)/bin/sh 使其按预期工作。

还有 bash,

execl("/bin/bash", "bash", "-c", "whoami", NULL);

给蛋糕,而

execl("/usr/bin/whoami", "whoami", NULL);

给出根。

关于c - 文件系统级别的 SETUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53624156/

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