Im ersten Quartal 2020 bereitete ich mich auf die OSCP-Prüfung vor. Die Suche nach Informationen bei Google und viele "blind" Versuche nahmen mir die gesamte Freizeit. Besonders schwierig war es, die Mechanismen zur Erhöhung von Privilegien zu verstehen. Der PWK-Kurs widmet diesem Thema viel Aufmerksamkeit, aber es mangelt immer an methodischen Materialien. Im Internet gibt es zahlreiche Handbücher mit nützlichen Befehlen, aber ich bin kein Freund davon, Empfehlungen blind zu folgen, ohne zu verstehen, wohin das führt.
Ich möchte mit Ihnen teilen, was ich während der Vorbereitung und der erfolgreichen Ablegung der Prüfung (einschließlich gelegentlicher Besuche bei Hack The Box) gelernt habe. Ich hatte ein starkes Gefühl der Dankbarkeit für jedes kleine Stück Information, das mir half, den Weg Try Harder bewusster zu gehen. Jetzt ist es an der Zeit, der Community Anerkennung zu zollen.
Ich möchte Ihnen ein Handbuch zur Privilegiensteigerung in Linux OS geben, das die häufigsten Vektoren und verwandte Tricks umfasst, die Ihnen bestimmt nützlich sein werden. Oft sind die Mechanismen zur Privilegiensteigerung nicht besonders kompliziert; die Schwierigkeiten liegen im Strukturieren und Analysieren von Informationen. Daher habe ich beschlossen, mit einer "Überblicksführung" zu beginnen und dann jeden Vektor in einem separaten Artikel zu betrachten. Ich hoffe, ich spare Ihnen Zeit beim Studium des Themas.

Warum ist die Privilegiensteigerung im Jahr 2020 eigentlich möglich, wenn die Methoden schon lange bekannt sind? Tatsächlich ist es bei sachgemäßer Handhabung des Systems durch den Benutzer wirklich nicht möglich, die Privilegien zu erhöhen. Das grundlegende globale Problem, das solche Möglichkeiten schafft, liegt in einer unsicheren Konfiguration. Das Vorhandensein von veralteten Softwareversionen im System, die Schwachstellen enthalten, ist ebenfalls ein spezifischer Fall einer unsicheren Konfiguration.
Privilegiensteigerung durch unsichere Konfiguration
Lass uns zunächst mit der unsicheren Konfiguration befassen. Beginnen wir damit, dass IT-Spezialisten häufig Handbücher und Ressourcen wie Stack Overflow nutzen, von denen viele unsichere Befehle und Konfigurationen enthalten. Ein anschauliches Beispiel ist dass der am häufigsten kopierte Code von Stack Overflow einen Fehler enthielt. Ein erfahrener Admin würde den Fehler erkennen, aber das ist in der idealen Welt. Selbst kompetente Fachleute haben bei erhöhter Arbeitslast sind fehleranfällig. Stellen Sie sich vor, der Administrator ist mit der Vorbereitung und Genehmigung der Dokumentation für eine weitere Ausschreibung beschäftigt und gleichzeitig in eine neue Technologie eingearbeitet, die im nächsten Quartal implementiert werden soll, während er gelegentlich Benutzeranfragen bearbeitet. Und plötzlich bekommt er schnell den Auftrag, ein paar virtuelle Maschinen hochzufahren und darauf Dienste bereitzustellen. Wie hoch schätzen Sie die Wahrscheinlichkeit ein, dass der Administrator einfach einen Fehler nicht bemerkt? Dann wechseln die Spezialisten, aber die Patches bleiben, während Unternehmen immer bestrebt sind, Kosten zu minimieren, einschließlich für IT-Personal.
Pseudo-Shell und Jailbreak
Eine System-Shell, die in der Betriebsphase erhalten wird, ist oft eingeschränkt, besonders wenn Sie sie durch einen Hackerangriff auf einen Webserver erhalten haben. Zum Beispiel können die Einschränkungen der Shell verhindern, dass der Befehl sudo mit folgender Fehlermeldung ausgeführt wird:
sudo: kein TTY vorhanden und kein Askpass-Programm angegebenNach dem Erhalt der Shell empfehle ich, ein vollwertiges Terminal zu erstellen, zum Beispiel mit Python.
python -c 'import pty;pty.spawn("/bin/bash")'Sie fragen sich vielleicht: „Warum brauche ich tausend Befehle, wenn ich einen verwenden kann, zum Beispiel um Dateien zu übertragen?“ Der Grund ist, dass Systeme unterschiedlich konfiguriert sein können, auf dem nächsten Host möglicherweise Python nicht installiert ist, aber Perl vorhanden ist. Es geht darum, in der Lage zu sein, die gewohnten Dinge im System ohne die gewohnten Werkzeuge zu tun. Eine vollständige Liste der Möglichkeiten finden Sie .
Eine niedrig privilegierte Shell kann erhalten werden, indem und (erstaunlich, dass sogar GIMP).
Befehlsverlauf anzeigen
Linux speichert die Historie aller ausgeführten Befehle in der Datei ~/.bash_history. Wenn der Server aktiv genutzt wird und seine Historie nicht gelöscht wird, besteht eine hohe Wahrscheinlichkeit, dass man in dieser Datei Anmeldedaten findet. Die Historie zu bereinigen ist einfach unpraktisch. Wenn der Administrator gezwungen ist, zeilenlange Befehle auszuwählen, wird es ihm natürlich leichter fallen, diesen Befehl aus der Historie aufzurufen, als ihn erneut einzugeben. Außerdem wissen viele nicht von diesem „Hack“. Wenn im System alternative Shells wie Zsh oder Fish vorhanden sind, führen sie ihre eigene Historie. Um die Befehlsgeschichte in jeder Shell anzuzeigen, reicht es aus, den Befehl history einzugeben.
cat ~/.bash_history
cat ~/.mysql_history
cat ~/.nano_history
cat ~/.php_history
cat ~/.atftp_historyEs gibt Shared Hosting, bei dem der Server zum Hosting mehrerer Websites genutzt wird. Normalerweise wird bei einer solchen Konfiguration für jede Ressource ein eigener Benutzer mit einem separaten Home-Verzeichnis und einem virtuellen Host angelegt. Bei falscher Konfiguration kann man im Root-Verzeichnis der Web-Ressource die Datei .bash_history finden.
Passwortsuche im Dateisystem und Angriffe auf benachbarte Systeme
Konfigurationsdateien verschiedener Dienste können für den aktuellen Benutzer lesbar sein. Darin können offene Zugangsdaten zu finden sein — Passwörter für den Zugriff auf Datenbanken oder benachbarte Dienste. Dasselbe Passwort kann sowohl für den Zugriff auf die Datenbank als auch für die Autorisierung des Root-Benutzers verwendet werden (Credential Staffing).
Es kann vorkommen, dass die gefundenen Zugangsdaten zu Diensten auf anderen Hosts gehören. Die Weiterentwicklung eines Angriffs auf die Infrastruktur über einen kompromittierten Host ist nicht weniger effektiv als die Ausnutzung anderer Hosts. Benachbarte Systeme können ebenfalls durch die Suche nach IP-Adressen im Dateisystem gefunden werden.
grep -lRi "password" /home /var/www /var/log 2>/dev/null | sort | uniq #Finde den String password (keine Groß-/Kleinschreibung) in diesen Verzeichnissen
grep -a -R -o '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' /var/log/ 2>/dev/null | sort -u | uniq #IPs in LogsFalls auf dem kompromittierten Host eine Webanwendung vorhanden ist, die aus dem Internet zugänglich ist, sollten die Logs von der IP-Adressensuche ausgeschlossen werden. Die IP-Adressen von Benutzern des Onlinematerials sind in der Regel nicht nützlich, jedoch können die IP-Adressen des internen Netzwerks (172.16.0.0/12, 192.168.0.0/16, 10.0.0.0/8) und die Seiten, die sie laut Logs besuchen, von Interesse sein.
Sudo
Der Befehl sudo ermöglicht es dem Benutzer, einen Befehl im Kontext von root mit seinem eigenen Passwort oder ganz ohne es auszuführen. Viele Operationen in Linux erfordern Root-Rechte, jedoch gilt die Arbeit als root als sehr schlechte Praxis. Stattdessen ist es besser, selektive Berechtigungen zur Ausführung von Befehlen im Kontext von root zu verwenden. Allerdings können viele Linux-Tools, einschließlich Standard-Editoren wie vi, auf ganz legale Weise zur Erhöhung der Berechtigungen verwendet werden. Für die Suche nach geeigneten Methoden empfehle ich, mal nachzusehen. .
Das erste, was man tun sollte, nachdem man Zugang zum System erhalten hat, ist den Befehl sudo -l auszuführen. Dieser zeigt die Berechtigung zur Verwendung des Befehls sudo an. Wenn ein Benutzer ohne Passwort (zum Beispiel apache oder www-data) erhalten wird, ist ein Privilegienaufstieg über sudo unwahrscheinlich. Bei der Verwendung von sudo wird das System nach einem Passwort fragen. Der Befehl passwd wird ebenfalls nicht funktionieren, da er nach dem aktuellen Passwort des Benutzers fragt. Wenn sudo jedoch verfügbar ist, muss man im Wesentlichen nachfolgendes suchen:
- beliebige Interpreter, jeder kann eine Shell (PHP, Python, Perl) starten;
- beliebige Texteditoren (vim, vi, nano);
- beliebige Viewer (less, more);
- beliebige Möglichkeiten zur Arbeit mit dem Dateisystem (cp, mv);
- Tools, die Zugang zu bash haben, interaktiv oder als ausführbarer Befehl (awk, find, nmap, tcpdump, man, vi, vim, ansible).
Suid/Sgid
Im Internet gibt es zahlreiche Handbücher, die empfehlen, alle suid/sgid-Befehle zu sammeln, jedoch geben nur selten Artikel konkrete Informationen, was mit diesen Programmen zu tun ist. Möglichkeiten zum Privilegienaufstieg, die keine Ausnutzung von Exploits berücksichtigen, lassen sich finden . Eine Reihe ausführbarer Dateien hat zudem spezifische Schwachstellen in Bezug auf die OS-Version, .
In einer idealen Welt sollte man alle installierten Pakete zumindest durch searchsploit laufen lassen. In der Praxis ist es ratsam, dies mit den beliebtesten Programmen wie sudo zu tun. Außerdem gibt es immer die Möglichkeit, automatisierte Tools zu verwenden und weiterzuentwickeln, die interessante, im Hinblick auf den Privilegienaufstieg relevante ausführbare Dateien mit aktivierten suid/sgid-Bits hervorheben. Ich werde eine Liste solcher Werkzeuge im entsprechenden Abschnitt des Artikels bereitstellen.
Schreibbare Skripte, die von Cron oder Init ausgeführt werden, im Kontext von Root
Cron-Jobs können im Kontext verschiedener Benutzer, einschließlich root, ausgeführt werden. Wenn ein Cron-Job auf eine ausführbare Datei verweist und diese für Sie beschreibbar ist, kann sie leicht durch eine schadhafte ersetzt werden, um Privilegien zu erlangen. Standardmäßig sind die Dateien mit Cron-Jobs für alle Benutzer lesbar.
ls -la /etc/cron.d # zeigt Cron-Jobs an Die Situation ist ähnlich bei init. Der Unterschied besteht darin, dass Cron-Jobs regelmäßig ausgeführt werden, während init beim Systemstart aktiv wird. Für die Ausnutzung ist ein Neustart des Systems erforderlich, wobei einige Dienste möglicherweise nicht hochgefahren werden (sofern sie nicht für den Autostart konfiguriert sind).
ls -la /etc/init.d/ # init-Skripte anzeigen Es ist auch möglich, nach Dateien zu suchen, die für jeden Benutzer zum Schreiben verfügbar sind.
find / -perm -2 -type f 2>/dev/null # finde weltweit beschreibbare DateienDie Methode ist recht bekannt, erfahrene Systemadministratoren verwenden den Befehl chmod sorgfältig. In den meisten Anleitungen im Internet wird jedoch häufig die maximale Berechtigung beschrieben. Der Ansatz unerfahrener Systemadministratoren "Hauptsache es funktioniert" schafft grundsätzlich Möglichkeiten zur Erhöhung der Privilegien. Wenn möglich, ist es besser, in der Befehlshistorie nach unsicherem Gebrauch von chmod zu suchen.
chmod +w /path
chmod 777 /pathZugriff auf die Shell anderer Benutzer erhalten
Wir sehen uns die Benutzerliste in /etc/passwd an. Achten Sie auf diejenigen, die eine Shell haben. Es ist möglich, diese Benutzer zu knacken – es ist nicht ausgeschlossen, dass man über den erhaltenen Benutzer letztendlich die Privilegien erhöhen kann.
Zur Erhöhung der Sicherheit empfehle ich, immer das Prinzip der minimalen Berechtigungen einzuhalten. Es ist auch sinnvoll, Zeit mit der Prüfung unsicherer Konfigurationen zu verbringen, die nach der Fehlersuche möglicherweise zurückgeblieben sind – das ist die "technische Schuld" des Systemadministrators.
Selbstgeschriebener Code
Es lohnt sich, die ausführbaren Dateien im Home-Verzeichnis des Benutzers und des Webservers (/var/www/, falls nicht anders angegeben) genau zu betrachten. Diese Dateien können eine völlig unsichere Lösung darstellen und unglaubliche Workarounds enthalten. Natürlich macht es keinen Sinn, in einem Framework im Verzeichnis des Webservers nach einem Zero-Day im Rahmen eines Pentests zu suchen, jedoch wird empfohlen, benutzerdefinierte Anpassungen, Plugins und Komponenten zu finden und zu überprüfen.
Zur Erhöhung der Sicherheit ist es besser, nach Möglichkeit auf die Verwendung von Anmeldeinformationen in selbstgeschriebenen Skripten sowie auf potenziell gefährliche Funktionen wie das Lesen von /etc/shadow oder die Manipulation von id_rsa zu verzichten.
Erhöhung der Privilegien durch Ausnutzung von Schwachstellen
Bevor Sie versuchen, die Privilegien durch Ausnutzung zu erhöhen, ist es wichtig, sich mit dem Dateitransfer zum Zielhost. Neben den vertrauten Mitteln wie ssh, ftp, http (wget, curl) gibt es eine ganze .
Zur Erhöhung der Systemsicherheit aktualisieren Sie es regelmäßig auf die aktuellen stabilen Versionen Versionen, und versuchen Sie auch, Distributionen zu verwenden, die für Enterprise ausgelegt sind. Andernfalls gibt es selten, aber doch Situationen, in denen `apt upgrade` das System unbrauchbar macht.
Betrieb von Diensten, die im Kontext des Benutzers root ausgeführt werden
Einige Linux-Dienste laufen unter dem privilegierten Benutzer root. Sie können sie mit dem Befehl ps aux | grep root finden. Dabei kann es sein, dass der Dienst nicht im Netzwerk angekündigt wird und lokal zugänglich ist. Wenn er öffentliche Exploits hat, können diese ohne Bedenken angewendet werden: Der Ausfall des Dienstes im Falle eines Fehlers ist weit weniger kritisch als der Ausfall des Betriebssystems.
ps -aux | grep root # LinuxAls günstigster Fall gilt der Betrieb eines kompromittierten Dienstes im Kontext des Benutzers root. Der Betrieb des SMB-Dienstes bietet privilegierten SYSTEM-Zugang in Windows-Systemen (z.B. über ms17-010). In Linux-Systemen ist dies jedoch eher selten, daher kann man viel Zeit mit der Erhöhung der Berechtigungen verbringen.
Ausnutzung von Schwachstellen im Linux-Kernel
Dieser Weg sollte letztlich gegangen werden. Eine fehlgeschlagene Ausnutzung kann zum Absturz des Systems führen, und im Falle eines Reboots können bestimmte Dienste (einschließlich deren, über die der ursprüngliche Shell-Zugriff erlangt wurde) möglicherweise nicht mehr starten. Es kommt vor, dass der Administrator schlicht vergessen hat, den Befehl `systemctl enable` anzuwenden. Außerdem wird es viel Unmut über Ihre Arbeiten geben, wenn die Ausnutzung nicht abgesprochen war.
Wenn Sie sich entschieden haben, Quellcodes aus exploitdb zu verwenden, lesen Sie unbedingt die Kommentare zu Beginn des Skripts. Dort steht unter anderem, wie dieser Exploit korrekt kompiliert werden sollte. Wenn Sie selbst keine Lust haben oder die Frist gestern abgelaufen ist, können Sie nach Repositories mit bereits kompilierten Exploits suchen. . Sie sollten jedoch verstehen, dass Sie in diesem Fall eine Katze im Sack bekommen. Auf der anderen Seite, wenn ein Programmierer bis ins kleinste Detail wusste, wie ein Computer und die verwendete Software funktionieren, hätte er in seinem gesamten Leben nicht einmal eine Zeile Code geschrieben.
cat /proc/version
uname -a
searchsploit "Linux Kernel" Metasploit
Um eine Verbindung zu erfassen und zu verarbeiten, ist es immer besser, das Modul exploit/multi/handler zu verwenden. Das Wichtigste ist, das richtige Payload einzustellen, zum Beispiel generic/shell/reverse_tcp oder generic/shell/bind_tcp. Die in Metasploit erhaltene Shell kann mit dem Modul post/multi/manage/shell_to_meterpreter auf Meterpreter verbessert werden. Mit Meterpreter können Sie den Nachbereitungsvorgang automatisieren. Beispielsweise überprüft das Modul post/multi/recon/local_exploit_suggester die Plattform, Architektur und erforderlichen Entitäten für Exploits und schlägt Metasploit-Module zur Privilegienermächtigung im Zielsystem vor. Dank Meterpreter kann die Privilegienüberschreitung manchmal darauf reduziert werden, das benötigte Modul auszuführen, jedoch ist das Hacken ohne Verständnis dessen, was im Hintergrund passiert, nicht "echt" (Sie müssen schließlich noch einen Bericht schreiben).
Werkzeuge
Automatisierungstools zur lokalen Informationssammlung sparen Ihnen viel Kraft und Zeit, sind jedoch allein nicht in der Lage, den Weg zur Privilegienermächtigung vollständig aufzudecken, insbesondere im Falle von Kernel-Exploits. Automatisierungstools führen alle erforderlichen Befehle zur Informationssammlung über das System für Sie aus, doch es ist auch wichtig, die erhaltenen Daten zu analysieren. Ich hoffe, mein Artikel wird Ihnen dabei hilfreich sein. Natürlich gibt es viel mehr Werkzeuge, als ich unten aufführen werde, jedoch machen sie im Grunde alle etwas Ähnliches – es ist eher eine Frage des Geschmacks.
Ein relativ neues Tool, der erste Commit stammt von Januar 2019. Momentan ist es mein Lieblingswerkzeug. Der Punkt ist, dass es die interessantesten Vektoren zur Privilegiensteigerung hervorhebt. Sind Sie nicht auch der Meinung, dass es einfacher ist, eine Expertenbewertung auf diesem Niveau zu erhalten, als massenhaft rohe Daten zu analysieren?
Mein zweites Lieblingswerkzeug, es sammelt und systematisiert ebenfalls die Daten, die durch lokale Enumeration erhalten wurden.
Dieser Exploit analysiert das System auf geeignete Bedingungen für Exploits. Er erledigt im Grunde das Gleiche wie das Metasploit-Modul local_exploit_suggester, bietet jedoch keine Metasploit-Module, sondern Links zu den Quellcodes von exploit-db.
Dieses Skript sammelt und systematisiert eine große Menge an Informationen nach Kategorien, die nützlich sein können, um einen Vektor zur Privilegienermächtigung zu formulieren.
Ein anderes Mal werde ich die Privilegienermächtigung .
Quelle: habr.com
