我想在C中编写程序,它将以root身份打开bash,但没有任何用户的密码。
#include <unistd.h>
#include <stdio.h>
int main(void)
{
char *argv[] = { "/bin/bash","-c","sudo /bin/bash",0 };
execve(argv[0], &argv[0],0);
return 0;
}
我的系统是Linux Mint 18.2 Sonya,我设置了这两个命令
chown root:root a.out
chmod u=srwx,go=xr a.out
但是当我尝试执行此操作时,它会要求输入密码。如果还有其他选择,我不想编辑/ etc / sudoers。
答案 0 :(得分:0)
这是您正在创建的巨大安全漏洞。只要你意识到它。事实上,我无法理解为什么你不想编辑sudoers,但是只要运行它就可以创建一个root shell。
话虽如此,这是程序:
#include <unistd.h>
#include <stdio.h>
int main(int argc, char *argv[], char *envp[]) {
char *args[] = { "/bin/bash", NULL };
execve(args[0], args, envp);
perror("Running bash failed");
return 1;
}
现在您需要做的就是编译它,将可执行文件的所有者设置为root并设置SUID
权限。
您的代码失败的原因是因为SUID设置有效 UID。真正的UID仍然是你,所以sudo
要求输入密码。
话虽如此,没有理由将shell作为有效的root运行,这就是上面的代码所做的。
此代码的一个缺点是它没有将真正的UID设置为root,并且不会执行登录。如果这对您来说是个问题,请保留原始程序,但在开头添加:
setresuid(0, 0, 0);
setresgid(0, 0, 0);