2013-03-13 1 views
3

В системе 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 является несколько «специальным» каталогом?

Благодарим за интерес к этому надолгому вопросу!

+1

Вы можете проверить владельца/tmp/l3 и/home/flag03/l3? Они оба имеют одинаковый флаг flag03 или еще? –

+1

Ваш вопрос может быть немного [off topic] (http://stackoverflow.com/faq) для переполнения стека. Это может быть лучше подходит для наших сайтов-партнеров: http://security.stackexchange.com/ или http://unix.stackexchange.com/. –

+0

@tian_yufeng У них обоих был один и тот же владелец, так как они были скомпилированы как одно и то же (а затем chmod'd). –

ответ

3

Если файловая система смонтирована с опцией nosuid, бит suid будет проигнорирован при выполнении файлов, расположенных там. Как я понимаю, /tmp обычно представляет собой отдельную файловую систему (часто tmpfs), установленную с опцией nosuid. Мотивацией для этой конфигурации является предотвращение взломанной учетной записи, у которой нет доступного для записи хранилища, кроме /tmp (например, nobody), от возможности создавать двоичные файлы suid, которые могут использоваться в некоторых сложных многоэтапных атаках для повышения привилегий.

 Смежные вопросы

  • Нет связанных вопросов^_^