Windows Local Privilege Escalation
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)
Jeśli nie wiesz, czym są tokeny dostępu w Windows, przeczytaj następującą stronę przed kontynuowaniem:
Access TokensSprawdź następującą stronę, aby uzyskać więcej informacji na temat ACL - DACL/SACL/ACE:
ACLs - DACLs/SACLs/ACEsJeśli nie wiesz, czym są poziomy integralności w Windows, powinieneś przeczytać następującą stronę przed kontynuowaniem:
Integrity LevelsIstnieją różne elementy w Windows, które mogą uniemożliwić ci enumerację systemu, uruchamianie plików wykonywalnych lub nawet wykrywanie twoich działań. Powinieneś przeczytać następującą stronę i enumerować wszystkie te mechanizmy obronne przed rozpoczęciem enumeracji eskalacji uprawnień:
Windows Security ControlsSprawdź, czy wersja Windows ma jakąś znaną lukę (sprawdź również zastosowane poprawki).
Ta strona jest przydatna do wyszukiwania szczegółowych informacji o lukach w zabezpieczeniach Microsoftu. Ta baza danych zawiera ponad 4,700 luk w zabezpieczeniach, co pokazuje ogromną powierzchnię ataku, jaką prezentuje środowisko Windows.
Na systemie
post/windows/gather/enum_patches
post/multi/recon/local_exploit_suggester
winpeas (Winpeas ma wbudowanego watsona)
Lokalnie z informacjami o systemie
Repozytoria Github exploitów:
Czy jakiekolwiek dane uwierzytelniające/ważne informacje są zapisane w zmiennych środowiskowych?
Możesz dowiedzieć się, jak to włączyć w https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/
Szczegóły wykonania potoków PowerShell są rejestrowane, obejmując wykonane polecenia, wywołania poleceń i części skryptów. Jednakże, pełne szczegóły wykonania i wyniki wyjściowe mogą nie być rejestrowane.
Aby to włączyć, postępuj zgodnie z instrukcjami w sekcji "Pliki transkrypcyjne" dokumentacji, wybierając "Module Logging" zamiast "Powershell Transcription".
Aby wyświetlić ostatnie 15 zdarzeń z dzienników PowersShell, możesz wykonać:
Pełny zapis aktywności i zawartości wykonania skryptu jest rejestrowany, zapewniając, że każdy blok kodu jest dokumentowany w trakcie jego działania. Proces ten zachowuje kompleksowy ślad audytowy każdej aktywności, cenny dla forensyki i analizy złośliwego zachowania. Dokumentując wszystkie aktywności w momencie wykonania, dostarczane są szczegółowe informacje na temat procesu.
Zdarzenia logowania dla Bloku Skryptu można znaleźć w Podglądzie zdarzeń systemu Windows pod ścieżką: Dzienniki aplikacji i usług > Microsoft > Windows > PowerShell > Operacyjny. Aby wyświetlić ostatnie 20 zdarzeń, możesz użyć:
Możesz skompromitować system, jeśli aktualizacje nie są żądane za pomocą httpS, lecz http.
Zaczynasz od sprawdzenia, czy sieć używa aktualizacji WSUS bez SSL, uruchamiając następujące:
Jeśli otrzymasz odpowiedź taką jak:
A jeśli HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer
jest równe 1
.
Wtedy, jest to podatne na atak. Jeśli ostatni rejestr jest równy 0, to wpis WSUS zostanie zignorowany.
Aby wykorzystać te luki, możesz użyć narzędzi takich jak: Wsuxploit, pyWSUS - są to zbrojne skrypty exploitów MiTM do wstrzykiwania 'fałszywych' aktualizacji do ruchu WSUS bez SSL.
Przeczytaj badania tutaj:
WSUS CVE-2020-1013
Przeczytaj pełny raport tutaj. Zasadniczo, to jest wada, którą wykorzystuje ten błąd:
Jeśli mamy możliwość modyfikacji naszego lokalnego proxy użytkownika, a aktualizacje Windows używają proxy skonfigurowanego w ustawieniach Internet Explorera, to mamy moc uruchomienia PyWSUS lokalnie, aby przechwycić nasz własny ruch i uruchomić kod jako podwyższony użytkownik na naszym zasobie.
Ponadto, ponieważ usługa WSUS używa ustawień bieżącego użytkownika, będzie również korzystać z jego magazynu certyfikatów. Jeśli wygenerujemy certyfikat samopodpisany dla nazwy hosta WSUS i dodamy ten certyfikat do magazynu certyfikatów bieżącego użytkownika, będziemy w stanie przechwycić zarówno ruch WSUS HTTP, jak i HTTPS. WSUS nie używa mechanizmów podobnych do HSTS, aby wdrożyć walidację typu trust-on-first-use na certyfikacie. Jeśli przedstawiony certyfikat jest zaufany przez użytkownika i ma poprawną nazwę hosta, zostanie zaakceptowany przez usługę.
Możesz wykorzystać tę lukę, używając narzędzia WSUSpicious (gdy zostanie uwolnione).
Luka w eskalacji uprawnień lokalnych istnieje w środowiskach domenowych Windows w określonych warunkach. Warunki te obejmują środowiska, w których podpisywanie LDAP nie jest egzekwowane, użytkownicy posiadają prawa do samodzielnego konfigurowania Resource-Based Constrained Delegation (RBCD) oraz możliwość tworzenia komputerów w domenie. Ważne jest, aby zauważyć, że te wymagania są spełnione przy użyciu domyślnych ustawień.
Znajdź exploit w https://github.com/Dec0ne/KrbRelayUp
Aby uzyskać więcej informacji na temat przebiegu ataku, sprawdź https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/
Jeśli te 2 rejestry są włączone (wartość to 0x1), to użytkownicy o dowolnych uprawnieniach mogą instalować (wykonywać) pliki *.msi
jako NT AUTHORITY\SYSTEM.
Jeśli masz sesję meterpreter, możesz zautomatyzować tę technikę, używając modułu exploit/windows/local/always_install_elevated
Użyj polecenia Write-UserAddMSI
z power-up, aby utworzyć w bieżącym katalogu binarny plik MSI systemu Windows w celu eskalacji uprawnień. Ten skrypt zapisuje wstępnie skompilowany instalator MSI, który prosi o dodanie użytkownika/grupy (więc będziesz potrzebować dostępu GIU):
Just execute the created binary to escalate privileges.
Przeczytaj ten samouczek, aby dowiedzieć się, jak stworzyć opakowanie MSI za pomocą tych narzędzi. Zauważ, że możesz opakować plik ".bat", jeśli tylko chcesz wykonać linie poleceń.
MSI WrapperWygeneruj za pomocą Cobalt Strike lub Metasploit nowy ładunek TCP EXE Windows w C:\privesc\beacon.exe
Otwórz Visual Studio, wybierz Utwórz nowy projekt i wpisz "installer" w polu wyszukiwania. Wybierz projekt Setup Wizard i kliknij Dalej.
Nadaj projektowi nazwę, na przykład AlwaysPrivesc, użyj C:\privesc
jako lokalizacji, wybierz umieść rozwiązanie i projekt w tym samym katalogu, a następnie kliknij Utwórz.
Klikaj Dalej, aż dojdziesz do kroku 3 z 4 (wybierz pliki do dołączenia). Kliknij Dodaj i wybierz ładunek Beacon, który właśnie wygenerowałeś. Następnie kliknij Zakończ.
Podświetl projekt AlwaysPrivesc w Eksploratorze rozwiązań i w Właściwościach zmień TargetPlatform z x86 na x64.
Istnieją inne właściwości, które możesz zmienić, takie jak Autor i Producent, co może sprawić, że zainstalowana aplikacja będzie wyglądać bardziej wiarygodnie.
Kliknij prawym przyciskiem myszy na projekt i wybierz Widok > Akcje niestandardowe.
Kliknij prawym przyciskiem myszy na Instaluj i wybierz Dodaj akcję niestandardową.
Kliknij dwukrotnie na Folder aplikacji, wybierz swój plik beacon.exe i kliknij OK. To zapewni, że ładunek beacon zostanie wykonany, gdy instalator zostanie uruchomiony.
W Właściwościach akcji niestandardowej zmień Run64Bit na True.
Na koniec zbuduj to.
Jeśli pojawi się ostrzeżenie File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'
, upewnij się, że ustawiłeś platformę na x64.
Aby wykonać instalację złośliwego pliku .msi
w tle:
Aby wykorzystać tę lukę, możesz użyć: exploit/windows/local/always_install_elevated
Te ustawienia decydują o tym, co jest rejestrowane, więc powinieneś zwrócić uwagę
Windows Event Forwarding, warto wiedzieć, dokąd są wysyłane logi
LAPS jest zaprojektowany do zarządzania lokalnymi hasłami administratorów, zapewniając, że każde hasło jest unikalne, losowe i regularnie aktualizowane na komputerach dołączonych do domeny. Te hasła są bezpiecznie przechowywane w Active Directory i mogą być dostępne tylko dla użytkowników, którzy otrzymali wystarczające uprawnienia poprzez ACL, co pozwala im na przeglądanie lokalnych haseł administratorów, jeśli są do tego upoważnieni.
LAPSJeśli jest aktywne, hasła w postaci czystego tekstu są przechowywane w LSASS (Local Security Authority Subsystem Service). Więcej informacji o WDigest na tej stronie.
Począwszy od Windows 8.1, Microsoft wprowadził ulepszoną ochronę dla Lokalnej Władzy Bezpieczeństwa (LSA), aby zablokować próby nieufnych procesów do odczytu jej pamięci lub wstrzykiwania kodu, co dodatkowo zabezpiecza system. Więcej informacji o Ochronie LSA tutaj.
Credential Guard został wprowadzony w Windows 10. Jego celem jest ochrona poświadczeń przechowywanych na urządzeniu przed zagrożeniami takimi jak ataki pass-the-hash. | Więcej informacji o Credentials Guard tutaj.
Poświadczenia domeny są uwierzytelniane przez Lokalną Władzę Bezpieczeństwa (LSA) i wykorzystywane przez komponenty systemu operacyjnego. Gdy dane logowania użytkownika są uwierzytelniane przez zarejestrowany pakiet zabezpieczeń, poświadczenia domeny dla użytkownika są zazwyczaj ustanawiane. Więcej informacji o poświadczeniach podręcznych tutaj.
Powinieneś sprawdzić, czy którakolwiek z grup, do których należysz, ma interesujące uprawnienia.
Jeśli należysz do jakiejś grupy uprzywilejowanej, możesz być w stanie podnieść uprawnienia. Dowiedz się o grupach uprzywilejowanych i jak je nadużywać, aby podnieść uprawnienia tutaj:
Privileged GroupsDowiedz się więcej o tym, czym jest token na tej stronie: Windows Tokens. Sprawdź następującą stronę, aby dowiedzieć się o interesujących tokenach i jak je nadużywać:
Abusing TokensPrzede wszystkim, lista procesów sprawdza hasła w linii poleceń procesu. Sprawdź, czy możesz nadpisać jakiś działający plik binarny lub czy masz uprawnienia do zapisu w folderze binarnym, aby wykorzystać możliwe ataki DLL Hijacking:
Zawsze sprawdzaj, czy działają możliwe debuggery electron/cef/chromium; możesz je wykorzystać do eskalacji uprawnień.
Sprawdzanie uprawnień binarnych procesów
Sprawdzanie uprawnień folderów binarnych procesów (DLL Hijacking)
Możesz utworzyć zrzut pamięci działającego procesu za pomocą procdump z sysinternals. Usługi takie jak FTP mają poświadczenia w postaci czystego tekstu w pamięci, spróbuj zrzucić pamięć i odczytać poświadczenia.
Aplikacje działające jako SYSTEM mogą umożliwić użytkownikowi uruchomienie CMD lub przeglądanie katalogów.
Przykład: "Pomoc i wsparcie systemu Windows" (Windows + F1), wyszukaj "wiersz polecenia", kliknij "Kliknij, aby otworzyć Wiersz polecenia"
Uzyskaj listę usług:
Możesz użyć sc, aby uzyskać informacje o usłudze
Zaleca się posiadanie binarnego accesschk z Sysinternals, aby sprawdzić wymagany poziom uprawnień dla każdej usługi.
Zaleca się sprawdzenie, czy "Użytkownicy uwierzytelnieni" mogą modyfikować jakąkolwiek usługę:
Możesz pobrać accesschk.exe dla XP stąd
Jeśli otrzymujesz ten błąd (na przykład z SSDPSRV):
Błąd systemu 1058 wystąpił. Usluga nie może zostać uruchomiona, ponieważ jest wyłączona lub nie ma z nią powiązanych włączonych urządzeń.
Możesz ją włączyć używając
Weź pod uwagę, że usługa upnphost zależy od SSDPSRV, aby działać (dla XP SP1)
Innym obejściem tego problemu jest uruchomienie:
W scenariuszu, w którym grupa "Użytkownicy uwierzytelnieni" posiada SERVICE_ALL_ACCESS do usługi, możliwa jest modyfikacja wykonywalnego pliku binarnego usługi. Aby zmodyfikować i wykonać sc:
Uprawnienia mogą być eskalowane poprzez różne uprawnienia:
SERVICE_CHANGE_CONFIG: Umożliwia rekonfigurację binarnego pliku usługi.
WRITE_DAC: Umożliwia rekonfigurację uprawnień, co prowadzi do możliwości zmiany konfiguracji usługi.
WRITE_OWNER: Zezwala na przejęcie własności i rekonfigurację uprawnień.
GENERIC_WRITE: Dziedziczy zdolność do zmiany konfiguracji usługi.
GENERIC_ALL: Również dziedziczy zdolność do zmiany konfiguracji usługi.
Do wykrywania i wykorzystania tej podatności można wykorzystać exploit/windows/local/service_permissions.
Sprawdź, czy możesz zmodyfikować binarny plik, który jest wykonywany przez usługę lub czy masz uprawnienia do zapisu w folderze, w którym znajduje się binarny plik (DLL Hijacking). Możesz uzyskać każdy binarny plik, który jest wykonywany przez usługę, używając wmic (nie w system32) i sprawdzić swoje uprawnienia za pomocą icacls:
Możesz również użyć sc i icacls:
Powinieneś sprawdzić, czy możesz modyfikować jakikolwiek rejestr usług. Możesz sprawdzić swoje uprawnienia do rejestru usług wykonując:
Należy sprawdzić, czy Authenticated Users lub NT AUTHORITY\INTERACTIVE posiadają uprawnienia FullControl
. Jeśli tak, binarny plik wykonywany przez usługę może zostać zmieniony.
Aby zmienić ścieżkę binarnego pliku wykonywanego:
Jeśli masz to uprawnienie w rejestrze, oznacza to, że możesz tworzyć podrejestry z tego. W przypadku usług Windows jest to wystarczające do wykonania dowolnego kodu:
AppendData/AddSubdirectory permission over service registryJeśli ścieżka do pliku wykonywalnego nie jest w cudzysłowach, Windows spróbuje wykonać każdy fragment przed spacją.
Na przykład, dla ścieżki C:\Program Files\Some Folder\Service.exe Windows spróbuje wykonać:
Lista wszystkich niecytowanych ścieżek usług, z wyłączeniem tych należących do wbudowanych usług systemu Windows:
Możesz wykryć i wykorzystać tę lukę za pomocą metasploit: exploit/windows/local/trusted\_service\_path
Możesz ręcznie stworzyć binarny plik usługi za pomocą metasploit:
Windows pozwala użytkownikom określić działania, które mają być podjęte, jeśli usługa zawiedzie. Ta funkcja może być skonfigurowana, aby wskazywać na binarny plik. Jeśli ten plik binarny jest wymienny, eskalacja uprawnień może być możliwa. Więcej szczegółów można znaleźć w oficjalnej dokumentacji.
Sprawdź uprawnienia plików binarnych (może uda ci się nadpisać jeden i eskalować uprawnienia) oraz folderów (DLL Hijacking).
Sprawdź, czy możesz zmodyfikować jakiś plik konfiguracyjny, aby odczytać jakiś specjalny plik, lub czy możesz zmodyfikować jakiś plik binarny, który będzie wykonywany przez konto Administratora (schedtasks).
Sposobem na znalezienie słabych uprawnień do folderów/plików w systemie jest:
Sprawdź, czy możesz nadpisać rejestr lub binarny plik, który będzie wykonywany przez innego użytkownika. Przeczytaj następującą stronę, aby dowiedzieć się więcej o interesujących lokacjach autorun do eskalacji uprawnień:
Privilege Escalation with AutorunsSzukaj możliwych dziwnych/wrażliwych sterowników od trzecich stron.
Jeśli masz uprawnienia do zapisu w folderze znajdującym się na PATH, możesz być w stanie przejąć DLL ładowany przez proces i eskalować uprawnienia.
Sprawdź uprawnienia wszystkich folderów znajdujących się na PATH:
Aby uzyskać więcej informacji na temat tego, jak wykorzystać tę kontrolę:
Writable Sys Path +Dll Hijacking PrivescSprawdź inne znane komputery zakodowane w pliku hosts
Sprawdź ograniczone usługi z zewnątrz
Sprawdź tę stronę w celu uzyskania poleceń związanych z zaporą (lista zasad, tworzenie zasad, wyłączanie, wyłączanie...)
Więcej poleceń do enumeracji sieci tutaj
Binary bash.exe
można również znaleźć w C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe
Jeśli uzyskasz dostęp do użytkownika root, możesz nasłuchiwać na dowolnym porcie (za pierwszym razem, gdy użyjesz nc.exe
do nasłuchiwania na porcie, zapyta przez GUI, czy nc
powinien być dozwolony przez zaporę).
Aby łatwo uruchomić bash jako root, możesz spróbować --default-user root
Możesz przeszukać system plików WSL
w folderze C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\
Z https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault Skarbiec Windows przechowuje poświadczenia użytkowników dla serwerów, stron internetowych i innych programów, które Windows może automatycznie logować użytkowników. Na pierwszy rzut oka może się wydawać, że użytkownicy mogą przechowywać swoje poświadczenia do Facebooka, Twittera, Gmaila itp., aby automatycznie logować się przez przeglądarki. Ale tak nie jest.
Skarbiec Windows przechowuje poświadczenia, które Windows może automatycznie logować użytkowników, co oznacza, że każda aplikacja Windows, która potrzebuje poświadczeń do uzyskania dostępu do zasobu (serwera lub strony internetowej) może skorzystać z tego Menedżera poświadczeń i Skarbca Windows oraz użyć dostarczonych poświadczeń zamiast tego, aby użytkownicy wprowadzali nazwę użytkownika i hasło za każdym razem.
O ile aplikacje nie współdziałają z Menedżerem poświadczeń, nie sądzę, aby mogły używać poświadczeń dla danego zasobu. Dlatego, jeśli twoja aplikacja chce skorzystać ze skarbca, powinna w jakiś sposób skomunikować się z menedżerem poświadczeń i zażądać poświadczeń dla tego zasobu z domyślnego skarbca.
Użyj cmdkey
, aby wyświetlić zapisane poświadczenia na maszynie.
Następnie możesz użyć runas
z opcją /savecred
, aby użyć zapisanych poświadczeń. Poniższy przykład wywołuje zdalny plik binarny za pośrednictwem udziału SMB.
Używanie runas
z podanym zestawem poświadczeń.
Zauważ, że mimikatz, lazagne, credentialfileview, VaultPasswordView lub z Empire Powershells module.
Interfejs API Ochrony Danych (DPAPI) zapewnia metodę symetrycznego szyfrowania danych, głównie używaną w systemie operacyjnym Windows do symetrycznego szyfrowania asymetrycznych kluczy prywatnych. To szyfrowanie wykorzystuje sekret użytkownika lub systemu, aby znacząco przyczynić się do entropii.
DPAPI umożliwia szyfrowanie kluczy za pomocą klucza symetrycznego, który jest pochodną sekretów logowania użytkownika. W scenariuszach związanych z szyfrowaniem systemu wykorzystuje sekrety uwierzytelniania domeny systemu.
Szyfrowane klucze RSA użytkownika, przy użyciu DPAPI, są przechowywane w katalogu %APPDATA%\Microsoft\Protect\{SID}
, gdzie {SID}
reprezentuje Identifikator Bezpieczeństwa użytkownika. Klucz DPAPI, współlokalizowany z kluczem głównym, który chroni prywatne klucze użytkownika w tym samym pliku, zazwyczaj składa się z 64 bajtów losowych danych. (Ważne jest, aby zauważyć, że dostęp do tego katalogu jest ograniczony, co uniemożliwia wyświetlenie jego zawartości za pomocą polecenia dir
w CMD, chociaż można go wyświetlić za pomocą PowerShell).
Możesz użyć modułu mimikatz dpapi::masterkey
z odpowiednimi argumentami (/pvk
lub /rpc
), aby go odszyfrować.
Pliki z poświadczeniami chronione hasłem głównym zazwyczaj znajdują się w:
Możesz użyć mimikatz module dpapi::cred
z odpowiednim /masterkey
, aby odszyfrować.
Możesz wyodrębnić wiele DPAPI masterkeys z pamięci za pomocą modułu sekurlsa::dpapi
(jeśli masz uprawnienia root).
Poświadczenia PowerShell są często używane do skryptowania i zadań automatyzacji jako sposób na wygodne przechowywanie zaszyfrowanych poświadczeń. Poświadczenia są chronione za pomocą DPAPI, co zazwyczaj oznacza, że mogą być odszyfrowane tylko przez tego samego użytkownika na tym samym komputerze, na którym zostały utworzone.
Aby odszyfrować poświadczenia PS z pliku, który je zawiera, możesz to zrobić:
Możesz je znaleźć w HKEY_USERS\<SID>\Software\Microsoft\Terminal Server Client\Servers\
i w HKCU\Software\Microsoft\Terminal Server Client\Servers\
Użyj modułu Mimikatz dpapi::rdg
z odpowiednim /masterkey
, aby odszyfrować dowolne pliki .rdg
Możesz wyodrębnić wiele kluczy głównych DPAPI z pamięci za pomocą modułu Mimikatz sekurlsa::dpapi
Ludzie często używają aplikacji StickyNotes na stacjach roboczych z systemem Windows, aby zapisywać hasła i inne informacje, nie zdając sobie sprawy, że jest to plik bazy danych. Plik ten znajduje się w C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite
i zawsze warto go przeszukać i zbadać.
Zauważ, że aby odzyskać hasła z AppCmd.exe, musisz być administratorem i działać na wysokim poziomie integralności.
AppCmd.exe znajduje się w katalogu %systemroot%\system32\inetsrv\
.
Jeśli ten plik istnieje, to możliwe, że skonfigurowano jakieś poświadczenia, które można odzyskać.
Ten kod został wyodrębniony z PowerUP:
Sprawdź, czy C:\Windows\CCM\SCClient.exe
istnieje.
Instalatory są uruchamiane z uprawnieniami SYSTEM, wiele z nich jest podatnych na DLL Sideloading (Info from https://github.com/enjoiz/Privesc).
Prywatne klucze SSH mogą być przechowywane w kluczu rejestru HKCU\Software\OpenSSH\Agent\Keys
, więc powinieneś sprawdzić, czy znajduje się tam coś interesującego:
Jeśli znajdziesz jakikolwiek wpis w tej ścieżce, prawdopodobnie będzie to zapisany klucz SSH. Jest on przechowywany w zaszyfrowanej formie, ale można go łatwo odszyfrować za pomocą https://github.com/ropnop/windows_sshagent_extract. Więcej informacji na temat tej techniki tutaj: https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/
Jeśli usługa ssh-agent
nie działa i chcesz, aby uruchamiała się automatycznie przy starcie, uruchom:
Wygląda na to, że ta technika nie jest już ważna. Próbowałem utworzyć klucze ssh, dodać je za pomocą ssh-add
i zalogować się przez ssh do maszyny. Rejestr HKCU\Software\OpenSSH\Agent\Keys nie istnieje, a procmon nie zidentyfikował użycia dpapi.dll
podczas uwierzytelniania klucza asymetrycznego.
Możesz również wyszukiwać te pliki za pomocą metasploit: post/windows/gather/enum_unattend
Przykładowa zawartość:
Szukaj pliku o nazwie SiteList.xml
Funkcja, która wcześniej była dostępna, pozwalała na wdrażanie niestandardowych lokalnych kont administratorów na grupie maszyn za pomocą Preferencji Zasad Grupy (GPP). Jednak ta metoda miała istotne luki w zabezpieczeniach. Po pierwsze, Obiekty Zasad Grupy (GPO), przechowywane jako pliki XML w SYSVOL, mogły być dostępne dla każdego użytkownika domeny. Po drugie, hasła w tych GPP, szyfrowane za pomocą AES256 przy użyciu publicznie udokumentowanego domyślnego klucza, mogły być odszyfrowane przez każdego uwierzytelnionego użytkownika. Stanowiło to poważne ryzyko, ponieważ mogło pozwolić użytkownikom na uzyskanie podwyższonych uprawnień.
Aby złagodzić to ryzyko, opracowano funkcję skanującą lokalnie pamiętane pliki GPP zawierające pole "cpassword", które nie jest puste. Po znalezieniu takiego pliku, funkcja odszyfrowuje hasło i zwraca niestandardowy obiekt PowerShell. Obiekt ten zawiera szczegóły dotyczące GPP oraz lokalizację pliku, co ułatwia identyfikację i usunięcie tej luki w zabezpieczeniach.
Szukaj w C:\ProgramData\Microsoft\Group Policy\history
lub w C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history (przed W Vista) tych plików:
Groups.xml
Services.xml
Scheduledtasks.xml
DataSources.xml
Printers.xml
Drives.xml
Aby odszyfrować cPassword:
Używanie crackmapexec do uzyskania haseł:
Przykład web.config z poświadczeniami:
Możesz zawsze poprosić użytkownika o wprowadzenie jego danych logowania lub nawet danych logowania innego użytkownika, jeśli uważasz, że może je znać (zauważ, że bezpośrednie pytanie klienta o dane logowania jest naprawdę ryzykowne):
Znane pliki, które jakiś czas temu zawierały hasła w czystym tekście lub Base64
Przeszukaj wszystkie proponowane pliki:
Powinieneś również sprawdzić Kosz, aby poszukać w nim poświadczeń.
Aby odzyskać hasła zapisane przez różne programy, możesz użyć: http://www.nirsoft.net/password_recovery_tools.html
Inne możliwe klucze rejestru z poświadczeniami
Ekstrakcja kluczy openssh z rejestru.
Powinieneś sprawdzić bazy danych, w których przechowywane są hasła z Chrome lub Firefox. Sprawdź również historię, zakładki i ulubione przeglądarek, ponieważ może tam być przechowywanych kilka haseł.
Narzędzia do ekstrakcji haseł z przeglądarek:
Mimikatz: dpapi::chrome
Model obiektów komponentów (COM) to technologia wbudowana w system operacyjny Windows, która umożliwia komunikację między komponentami oprogramowania różnych języków. Każdy komponent COM jest identyfikowany za pomocą identyfikatora klasy (CLSID), a każdy komponent udostępnia funkcjonalność za pomocą jednego lub więcej interfejsów, identyfikowanych za pomocą identyfikatorów interfejsów (IIDs).
Klasy i interfejsy COM są definiowane w rejestrze pod HKEY_CLASSES_ROOT\CLSID oraz HKEY_CLASSES_ROOT\Interface odpowiednio. Ten rejestr jest tworzony przez połączenie HKEY_LOCAL_MACHINE\Software\Classes + HKEY_CURRENT_USER\Software\Classes = HKEY_CLASSES_ROOT.
Wewnątrz CLSID-ów tego rejestru możesz znaleźć podrzędny rejestr InProcServer32, który zawiera wartość domyślną wskazującą na DLL oraz wartość o nazwie ThreadingModel, która może być Apartment (Jednowątkowy), Free (Wielowątkowy), Both (Jedno- lub wielowątkowy) lub Neutral (Neutralny wątek).
W zasadzie, jeśli możesz nadpisać dowolne z DLL, które mają być wykonane, możesz eskalować uprawnienia, jeśli ta DLL ma być wykonana przez innego użytkownika.
Aby dowiedzieć się, jak atakujący wykorzystują przejęcie COM jako mechanizm utrzymywania, sprawdź:
COM HijackingSzukaj w zawartości plików
Szukaj pliku o określonej nazwie pliku
Szukaj w rejestrze nazw kluczy i haseł
MSF-Credentials Plugin to wtyczka msf, którą stworzyłem, aby automatycznie wykonywać każdy moduł POST metasploit, który wyszukuje dane uwierzytelniające wewnątrz ofiary. Winpeas automatycznie wyszukuje wszystkie pliki zawierające hasła wymienione na tej stronie. Lazagne to kolejne świetne narzędzie do ekstrakcji haseł z systemu.
Narzędzie SessionGopher wyszukuje sesje, nazwy użytkowników i hasła różnych narzędzi, które zapisują te dane w postaci czystego tekstu (PuTTY, WinSCP, FileZilla, SuperPuTTY i RDP)
Wyobraź sobie, że proces działający jako SYSTEM otwiera nowy proces (OpenProcess()
) z pełnym dostępem. Ten sam proces tworzy również nowy proces (CreateProcess()
) z niskimi uprawnieniami, ale dziedziczy wszystkie otwarte uchwyty głównego procesu.
Wtedy, jeśli masz pełny dostęp do procesu o niskich uprawnieniach, możesz przejąć otwarty uchwyt do procesu z uprawnieniami, który został stworzony za pomocą OpenProcess()
i wstrzyknąć shellcode.
Przeczytaj ten przykład, aby uzyskać więcej informacji na temat jak wykrywać i wykorzystywać tę lukę.
Przeczytaj ten inny post, aby uzyskać bardziej szczegółowe wyjaśnienie, jak testować i nadużywać więcej otwartych uchwytów procesów i wątków dziedziczonych z różnymi poziomami uprawnień (nie tylko pełnym dostępem).
Segmenty pamięci współdzielonej, zwane rurociągami, umożliwiają komunikację procesów i transfer danych.
Windows oferuje funkcję zwaną Named Pipes, która pozwala niepowiązanym procesom na dzielenie się danymi, nawet przez różne sieci. Przypomina to architekturę klient/serwer, z rolami zdefiniowanymi jako serwer rurociągu i klient rurociągu.
Gdy dane są wysyłane przez rurociąg przez klienta, serwer, który skonfigurował rurociąg, ma możliwość przyjęcia tożsamości klienta, zakładając, że ma niezbędne prawa SeImpersonate. Identyfikacja uprzywilejowanego procesu, który komunikuje się przez rurociąg, którego możesz naśladować, stwarza możliwość uzyskania wyższych uprawnień poprzez przyjęcie tożsamości tego procesu, gdy tylko wchodzi w interakcję z rurociągiem, który utworzyłeś. Instrukcje dotyczące przeprowadzenia takiego ataku można znaleźć w tutaj i tutaj.
Ponadto następujące narzędzie pozwala na przechwycenie komunikacji rurociągu za pomocą narzędzia takiego jak burp: https://github.com/gabriel-sztejnworcel/pipe-intercept a to narzędzie pozwala na wylistowanie i zobaczenie wszystkich rurociągów w celu znalezienia privesc https://github.com/cyberark/PipeViewer
Podczas uzyskiwania powłoki jako użytkownik mogą być zaplanowane zadania lub inne procesy, które przekazują dane uwierzytelniające w wierszu poleceń. Poniższy skrypt przechwytuje wiersze poleceń procesów co dwie sekundy i porównuje bieżący stan z poprzednim stanem, wypisując wszelkie różnice.
Jeśli masz dostęp do interfejsu graficznego (poprzez konsolę lub RDP) i UAC jest włączone, w niektórych wersjach systemu Microsoft Windows możliwe jest uruchomienie terminala lub innego procesu, takiego jak "NT\AUTHORITY SYSTEM", z konta użytkownika bez uprawnień.
Umożliwia to jednoczesne podniesienie uprawnień i ominięcie UAC przy użyciu tej samej luki. Dodatkowo, nie ma potrzeby instalowania czegokolwiek, a binarny plik używany w trakcie procesu jest podpisany i wydany przez Microsoft.
Niektóre z dotkniętych systemów to:
Aby wykorzystać tę lukę, należy wykonać następujące kroki:
Masz wszystkie niezbędne pliki i informacje w następującym repozytorium GitHub:
https://github.com/jas502n/CVE-2019-1388
Przeczytaj to, aby dowiedzieć się o poziomach integralności:
Integrity LevelsNastępnie przeczytaj to, aby dowiedzieć się o UAC i omijaniu UAC:
UAC - User Account ControlJeśli już działasz na procesie High Integrity, przejście do SYSTEM może być łatwe, po prostu tworząc i uruchamiając nową usługę:
Z procesu o wysokiej integralności możesz spróbować włączyć wpisy rejestru AlwaysInstallElevated i zainstalować reverse shell używając opakowania .msi. Więcej informacji na temat zaangażowanych kluczy rejestru i jak zainstalować pakiet .msi tutaj.
Możesz znaleźć kod tutaj.
Jeśli masz te uprawnienia tokena (prawdopodobnie znajdziesz to w już istniejącym procesie o wysokiej integralności), będziesz w stanie otworzyć prawie każdy proces (niechronione procesy) z uprawnieniami SeDebug, skopiować token procesu i stworzyć dowolny proces z tym tokenem. Używając tej techniki zazwyczaj wybiera się dowolny proces działający jako SYSTEM z wszystkimi uprawnieniami tokena (tak, możesz znaleźć procesy SYSTEM bez wszystkich uprawnień tokena). Możesz znaleźć przykład kodu wykonującego proponowaną technikę tutaj.
Ta technika jest używana przez meterpreter do eskalacji w getsystem
. Technika polega na utworzeniu rury, a następnie utworzeniu/wykorzystaniu usługi do pisania na tej rurze. Następnie serwer, który utworzył rurę używając uprawnienia SeImpersonate
, będzie w stanie podmienić token klienta rury (usługę) uzyskując uprawnienia SYSTEM.
Jeśli chcesz dowiedzieć się więcej o nazwanych rurach, powinieneś to przeczytać.
Jeśli chcesz przeczytać przykład jak przejść z wysokiej integralności do Systemu używając nazwanych rur, powinieneś to przeczytać.
Jeśli uda ci się przechwycić dll ładowany przez proces działający jako SYSTEM, będziesz w stanie wykonać dowolny kod z tymi uprawnieniami. Dlatego Dll Hijacking jest również przydatny w tego rodzaju eskalacji uprawnień, a co więcej, jest dużo łatwiejszy do osiągnięcia z procesu o wysokiej integralności, ponieważ będzie miał uprawnienia do zapisu w folderach używanych do ładowania dll. Możesz dowiedzieć się więcej o Dll hijacking tutaj.
Przeczytaj: https://github.com/itm4n/FullPowers
Najlepsze narzędzie do wyszukiwania wektorów eskalacji uprawnień lokalnych w Windows: WinPEAS
PS
PrivescCheck
PowerSploit-Privesc(PowerUP) -- Sprawdź błędne konfiguracje i wrażliwe pliki (sprawdź tutaj). Wykryto.
JAWS -- Sprawdź niektóre możliwe błędne konfiguracje i zbierz informacje (sprawdź tutaj).
privesc -- Sprawdź błędne konfiguracje
SessionGopher -- Ekstrahuje informacje o zapisanych sesjach PuTTY, WinSCP, SuperPuTTY, FileZilla i RDP. Użyj -Thorough w lokalnym.
Invoke-WCMDump -- Ekstrahuje dane uwierzytelniające z Menedżera poświadczeń. Wykryto.
DomainPasswordSpray -- Rozprzestrzenia zebrane hasła w domenie
Inveigh -- Inveigh to narzędzie do spoofingu PowerShell ADIDNS/LLMNR/mDNS/NBNS i man-in-the-middle.
WindowsEnum -- Podstawowa enumeracja privesc w Windows
Sherlock ~~~~ -- Szukaj znanych luk w privesc (DEPRECATED dla Watson)
WINspect -- Lokalne kontrole (Wymaga praw administratora)
Exe
Watson -- Szukaj znanych luk w privesc (wymaga kompilacji przy użyciu VisualStudio) (wstępnie skompilowane)
SeatBelt -- Enumeruje hosta w poszukiwaniu błędnych konfiguracji (bardziej narzędzie do zbierania informacji niż privesc) (wymaga kompilacji) (wstępnie skompilowane)
LaZagne -- Ekstrahuje dane uwierzytelniające z wielu programów (wstępnie skompilowane exe w github)
SharpUP -- Port PowerUp do C#
Beroot ~~~~ -- Sprawdź błędne konfiguracje (wykonywalny plik wstępnie skompilowany w github). Nie zalecane. Nie działa dobrze w Win10.
Windows-Privesc-Check -- Sprawdź możliwe błędne konfiguracje (exe z Pythona). Nie zalecane. Nie działa dobrze w Win10.
Bat
winPEASbat -- Narzędzie stworzone na podstawie tego posta (nie wymaga accesschk do prawidłowego działania, ale może go używać).
Lokalne
Windows-Exploit-Suggester -- Odczytuje wynik systeminfo i rekomenduje działające exploity (lokalny python) Windows Exploit Suggester Next Generation -- Odczytuje wynik systeminfo i rekomenduje działające exploity (lokalny python)
Meterpreter
multi/recon/local_exploit_suggestor
Musisz skompilować projekt używając odpowiedniej wersji .NET (zobacz to). Aby zobaczyć zainstalowaną wersję .NET na hoście ofiary, możesz to zrobić:
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)