Writable Sys Path +Dll Hijacking Privesc
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Wenn Sie festgestellt haben, dass Sie in einen Systempfad-Ordner schreiben können (beachten Sie, dass dies nicht funktioniert, wenn Sie in einen Benutzerpfad-Ordner schreiben können), ist es möglich, dass Sie Privilegien im System eskalieren können.
Um dies zu tun, können Sie eine Dll Hijacking ausnutzen, bei der Sie eine Bibliothek übernehmen, die von einem Dienst oder Prozess mit höheren Privilegien als Ihren geladen wird. Da dieser Dienst eine Dll lädt, die wahrscheinlich nicht einmal im gesamten System existiert, wird er versuchen, sie aus dem Systempfad zu laden, in den Sie schreiben können.
Für weitere Informationen darüber, was Dll Hijacking ist, siehe:
Dll HijackingDas erste, was Sie benötigen, ist, einen Prozess zu identifizieren, der mit höheren Privilegien als Sie läuft und versucht, eine Dll aus dem Systempfad zu laden, in den Sie schreiben können.
Das Problem in diesen Fällen ist, dass diese Prozesse wahrscheinlich bereits laufen. Um herauszufinden, welche Dlls den Diensten fehlen, müssen Sie procmon so schnell wie möglich starten (bevor die Prozesse geladen werden). Um fehlende .dlls zu finden, tun Sie Folgendes:
Erstellen Sie den Ordner C:\privesc_hijacking
und fügen Sie den Pfad C:\privesc_hijacking
zur Systempfad-Umgebungsvariable hinzu. Sie können dies manuell oder mit PS tun:
Starte procmon
und gehe zu Optionen
--> Boot-Logging aktivieren
und drücke OK
im Prompt.
Dann neustarten. Wenn der Computer neu gestartet wird, wird procmon
sofort mit dem Aufzeichnen von Ereignissen beginnen.
Sobald Windows gestartet ist, führe procmon
erneut aus, es wird dir sagen, dass es bereits läuft und wird fragen, ob du die Ereignisse in einer Datei speichern möchtest. Sage ja und speichere die Ereignisse in einer Datei.
Nachdem die Datei generiert wurde, schließe das geöffnete procmon
-Fenster und öffne die Ereignisdatei.
Füge diese Filter hinzu und du wirst alle Dlls finden, die einige Prozesse versucht haben zu laden aus dem beschreibbaren Systempfad-Ordner:
Als ich dies auf einer kostenlosen virtuellen (vmware) Windows 11-Maschine ausführte, erhielt ich diese Ergebnisse:
In diesem Fall sind die .exe nutzlos, also ignoriere sie, die verpassten DLLs stammen von:
Aufgabenplanung (Schedule)
WptsExtensions.dll
C:\Windows\system32\svchost.exe -k netsvcs -p -s Schedule
Diagnosetool-Dienst (DPS)
Unknown.DLL
C:\Windows\System32\svchost.exe -k LocalServiceNoNetwork -p -s DPS
???
SharedRes.dll
C:\Windows\system32\svchost.exe -k UnistackSvcGroup
Nachdem ich dies gefunden hatte, stieß ich auf diesen interessanten Blogbeitrag, der auch erklärt, wie man WptsExtensions.dll für privesc missbrauchen kann. Das ist es, was wir jetzt tun werden.
Um die Berechtigungen zu erhöhen, werden wir die Bibliothek WptsExtensions.dll hijacken. Mit dem Pfad und dem Namen müssen wir nur die bösartige dll generieren.
Du kannst versuchen, eines dieser Beispiele zu verwenden. Du könntest Payloads ausführen wie: eine rev shell erhalten, einen Benutzer hinzufügen, ein Beacon ausführen...
Beachte, dass nicht alle Dienste mit NT AUTHORITY\SYSTEM
ausgeführt werden, einige werden auch mit NT AUTHORITY\LOCAL SERVICE
ausgeführt, was weniger Berechtigungen hat und du kannst keinen neuen Benutzer erstellen, um seine Berechtigungen auszunutzen.
Dieser Benutzer hat jedoch das seImpersonate
-Privileg, also kannst du die Potato-Suite verwenden, um die Berechtigungen zu erhöhen. In diesem Fall ist eine rev shell eine bessere Option, als zu versuchen, einen Benutzer zu erstellen.
Zum Zeitpunkt des Schreibens wird der Aufgabenplanungs-Dienst mit Nt AUTHORITY\SYSTEM ausgeführt.
Nachdem ich die bösartige Dll generiert habe (in meinem Fall verwendete ich eine x64 rev shell und ich erhielt eine Shell zurück, aber Defender tötete sie, weil sie von msfvenom stammte), speichere sie im beschreibbaren Systempfad mit dem Namen WptsExtensions.dll und starte den Computer neu (oder starte den Dienst neu oder tue, was nötig ist, um den betroffenen Dienst/das Programm erneut auszuführen).
Wenn der Dienst neu gestartet wird, sollte die dll geladen und ausgeführt werden (du kannst den procmon-Trick wiederverwenden, um zu überprüfen, ob die Bibliothek wie erwartet geladen wurde).
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)