Im ersten Quartal 2020 bereitete ich mich auf die OSCP-Prüfung vor. Die Informationssuche bei Google und zahlreiche „blinde“ Versuche nahmen mir all meine Freizeit. Besonders schwierig war es, die Mechanismen zur Erhöhung von Rechten zu verstehen. Der PWK-Kurs legt großen Wert auf dieses Thema, aber methodische Materialien sind immer unzureichend. Im Internet gibt es viele Handbücher mit nützlichen Befehlen, aber ich bin kein Freund davon, Empfehlungen blind zu folgen, ohne zu verstehen, wohin sie führen.
Ich möchte mit Ihnen teilen, was ich während meiner Vorbereitung und der erfolgreichen Absolvierung der Prüfung (einschließlich regelmäßiger Besuche bei Hack The Box) gelernt habe. Ich verspürte tiefe Dankbarkeit für jedes kleine Stück Information, das mir half, den Weg von Try Harder bewusster zu gehen. Jetzt ist es an der Zeit, der Community den gebührenden Respekt zu zollen.
Ich möchte Ihnen ein Handbuch zur Privilegienerhöhung in Linux OS geben, das eine Analyse der häufigsten Angriffsvektoren und verwandten Tipps enthält, die Ihnen sicherlich nützlich sein werden. Oft sind die Mechanismen zur Privilegienerhöhung relativ einfach, die Schwierigkeiten ergeben sich jedoch beim Strukturieren und Analysieren der Informationen. Daher habe ich beschlossen, mit einer "Überblickstour" zu beginnen und anschließend jeden Vektor in einem separaten Artikel zu betrachten. Ich hoffe, ich spare Ihnen Zeit beim Lernen des Themas.

Warum ist es also im Jahr 2020 überhaupt möglich, Privilegien zu erhöhen, wenn die Methoden bereits seit sehr langer Zeit bekannt sind? Tatsächlich können Benutzer durch den richtigen Umgang mit dem System die Privilegien nicht erhöhen. Das grundlegende globale Problem, das solche Möglichkeiten hervorrufen kann, ist eine unsichere Konfiguration. Das Vorhandensein veralteter Softwareversionen im System, die Schwachstellen enthalten, ist ebenfalls ein spezieller Fall von unsicherer Konfiguration.
Privilegiensteigerung durch unsichere Konfiguration
Lassen Sie uns zuerst die unsichere Konfiguration betrachten. Beginnen wir damit, IT-Fachleute nutzen häufig Handbücher und Ressourcen wie Stack Overflow, von denen viele unsichere Befehle und Konfigurationen enthalten. Ein prägnantes Beispiel ist die Tatsache, dass der am häufigsten kopierte Code von Stack Overflow einen Fehler enthielt. Ein erfahrener Administrator würde den Fehler merken, aber das ist — in einer idealen Welt. Selbst kompetente Spezialisten neigen dazu, Fehler zu machen, wenn sie unter erhöhtem Arbeitsdruck stehen. Stellen Sie sich vor, ein Administrator arbeitet an der Vorbereitung und Genehmigung von Unterlagen für eine Ausschreibung, gleichzeitig einarbeitet er sich in eine neue Technologie, die im nächsten Quartal implementiert werden soll, während er gelegentlich Nutzeranfragen bearbeitet. Und dann bekommt er die Aufgabe, schnell ein paar virtuelle Maschinen hochzufahren und darauf Services bereitzustellen. Wie hoch schätzen Sie die Wahrscheinlichkeit, dass der Administrator einfach einen Fehler übersieht? Danach wechseln die Spezialisten, aber die provisorischen Lösungen bleiben, während Unternehmen stets versuchen, Kosten, auch für IT-Mitarbeiter, zu minimieren.
Pseudoshale und Jailbreak
Die generierte System-Shell kann in der Betriebsphase oft eingeschränkt sein, insbesondere wenn Sie sie durch das Hacken eines Webserver-Benutzers erhalten haben. Beispielsweise können Shell-Beschränkungen verhindern, dass der Befehl sudo ausgeführt wird, und es wird ein Fehler angezeigt:
sudo: kein TTY vorhanden und kein askpass-Programm angegebenNach Erhalt der Shell empfehle ich, ein vollständiges 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 zum Übertragen von Dateien?“ Der Grund dafür ist, dass Systeme unterschiedlich konfiguriert sein können: Auf dem nächsten Host könnte Python nicht installiert sein, aber Perl könnte vorhanden sein. Die Kunst besteht darin, in einem System alltägliche Aufgaben ohne gewohnte Werkzeuge zu erledigen. Eine vollständige Liste der Möglichkeiten finden Sie .
Eine niedrigprivilegierte Shell kann durch die Verwendung von und (erstaunlicherweise sogar GIMP).
Befehlsverlauf anzeigen
Linux zeichnet die Historie aller ausgeführten Befehle in der Datei ~/.bash_history. Wenn der Server aktiv genutzt wird und die Historie nicht gelöscht wird, besteht eine hohe Wahrscheinlichkeit, dass in dieser Datei Anmeldeinformationen gefunden werden. Die Historie zu bereinigen ist einfach unpraktisch. Wenn ein Administrator gezwungen ist, zehnstöckige Befehle durchzugehen, ist es natürlich einfacher, diesen Befehl aus der Historie aufzurufen, als ihn neu einzugeben. Außerdem wissen viele nichts von diesem „Hack“. Wenn im System alternative Shells wie Zsh oder Fish vorhanden sind, führen diese ihre eigene Historie. Um die Befehlshistorie in einer beliebigen Shell anzuzeigen, genügt es, 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 zur Hosting mehrerer Websites verwendet wird. Normalerweise wird bei dieser Konfiguration für jede Ressource ein eigener Benutzer mit einem separaten Home-Verzeichnis und einem virtuellen Host erstellt. Wenn die Konfiguration jedoch falsch eingestellt ist, kann in dem Stammverzeichnis der Webressource eine Datei .bash_history gefunden werden.
Passwortsuche im Dateisystem und Angriffe auf angrenzende Systeme
Die Konfigurationsdateien verschiedener Dienste können für Ihren aktuellen Benutzer lesbar sein. Darin finden sich möglicherweise Anmeldeinformationen im Klartext – Passwörter für den Zugriff auf Datenbanken oder verwandte Dienste. Dasselbe Passwort kann sowohl für den Datenbankzugriff als auch für die Authentifizierung des Root-Benutzers verwendet werden (Credential Staffing).
Es kann vorkommen, dass die gefundenen Anmeldeinformationen zu Diensten auf anderen Hosts gehören. Der Aufbau eines Angriffs auf die Infrastruktur über einen kompromittierten Host ist nicht weniger schlimm als die Ausnutzung anderer Hosts. Verwandte Systeme können auch durch die Suche nach IP-Adressen im Dateisystem gefunden werden.
grep -lRi "password" /home /var/www /var/log 2>/dev/null | sort | uniq #Finde die Zeichenfolge password (ohne 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 ProtokollenFalls auf dem kompromittierten Host eine Webanwendung verfügbar ist, die aus dem Internet zugänglich ist, sollten ihre Protokolle besser von der Suche nach IP-Adressen ausgeschlossen werden. Die Adressen von Nutzern der Ressource aus dem Internet sind uns wahrscheinlich nicht nützlich, während die Adressen des internen Netzwerks (172.16.0.0/12, 192.168.0.0/16, 10.0.0.0/8) und die Orte, an denen sie sich laut Protokollen aufhalten, von Interesse sein könnten.
Sudo
Der Befehl sudo ermöglicht es dem Benutzer, einen Befehl im Kontext von root unter Verwendung des eigenen Passworts oder ohne dessen Verwendung auszuführen. Viele Operationen in Linux erfordern root-Rechte, jedoch gilt das Arbeiten unter root als sehr schlechte Praxis. Stattdessen ist es besser, selektive Berechtigungen für die Ausführung von Befehlen im Kontext von root zu verwenden. Dennoch können viele Linux-Tools, einschließlich Standardanwendungen wie vi, auf legale Weise zur Erhöhung der Berechtigungen verwendet werden. Ich empfehle, nach einer passenden Methode zu suchen. .
Das Erste, was zu tun ist, nachdem man Zugriff auf das System erhalten hat, ist die Ausführung des Befehls sudo -l. Dieser zeigt die Berechtigungen für die Verwendung des Befehls sudo an. Wenn man einen Benutzer ohne Passwort hat (z.B. apache oder www-data), ist die Wahrscheinlichkeit, die Berechtigungen über sudo zu erhöhen, gering. Bei der Verwendung von sudo wird das Passwort angefordert. Der Befehl passwd kann auch nicht verwendet werden, um ein Passwort festzulegen, da er nach dem aktuellen Passwort des Benutzers fragt. Wenn jedoch sudo verfügbar ist, muss man im Grunde nach folgendem suchen:
- beliebigen Interpretern, jeder kann eine Shell (PHP, Python, Perl) spawn;
- beliebigen Texteditoren (vim, vi, nano);
- beliebigen Betrachtungsanwendungen (less, more);
- alle Möglichkeiten zur Arbeit mit dem Dateisystem (cp, mv);
- Tools, die Zugriff auf Bash haben, interaktiv oder als ausführbare Befehle (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 gibt es selten Artikel, die konkret erläutern, was mit diesen Programmen zu tun ist. Optionen zur Erhöhung der Privilegien, die keine Verwendung von Exploits berücksichtigen, sind zu finden . Auch eine Reihe von ausführbaren Dateien hat spezifische Schwachstellen für die Betriebssystemversion, .
In einer idealen Welt sollten alle installierten Pakete mindestens durch searchsploit laufen. In der Praxis sollte dies jedoch mit den beliebtesten Programmen wie sudo erfolgen. Es gibt auch immer die Möglichkeit, die Entwicklung automatisierter Tools zu nutzen und zu unterstützen, die interessante ausführbare Dateien mit gesetzten Suid/Sgid-Bits hervorheben. Eine Liste solcher Werkzeuge werde ich im entsprechenden Abschnitt des Artikels angeben.
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, die für Sie zum Schreiben verfügbar ist, kann sie leicht durch bösartige Software ersetzt werden, was zu einer Privilegienerhöhung führt. Standardmäßig sind Cron-Job-Dateien für alle Benutzer lesbar.
ls -la /etc/cron.d # zeige Cron-Jobs an Ähnlich verhält es sich mit init. Der Unterschied besteht darin, dass Cron-Jobs regelmäßig ausgeführt werden, während init beim Systemstart ausgeführt wird. Für die Ausnutzung muss das System neu gestartet werden, wobei einige Dienste möglicherweise nicht gestartet werden (wenn sie nicht für den Autostart konfiguriert sind).
ls -la /etc/init.d/ # zeige Init-Skripte an Es kann auch nach Dateien gesucht werden, die für jeden Benutzer zum Schreiben verfügbar sind.
find / -perm -2 -type f 2>/dev/null # finde weltweit beschreibbare DateienDie Methode ist ziemlich bekannt, erfahrene Systemadministratoren nutzen den Befehl chmod sorgfältig. Allerdings wird in den meisten Tutorials im Internet überwiegend das Setzen maximaler Berechtigungen beschrieben. Der Ansatz unerfahrener Systemadministratoren, bei dem es nur darum geht, dass es funktioniert, schafft grundsätzlich Möglichkeiten zur Erhöhung von Berechtigungen. Wenn möglich, sollte man in der Befehlshistorie nach unsicherer Verwendung von chmod suchen.
chmod +w /path
chmod 777 /pathZugriff auf die Shell anderer Benutzer erhalten
Sehen wir uns die Benutzerliste in /etc/passwd an. Achten wir auf diejenigen, die eine Shell haben. Diese Benutzer können gebrutet werden – es ist nicht ausgeschlossen, dass es gelingt, durch den erhaltenen Benutzer letztlich die Berechtigungen zu erhöhen.
Um die Sicherheit zu erhöhen, empfehle ich, immer den Grundsatz der minimalen Berechtigungen zu beachten. Es macht auch Sinn, Zeit darauf zu verwenden, unsichere Konfigurationen zu überprüfen, die nach dem Troubleshooting übrig geblieben sein könnten – das ist die „technische Schuld“ des Systemadministrators.
Eigenes Skript
Es ist wichtig, die ausführbaren Dateien im Home-Verzeichnis des Benutzers und des Webservers (/var/www/, sofern nicht anders angegeben) sorgfältig zu überprüfen. Diese Dateien könnten eine äußerst unsichere Lösung darstellen und unglaubliche Hacks enthalten. Natürlich hat es keinen Sinn, in einem Webserver-Verzeichnis nach Zero-Day-Schwachstellen zu suchen, wenn Sie ein Framework haben, jedoch wird empfohlen, benutzerdefinierte Anpassungen, Plugins und Komponenten zu finden und zu untersuchen.
Um die Sicherheit zu erhöhen, sollte, sofern möglich, auf die Verwendung von Anmeldeinformationen in benutzerdefinierten Skripten sowie auf potenziell gefährliche Funktionen wie das Lesen von /etc/shadow oder das Manipulieren von id_rsa verzichtet werden.
Privilegiensteigerung durch Ausnutzung von Schwachstellen
Bevor Sie versuchen, Privilegien durch Ausnutzung zu erhöhen, ist es wichtig, sich mit dem Dateitransfer zum Zielhost. Neben den gewohnten Mitteln wie ssh, ftp, http (wget, curl) gibt es eine ganze .
Um die Systemsicherheit zu erhöhen, aktualisieren Sie es regelmäßig auf die aktuellen stabilen Versionen. Versionen, und versuchen Sie, Distributionen zu verwenden, die für Enterprise ausgelegt sind. Andernfalls kann es in seltenen Fällen vorkommen, dass ein apt upgrade das System unbrauchbar macht.
Betrieb von Diensten, die im Kontext des Benutzers root ausgeführt werden
Einige Linux-Dienste werden von dem privilegierten Benutzer root betrieben. Sie können sie mit dem Befehl ps aux | grep root finden. Dabei kann der Dienst möglicherweise nicht im Netzwerk angezeigt werden und nur lokal zugänglich sein. Wenn er öffentliche Exploits hat, können diese ohne Bedenken angewendet werden: Der Ausfall des Dienstes im Falle einer misslungenen Ausnutzung ist weitaus weniger kritisch als der Ausfall des Betriebssystems.
ps -aux | grep root # LinuxDer günstigste Fall wäre der Betrieb eines gehackten Dienstes im Kontext des Benutzers root. Die Ausnutzung des SMB-Dienstes ermöglicht privilegierten SYSTEM-Zugriff auf Windows-Systeme (z. B. über ms17-010). In Linux-Systemen kommt dies jedoch nicht oft vor, daher kann man viel Zeit mit der Durchführung von Privilegienerhöhungen verbringen.
Ausnutzung von Schwachstellen im Linux-Kernel
Dies ist der Weg, den man als letztes gehen sollte. Eine fehlerhafte Ausführung kann zum Systemausfall führen, und im Falle eines Reboots könnten einige Dienste (einschließlich derjenigen, über die der ursprüngliche Shell-Zugriff erlangt wurde) möglicherweise nicht mehr hochfahren. Es kommt vor, dass der Administrator einfach vergessen hat, den Befehl systemctl enable auszuführen. Darüber hinaus wird es viel Unmut über Ihre Arbeiten geben, wenn die Ausführung nicht vorher genehmigt wurde.
Wenn Sie die Quellcodes aus exploitdb verwenden möchten, lesen Sie unbedingt die Kommentare am Anfang des Skripts. Dort steht normalerweise, wie man den entsprechenden Exploit richtig kompiliert. Wenn Sie selbst keine Lust haben oder aus Zeitgründen etwas dringend „gestern“ benötigt wird, können Sie nach Repositories mit bereits kompilierten Exploits suchen. . Man sollte jedoch verstehen, dass Sie in diesem Fall die Katze im Sack kaufen. Auf der anderen Seite, wenn ein Programmierer bis ins kleinste Detail wüsste, wie der Computer und die verwendete Software aufgebaut sind, hätte er in seinem ganzen 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, den richtigen Payload festzulegen, zum Beispiel generic/shell/reverse_tcp oder generic/shell/bind_tcp. Die in Metasploit erhaltene Shell kann auf Meterpreter verbessert werden, indem das Modul post/multi/manage/shell_to_meterpreter verwendet wird. Mit Meterpreter können Sie den Post-Exploitation-Prozess automatisieren. Zum Beispiel überprüft das Modul post/multi/recon/local_exploit_suggester die Plattform, Architektur und die erforderlichen Entitäten für die Ausnutzung und schlägt Metasploit-Module zur Erhöhung der Privilegien im Zielsystem vor. Dank Meterpreter besteht die Erhöhung der Privilegien manchmal nur darin, das richtige Modul auszuführen, jedoch ist Hacking ohne das Verständnis dessen, was im Hintergrund passiert, nicht „echt“ (Sie müssen noch einen Bericht schreiben).
Tools
Automatisierungswerkzeuge zur lokalen Informationssammlung sparen Ihnen viel Mühe und Zeit, können jedoch allein nicht den Weg zur Erhöhung der Privilegien vollständig aufdecken, insbesondere bei der Ausnutzung von Kernel-Schwachstellen. Automatisierungswerkzeuge führen alle erforderlichen Befehle zur Informationssammlung über das System für Sie aus, aber es ist auch wichtig, fähig zu sein. analysiert werden müssen Die gesammelten Daten. Ich hoffe, mein Artikel wird Ihnen dabei hilfreich sein. Natürlich gibt es viel mehr Tools, als ich unten anführe, aber sie erfüllen alle im Wesentlichen denselben Zweck – hier geht es eher um persönliche Vorlieben.
Ein relativ neues Tool, der erste Commit stammt aus Januar 2019. Momentan ist es mein Lieblingswerkzeug. Der Sinn ist, dass es die interessantesten Privilegierungserweiterungsvektoren hervorhebt. Sie müssen zugeben, es ist einfacher, eine Expertenbewertung auf diesem Niveau zu erhalten, als monolithische Rohdaten zu analysieren.
Mein zweites Lieblingswerkzeug, das ebenfalls Daten sammelt und systematisiert, die aus der lokalen Auflistung gewonnen wurden.
Dieser Exploit analysiert das System auf geeignete Bedingungen für Exploits. Im Grunde wird er die gleiche Arbeit wie das Modul Metasploit local_exploit_suggester leisten, bietet aber keine Metasploit-Module, sondern Links zu den Quellcodes von exploit-db.
Dieses Skript wird eine große Menge an Informationen sammeln und systematisieren, die in verschiedenen Kategorien nützlich sein können, um einen Vektor zur Erhöhung der Berechtigungen zu bilden.
Ich werde es beim nächsten Mal ausführlich erläutern. .
Quelle: habr.com
