Evil-WinRM is the ultimate WinRM shell for hacking/pentesting. WinRM (Windows Remote Management) is the Microsoft implementation of WS-Management Protocol. A standard SOAP based protocol that allows hardware and operating systems from different vendors to interoperate. Microsoft included it in their Operating Systems in order to make life easier to system administrators.
This program can be used on any Microsoft Windows Servers with this feature enabled (usually at port 5985), of course only if you have credentials and permissions to use it. So we can say that it could be used in a post-exploitation hacking/pentesting phase.
The purpose of this program is to provide nice and easy-to-use features for hacking. It can be used with legitimate purposes by system administrators as well but the most of its features are focused on hacking/pentesting stuff.
Features
Also Read – SCShell : Fileless Lateral Movement Tool That Relies On ChangeServiceConfigA To Run Command
Help
Usage: evil-winrm -i IP -u USER [-s SCRIPTS_PATH] [-e EXES_PATH] [-P PORT] [-p PASS] [-H HASH] [-U URL] [-S] [-c PUBLIC_KEY_PATH ] [-k PRIVATE_KEY_PATH ] [-r REALM]
-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 }
-s, –scripts PS_SCRIPTS_PATH Powershell scripts local path
-e, –executables EXES_PATH C# executables local path
-i, –ip IP Remote host IP or hostname (required)
-U, –url URL Remote url endpoint (default wsman)
-u, –user USER Username (required if not using kerberos)
-p, –password PASS Password
-H, –hash NTHash NTHash
-P, –port PORT Remote host port (default 5985)
-V, –version Show version
-h, –help Display this help message
Ruby 2.3 or higher is needed. Some ruby gems are needed as well: winrm >=2.3.2
, winrm-fs >=1.3.2
, stringio >=0.0.2
and colorize >=0.8.1
. Depending of your installation method (3 availables) the installation of them could be required to be done manually.
Another important requirement only used for Kerberos auth is to install the Kerberos package used for network authentication.
For some Linux like Debian based (Kali, Parrot, etc.) it is called krb5-user
. For BlackArch it is called krb5
and probably it could be called in a different way for other Linux distributions.
Installation & Quick Start (4 methods)
Method 1. Installation directly as ruby gem (dependencies will be installed automatically on your system)
gem install evil-winrm
~$ evil-winrm -i 192.168.1.100 -u Administrator -p 'MySuperSecr3tPass123!' -s '/home/foo/ps1_scripts/' -e '/home/foo/exe_files/'
Method 2. Git clone and install dependencies on your system manually
~$ 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!' -s '/home/foo/ps1_scripts/' -e '/home/foo/exe_files/'
Method 3. Using bundler (dependencies will not be installed on your system, just to use evil-winrm)
gem install bundler:2.0.2
cd evil-winrm && bundle install --path vendor/bundle
bundle exec evil-winrm.rb -i 192.168.1.100 -u Administrator -p 'MySuperSecr3tPass123!' -s '/home/foo/ps1_scripts/' -e '/home/foo/exe_files/'
Method 4. Using Docker
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/'
Documentation
Clear text password
If you don’t want to put the password in clear text, you can optionally avoid to set -p
argument and the password will be prompted preventing to be shown.
Ipv6
To use IPv6, the address must be added to /etc/hosts. Just put the already set name of the host after -i
argument instead of an IP address.
upload local_filename
or upload local_filename destination_filename
download remote_filename
or download remote_filename destination_filename
Notes about paths (upload/download):
Relative paths are not allowed to use on download/upload. Use filenames on current directory or absolute path.
If you are using Evil-WinRM in a docker environment, bear in mind that all local paths should be at /data
and be pretty sure that you mapped it as a volume in order to be able
to access to downloaded files or to be able to upload files from your
local host O.S.
Invoke-Binary
, l04d3r-LoadDll
, Donut-Loader
and Bypass-4MSI
functions that we will explain below. When a ps1 is loaded all its functions will be shown up.-s
argument. Type menu again and see the loaded functions. Very large files can take a long time to be loaded.Advanced commands
-e
argument.l04d3r-LoadDll: allows loading dll libraries in memory, it is equivalent to: [Reflection.Assembly]::Load([IO.File]::ReadAllBytes("pwn.dll"))
The dll file can be hosted by smb, http or locally. Once it is loaded type menu
, then it is possible to autocomplete all functions.
Donut-Loader: allows to inject x64 payloads generated with awesome donut technique. No need to encode the payload.bin, just generate and inject!
You can use this donut-maker to generate the payload.bin if you don’t use Windows. This script use a python module written by Marcello Salvati (byt3bl33d3r). It could be installed using pip:
pip3 install donut-shellcode
Bypass-4MSI: patchs AMSI protection.
rdate -n <dc_ip>
ticketer.py -dc-ip <dc_ip> -nthash <krbtgt_nthash> -domain-sid <domain_sid> -domain <domain_name> <user>
python ticket_converter.py ticket.kirbi ticket.ccache
export KRB5CCNAME=/foo/var/ticket.ccache
cp ticket.ccache /tmp/krb5cc_0
/etc/krb5.conf
(for linux). Use of this format is important: CONTOSO.COM = { kdc = fooserver.contoso.con }
klist
kdestroy
$colors_enabled
. Set it to false: $colors_enabled = false
Kali Linux 2024.4, the final release of 2024, brings a wide range of updates and…
This Go program applies a lifetime patch to PowerShell to disable ETW (Event Tracing for…
GPOHunter is a comprehensive tool designed to analyze and identify security misconfigurations in Active Directory…
Across small-to-medium enterprises (SMEs) and managed service providers (MSPs), the top priority for cybersecurity leaders…
The free and open-source security platform SecHub, provides a central API to test software with…
Don't worry if there are any bugs in the tool, we will try to fix…