C: повысить привилегии в Linux, поддержав эту программу

В чем уязвимость этой программы?

В настоящее время я застрял на хакерском упражнении и понятия не имею, что делать!

Как вы думаете, что означает "путь"? Потому что я думаю, что это важно.

#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;
}

1 ответ

Что ж.

Программа пишет сценарий, который впоследствии выполняется с разрешениями пользователя.

Системный вызов umask (0) фактически делает этот файл доступным для записи во всем мире (неявно - вызов open делает его доступным для записи в группе - спасибо Даниэлю Журу за указание на это, но если первая команда, которую кто-либо из вашей группы вставит в этот файл) файл будет chmod, он может быть увеличен).

Как указано в комментариях, любой из вашей группы сможет внедрить все, что он хочет, с выполнением разрешений пользователя и от имени пользователя, просто записав все команды в этот именованный файл, пока программа так хороша и ждет пять секунд ему сделать это.

И короткий комментарий на тему "не помогать людям во взломе" - комментарии: ФП пытается узнать о возможных уязвимостях в программах, и мы все еще на довольно простом уровне. Любой программист должен быть благодарен, если ему стало известно о таких возможных подводных камнях в его коде. Попытка держать такие вещи под капотом просто помогает хакерам и не делает ничего более безопасным.

Другие вопросы по тегам