这个程序有什么漏洞?
我目前被困在黑客练习中,不知道该怎么办!
您认为"路径"是什么意思?因为我认为这很重要。
#include <fcntl.h>
#include <limits.h>
#include <pwd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
int main(int argc, char *argv[])
{
char buf[1024], path[PATH_MAX + 1];
int fd, i;
strcpy(path, getpwuid(getuid())->pw_dir);
strcat(path, "/script.sh");
strcpy(buf, "#!/bin/bashnecho Hello.ndatenrm "$0"n");
umask(0);
if ((fd = open(path, O_CREAT | O_EXCL | O_WRONLY, 02760)) < 0) {
perror("open");
return 1;
}
write(fd, buf, strlen(buf));
close(fd);
printf("please wait for us to run your script");
fflush(stdout);
for (i = 0; i < 5; i++) {
printf(".");
fflush(stdout);
sleep(1);
}
printf(" starting scriptn");
execl("/bin/sh", "/bin/sh", path, (char *) 0);
perror("execl");
return 0;
}
嗯。
该程序编写一个脚本,稍后以用户的权限执行该脚本。
umask (0) 系统调用实际上使该文件全局可写(隐式 - 打开调用使其可组可写 - 感谢 Daniel Jour 指出这一点 - 但如果组中任何人注入该文件的第一个命令是 chmod,它可能会升级)。
正如评论中指出的那样,您组中的任何人都可以在用户权限和代表用户的情况下注入他想要执行的任何内容,只需将所有命令写入该命名文件,而程序非常好并等待五秒钟让他这样做。
关于"不要帮助人们黑客攻击"的简短评论 - 评论:OP 正在做的是试图了解程序中可能存在的漏洞,我们在这里仍然处于相当基本的水平。任何程序员都应该感激,如果他意识到他的代码中可能存在的陷阱。试图将这些东西隐藏在引擎盖下只会帮助黑客,而不会使任何事情更安全。