Writable Sys Path +Dll Hijacking Privesc

Support HackTricks

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 przejąć bibliotekę ładowaną przez usługę lub proces z wyższymi uprawnieniami niż twoje, a ponieważ ta usługa ładuje Dll, która prawdopodobnie nawet nie istnieje w całym systemie, spróbuje załadować ją z System Path, w którym możesz zapisywać.

Aby uzyskać więcej informacji na temat czym jest Dll Hijacking, sprawdź:

Dll Hijacking

Eskalacja uprawnień z Dll Hijacking

Znalezienie brakującej Dll

Pierwszą rzeczą, którą musisz zrobić, jest zidentyfikowanie procesu działającego z wyższymi uprawnieniami niż ty, który próbuje załadować Dll z System Path, w którym możesz zapisywać.

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ź do Options --> Enable boot logging i naciśnij OK w oknie dialogowym.

  • Następnie zrestartuj komputer. Gdy komputer się uruchomi, procmon zacznie rejestrować zdarzenia jak najszybciej.

  • Po uruchomieniu Windows uruchom ponownie 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 zapisywalnego System Path:

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 od:

UsługaDllLinia 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 podniesienia uprawnień. Co właśnie zamierzamy teraz zrobić.

Wykorzystanie

Aby podnieść 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ć payloady takie jak: uzyskać powłokę rev, dodać użytkownika, wykonać beacon...

Zauważ, że nie wszystkie usługi są uruchamiane z NT AUTHORITY\SYSTEM, niektóre są również uruchamiane z NT AUTHORITY\LOCAL SERVICE, co ma mniejsze uprawnienia i nie będziesz mógł stworzyć nowego użytkownika nadużywając jego uprawnień. Jednak ten użytkownik ma uprawnienie seImpersonate, więc możesz użyć potato suite do podniesienia uprawnień. 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 uzyskałem powłokę, ale defender ją zabił, ponieważ pochodziła z msfvenom), zapisz go w zapisywalnym System Path 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).

Wsparcie dla HackTricks

Last updated