Linux Privilege Escalation
Last updated
Last updated
Lernen Sie und üben Sie AWS-Hacking: HackTricks Training AWS Red Team Expert (ARTE) Lernen Sie und üben Sie GCP-Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lassen Sie uns damit beginnen, etwas Wissen über das ausgeführte Betriebssystem zu erlangen.
Wenn Sie Schreibberechtigungen für einen beliebigen Ordner innerhalb der PATH
-Variablen haben, können Sie möglicherweise einige Bibliotheken oder Binärdateien übernehmen:
Interessante Informationen, Passwörter oder API-Schlüssel in den Umgebungsvariablen?
Überprüfen Sie die Kernel-Version und ob es einen Exploit gibt, der verwendet werden kann, um Berechtigungen zu eskalieren.
Sie können eine gute Liste von anfälligen Kerneln und bereits kompilierten Exploits hier finden: https://github.com/lucyoa/kernel-exploits und exploitdb sploits. Andere Websites, auf denen Sie einige kompilierte Exploits finden können: https://github.com/bwbwbwbw/linux-exploit-binaries, https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack
Um alle anfälligen Kernelversionen von dieser Website zu extrahieren, können Sie Folgendes tun:
Tools, die bei der Suche nach Kernel-Exploits helfen könnten, sind:
linux-exploit-suggester.sh linux-exploit-suggester2.pl linuxprivchecker.py (ausführen im Opfer, überprüft nur Exploits für Kernel 2.x)
Suchen Sie immer die Kernel-Version in Google, vielleicht ist Ihre Kernel-Version in einem Kernel-Exploit erwähnt und dann sind Sie sicher, dass dieser Exploit gültig ist.
Linux Privilege Escalation - Linux Kernel <= 3.19.0-73.8
Basierend auf den anfälligen sudo-Versionen, die erscheinen in:
Sie können überprüfen, ob die sudo-Version anfällig ist, indem Sie dieses grep verwenden.
Von @sickrov
Überprüfen Sie die smasher2-Box von HTB für ein Beispiel, wie diese Schwachstelle ausgenutzt werden könnte
Grsecurity ist eine umfassende Sicherheitserweiterung für den Linux-Kernel, die zahlreiche Funktionen zur Verbesserung der Sicherheit und zur Verhinderung von Privilege-Eskalationen bietet.
Execshield ist eine Technologie, die in einigen Linux-Kerneln implementiert ist, um die Ausführung von Schadcode zu erschweren.
SElinux steht für Security-Enhanced Linux und ist eine Sicherheitserweiterung für das Linux-Betriebssystem. Es implementiert Mandatory Access Controls (MAC) und bietet zusätzliche Sicherheitsebenen, um die Systemintegrität zu schützen.
Address Space Layout Randomization (ASLR) ist eine Sicherheitsfunktion, die dazu dient, die Vorhersagbarkeit von Speicheradressen zu verringern und die Ausnutzung von Sicherheitslücken durch Angreifer zu erschweren.
Wenn Sie sich innerhalb eines Docker-Containers befinden, können Sie versuchen, daraus auszubrechen:
Docker SecurityÜberprüfen Sie, was gemountet und nicht gemountet ist, wo und warum. Wenn etwas nicht gemountet ist, könnten Sie versuchen, es zu mounten und nach privaten Informationen zu suchen.
Ermitteln Sie nützliche Binärdateien
Auch überprüfen, ob ein Compiler installiert ist. Dies ist nützlich, wenn Sie einen Kernel-Exploit verwenden müssen, da empfohlen wird, ihn auf dem Gerät zu kompilieren, auf dem Sie ihn verwenden werden (oder auf einem ähnlichen).
Überprüfen Sie die Version der installierten Pakete und Dienste. Möglicherweise gibt es eine alte Nagios-Version (zum Beispiel), die für die Eskalation von Berechtigungen ausgenutzt werden könnte... Es wird empfohlen, manuell die Version der verdächtigeren installierten Software zu überprüfen.
Wenn Sie SSH-Zugriff auf die Maschine haben, können Sie auch openVAS verwenden, um nach veralteter und verwundbarer Software innerhalb der Maschine zu suchen.
Beachten Sie, dass diese Befehle viele Informationen anzeigen werden, die größtenteils nutzlos sind. Daher wird empfohlen, Anwendungen wie OpenVAS oder ähnliche zu verwenden, die überprüfen, ob eine installierte Softwareversion anfällig für bekannte Exploits ist.
Werfen Sie einen Blick darauf, welche Prozesse ausgeführt werden, und prüfen Sie, ob ein Prozess mehr Berechtigungen hat als er sollte (vielleicht wird ein Tomcat von root ausgeführt?)
Immer auf mögliche electron/cef/chromium Debugging-Tools achten, die laufen, du könntest sie missbrauchen, um Privilegien zu eskalieren. Linpeas erkennt diese, indem es den --inspect
-Parameter in der Befehlszeile des Prozesses überprüft.
Überprüfe auch deine Berechtigungen über die Prozess-Binärdateien, vielleicht kannst du jemanden überschreiben.
Du kannst Tools wie pspy verwenden, um Prozesse zu überwachen. Dies kann sehr nützlich sein, um verwundbare Prozesse zu identifizieren, die häufig ausgeführt werden oder wenn eine Reihe von Anforderungen erfüllt sind.
Einige Dienste eines Servers speichern Zugangsdaten im Klartext im Speicher. Normalerweise benötigst du Root-Berechtigungen, um den Speicher von Prozessen zu lesen, die anderen Benutzern gehören. Daher ist dies normalerweise nützlicher, wenn du bereits Root bist und mehr Zugangsdaten entdecken möchtest. Denke jedoch daran, dass als regulärer Benutzer den Speicher der Prozesse, die dir gehören, lesen kannst.
Beachte, dass heutzutage die meisten Maschinen ptrace standardmäßig nicht zulassen, was bedeutet, dass du keine anderen Prozesse dumpen kannst, die deinem unprivilegierten Benutzer gehören.
Die Datei /proc/sys/kernel/yama/ptrace_scope steuert die Zugänglichkeit von ptrace:
kernel.yama.ptrace_scope = 0: Alle Prozesse können debuggt werden, solange sie die gleiche uid haben. So funktionierte das klassische Tracing.
kernel.yama.ptrace_scope = 1: Nur ein übergeordneter Prozess kann debuggt werden.
kernel.yama.ptrace_scope = 2: Nur Admins können ptrace verwenden, da es die CAP_SYS_PTRACE-Fähigkeit erfordert.
kernel.yama.ptrace_scope = 3: Keine Prozesse dürfen mit ptrace verfolgt werden. Nach dem Setzen ist ein Neustart erforderlich, um das Tracing wieder zu aktivieren.
Wenn du Zugriff auf den Speicher eines FTP-Dienstes hast (zum Beispiel), könntest du den Heap erhalten und nach Zugangsdaten darin suchen.
Für eine gegebene Prozess-ID zeigt maps, wie der Speicher im virtuellen Adressraum dieses Prozesses abgebildet ist; es zeigt auch die Berechtigungen jeder abgebildeten Region. Die mem Pseudo-Datei stellt den Speicher des Prozesses selbst dar. Aus der maps-Datei wissen wir, welche Speicherregionen lesbar sind und ihre Offsets. Wir verwenden diese Informationen, um in die mem-Datei zu suchen und alle lesbaren Regionen in eine Datei zu dumpen.
/dev/mem
bietet Zugriff auf den physischen Speicher des Systems, nicht den virtuellen Speicher. Der virtuelle Adressraum des Kernels kann über /dev/kmem zugegriffen werden.
In der Regel ist /dev/mem
nur lesbar für root und die kmem Gruppe.
ProcDump ist eine Linux-Neugestaltung des klassischen ProcDump-Tools aus der Sysinternals-Suite von Tools für Windows. Hol es dir unter https://github.com/Sysinternals/ProcDump-for-Linux
Um den Speicher eines Prozesses zu dumpen, könnten Sie folgendes verwenden:
https://github.com/hajzer/bash-memory-dump (root) - _Sie können manuell die Root-Anforderungen entfernen und den Prozess dumpen, der Ihnen gehört
Skript A.5 von https://www.delaat.net/rp/2016-2017/p97/report.pdf (Root-Zugriff erforderlich)
Wenn Sie feststellen, dass der Authentifizierungsprozess läuft:
Sie können den Prozess dumpen (siehe vorherige Abschnitte, um verschiedene Möglichkeiten zum Dumpen des Speichers eines Prozesses zu finden) und nach Anmeldedaten im Speicher suchen:
Das Tool https://github.com/huntergregal/mimipenguin wird klare Textpasswörter aus dem Speicher stehlen und aus einigen bekannten Dateien. Es erfordert Root-Berechtigungen, um ordnungsgemäß zu funktionieren.
Funktion | Prozessname |
---|---|
GDM-Passwort (Kali-Desktop, Debian-Desktop) | gdm-password |
Gnome-Schlüsselbund (Ubuntu-Desktop, ArchLinux-Desktop) | gnome-keyring-daemon |
LightDM (Ubuntu-Desktop) | lightdm |
VSFTPd (Aktive FTP-Verbindungen) | vsftpd |
Apache2 (Aktive HTTP Basic Auth-Sitzungen) | apache2 |
OpenSSH (Aktive SSH-Sitzungen - Sudo-Nutzung) | sshd: |
Überprüfen Sie, ob ein geplanter Job anfällig ist. Möglicherweise können Sie von einem Skript profitieren, das von root ausgeführt wird (Wildcard-Schwachstelle? Dateien ändern, die von root verwendet werden? Symlinks verwenden? Spezifische Dateien im Verzeichnis erstellen, das von root verwendet wird?).
Zum Beispiel, innerhalb von /etc/crontab kannst du den PATH finden: PATH=/home/user:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
(Beachte, wie der Benutzer "user" Schreibrechte über /home/user hat)
Wenn der Root-Benutzer in diesem Crontab versucht, einen Befehl oder ein Skript ohne Festlegung des Pfads auszuführen. Zum Beispiel: * * * * root overwrite.sh Dann kannst du eine Root-Shell erhalten, indem du:
Wenn ein Skript von root ausgeführt wird und ein "*" in einem Befehl vorhanden ist, könnten Sie dies ausnutzen, um unerwartete Dinge zu tun (wie z.B. Berechtigungserweiterung). Beispiel:
Wenn das Platzhalterzeichen von einem Pfad wie /some/path/* gefolgt wird, ist es nicht anfällig (sogar ./* ist es nicht).
Lesen Sie die folgende Seite für weitere Tricks zur Ausnutzung von Platzhaltern:
Wildcards Spare tricksWenn Sie ein Cron-Skript bearbeiten können, das von root ausgeführt wird, können Sie sehr einfach eine Shell erhalten:
Wenn das Skript, das von root ausgeführt wird, ein Verzeichnis verwendet, auf das Sie vollständigen Zugriff haben, könnte es nützlich sein, dieses Verzeichnis zu löschen und einen symbolischen Link zu einem anderen Verzeichnis zu erstellen, der ein von Ihnen kontrolliertes Skript bereitstellt.
Sie können die Prozesse überwachen, um nach Prozessen zu suchen, die alle 1, 2 oder 5 Minuten ausgeführt werden. Möglicherweise können Sie dies ausnutzen und Berechtigungen eskalieren.
Zum Beispiel, um alle 0,1 Sekunden während 1 Minute zu überwachen, nach weniger ausgeführten Befehlen zu sortieren und die am häufigsten ausgeführten Befehle zu löschen, können Sie Folgendes tun:
Sie können auch pspy verwenden (dies überwacht und listet jeden Prozess auf, der gestartet wird).
Es ist möglich, einen Cron-Job zu erstellen, indem Sie einen Wagenrücklauf nach einem Kommentar einfügen (ohne Zeilenumbruchzeichen), und der Cron-Job wird funktionieren. Beispiel (beachten Sie das Wagenrücklaufzeichen):
Überprüfen Sie, ob Sie eine beliebige .service
-Datei schreiben können. Wenn ja, könnten Sie sie ändern, damit sie Ihre Hintertür ausführt, wenn der Dienst gestartet, neugestartet oder gestoppt wird (eventuell müssen Sie auf einen Neustart des Systems warten).
Erstellen Sie beispielsweise Ihre Hintertür innerhalb der .service-Datei mit ExecStart=/tmp/script.sh
Denken Sie daran, dass Sie, wenn Sie Schreibberechtigungen für Binärdateien haben, die von Diensten ausgeführt werden, diese gegen Hintertüren austauschen können, sodass die Hintertüren ausgeführt werden, wenn die Dienste erneut ausgeführt werden.
Sie können den vom systemd verwendeten PATH mit folgendem Befehl anzeigen:
Wenn Sie feststellen, dass Sie in einem der Ordner des Pfads schreiben können, können Sie möglicherweise Berechtigungen eskalieren. Sie müssen nach relativen Pfaden suchen, die in den Konfigurationsdateien des Dienstes verwendet werden, wie:
Dann erstellen Sie eine ausführbare Datei mit dem gleichen Namen wie der relative Pfadbefehl im systemd-PATH-Ordner, den Sie schreiben können, und wenn der Dienst aufgefordert wird, die verwundbare Aktion (Start, Stop, Reload) auszuführen, wird Ihre Hintertür ausgeführt (unprivilegierte Benutzer können normalerweise keine Dienste starten/stoppen, aber überprüfen Sie, ob Sie sudo -l
verwenden können).
Weitere Informationen zu Diensten finden Sie unter man systemd.service
.
Timer sind systemd-Einheitsdateien, deren Name mit **.timer**
endet und die **.service**
-Dateien oder Ereignisse steuern. Timer können als Alternative zu Cron verwendet werden, da sie eine integrierte Unterstützung für Kalenderzeitereignisse und monotonische Zeitereignisse haben und asynchron ausgeführt werden können.
Sie können alle Timer mit folgendem Befehl auflisten:
Wenn Sie einen Timer ändern können, können Sie ihn dazu bringen, einige vorhandene systemd.unit-Ausführungen auszuführen (wie z. B. eine .service
oder ein .target
).
Im Dokumentationsbereich können Sie lesen, was die Einheit ist:
Die Einheit, die aktiviert werden soll, wenn dieser Timer abläuft. Das Argument ist ein Einheitsname, dessen Suffix nicht ".timer" ist. Wenn nicht angegeben, wird dieser Wert standardmäßig auf einen Dienst festgelegt, der den gleichen Namen wie die Timer-Einheit hat, außer dem Suffix. (Siehe oben.) Es wird empfohlen, dass der aktiviert Einheitsname und der Einheitsname der Timer-Einheit identisch benannt sind, außer dem Suffix.
Daher müssten Sie diese Berechtigung missbrauchen, indem Sie:
Suchen Sie nach einer systemd-Einheit (wie einer .service
), die eine beschreibbare Binärdatei ausführt
Suchen Sie nach einer systemd-Einheit, die einen relativen Pfad ausführt und über beschreibbare Berechtigungen für den systemd-Pfad verfügt (um diese ausführbare Datei zu imitieren)
Erfahren Sie mehr über Timer mit man systemd.timer
.
Um einen Timer zu aktivieren, benötigen Sie Root-Berechtigungen und führen aus:
Beachten Sie, dass der Timer durch Erstellen eines Symlinks darauf in /etc/systemd/system/<WantedBy_section>.wants/<name>.timer
aktiviert wird.
Unix-Domänen-Sockets (UDS) ermöglichen die Prozesskommunikation innerhalb von Client-Server-Modellen auf denselben oder verschiedenen Maschinen. Sie nutzen Standard-Unix-Deskriptor-Dateien für die zwischencomputerkommunikation und werden über .socket
-Dateien eingerichtet.
Sockets können mit .socket
-Dateien konfiguriert werden.
Erfahren Sie mehr über Sockets mit man systemd.socket
. In dieser Datei können mehrere interessante Parameter konfiguriert werden:
ListenStream
, ListenDatagram
, ListenSequentialPacket
, ListenFIFO
, ListenSpecial
, ListenNetlink
, ListenMessageQueue
, ListenUSBFunction
: Diese Optionen sind unterschiedlich, aber eine Zusammenfassung wird verwendet, um anzuzeigen, wo der Socket lauschen wird (der Pfad der AF_UNIX-Socketdatei, die IPv4/6 und/oder Portnummer zum Lauschen usw.).
Accept
: Nimmt ein boolesches Argument an. Wenn true, wird eine Serviceinstanz für jede eingehende Verbindung erstellt und nur der Verbindungssocket wird an sie übergeben. Wenn false, werden alle lauschenden Sockets selbst an die gestartete Serviceeinheit übergeben, und es wird nur eine Serviceeinheit für alle Verbindungen erstellt. Dieser Wert wird für Datagramm-Sockets und FIFOs ignoriert, bei denen eine einzelne Serviceeinheit bedingungslos den gesamten eingehenden Datenverkehr verarbeitet. Standardmäßig auf false gesetzt. Aus Leistungsgründen wird empfohlen, neue Daemons nur so zu schreiben, dass sie für Accept=no
geeignet sind.
ExecStartPre
, ExecStartPost
: Nimmt eine oder mehrere Befehlszeilen an, die vor oder nach dem Erstellen und Binden der lauschenden Sockets/FIFOs ausgeführt werden. Das erste Token der Befehlszeile muss ein absoluter Dateiname sein, gefolgt von Argumenten für den Prozess.
ExecStopPre
, ExecStopPost
: Zusätzliche Befehle, die vor oder nach dem Schließen und Entfernen der lauschenden Sockets/FIFOs ausgeführt werden.
Service
: Gibt den Servicenamen an, der bei eingehendem Datenverkehr aktiviert werden soll. Diese Einstellung ist nur für Sockets mit Accept=no zulässig. Es wird standardmäßig auf den Dienst gesetzt, der denselben Namen wie der Socket trägt (mit dem ersetzen des Suffixes). In den meisten Fällen sollte es nicht notwendig sein, diese Option zu verwenden.
Wenn Sie eine beschreibbare .socket
-Datei finden, können Sie am Anfang des [Socket]
-Abschnitts etwas wie folgt hinzufügen: ExecStartPre=/home/kali/sys/backdoor
und die Hintertür wird ausgeführt, bevor der Socket erstellt wird. Daher müssen Sie wahrscheinlich warten, bis die Maschine neu gestartet wird.
Beachten Sie, dass das System diese Socketdateikonfiguration verwenden muss, damit die Hintertür nicht ausgeführt wird.
Wenn Sie einen beschreibbaren Socket identifizieren (jetzt sprechen wir über Unix-Sockets und nicht über die Konfigurationsdateien .socket
), können Sie mit diesem Socket kommunizieren und möglicherweise eine Schwachstelle ausnutzen.
Ausbeispiel:
Socket Command InjectionBeachten Sie, dass möglicherweise einige Sockets auf HTTP-Anfragen lauschen (Ich spreche nicht von .socket-Dateien, sondern von Dateien, die als Unix-Sockets fungieren). Sie können dies überprüfen mit:
Der Docker-Socket, der sich häufig unter /var/run/docker.sock
befindet, ist eine wichtige Datei, die gesichert werden sollte. Standardmäßig ist sie vom Benutzer root
und den Mitgliedern der Gruppe docker
beschreibbar. Wenn Sie Schreibzugriff auf diesen Socket haben, kann dies zu einer Privilegieneskalation führen. Hier ist eine Aufschlüsselung, wie dies gemacht werden kann, und alternative Methoden, wenn die Docker CLI nicht verfügbar ist.
Wenn Sie Schreibzugriff auf den Docker-Socket haben, können Sie Privilegien mit den folgenden Befehlen eskalieren:
Diese Befehle ermöglichen es Ihnen, einen Container mit Root-Zugriff auf das Dateisystem des Hosts auszuführen.
In Fällen, in denen die Docker-Befehlszeilenschnittstelle nicht verfügbar ist, kann der Docker-Socket weiterhin mithilfe der Docker-API und curl
-Befehlen manipuliert werden.
Docker-Images auflisten: Abrufen der Liste der verfügbaren Images.
Einen Container erstellen: Senden Sie eine Anfrage zur Erstellung eines Containers, der das Stammverzeichnis des Hostsystems einbindet.
Starten Sie den neu erstellten Container:
Mit dem Container verbinden: Verwenden Sie socat
, um eine Verbindung zum Container herzustellen und die Ausführung von Befehlen darin zu ermöglichen.
Nachdem die socat
-Verbindung eingerichtet wurde, können Befehle direkt im Container mit Root-Zugriff auf das Dateisystem des Hosts ausgeführt werden.
Beachten Sie, dass Sie, wenn Sie Schreibberechtigungen über den Docker-Socket haben, weil Sie in der Gruppe docker
sind, weitere Möglichkeiten haben, Berechtigungen zu eskalieren. Wenn die Docker-API auf einem Port lauscht, können Sie sie auch kompromittieren.
Überprüfen Sie weitere Möglichkeiten, aus Docker auszubrechen oder es zu missbrauchen, um Berechtigungen zu eskalieren in:
Docker SecurityWenn Sie feststellen, dass Sie den ctr
-Befehl verwenden können, lesen Sie die folgende Seite, da Sie ihn möglicherweise missbrauchen können, um Berechtigungen zu eskalieren:
Wenn Sie feststellen, dass Sie den runc
-Befehl verwenden können, lesen Sie die folgende Seite, da Sie ihn möglicherweise missbrauchen können, um Berechtigungen zu eskalieren:
D-Bus ist ein ausgeklügeltes Inter-Process Communication (IPC)-System, das Anwendungen ermöglicht, effizient miteinander zu interagieren und Daten auszutauschen. Entwickelt mit dem modernen Linux-System im Hinterkopf, bietet es ein robustes Framework für verschiedene Formen der Anwendungskommunikation.
Das System ist vielseitig und unterstützt grundlegende IPC, das den Datenaustausch zwischen Prozessen verbessert, ähnlich wie erweiterte UNIX-Domänen-Sockets. Darüber hinaus unterstützt es das Senden von Ereignissen oder Signalen, was eine nahtlose Integration zwischen Systemkomponenten fördert. Beispielsweise kann ein Signal von einem Bluetooth-Dämon über einen eingehenden Anruf einen Musikplayer dazu veranlassen, stumm zu schalten und so die Benutzererfahrung zu verbessern. Darüber hinaus unterstützt D-Bus ein Remote-Objektsystem, das Serviceanfragen und Methodenaufrufe zwischen Anwendungen vereinfacht und Prozesse optimiert, die traditionell komplex waren.
D-Bus arbeitet nach einem Zulassen/Verweigern-Modell, das die Berechtigungen für Nachrichten (Methodenaufrufe, Signalausgaben usw.) basierend auf der kumulativen Wirkung übereinstimmender Richtlinien verwaltet. Diese Richtlinien spezifizieren Interaktionen mit dem Bus und ermöglichen potenziell eine Berechtigungserweiterung durch die Ausnutzung dieser Berechtigungen.
Ein Beispiel für eine solche Richtlinie in /etc/dbus-1/system.d/wpa_supplicant.conf
wird bereitgestellt, die Berechtigungen für den Root-Benutzer zum Besitzen, Senden an und Empfangen von Nachrichten von fi.w1.wpa_supplicant1
festlegt.
Richtlinien ohne einen spezifizierten Benutzer oder eine Gruppe gelten universell, während Richtlinien im "default"-Kontext für alle gelten, die nicht von anderen spezifischen Richtlinien abgedeckt sind.
Erfahren Sie, wie Sie hier eine D-Bus-Kommunikation aufzählen und ausnutzen können:
D-Bus Enumeration & Command Injection Privilege EscalationEs ist immer interessant, das Netzwerk aufzuzählen und die Position der Maschine herauszufinden.
Überprüfen Sie immer die Netzwerkdienste, die auf dem Gerät ausgeführt werden, mit denen Sie vor dem Zugriff nicht interagieren konnten:
Überprüfen Sie, ob Sie den Datenverkehr sniffen können. Wenn Sie dies können, könnten Sie in der Lage sein, einige Anmeldeinformationen abzufangen.
Überprüfen Sie wer Sie sind, welche Berechtigungen Sie haben, welche Benutzer sich im System befinden, wer sich anmelden kann und welche Benutzer Root-Berechtigungen haben:
Einige Linux-Versionen waren von einem Fehler betroffen, der es Benutzern mit UID > INT_MAX ermöglicht, Berechtigungen zu eskalieren. Weitere Informationen: hier, hier und hier.
Exploitieren Sie es mit: systemd-run -t /bin/bash
Überprüfen Sie, ob Sie Mitglied einer Gruppe sind, die Ihnen Root-Rechte gewähren könnte:
Interesting Groups - Linux PrivescÜberprüfen Sie, ob sich etwas Interessantes in der Zwischenablage befindet (falls möglich)
Wenn Sie ein Passwort der Umgebung kennen, versuchen Sie, sich als jeden Benutzer mit dem Passwort anzumelden.
Wenn es Ihnen nichts ausmacht, viel Lärm zu machen und die Binärdateien su
und timeout
auf dem Computer vorhanden sind, können Sie versuchen, Benutzer mit su-bruteforce zu brute-forcen.
Linpeas versucht auch mit dem Parameter -a
, Benutzer zu brute-forcen.
Wenn Sie feststellen, dass Sie in einem Ordner des $PATH schreiben können, können Sie möglicherweise Berechtigungen eskalieren, indem Sie eine Hintertür im beschreibbaren Ordner erstellen, die den Namen eines Befehls hat, der von einem anderen Benutzer (idealerweise root) ausgeführt wird und der nicht aus einem Ordner geladen wird, der vor Ihrem beschreibbaren Ordner im $PATH liegt.
Sie könnten berechtigt sein, einen Befehl mit sudo auszuführen oder sie könnten das suid-Bit haben. Überprüfen Sie es mit:
Einige unerwartete Befehle ermöglichen es Ihnen, Dateien zu lesen und/oder zu schreiben oder sogar einen Befehl auszuführen. Zum Beispiel:
Die Sudo-Konfiguration könnte einem Benutzer erlauben, einen Befehl mit den Privilegien eines anderen Benutzers auszuführen, ohne das Passwort zu kennen.
In diesem Beispiel kann der Benutzer demo
vim
als root
ausführen. Es ist nun trivial, eine Shell zu erhalten, indem ein SSH-Schlüssel in das Root-Verzeichnis hinzugefügt wird oder indem sh
aufgerufen wird.
Diese Direktive ermöglicht es dem Benutzer, eine Umgebungsvariable zu setzen, während etwas ausgeführt wird:
Dieses Beispiel, basierend auf der HTB-Maschine Admirer, war anfällig für PYTHONPATH-Hijacking, um eine beliebige Python-Bibliothek zu laden, während das Skript als Root ausgeführt wird:
Springe zum Lesen anderer Dateien oder verwende Symlinks. Zum Beispiel in der sudoers-Datei: hacker10 ALL= (root) /bin/less /var/log/*
Wenn ein Platzhalter (*) verwendet wird, ist es noch einfacher:
Gegenmaßnahmen: https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/
Wenn die sudo-Berechtigung einem einzelnen Befehl ohne Angabe des Pfads erteilt wird: hacker10 ALL= (root) less, kann dies ausgenutzt werden, indem die PATH-Variable geändert wird.
Diese Technik kann auch verwendet werden, wenn eine suid-Binärdatei einen anderen Befehl ausführt, ohne den Pfad dazu anzugeben (überprüfen Sie immer mit strings den Inhalt einer seltsamen SUID-Binärdatei).
Beispiele für Payloads zur Ausführung.
Wenn die suid-Binärdatei einen anderen Befehl unter Angabe des Pfads ausführt, können Sie versuchen, eine Funktion zu exportieren, die den Namen des Befehls hat, den die suid-Datei aufruft.
Zum Beispiel, wenn eine suid-Binärdatei /usr/sbin/service apache2 start aufruft, müssen Sie versuchen, die Funktion zu erstellen und zu exportieren:
Die Umgebungsvariable LD_PRELOAD wird verwendet, um eine oder mehrere gemeinsam genutzte Bibliotheken (.so-Dateien) anzugeben, die vom Loader vor allen anderen geladen werden, einschließlich der Standard-C-Bibliothek (libc.so
). Dieser Vorgang wird als Vorladen einer Bibliothek bezeichnet.
Um jedoch die Systemsicherheit aufrechtzuerhalten und zu verhindern, dass diese Funktion insbesondere bei suid/sgid-Ausführbaren ausgenutzt wird, setzt das System bestimmte Bedingungen durch:
Der Loader ignoriert LD_PRELOAD für ausführbare Dateien, bei denen die reale Benutzer-ID (ruid) nicht mit der effektiven Benutzer-ID (euid) übereinstimmt.
Für ausführbare Dateien mit suid/sgid werden nur Bibliotheken in Standardpfaden vorabgeladen, die ebenfalls suid/sgid sind.
Eine Privilegieneskalation kann auftreten, wenn Sie die Möglichkeit haben, Befehle mit sudo
auszuführen und die Ausgabe von sudo -l
die Anweisung env_keep+=LD_PRELOAD enthält. Diese Konfiguration ermöglicht es der Umgebungsvariable LD_PRELOAD, zu bestehen und erkannt zu werden, auch wenn Befehle mit sudo
ausgeführt werden, was potenziell zur Ausführung von beliebigem Code mit erhöhten Berechtigungen führen kann.
Speichern Sie als /tmp/pe.c
Dann kompilieren Sie es mit:
Schließlich Berechtigungen eskalieren ausführen
Eine ähnliche Privilege Escalation kann missbraucht werden, wenn der Angreifer die LD_LIBRARY_PATH Umgebungsvariable kontrolliert, da er den Pfad kontrolliert, in dem Bibliotheken gesucht werden.
Wenn Sie auf eine Binärdatei mit SUID-Berechtigungen stoßen, die ungewöhnlich erscheint, ist es eine gute Praxis zu überprüfen, ob sie .so-Dateien ordnungsgemäß lädt. Dies kann überprüft werden, indem Sie den folgenden Befehl ausführen:
Zum Beispiel deutet ein Fehler wie "open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (Datei oder Verzeichnis nicht gefunden)" auf ein mögliches Ausnutzungspotenzial hin.
Um dies auszunutzen, würde man fortfahren, indem man eine C-Datei erstellt, sagen wir "/path/to/.config/libcalc.c", die den folgenden Code enthält:
Dieser Code zielt darauf ab, nach dem Kompilieren und Ausführen Berechtigungen zu erhöhen, indem Dateiberechtigungen manipuliert und eine Shell mit erhöhten Rechten ausgeführt werden.
Kompilieren Sie die obige C-Datei in eine Shared Object (.so) Datei mit:
Schließlich sollte das Ausführen der betroffenen SUID-Binärdatei das Exploit auslösen und einen potenziellen Systemkompromiss ermöglichen.
Nun, da wir eine SUID-Binärdatei gefunden haben, die eine Bibliothek aus einem Ordner lädt, in den wir schreiben können, erstellen wir die Bibliothek in diesem Ordner mit dem erforderlichen Namen:
Wenn Sie einen Fehler wie den folgenden erhalten:
Das bedeutet, dass die von Ihnen generierte Bibliothek eine Funktion namens a_function_name
haben muss.
GTFOBins ist eine kuratierte Liste von Unix-Binärdateien, die von einem Angreifer ausgenutzt werden können, um lokale Sicherheitsbeschränkungen zu umgehen. GTFOArgs ist dasselbe, jedoch für Fälle, in denen Sie nur Argumente in einem Befehl einschleusen können.
Das Projekt sammelt legitime Funktionen von Unix-Binärdateien, die missbraucht werden können, um aus eingeschränkten Shells auszubrechen, Berechtigungen zu eskalieren oder aufrechtzuerhalten, Dateien zu übertragen, Bind- und Reverse-Shells zu starten und andere Aufgaben nach der Ausnutzung zu erleichtern.
gdb -nx -ex '!sh' -ex quit sudo mysql -e '! /bin/sh' strace -o /dev/null /bin/sh sudo awk 'BEGIN {system("/bin/sh")}'
Wenn Sie auf sudo -l
zugreifen können, können Sie das Tool FallOfSudo verwenden, um zu überprüfen, ob es eine Möglichkeit gibt, eine beliebige sudo-Regel auszunutzen.
In Fällen, in denen Sie sudo-Zugriff haben, aber nicht das Passwort kennen, können Sie Berechtigungen eskalieren, indem Sie auf die Ausführung eines sudo-Befehls warten und dann das Sitzungstoken übernehmen.
Anforderungen zur Eskalation von Berechtigungen:
Sie haben bereits eine Shell als Benutzer "sampleuser"
"sampleuser" hat sudo
verwendet, um etwas in den letzten 15 Minuten auszuführen (standardmäßig ist das die Dauer des sudo-Tokens, das es uns ermöglicht, sudo
ohne Eingabe eines Passworts zu verwenden)
cat /proc/sys/kernel/yama/ptrace_scope
ist 0
gdb
ist zugänglich (Sie können es hochladen)
(Sie können ptrace_scope
vorübergehend mit echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
aktivieren oder dauerhaft ändern, indem Sie /etc/sysctl.d/10-ptrace.conf
bearbeiten und kernel.yama.ptrace_scope = 0
festlegen)
Wenn all diese Anforderungen erfüllt sind, können Sie Berechtigungen eskalieren, indem Sie: https://github.com/nongiach/sudo_inject
Der erste Exploit (exploit.sh
) erstellt die Binärdatei activate_sudo_token
in /tmp. Sie können sie verwenden, um das sudo-Token in Ihrer Sitzung zu aktivieren (Sie erhalten nicht automatisch eine Root-Shell, führen Sie sudo su
aus):
Der zweite Exploit (exploit_v2.sh
) erstellt eine sh-Shell in /tmp, die root gehört und mit setuid versehen ist.
Der dritte Exploit (exploit_v3.sh
) wird eine sudoers-Datei erstellen, die sudo-Token ewig macht und allen Benutzern die Verwendung von sudo ermöglicht.
Wenn Sie Schreibberechtigungen im Ordner oder auf einer der erstellten Dateien im Ordner haben, können Sie das Binär write_sudo_token verwenden, um einen sudo-Token für einen Benutzer und eine PID zu erstellen. Wenn Sie beispielsweise die Datei /var/run/sudo/ts/sampleuser überschreiben können und eine Shell als dieser Benutzer mit der PID 1234 haben, können Sie sudo-Berechtigungen erhalten, ohne das Passwort zu kennen, indem Sie folgendes tun:
Die Datei /etc/sudoers
und die Dateien innerhalb von /etc/sudoers.d
konfigurieren, wer sudo
verwenden kann und wie. Diese Dateien können standardmäßig nur vom Benutzer root und der Gruppe root gelesen werden.
Wenn du diese Datei lesen kannst, könntest du in der Lage sein, interessante Informationen zu erhalten, und wenn du eine Datei schreiben kannst, wirst du in der Lage sein, Berechtigungen zu eskalieren.
Wenn Sie schreiben können, können Sie diese Berechtigung missbrauchen.
Eine weitere Möglichkeit, diese Berechtigungen zu missbrauchen:
Es gibt einige Alternativen zum sudo
-Binärdatei wie doas
für OpenBSD, denken Sie daran, die Konfiguration unter /etc/doas.conf
zu überprüfen.
Wenn Sie wissen, dass ein Benutzer normalerweise eine Verbindung zu einer Maschine herstellt und sudo
verwendet, um Berechtigungen zu eskalieren, und Sie eine Shell im Kontext dieses Benutzers haben, können Sie eine neue sudo-Ausführbare erstellen, die Ihren Code als Root ausführt und dann den Befehl des Benutzers. Dann ändern Sie den $PATH des Benutzerkontexts (zum Beispiel durch Hinzufügen des neuen Pfads in .bash_profile), damit beim Ausführen von sudo der von Ihnen erstellte sudo-Ausführbare ausgeführt wird.
Beachten Sie, dass wenn der Benutzer eine andere Shell verwendet (nicht bash), müssen Sie andere Dateien ändern, um den neuen Pfad hinzuzufügen. Zum Beispiel modifiziert sudo-piggyback ~/.bashrc
, ~/.zshrc
, ~/.bash_profile
. Ein weiteres Beispiel finden Sie in bashdoor.py
Oder führen Sie etwas wie aus:
Die Datei /etc/ld.so.conf
gibt an, woher die geladenen Konfigurationsdateien stammen. Typischerweise enthält diese Datei den folgenden Pfad: include /etc/ld.so.conf.d/*.conf
Das bedeutet, dass die Konfigurationsdateien von /etc/ld.so.conf.d/*.conf
gelesen werden. Diese Konfigurationsdateien verweisen auf andere Ordner, in denen nach Bibliotheken gesucht wird. Zum Beispiel enthält der Inhalt von /etc/ld.so.conf.d/libc.conf
den Pfad /usr/local/lib
. Das bedeutet, dass das System nach Bibliotheken innerhalb von /usr/local/lib
suchen wird.
Wenn ein Benutzer aus irgendeinem Grund Schreibberechtigungen für einen der angegebenen Pfade hat: /etc/ld.so.conf
, /etc/ld.so.conf.d/
, irgendeine Datei innerhalb von /etc/ld.so.conf.d/
oder irgendeinen Ordner innerhalb der Konfigurationsdatei innerhalb von /etc/ld.so.conf.d/*.conf
, könnte er in der Lage sein, Berechtigungen zu eskalieren.
Schauen Sie sich an, wie diese Fehlkonfiguration ausgenutzt werden kann, auf der folgenden Seite:
Durch Kopieren der Bibliothek in /var/tmp/flag15/
wird sie vom Programm an diesem Ort verwendet, wie im RPATH
-Variablen angegeben.
Dann erstellen Sie eine bösartige Bibliothek in /var/tmp
mit gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6
Linux-Fähigkeiten bieten einem Prozess eine Teilmenge der verfügbaren Root-Privilegien. Dadurch werden Root-Privilegien in kleinere und unterscheidbare Einheiten aufgeteilt. Jede dieser Einheiten kann dann unabhängig Prozessen gewährt werden. Auf diese Weise wird der vollständige Satz von Privilegien reduziert, was die Risiken von Ausnutzungen verringert. Lesen Sie die folgende Seite, um mehr über Fähigkeiten zu erfahren und wie man sie missbrauchen kann:
Linux CapabilitiesIn einem Verzeichnis bedeutet das "Ausführen"-Bit, dass der betroffene Benutzer in den Ordner "cd" kann. Das "Lesen"-Bit bedeutet, dass der Benutzer die Dateien auflisten kann, und das "Schreiben"-Bit bedeutet, dass der Benutzer Dateien löschen und neue Dateien erstellen kann.
Zugriffssteuerungslisten (ACLs) stellen die sekundäre Ebene der freigegebenen Berechtigungen dar und sind in der Lage, die traditionellen ugo/rwx-Berechtigungen zu überschreiben. Diese Berechtigungen verbessern die Kontrolle über den Datei- oder Verzeichniszugriff, indem sie spezifischen Benutzern, die nicht die Besitzer oder Teil der Gruppe sind, Rechte gewähren oder verweigern. Dieses Maß an Genauigkeit gewährleistet eine präzisere Zugriffsverwaltung. Weitere Details finden Sie hier.
Geben Sie dem Benutzer "kali" Lese- und Schreibberechtigungen für eine Datei:
Dateien mit spezifischen ACLs vom System erhalten:
In alten Versionen könnten Sie möglicherweise eine Shell-Sitzung eines anderen Benutzers (root) kapern. In neuesten Versionen können Sie nur zu Bildschirmsitzungen Ihres eigenen Benutzers eine Verbindung herstellen. Sie könnten jedoch interessante Informationen innerhalb der Sitzung finden.
Liste Bildschirmsitzungen
An eine Sitzung anhängen
Dies war ein Problem mit alten tmux-Versionen. Ich konnte keine tmux-Sitzung (v2.1) kapern, die von root als nicht privilegierter Benutzer erstellt wurde.
Liste tmux-Sitzungen
An eine Sitzung anhängen
Überprüfen Sie die Valentine-Box von HTB für ein Beispiel.
Alle SSL- und SSH-Schlüssel, die auf Debian-basierten Systemen (Ubuntu, Kubuntu usw.) zwischen September 2006 und dem 13. Mai 2008 generiert wurden, können von diesem Fehler betroffen sein. Dieser Fehler tritt auf, wenn ein neuer SSH-Schlüssel in diesen Betriebssystemen erstellt wird, da nur 32.768 Variationen möglich waren. Das bedeutet, dass alle Möglichkeiten berechnet werden können und mit dem öffentlichen SSH-Schlüssel nach dem entsprechenden privaten Schlüssel gesucht werden kann. Die berechneten Möglichkeiten finden Sie hier: https://github.com/g0tmi1k/debian-ssh
PasswordAuthentication: Gibt an, ob die Passwortauthentifizierung erlaubt ist. Standardmäßig ist es no
.
PubkeyAuthentication: Gibt an, ob die Authentifizierung über öffentliche Schlüssel erlaubt ist. Standardmäßig ist es yes
.
PermitEmptyPasswords: Wenn die Passwortauthentifizierung erlaubt ist, gibt es an, ob der Server die Anmeldung bei Konten mit leeren Passwortzeichenfolgen zulässt. Standardmäßig ist es no
.
Gibt an, ob sich der Root-Benutzer über SSH anmelden kann, standardmäßig ist es no
. Mögliche Werte:
yes
: Root kann sich mit Passwort und privatem Schlüssel anmelden
without-password
oder prohibit-password
: Root kann sich nur mit einem privaten Schlüssel anmelden
forced-commands-only
: Root kann sich nur mit einem privaten Schlüssel anmelden und nur wenn die Befehlsoptionen angegeben sind
no
: nein
Gibt Dateien an, die die öffentlichen Schlüssel enthalten, die für die Benutzerauthentifizierung verwendet werden können. Es können Platzhalter wie %h
enthalten, die durch das Home-Verzeichnis ersetzt werden. Sie können absolute Pfade (beginnend mit /
) oder relative Pfade vom Benutzer-Home angeben. Zum Beispiel:
Diese Konfiguration gibt an, dass wenn Sie versuchen, sich mit dem privaten Schlüssel des Benutzers "testusername" anzumelden, ssh den öffentlichen Schlüssel Ihres Schlüssels mit denen in /home/testusername/.ssh/authorized_keys
und /home/testusername/access
vergleichen wird.
SSH-Agent-Weiterleitung ermöglicht es Ihnen, Ihre lokalen SSH-Schlüssel zu verwenden, anstatt Schlüssel (ohne Passphrasen!) auf Ihrem Server liegen zu lassen. So können Sie über ssh zu einem Host springen und von dort aus zu einem anderen Host springen, wobei der Schlüssel in Ihrem ursprünglichen Host verwendet wird.
Sie müssen diese Option in $HOME/.ssh.config
wie folgt setzen:
Beachten Sie, dass wenn Host
*
ist, jedes Mal, wenn der Benutzer zu einer anderen Maschine wechselt, diese Maschine auf die Schlüssel zugreifen kann (was ein Sicherheitsproblem darstellt).
Die Datei /etc/ssh_config
kann diese Optionen außer Kraft setzen und diese Konfiguration erlauben oder verweigern.
Die Datei /etc/sshd_config
kann das Weiterleiten von ssh-Agent mit dem Schlüsselwort AllowAgentForwarding
erlauben oder verweigern (Standard ist erlauben).
Wenn Sie feststellen, dass Forward Agent in einer Umgebung konfiguriert ist, lesen Sie die folgende Seite, da Sie sie möglicherweise missbrauchen können, um Privilegien zu eskalieren:
SSH Forward Agent exploitationDie Datei /etc/profile
und die Dateien unter /etc/profile.d/
sind Skripte, die ausgeführt werden, wenn ein Benutzer eine neue Shell startet. Daher können Sie, wenn Sie eine davon schreiben oder ändern können, Privilegien eskalieren.
Je nach Betriebssystem können die Dateien /etc/passwd
und /etc/shadow
einen anderen Namen haben oder es könnte ein Backup geben. Daher wird empfohlen, alle von ihnen zu finden und zu überprüfen, ob Sie sie lesen können, um zu sehen, ob sich Hashes in den Dateien befinden:
In einigen Fällen können Sie Passwort-Hashes in der Datei /etc/passwd
(oder einer entsprechenden Datei) finden.
Zuerst generiere ein Passwort mit einem der folgenden Befehle.
Dann fügen Sie den Benutzer hacker
hinzu und fügen Sie das generierte Passwort hinzu.
Zum Beispiel: hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash
Sie können nun den su
Befehl mit hacker:hacker
verwenden.
Alternativ können Sie die folgenden Zeilen verwenden, um einen Dummy-Benutzer ohne Passwort hinzuzufügen. WARNUNG: Sie könnten die aktuelle Sicherheit des Systems beeinträchtigen.
Hinweis: Auf BSD-Plattformen befindet sich /etc/passwd
unter /etc/pwd.db
und /etc/master.passwd
, außerdem wird /etc/shadow
in /etc/spwd.db
umbenannt.
Sie sollten überprüfen, ob Sie in der Lage sind, in einige sensible Dateien zu schreiben. Können Sie beispielsweise in eine Service-Konfigurationsdatei schreiben?
Zum Beispiel, wenn die Maschine einen Tomcat-Server ausführt und Sie die Tomcat-Servicekonfigurationsdatei innerhalb von /etc/systemd/ ändern können, dann können Sie die Zeilen ändern:
Dein Hintertür wird das nächste Mal ausgeführt, wenn Tomcat gestartet wird.
Die folgenden Ordner können Backups oder interessante Informationen enthalten: /tmp, /var/tmp, /var/backups, /var/mail, /var/spool/mail, /etc/exports, /root (Wahrscheinlich wirst du den letzten nicht lesen können, aber versuche es)
Lesen Sie den Code von linPEAS, der nach mehreren möglichen Dateien sucht, die Passwörter enthalten könnten. Ein weiteres interessantes Tool, das Sie verwenden können, um dies zu tun, ist: LaZagne, eine Open-Source-Anwendung, die verwendet wird, um viele auf einem lokalen Computer gespeicherte Passwörter für Windows, Linux & Mac abzurufen.
Wenn Sie Protokolle lesen können, können Sie interessante/vertrauliche Informationen darin finden. Je seltsamer das Protokoll ist, desto interessanter wird es wahrscheinlich sein. Außerdem können einige "schlecht" konfigurierte (backdoored?) Prüfprotokolle es Ihnen ermöglichen, Passwörter in Prüfprotokollen aufzuzeichnen, wie in diesem Beitrag erklärt: https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/.
Um Logs der Gruppe adm zu lesen, wird die Gruppe wirklich hilfreich sein.
Sie sollten auch nach Dateien suchen, die das Wort "Passwort" im Namen oder im Inhalt enthalten, und auch nach IPs und E-Mails in Logs oder Hashes mit Regex suchen. Ich werde hier nicht auflisten, wie man all dies macht, aber wenn Sie interessiert sind, können Sie die letzten Überprüfungen überprüfen, die linpeas durchführt.
Wenn Sie wissen, von wo aus ein Python-Skript ausgeführt wird und Sie in diesem Ordner schreiben können oder Sie Python-Bibliotheken ändern können, können Sie die OS-Bibliothek ändern und sie zurücktüren (wenn Sie dort schreiben können, wo das Python-Skript ausgeführt wird, kopieren und einfügen der os.py-Bibliothek).
Um die Bibliothek zurückzudrehen, fügen Sie einfach am Ende der os.py-Bibliothek die folgende Zeile hinzu (ändern Sie IP und PORT):
Eine Schwachstelle in logrotate
ermöglicht Benutzern mit Schreibberechtigungen auf einer Protokolldatei oder deren übergeordneten Verzeichnissen potenziell erhöhte Rechte zu erlangen. Dies liegt daran, dass logrotate
, das oft als root läuft, manipuliert werden kann, um beliebige Dateien auszuführen, insbesondere in Verzeichnissen wie /etc/bash_completion.d/. Es ist wichtig, die Berechtigungen nicht nur in /var/log zu überprüfen, sondern auch in jedem Verzeichnis, in dem die Protokollrotation angewendet wird.
Diese Schwachstelle betrifft logrotate
Version 3.18.0
und älter
Weitere detaillierte Informationen zur Schwachstelle finden Sie auf dieser Seite: https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition.
Sie können diese Schwachstelle mit logrotten ausnutzen.
Diese Schwachstelle ähnelt sehr der CVE-2016-1247 (nginx logs), daher sollten Sie immer überprüfen, wer diese Protokolle verwaltet, wenn Sie feststellen, dass Sie Protokolle ändern können, und überprüfen, ob Sie Berechtigungen eskalieren können, indem Sie die Protokolle durch Symlinks ersetzen.
Schwachstellenreferenz: https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f
Wenn ein Benutzer aus irgendeinem Grund in der Lage ist, ein ifcf-<whatever>
Skript in /etc/sysconfig/network-scripts zu schreiben oder ein vorhandenes anzupassen, dann ist Ihr System kompromittiert.
Netzwerkskripte, z. B. ifcg-eth0, werden für Netzwerkverbindungen verwendet. Sie sehen genau wie .INI-Dateien aus. Sie werden jedoch auf Linux von Network Manager (dispatcher.d) ~sourced~.
In meinem Fall wird das NAME=
Attribut in diesen Netzwerkskripten nicht korrekt behandelt. Wenn Sie Leerzeichen im Namen haben, versucht das System, den Teil nach dem Leerzeichen auszuführen. Dies bedeutet, dass alles nach dem ersten Leerzeichen als root ausgeführt wird.
Zum Beispiel: /etc/sysconfig/network-scripts/ifcfg-1337
Das Verzeichnis /etc/init.d
beherbergt Skripte für System V init (SysVinit), das klassische Linux-Service-Verwaltungssystem. Es enthält Skripte zum Starten
, Stoppen
, Neustarten
und manchmal zum Neuladen
von Diensten. Diese können direkt ausgeführt werden oder über symbolische Links in /etc/rc?.d/
gefunden werden. Ein alternativer Pfad in Redhat-Systemen ist /etc/rc.d/init.d
.
Auf der anderen Seite ist /etc/init
mit Upstart verbunden, einem neueren Service-Verwaltungssystem, das von Ubuntu eingeführt wurde und Konfigurationsdateien für Service-Verwaltungsaufgaben verwendet. Trotz des Übergangs zu Upstart werden SysVinit-Skripte aufgrund einer Kompatibilitätsschicht in Upstart weiterhin neben Upstart-Konfigurationen verwendet.
systemd entwickelt sich zu einem modernen Initialisierungs- und Diensteverwalter und bietet erweiterte Funktionen wie das Starten von Daemons auf Abruf, das Verwalten von Automounts und das Erstellen von Systemzustandssnapshots. Es organisiert Dateien in /usr/lib/systemd/
für verteilte Pakete und in /etc/systemd/system/
für Administrator-Modifikationen, um den Systemverwaltungsprozess zu optimieren.