gpt4 book ai didi

c - bash 无法使用 setuid 程序获得 root 权限

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:08:08 26 4
gpt4 key购买 nike

我有以下 su 的本地实现:

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

int main (int argc, char *argv[]) {
if (argc == 1) {
printf ("Usage: %s command [argument]...\n", argv[0]);
return EXIT_SUCCESS;
}

if (geteuid () != 0) {
fprintf (stderr, "%s: permissions are wrong or the setuid bit is not set.\n", argv[0]);
return EXIT_FAILURE;
}

argv++;

int ret = execv (argv[0], argv);

if (ret == -1) {
perror (argv[0]);
return EXIT_FAILURE;
}

return ret;
}

为了能够正确执行,相应地设置了权限和所有权信息:

$ gcc su.c -o su
$ sudo chown root: su
$ sudo chmod 4755 su

当我调用 shell,例如 /bin/sh 时,我能够修改 root 拥有的文件和目录:

$ rm -rf /opt/foobar/
rm: cannot remove ‘/opt/foobar/’: Permission denied
$ ./su /bin/sh
# rm -rf /opt/foobar
# exit

但是,/bin/bash 似乎没有获得 root 权限:

$ ./su /bin/bash
bash-4.3$ rm -rf /opt/foobar/
rm: cannot remove ‘/opt/foobar/’: Permission denied

最佳答案

出于安全原因,Shell 将 euid 重置为 uid。因此,如果您真的想要一个 root shell,您需要将 uid euid 强制设置为 0。Set-uid 位仅更改有效用户 ID。

您需要将用户 ID 设置为 0 才能以 root 身份运行 bash:

...
setuid(0);
int ret = execv (argv[0], argv);
...

关于c - bash 无法使用 setuid 程序获得 root 权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34102762/

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