-3

这个程序的漏洞是什么?

我目前正忙于黑客练习,不知道该怎么做!

你认为“路径”是什么意思?因为我认为这很重要。

#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/bash\necho Hello.\ndate\nrm \"$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 script\n");

  execl("/bin/sh", "/bin/sh", path, (char *) 0); 
  perror("execl");
  return 0;
}
4

1 回答 1

1

出色地。

该程序编写一个脚本,稍后在用户权限下执行该脚本。

umask (0) 系统调用实际上使该文件在世界范围内可写(隐式地- open 调用使其可组写- 感谢 Daniel Jour 指出这一点-,但是如果您组中的任何人将第一个命令注入到该文件中文件将是一个 chmod,它可以升级)。

正如评论中指出的那样,您组中的任何人都可以通过简单地将所有命令写入该命名文件,而程序非常好并等待五秒钟他这样做。

以及关于“不要帮助人们进行黑客攻击”的简短评论 - 评论:OP 正在做的是试图了解程序中可能存在的漏洞,而我们在这里仍然处于相当基本的水平。如果任何程序员都意识到他的代码中可能存在这样的缺陷,他应该感激不尽。试图将这些东西隐藏在引擎盖下只会帮助黑客,并且不会让任何事情变得更安全。

于 2016-02-23T20:04:03.320 回答