Funktionen des Dateisystems

Als Erstes untersuchst du das Dateisystem. Das Dateisystem stellt die Struktur bereit, mit der ein Betriebssystem Daten auf Speichermedien wie Festplatten, SSDs und anderen Speichergeräten organisiert und verwaltet. Es hat dabei folgende Kernfunktionen:

  • Datenorganisation: Das Dateisystem organisiert Daten in einer hierarchischen Struktur von Dateien und Verzeichnissen. Diese Struktur ermöglicht es, Daten systematisch und effizient zu speichern und wiederzufinden.

  • Zugriffsverwaltung: Es verwaltet Berechtigungen und Zugriffsrechte, die festlegen, welcher Benutzer oder welches Programm auf welche Dateien zugreifen oder sie modifizieren darf.

  • Dateiverwaltung: Es ermöglicht das Erstellen, Löschen, Umbenennen und Verschieben von Dateien und Verzeichnissen. Es sorgt auch dafür, dass Metadaten wie Dateigröße, Erstellungsdatum und Änderungsdatum korrekt verwaltet werden.

  • Speicherplatzverwaltung: Es verwaltet den verfügbaren Speicherplatz auf dem Datenträger, indem es freien Speicherplatz zuweist und fragmentierte Dateien zusammenführt, um die Effizienz zu maximieren.

Es gibt verschiedene Dateisysteme, die sich im Aufbau, in der Leistung und in den Funktionen unterscheiden. Sie sind außerdem mehr oder weniger kompatibel mit verschiedenen Betriebssystemen.

Verzeichnisstruktur

Dateisysteme organisieren Dateien in einer Baumstruktur mit Verzeichnissen (Ordnern) und Unterverzeichnissen. Jeder Knoten in der Struktur ist ein Verzeichnis oder eine Datei. Der Wurzelknoten wird als Root-Verzeichnis bezeichnet.

Hierarchical directory system
Hierarchische Struktur des Dateisystems

Um auf Verzeichnisse und Dateien zugreifen zu können, müssen sie einen eindeutigen Namen haben. Dabei wird zwischen dem absoluten und dem relativen Dateinamen unterschieden.

Ein absoluter Dateiname (auch als absoluter Pfad bekannt) beschreibt den vollständigen Pfad zu einer Datei oder einem Verzeichnis, beginnend vom Wurzelverzeichnis des Dateisystems. Dieser Pfad ist immer eindeutig und unabhängig vom aktuellen Arbeitsverzeichnis.

Ein relativer Dateiname (auch als relativer Pfad bekannt) beschreibt den Pfad zu einer Datei oder einem Verzeichnis relativ zum aktuellen Arbeitsverzeichnis. Er gibt die Position der Datei oder des Verzeichnisses in Bezug auf das Verzeichnis an, in dem der Benutzer gerade arbeitet. Der relativer Pfad ist daher kontextabhängig und kürzer als der absolute Pfad.

Die Darstellung von absoluten und relativen Dateinamen hängt vom Betriebssystem ab:

Betriebssystem Absoluter Pfad Relativer Pfad
Unix/Linux /home/user/documents/test.txt documents/test.txt (aktuelles Arbeitsverzeichnis ist /home/user)
Windows C:\Users\User\Documents\test.txt Documents\test.txt (aktuelles Arbeitsverzeichnis ist C:\Users\User)

In Unix/Linux beginnt der absolute Pfad immer mit dem Wurzelverzeichnis "/", während der relative Pfad mit einem Verzeichnisnamen oder einem Punkt "." für das aktuelle Verzeichnis beginnt oder ein Dateiname ist. In Windows beginnt der absolute Pfad mit einem Laufwerksbuchstaben, gefolgt von einem Doppelpunkt und einem Backslash z. B. C:\, während der relative Pfad mit einem Verzeichnisnamen beginnt oder ein Dateiname ist.

Aus der Netzwerkanalyse weißt du bereits, dass der LUPFER das Betriebssystem Ubuntu verwendet. Dieses basiert auf Unix und hat eine durch Konventionen festgelegte Struktur von Standardverzeichnissen, um das System klar und logisch zu ordnen und so die Navigation und Verwaltung erleichtern. Hier sind die wichtigsten Standardverzeichnisse und ihre Bedeutung:

Bezeichnung Erläuterung
/ (Root) Ist das oberste Verzeichnis im Dateisystem. Alle anderen Verzeichnisse und Dateien sind unter diesem Verzeichnis hierarchisch angeordnet
/bin Enthält grundlegende System-Binaries (ausführbare Programme), die für den Betrieb des Systems und den Single-User-Modus notwendig sind
/sbin Enthält Systemadministrations-Binaries, die hauptsächlich von einem Benutzerkonto mit uneingeschränkten Rechten, typischerweise als "root" bezeichnet, ausgeführt werden
/etc Speichert alle systemweiten Konfigurationsdateien und Skripte
/home Jeder Benutzer hat ein eigenes Home-Verzeichnis unter /home
/root Das Home-Verzeichnis des Superusers (root). Es unterscheidet sich von den Benutzer-Home-Verzeichnissen und ist direkt unter / angesiedelt
/lib Enthält Bibliotheken, die von den Programmen im /bin- und /sbin-Verzeichnis benötigt werden
/usr Steht für "Unix System Resources" und enthält Anwendungsprogramme und Dateien, die nicht zur grundlegenden Systemadministration gehören
/var Dient der Speicherung von variablen Daten, die sich häufig ändern, wie Logdateien
/tmp Dient der Speicherung von temporären Dateien
/dev Enthält Gerätedateien, die als Schnittstelle zu Systemgeräten wie Festplatten dienen. Jedes Gerät ist als Datei im /dev-Verzeichnis repräsentiert
/mnt und /media Werden für die Einhängepunkte von temporären Dateisystemen genutzt, z. B. für das Einbinden von externen Festplatten, USB-Sticks oder Netzwerklaufwerken
/opt Dient zur Speicherung von optionalen Softwarepaketen und Add-On-Anwendungen, die nicht Teil des Standardbetriebssystems sind
/proc Ist ein virtuelles Dateisystem, das Informationen über laufende Prozesse und das Betriebssystem selbst enthält
/sys Ist ein virtuelles Dateisystem, das Informationen und Konfigurationen des Kernels und der Hardware bereitstellt

Untersuchen des Systems

Dann beginnst du nun mit der Reconnaissance des LUPFERs. Wichtige Befehle dafür sind:

Befehl Erläuterung
pwd Gibt das aktuelle Arbeitsverzeichnis des Benutzers aus
cd <Pfad> Wechselt in das Verzeichnis <Pfad>
cd .. Wechselt in das übergeordnete Verzeichnis
ls <Pfad> Listet alle Dateien und Verzeichnisse im angegebenen Verzeichnis <Pfad> auf
ls Listet alle Dateien und Verzeichnisse im aktuellen Verzeichnis auf
cat <Pfad> Zeigt den Inhalt der Datei <Pfad> an

Melde dich unter https://lupfer.pentest.samsmart.hosts.openinc.de als admin an. Nutze die SSTI-Schwachstelle auf der Seite /usermanagement aus und stelle eine Reverse Shell her. Wenn der Payload für die Reverse Shell in der Datenbank gespeichert ist, dann musst du folgende Schritte ausführen:

  1. Öffne den in der Payload angegebenen Zielport in einem Terminal mit dem Befehl nc -lp <Port>.
  2. Rufe die Seite /usermanagement der Webapplikation auf.

Falls der Payload für die Reverse Shell noch nicht in der Datenbank gespeichert ist, findest du hier Hinweise zum Ausnutzen der SSTI-Schwachstelle.

Bei dem aktuellen Verzeichnis /var/www handelt es sich um das Home-Verzeichnis des Benutzers www-data. Das verrät die Tilde ~ in der Zeichenfolge www-data@lupfer:~$. Nun kannst du dich durch das Dateisystem bewegen und es untersuchen.

Wenn du dir mit ls / die Dateien und Verzeichnisse des Root-Verzeichnisses anzeigen lässt, findest du die weiter oben erwähnten Standardverzeichnisse wieder, deren Inhalte du weiter untersuchen kannst. Wichtig ist aber noch, dass das Dateisystem immer auch die Zugriffsberechtigungen auf Verzeichnisse und Dateien verwaltet.

Dateiberechtigungsnotation

Zu jeder Datei und jedem Verzeichnis speichert das Dateisystem Metadaten, die unter anderem den Namen der Datei, die Größe, den Dateityp und das Erstellungsdatum umfassen. Zusätzlich dienen diese Metadaten auch der Verwaltung der Zugriffskontrolle. In Unix-basierten Betriebssystemen gibt es dafür die Dateiberechtigungsnotation.

Die typische Notation sieht so aus:

Unix file permission notation
Die Berechtigungsnotation für eine Datei

Die Bestandteile der Notation sind:

  1. Dateityp
    Eine Besonderheit von Unix ist, dass alle Ressourcen als Dateien behandelt werden. Die wichtigsten Dateitypen sind:

    Dateityp Beschreibung
    - Normale Datei Enthält Daten oder Text und ist der häufigste Dateityp
    d Verzeichnis Sammlung von Dateien und anderen Verzeichnissen
    l Symbolischer Link Verweist auf eine andere Datei oder ein anderes Verzeichnis im Dateisystem
    c Zeichengerät Gerät, das Daten zeichenweise überträgt wie z. B. eine Tastatur oder eine Maus
    b Blockgerät Speichermedium wie z. B. Festplatten oder SSDs
    p Pipe Ermöglicht die Kommunikation zwischen Prozessen, indem Daten zwischen ihnen übertragen werden
    s Socket Dient der Netzwerkkommunikation und ermöglicht die Verbindung von Programmen über Netzwerke
  2. Berechtigungen des Besitzers
    Die nächsten drei Zeichen repräsentieren die Berechtigungen des Besitzers, also des Benutzers, dem die Datei gehört. Die Rechte werden hintereinander notiert:

    • r: Erlaubt es einem Benutzer, den Inhalt der Datei zu lesen oder die Liste der Dateien im Verzeichnis anzuzeigen
    • w: Erlaubt es einem Benutzer, den Inhalt der Datei zu ändern oder Dateien im Verzeichnis zu erstellen bzw. zu löschen
    • x: Erlaubt es einem Benutzer, die Datei als Programm auszuführen oder in das Verzeichnis zu navigieren

    Ist ein Recht nicht gesetzt, wird dies durch ein - gekennzeichnet.

  3. Berechtigungen der Gruppe
    Die nächsten drei Zeichen repräsentieren die Berchtigungen der Gruppe, die mit der Datei verknüpft ist. Eine Gruppe besteht aus Benutzern, die gemeinsame Zugriffsrechte auf die Datei oder das Verzeichnis haben. Wie bei den Berechtigungen des Besitzers werden die Rechte für das Lesen, Schreiben und Ausführen hintereinander notiert.

    Folgender Befehl zeigt an, zu welchen Gruppen der aktuelle Benutzer gehört:

    groups
  4. Berechtigungen für Andere
    Die letzten drei Zeichen repräsentieren die Berechtigungen für andere Benutzer, die nicht der Besitzer oder Teil der Gruppe sind. Diese Berechtigungen folgen dem gleichen Muster wie bei Besitzer und Gruppe. Die Rechte für das Lesen, Schreiben und Ausführen werden also hintereinander notiert.

Die Metadaten zu einer Datei lassen sich über den Befehl ls mit der Option -l anzeigen:

ls -l

Wie du siehst, hast du keine Berechtigung, um auf das Verzeichnis /root zuzugreifen. Dies ist dem Benutzer und der Gruppe root vorenthalten.

Der Superuser, in der Regel als root bekannt, ist der Benutzer mit den höchsten Berechtigungen im Unix-/Linux-System. Er hat uneingeschränkten Zugriff auf alle Systemressourcen und -dateien und kann jede Art von Systemkonfiguration oder -änderung vornehmen.

Ob es gelingt, doch noch auf Verzeichnisse und Dateien zuzugreifen, die Root-Rechte erfordern, schauen du dir in der Enumeration an.