В системе Linux разрешены ли разрешения каталога, в котором находится программа setuid, как запускается процесс ядра? Причина, по которой я спрашиваю, заключается в том, что когда я скомпилировал идентичную программу setuid в двух разных каталогах, она фактически принимала разрешения пользователя только в одном каталоге. Я скомпилировал его в /tmp
и /home/flag03
, где flag03
- это учетная запись пользователя, к которой я пытаюсь получить доступ. Когда он был выполнен с /tmp
, он не увеличивал привилегии, как ожидалось, но работал под /home
.В Linux ли местоположение исполняемого файла влияет на то, как интерпретируется бит setuid?
Некоторые фон по проблеме:
Я работаю на уровне 03 exploit-exercises.com/nebula. Упражнение требует, чтобы вы получили доступ к учетной записи пользователя flag03
. Упражнение настроено так, что пользователь flag03
периодически запускает cronjob, который позволит вам выполнить скрипт в определенном каталоге. Мой план состоял в том, чтобы написать простой скрипт bash, который будет компилировать программу setuid, которая сама запускает оболочку bash, а затем устанавливает бит setuid с chmod +s
. Идея заключается в том, что когда программа setuid скомпилирована, она скомпилируется пользователем flag03
через cronjob. Как только эта недавно скомпилированная программа будет запущена, она запустит оболочку как пользователь flag03
, и это цель.
Вот простой УИП программа (l3.c, основываясь на уровнях 1 + 2):
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
int main(int argc, char **argv, char **envp)
{
uid_t uid;
gid_t gid;
uid = geteuid();
gid = getegid();
setresuid(uid,uid,uid);
setresgid(gid,gid,gid);
printf("uid: %d\n", getuid());
printf("gid: %d\n", getgid());
system("/bin/bash");
return 0;
}
Для того, чтобы это работало, Баш скрипт компилируется программа, как пользователь flag03
, а затем chmods бит setuid.
#!/bin/bash
#gcc -o /tmp/l3 /tmp/l3.c
#chmod +s,a+rwx /tmp/l3
gcc -o /home/flag03/l3 /tmp/l3.c
chmod +s,a+rwx /home/flag03/l3
Исполняемый генерируется в /tmp
не нагнетать привилегии, как и ожидалось, но один генерируется в /home/flag03
работ, как ожидалось.
Примечание Я только что создал новый Баш скрипт для перемещения версии Setuid программы, которая была составлена в /tmp
к /home/flag03
, а затем сбросить Setuid бит. После выполнения этой версии эта версия также работала. Поэтому мне кажется, что разрешения каталога, в котором находится программа setuid, имеют какое-то влияние на процесс запуска процесса. Может быть, это связано с тем, что /tmp
является несколько «специальным» каталогом?
Благодарим за интерес к этому надолгому вопросу!
Вы можете проверить владельца/tmp/l3 и/home/flag03/l3? Они оба имеют одинаковый флаг flag03 или еще? –
Ваш вопрос может быть немного [off topic] (http://stackoverflow.com/faq) для переполнения стека. Это может быть лучше подходит для наших сайтов-партнеров: http://security.stackexchange.com/ или http://unix.stackexchange.com/. –
@tian_yufeng У них обоих был один и тот же владелец, так как они были скомпилированы как одно и то же (а затем chmod'd). –