5.6 KiB
Writable Sys Path +Dll Hijacking Privesc
{{#include ../../../banners/hacktricks-training.md}}
Wprowadzenie
Jeśli odkryłeś, że możesz zapisywać w folderze System Path (zauważ, że to nie zadziała, jeśli możesz zapisywać w folderze User Path), istnieje możliwość, że możesz eskalować uprawnienia w systemie.
Aby to zrobić, możesz wykorzystać Dll Hijacking, gdzie zamierzasz przechwycić bibliotekę ładowaną przez usługę lub proces z większymi uprawnieniami niż twoje, a ponieważ ta usługa ładuje Dll, która prawdopodobnie nie istnieje w całym systemie, spróbuje załadować ją z System Path, w którym możesz pisać.
Aby uzyskać więcej informacji na temat czym jest Dll Hijacking, sprawdź:
{{#ref}} ./ {{#endref}}
Eskalacja uprawnień z Dll Hijacking
Znalezienie brakującego Dll
Pierwszą rzeczą, którą musisz zrobić, jest zidentyfikowanie procesu działającego z większymi uprawnieniami niż ty, który próbuje załadować Dll z System Path, w którym możesz pisać.
Problem w tych przypadkach polega na tym, że prawdopodobnie te procesy już działają. Aby znaleźć, które Dll brakuje usługom, musisz uruchomić procmon tak szybko, jak to możliwe (zanim procesy zostaną załadowane). Aby znaleźć brakujące .dll, wykonaj:
- Utwórz folder
C:\privesc_hijacking
i dodaj ścieżkęC:\privesc_hijacking
do zmiennej środowiskowej System Path. Możesz to zrobić ręcznie lub za pomocą 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")
}
- Uruchom
procmon
i przejdź doOptions
-->Enable boot logging
i naciśnijOK
w oknie dialogowym. - Następnie zrestartuj komputer. Gdy komputer się uruchomi,
procmon
zacznie rejestrować zdarzenia jak najszybciej. - Po uruchomieniu Windows ponownie uruchom
procmon
, powie ci, że działa i zapyta, czy chcesz zapisać zdarzenia w pliku. Powiedz tak i zapisz zdarzenia w pliku. - Po wygenerowaniu pliku, zamknij otwarte okno
procmon
i otwórz plik ze zdarzeniami. - Dodaj te filtry, a znajdziesz wszystkie Dll, które niektóre procesy próbowały załadować z folderu zapisywalnej ścieżki systemowej:

Przegapione Dll
Uruchamiając to na darmowej wirtualnej maszynie (vmware) Windows 11 uzyskałem te wyniki:

W tym przypadku .exe są bezużyteczne, więc je zignoruj, przegapione DLL pochodziły z:
Usługa | Dll | Linia CMD |
---|---|---|
Harmonogram zadań (Schedule) | WptsExtensions.dll | C:\Windows\system32\svchost.exe -k netsvcs -p -s Schedule |
Usługa polityki diagnostycznej (DPS) | Unknown.DLL | C:\Windows\System32\svchost.exe -k LocalServiceNoNetwork -p -s DPS |
??? | SharedRes.dll | C:\Windows\system32\svchost.exe -k UnistackSvcGroup |
Po znalezieniu tego, znalazłem ten interesujący post na blogu, który również wyjaśnia, jak nadużyć WptsExtensions.dll do eskalacji uprawnień. Co właśnie zamierzamy teraz zrobić.
Eksploatacja
Aby eskalować uprawnienia, zamierzamy przejąć bibliotekę WptsExtensions.dll. Mając ścieżkę i nazwę, musimy tylko wygenerować złośliwy dll.
Możesz spróbować użyć któregokolwiek z tych przykładów. Możesz uruchomić ładunki takie jak: uzyskać powłokę rev, dodać użytkownika, wykonać beacon...
Warning
Zauważ, że nie wszystkie usługi są uruchamiane z
NT AUTHORITY\SYSTEM
, niektóre są również uruchamiane zNT AUTHORITY\LOCAL SERVICE
, które mają mniejsze uprawnienia i nie będziesz mógł stworzyć nowego użytkownika nadużyć jego uprawnień.
Jednak ten użytkownik ma uprawnienieseImpersonate
, więc możesz użyć potato suite do eskalacji uprawnień. Tak więc w tym przypadku powłoka rev jest lepszą opcją niż próba stworzenia użytkownika.
W momencie pisania usługa Harmonogram zadań jest uruchamiana z Nt AUTHORITY\SYSTEM.
Mając wygenerowany złośliwy Dll (w moim przypadku użyłem x64 rev shell i otrzymałem powłokę, ale defender ją zabił, ponieważ pochodziła z msfvenom), zapisz go w zapisywalnej ścieżce systemowej pod nazwą WptsExtensions.dll i zrestartuj komputer (lub zrestartuj usługę lub zrób cokolwiek, aby ponownie uruchomić dotkniętą usługę/program).
Gdy usługa zostanie ponownie uruchomiona, dll powinien zostać załadowany i wykonany (możesz ponownie użyć sztuczki procmon, aby sprawdzić, czy biblioteka została załadowana zgodnie z oczekiwaniami).
{{#include ../../../banners/hacktricks-training.md}}