Evil-WinRM: The ultimate WinRM shell for hacking/pentesting
2022-8-9 18:15:27 Author: hakin9.org(查看原文) 阅读量:177 收藏

Description & Purpose

This shell 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.

It is based mainly on the WinRM Ruby library which changed its way to work since its version 2.0. Now instead of using WinRM protocol, it is using PSRP (Powershell Remoting Protocol) for initializing runspace pools as well as creating and processing pipelines.

Features

  • Compatible with Linux and Windows client systems
  • Load in memory Powershell scripts
  • Load in memory dll files bypassing some AVs
  • Load in memory C# (C Sharp) assemblies bypassing some AVs
  • Load x64 payloads generated with awesome donut technique
  • Dynamic AMSI Bypass to avoid AV signatures
  • Pass-the-hash support
  • Kerberos auth support
  • SSL and certificates support
  • Upload and download files showing progress bar
  • List remote machine services without privileges
  • Command History
  • WinRM command completion
  • Local files/directories completion
  • Remote path (files/directories) completion (can be disabled optionally)
  • Colorization on prompt and output messages (can be disabled optionally)
  • Optional logging feature
  • Docker support (prebuilt images available at Dockerhub)
  • Trap capturing to avoid accidental shell exit on Ctrl+C

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] [--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 }
    -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)
    -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

Requirements

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, logger >= 1.4.3, fileutils >= 0.7.2. Depending on your installation method (4 available) 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.

The remote path completion feature will work only if your ruby was compiled enabling the --with-readline-dirflag. This is enabled by default in ruby included on some Linux distributions but not in all. Check the section belowfor more info.

Installation & Quick Start (4 methods)

Method 1. Installation directly as ruby gem (dependencies will be installed automatically on your system)

  • Step 1. Install it (it will install automatically dependencies): gem install evil-winrm
  • Step 2. Ready. Just launch it! ~$ 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

  • Step 1. Install dependencies manually: ~$ sudo gem install winrm winrm-fs colorize stringio
  • Step 2. Clone the repo: git clone https://github.com/Hackplayers/evil-winrm.git
  • Step 3. Ready. Just launch it! ~$ 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)

  • Step 1. Install bundler: gem install bundler
  • Step 2. Clone the repo: git clone https://github.com/Hackplayers/evil-winrm.git
  • Step 3. Install dependencies with bundler: cd evil-winrm && bundle install --path vendor/bundle
  • Step 4. Launch it with 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/'

Method 4. Using Docker

  • Step 1. Launch docker container based on already built 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/'

Documentation

Clear text password

If you don't want to put the password in clear text, you can optionally avoid setting -p argument and the password will be prompted preventing being 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.

Basic commands

  • upload: local files can be auto-completed using tab key.
    • usage: upload local_filename or upload local_filename destination_filename
  • download:
    • usage: 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 a 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.

  • services: list all services showing if there your account has permissions over each one. No administrator permissions are needed to use this feature.
  • menu: load the Invoke-Binary, Dll-Loader and Donut-Loader functions that we will explain below. When a ps1 is loaded all its functions will be shown up.

Load powershell scripts

  • To load a ps1 file you just have to type the name (auto-completion using tab allowed). The scripts must be in the path set at -s the argument. Type menu again and see the loaded functions. Very large files can take a long time to be loaded.

Advanced commands

  • Invoke-Binary: allows .Net assemblies to be executed in memory. The name can be auto-completed using tab key. Arguments for the exe file can be passed comma separated. Example: Invoke-Binary /opt/csharp/Binary.exe 'param1, param2, param3'. The executables must be on the path set at -eargument.

  • Dll-Loader: 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 injecting 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 uses a python module written by Marcello Salvati (byt3bl33d3r). It could be installed using pip: pip3 install donut-shellcode

  • Bypass-4MSI: patchs AMSI protection.
*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

Changelog:

Changelog and project changes can be checked here: CHANGELOG.md

Credits:

Staff:

Hat tip to:

  • Vis0r for his personal support.
  • Alamot for his original code.
  • 3v4Si0N for his awesome dll loader.
  • WinRb All contributors of ruby library.
  • TheWover for his awesome donut tool.
  • byt3bl33d3r for his python library to create donut payloads.
  • Sh11td0wn for inspiration about new features.
  • Borch for his help adding logging feature.
  • Hackplayers for giving a shelter on their github to this software.

Download tool: https://github.com/Hackplayers/evil-winrm


文章来源: https://hakin9.org/evil-winrm-the-ultimate-winrm-shell-for-hacking-pentesting/
如有侵权请联系:admin#unsafe.sh