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, он может быть увеличен).
Как указано в комментариях, любой из вашей группы сможет внедрить все, что он хочет, с выполнением разрешений пользователя и от имени пользователя, просто записав все команды в этот именованный файл, пока программа так хороша и ждет пять секунд ему сделать это.
И короткий комментарий на тему "не помогать людям во взломе" - комментарии: ФП пытается узнать о возможных уязвимостях в программах, и мы все еще на довольно простом уровне. Любой программист должен быть благодарен, если ему стало известно о таких возможных подводных камнях в его коде. Попытка держать такие вещи под капотом просто помогает хакерам и не делает ничего более безопасным.