Beschreibbarer Systempfad + Dll Hijacking Privesc
Tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Einführung
Wenn du feststellst, dass du in einen Systempfad-Ordner schreiben kannst (beachte, dass das nicht funktioniert, wenn du in einen User Path-Ordner schreiben kannst), ist es möglich, dass du die Privilegien im System erhöhen kannst.
Um das zu erreichen, kannst du ein Dll Hijacking ausnutzen, bei dem du eine Bibliothek, die von einem Dienst oder Prozess mit höheren Privilegien als du geladen wird, hijackst. Da dieser Dienst eine Dll lädt, die wahrscheinlich im gesamten System gar nicht existiert, wird er versuchen, sie aus dem Systempfad zu laden, in den du schreiben kannst.
Für mehr Informationen darüber, was Dll Hijacking ist, siehe:
Privesc mit Dll Hijacking
Eine fehlende Dll finden
Das Erste, was du brauchst, ist ein Prozess zu identifizieren, der mit höheren Privilegien als du läuft und versucht, eine Dll aus dem Systempfad zu laden, in den du schreiben kannst.
Das Problem in diesen Fällen ist, dass diese Prozesse vermutlich bereits laufen. Um herauszufinden, welche Dlls fehlen, musst du procmon so früh wie möglich starten (bevor die Prozesse geladen werden). Um fehlende .dlls zu finden, mache folgendes:
- Erstelle den Ordner
C:\privesc_hijackingund füge den PfadC:\privesc_hijackingzur Systempfad-Umgebungsvariable hinzu. Du kannst das manuell oder mit PS:
# Set the folder path to create and check events for
$folderPath = "C:\privesc_hijacking"
# Create the folder if it does not exist
if (!(Test-Path $folderPath -PathType Container)) {
New-Item -ItemType Directory -Path $folderPath | Out-Null
}
# Set the folder path in the System environment variable PATH
$envPath = [Environment]::GetEnvironmentVariable("PATH", "Machine")
if ($envPath -notlike "*$folderPath*") {
$newPath = "$envPath;$folderPath"
[Environment]::SetEnvironmentVariable("PATH", $newPath, "Machine")
}
- Starte
procmonund gehe zuOptions–>Enable boot loggingund bestätige im Prompt mitOK. - Starte dann den Rechner neu. Wenn der Computer neu gestartet ist, beginnt
procmonso schnell wie möglich mit der Aufzeichnung von Ereignissen. - Sobald Windows gestartet ist, führe
procmonerneut aus; es wird dir mitteilen, dass es bereits läuft und dich fragen, ob du die Ereignisse speichern möchtest. Sage yes 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 findest alle Dlls, die einige Prozesse zu laden versucht haben aus dem beschreibbaren Systempfad-Ordner:
.png)
Fehlende Dlls
Als ich das in einer kostenlosen virtuellen (vmware) Windows 11-Maschine ausgeführt habe, erhielt ich folgende Ergebnisse:
.png)
In diesem Fall sind die .exe nutzlos, also ignoriere sie; die fehlenden DLLs stammten von:
| Dienst | Dll | CMD-Zeile |
|---|---|---|
| Task Scheduler (Schedule) | WptsExtensions.dll | C:\Windows\system32\svchost.exe -k netsvcs -p -s Schedule |
| Diagnostic Policy Service (DPS) | Unknown.DLL | C:\Windows\System32\svchost.exe -k LocalServiceNoNetwork -p -s DPS |
| ??? | SharedRes.dll | C:\Windows\system32\svchost.exe -k UnistackSvcGroup |
After finding this, I found this interesting blog post that also explains how to abuse WptsExtensions.dll for privesc. Which is what we are going to do now.
Exploitation
Also, um Privilegien zu eskalieren, werden wir die Bibliothek WptsExtensions.dll hijacken. Wenn wir den Pfad und den Namen haben, müssen wir nur noch die bösartige DLL generieren.
You can try to use any of these examples. Du könntest Payloads ausführen wie: get a rev shell, add a user, execute a beacon…
Warning
Beachte, dass nicht alle Dienste mit
NT AUTHORITY\SYSTEMausgeführt werden; einige laufen auch mitNT AUTHORITY\LOCAL SERVICE, welches weniger Rechte hat und mit dessen Rechten du nicht in der Lage sein wirst, einen neuen Benutzer zu erstellen.
Allerdings hat dieser Benutzer dasseImpersonate-Privileg, sodass du die potato suite to escalate privileges verwenden kannst. In diesem Fall ist eine rev shell eine bessere Option, als zu versuchen, einen Benutzer zu erstellen.
Im Moment, als dieses Dokument verfasst wurde, läuft der Task Scheduler-Dienst mit NT AUTHORITY\SYSTEM.
Nachdem du die bösartige Dll generiert hast (in meinem Fall habe ich eine x64 rev shell verwendet und bekam eine Shell zurück, aber Defender hat sie beendet, weil sie von msfvenom stammte), speichere sie im beschreibbaren Systempfad unter dem Namen WptsExtensions.dll und starte den Computer neu (oder starte den Dienst neu oder tue, was nötig ist, damit der betroffene Dienst/das Programm erneut ausgeführt wird).
Wenn der Dienst neu gestartet ist, 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).
Tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
HackTricks

