实验环境:https://tryhackme.com/r/room/credharvesting
0x01 凭据收集
本文将讨论如何利用已经获得的AD凭据来进行横向移动以及访问AD环境中的资源的基本知识,以及展示如何获取、重用和模拟用户凭据。
AD凭据收集主要是指攻击者如何获取用户凭据(如登录信息、帐户名和密码),它是一种从目标系统的不同位置(如明文文件、注册表、内存转储等)尝试提取有效凭据信息的技术。
凭据可以以各种不同的形式被我们找到,例如:
- 帐户详细信息(用户名和密码)。
- 密码哈希值(包括NTLM哈希等)。
- 身份验证票据,例如票据授予票据(TGT)、票据授予服务器(TGS)。
- 任何有助于我们登录目标系统的信息(如私钥等)
0x02 凭据访问
凭据访问是指攻击者在被入侵的系统中发现有效凭据并且获得对用户凭据的访问权限,这可以帮助攻击者重用有效凭据或者冒充正常AD用户的身份。凭据访问是攻击者进行内网横向移动和访问其他资源(如其他应用程序或系统)的重要前提步骤。对于攻击者而言,尝试获取合法的用户凭据比使用cve来对目标系统进行漏洞利用更加具有可取之处。
用户凭据可能会被不安全地存储在目标系统中的不同位置:
- Clear-text files:明文文件;
- Database files:数据库文件;
- Memory:内存;
- Password managers:密码管理器;
- Enterprise Vaults:企业保险库;
- Active Directory:活动目录;
- Network Sniffing:网络嗅探。
明文文件
以下是攻击者可能会感兴趣的几种明文文件类型:
- 关于命令的历史文件;
- 配置文件(Web应用程序相关文件、FTP文件...);
- 其他与Windows应用程序(网络浏览器、电子邮件客户端等)相关的文件;
- 备份文件;
- 共享文件和文件夹;
- 注册表;
- 源代码。
以历史命令为例,在目标系统中已经执行过的PowerShell命令会被作为用户配置保存到历史文件中,具体路径如下:
C:\Users\USER\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
对于攻击者而言,检查目标用户正在做什么或者查找与用户相关的敏感信息可能是值得尝试的操作。我们可以尝试寻找我们所感兴趣的信息,例如,下面的命令可用于在目标机器的windows注册表中查找“password”关键字:
reg query HKLM /f password /t REG_SZ /s
#OR
reg query HKCU /f password /t REG_SZ /s
实验:
对目标机器的关键注册表项(HKEY_LOCAL_MACHINE\SYSTEM\THM)查找flag条目所对应的项,然后进注册表寻找其值。
数据库文件
应用程序通常会使用数据库文件来读取或者写入设置、配置或凭据。在Windows操作系统中,数据库文件通常存储在本地,这些文件是我们检索和查找凭据的绝佳目标。
密码管理器
密码管理器是存储和管理用户用于登录本地机器和Internet网站、服务的密码信息的应用程序,由于它处理的是用户的敏感数据,因此密码管理器中的数据必须被安全地存储,以防止攻击者进行未经授权的访问。
关于密码管理器应用程序的示例如下所示:
- 内置密码管理器(Windows);
- 第三方密码管理器,如KeePass、1Password、LastPass等。
在这些密码管理器应用程序中也可能存在一些错误配置和安全漏洞,这将使得攻击者能够尝试访问密码管理器中所存储的数据。在信息枚举阶段,攻击者可以使用各种工具来获取目标机器上的网络浏览器和桌面应用程序所使用的密码管理器应用程序中已存储的敏感数据。
内存转储
操作系统内存是Windows操作系统、用户和其他应用程序所相关的敏感信息的丰富来源。计算机数据会在应用程序运行时或执行过程中被加载到内存中,因此,只有对目标系统具有完全控制权限的管理员用户才能手动访问内存。
以下是会被存储在目标系统内存中的敏感数据的例子,包括:
- 明文形式的凭据;
- 已经缓存的密码;
- AD票据。
AD中的凭据
Active Directory会存储大量与用户、组、计算机等AD对象相关的信息。因此,枚举目标Active Directory环境是红队安全评估的重点之一。虽然活动目录(Active Directory)设计的很安全,但是管理员的一些错误配置可能会使Active Directory容易遭受各种攻击。
以下是一些可能会泄露用户凭据的Active Directory错误配置:
-
用户描述:管理员可能会在新AD用户的描述中设置了密码,并将密码信息留在用户描述属性中,这就使得该帐户容易被攻击者进行未经授权的访问。
-
组策略SYSVOL:通过对存在漏洞的SYSVOL进行利用,攻击者可以使用已泄露的加密密钥来访问管理员帐户。(这部分内容将在下文中具体介绍)
-
NTDS:这是一个数据库文件,该文件会包含AD用户的凭据信息,因此它是攻击者的目标之一。
-
导致AD攻击的其他配置:错误的AD配置会使得相关的AD环境容易受到各种AD攻击,从而造成用户凭据泄露。
实验:
枚举目标AD环境,找到victim(受害者)用户在其描述部分所保存的密码值。
Get-ADUser -Filter * -Properties * | select Name,SamAccountName,Description
0x03 本地凭据
一般情况下,Windows操作系统会提供两种类型的用户帐户:本地和域。本地用户的详细信息会存储在本地Windows文件系统中,而域用户的详细信息则会存储在集中式的Active Directory中。
SAM
SAM是Microsoft Windows的一个系统内置数据库,其中包含了当前机器的本地帐户信息,如用户名和密码等,SAM数据库会以加密格式存储这些帐户详细信息,使它们更加难以被检索;此外,在Windows操作系统运行期间,SAM数据库文件不能被任何用户直接读取和访问。
但是,仍然有多种方法和攻击技巧可以转储Windows机器的SAM数据库文件的内容。
HashDump读SAM
我们可以使用Metasploit Framework内置的hashdump功能来获取SAM数据库文件的内容副本。Metasploit框架会将代码注入到Windows机器的LSASS.exe进程中,从而转储与该进程对应的内存中的哈希值副本。
卷影复制服务读SAM
我们还可以使用Microsoft卷影复制服务来获取SAM文件的内容,这个服务有助于在应用程序对卷进行读写时执行卷备份操作。
具体而言,我们将使用wmic创建一个卷影副本,这需要我们以管理员权限使用命令提示符(CMD)界面来完成,相关步骤如下所示:
- 以管理员权限运行标准的cmd.exe程序。
- 执行wmic命令来创建一个关于C: drive的卷影副本。
- 验证步骤2中所创建的卷影副本是否可用。
- 从我们在步骤2中所创建的卷影副本中复制出SAM数据库文件。
#使用WMIC命令来创建一个关于系统C卷的影子副本
wmic shadowcopy call create Volume='C:\'
上述命令成功执行之后,我们就可以使用vssadmin
(卷影复制服务管理-Volume Shadow Copy Service administrative)命令行工具来列出并确认我们已经创建了关于系统C:
卷的影子副本了:
vssadmin list shadows
上面的输出结果显示我们已经成功地创建了一个关于C:
的卷影副本,其路径如下:\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1
。
如前所述,SAM数据库会使用RC4或AES加密算法来进行加密。为了解密SAM数据库文件,我们需要一个解密密钥,该密钥通常会存储在计算机的本地文件系统中:
c:\Windows\System32\Config\system
将sam(SAM数据库文件)和system(存储了解密密钥的文件)从我们所生成的卷影副本中复制到计算机桌面,然后便可以传输到我们的攻击机。
\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\windows\system32\config\sam C:\users\Administrator\Desktop\sam
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\windows\system32\config\system C:\users\Administrator\Desktop\system
注册表配置单元读SAM
转储SAM数据库内容的另一种方法是通过Windows Registry Hives(Windows注册表配置单元)。Windows注册表会存储一些供Windows服务使用的SAM数据库内容的副本,而我们可以使用reg.exe来保存Windows注册表的值。如前所述,我们仍然需要基于两个文件来获取并解密SAM数据库文件的内容。
管理员权限开cmd执行:
#从本地注册表中保存SAM文件和system文件
reg save HKLM\sam C:\users\Administrator\Desktop\sam-reg
reg save HKLM\system C:\users\Administrator\Desktop\system-reg
之后可以用经典的Impacket中的secretsdump.py提取凭据
secretsdump.py -sam sam-reg -system system-reg LOCAL
注意:如果我们将上述命令的输出结果与使用Hashdump所获得的NTLM哈希值进行比较,那么我们会注意到它们的结果是不同的。
因为SAM文件中的有些帐户是属于Active Directory的,它们的解密密钥并没有存储在我们上面所转储的System文件中;要解密这些AD帐户的凭据信息,我们还需要从Windows中转储SECURITY文件,该文件会包含用于解密Active Directory帐户的密钥。
一旦我们成功获得了目标帐户的NTLM哈希,那么我们就可以尝试使用Hashcat来破解它们,或者可以使用哈希传递(PtH)等技术来模拟这些哈希所对应的用户身份。
mimikatz抓密码
privilege::debug
token::elevate
lsadump::sam
注意:此处我们所获得的Administrator并不是AD中的SID 500所对应的Administrator帐户,而是DSRM(目录服务还原模式)帐户,此帐户可用于启动DC、登录和尝试恢复AD,Windows网络在将Windows Server升级为DC(域控制器)的过程中会提示我们设置此密码。
0x04 LSASS
LSASS
本地安全认证子系统服务(LSASS)是用于处理操作系统安全策略并能在系统上被强制执行的Windows进程,它会验证当前计算机上所登录的用户帐户,并确保该用户所提供的密码、散列和Kerberos票据正确。Windows系统会将凭据存储在LSASS进程中,使用户可以更方便地访问文件共享、SharePoint站点等网络资源,而无需在每次连接时都要求用户输入凭据。
LSASS进程对于红队来说是一个诱人的攻击目标,因为该进程的内存中会存储关于用户帐户的敏感信息。LSASS进程通常可被攻击者用于转储用户凭据,从而进行权限提升、窃取敏感数据或者进行内网横向移动。
作为攻击者,如果我们有目标机器的管理员权限,那么我们就可以尝试转储目标机器的LSASS进程的内存,Windows系统会允许我们创建一个转储文件,该文件是给定进程的快照。我们可以通过访问相关的GUI或者使用命令提示符界面(CMD)来完成LSASS进程内存的转储操作,这种攻击在MITRE ATT&CK框架中定义为“操作系统凭据转储:LSASS内存(T1003)”。
GUI转储
为了使用自带的GUI来转储任何正在运行的Windows进程,我们需要先打开任务管理器,然后在详细信息选项卡中找到所需的进程,右键单击它并选择“创建转储文件”。
在上述转储过程完成之后,目标机器将显示一个弹出消息,其中会包含已经转储的文件的路径,我们可以找到并复制该文件然后将它传输到我们的攻击机以离线提取其中的NTLM哈希值。
注意:如果目标机器的LSASS进程是受保护状态,那么我们在运行上述转储操作时会得到一个错误提示,除非我们成功修改与LSASS进程相关的注册表值。
也可以直接使用mimikatz提取:
privilege::debug
sekurlsa::minidump lsass.DMP
sekurlsa::logonpasswords
系统内部套件转储
如果我们无法使用目标机器的GUI,那么我们也可以尝试使用ProcDump来转储进程,ProcDump是一个可以在命令行界面运行的系统内部进程转储实用程序。
C:\Tools\SysinternalsSuite\procdump.exe -accepteula -ma lsass.exe c:\Tools\Mimikatz\lsass_dump-1.dmp
注意:我们在转储进程时需要写入内容到计算机磁盘,而且因为转储LSASS进程是攻击者常用的一种已知技术,所以,目标计算机上的反病毒软件产品可能会将我们的转储操作标记为恶意;也就是说,在现实环境中转储LSASS进程时,我们可能还需要尝试绕过目标机器上的反病毒程序。
mimikatz转储
我们还可以直接使用Mimikatz工具来提取目标机的lsass.exe进程的内存转储。
LSASS进程是以SYSTEM权限运行的,因此,为了获取到用户的密码哈希值,我们需要具有目标机器的系统权限或者本地管理员权限。即需要以管理员身份运行并打开CMD,然后再执行mimikatz二进制文件。
privilege::debug
sekurlsa::logonpasswords
如果目标LSASS进程是受保护状态,以上命令则无法成功执行
在上述命令的输出结果中,Mimikatz会为我们列出很多关于目标机器的账户信息,我们可以在上面的输出结果中检查Administrator用户的Primary部分,然后我们就能看到管理员用户所对应的NTLM密码哈希。
注意:如果我们要成功获取到目标用户的密码哈希值,那么目标用户(受害者)必须已经登录过目标系统,并且该用户的凭据也已经被目标机所缓存。
受保护的LSASS
在2012年,微软引入了LSA保护机制,它能防止LSASS进程被恶意访问,这能尽量避免攻击者从LSASS进程的相关内存中提取凭据。
我们在针对受保护的LSASS进程执行sekurlsa::logonpasswords
命令时,会收到如下所示的错误结果:
如果我们想要让LSASS进程处于受保护状态,我们可以将注册表中的RunAsPPL DWORD的值修改为1(相关的注册表路径HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
)。
幸运的是,Mimikatz针对此类情况为我们提供mimidrv.sys驱动程序,该程序可以在系统内核级别工作以禁用LSA保护,可以省去自己修改注册表的过程。
#使用 !+ 将mimidrv导入Mimikatz,即将mimidrv驱动程序加载到当前内存中。
!+
!processprotect /process:lsass.exe /remove
注意:如果上述导入操作失败并出现isFileExist
错误,那么我们可以重新启动mimikatz解决。
0x05 凭据管理器
windows凭据管理器
凭据管理器是Windows的一个功能,它可用于存储网站、应用程序和域网络的登录敏感信息(如登录凭据、用户名、密码和internet地址等)。与Windows凭据管理器相关的凭据类别有四种:
- Web凭据:包含存储在互联网浏览器中或者其他应用程序中的身份验证详细信息。
- Windows凭据:包含Windows身份验证的详细信息,例如NTLM身份验证或者Kerberos身份验证。
- 通用凭据:包含基本身份验证的详细信息,例如明文用户名和密码。
- 基于证书的凭据:包含基于证书的身份验证详细信息。
注意:身份验证详细信息会存储在目标用户的文件夹中,而不会在Windows用户帐户之间共享,但是,这些身份验证信息还会被缓存在计算机内存中。
我们可以通过GUI界面(控制面板->用户帐户->凭据管理器)或者命令提示符界面来访问Windows凭据管理器,但是本小节将重点介绍使用命令提示符的场景。
在cmd界面中,我们可以使用vaultcmd
实用程序来查看Microsoft凭据管理器。如下所示,我们可以先使用命令来列出windows目标机中当前可用的凭据库信息:
vaultcmd /list
如上面的输出结果所示,在默认情况下,Windows有两个凭据库,一个用于保存Web凭据,另一个用于保存Windows机器凭据。
接下来,可以通过运行带有/listproperties
的vaultcmd命令来检查Web凭据库中是否已经存储了凭据信息:
VaultCmd /listproperties:"Web Credentials"
成功确认Web凭据库中存储了凭据之后,我们可以继续列出上述Web凭据库中所存储凭据的详细信息:
VaultCmd /listcreds:"Web Credentials"
powershell脚本转储
我们可以使用PowerShell脚本如Get-WebCredentials.ps1来尝试转储Windows凭据管理器中的凭据。
Import-Module C:\Tools\Get-WebCredentials.ps1
Get-WebCredentials
runas转储
利用已存储凭据的另一种方法是使用RunAs。RunAs是一个命令行内置工具,它允许攻击者在不同用户权限下运行Windows应用程序或工具。RunAs工具有各种可以在Windows系统中使用的命令参数。/savecred
参数允许我们在Windows凭据管理器(在Windows凭据库部分下)中保存用户的凭据。因此,当我们下次以同一用户身份执行runas命令时将不会被要求输入密码进行验证。
我们还可以使用cmdkey
来枚举目标机器中所存储的凭据,它是一种用于创建、删除和显示计算机已存储的Windows凭据的工具,我们可以使用/list
命令参数来显示当前机器所有已经存储的Windows凭据,或者使用/list:computername
命令参数来显示指定的凭据信息:
cmdkey /list
上面的输出结果显示我们有一个已经存储的thm.red\thm-local
用户的域帐户密码。注意,目标机器中已经存储的凭据也可以用于访问其他域内服务器。现在让我们使用runas命令作为thm-local
本地用户来执行Windows应用程序。
#使用/savecred命令参数以本地用户身份运行cmd.exe应用程序
runas /savecred /user:THM.red\thm-local cmd.exe
mimikatz转储
我们仍然可以使用Mimikatz工具来转储凭据,它可以从当前计算机的内存中转储保存在Windows凭据管理器中的明文密码:
privilege::debug
sekurlsa::credman
本小节中所讨论的技术也可以通过使用其他工具(如Empire、Metasploit等)来完成,可自行扩展。
0x06 DC中的凭据
NTDS域控
新技术目录服务(NTDS-New Technologies Directory Services)是一个包含所有Active Directory数据的数据库,该数据库包括AD对象、属性、凭据等。NTDS. DTS数据库文件中的数据主要由以下三个表组成:
- 架构表(Schema table):包含对象的类型及其关系。
- 链接表:包含对象的属性及其属性值。
- 数据类型:包含用户和组。
NTDS数据库在Windows计算机中的默认路径为C:\Windows\NTDS
,而且该数据库会经过加密处理以防止攻击者直接从目标计算机中提取数据。在通常情况下,用户不被允许从正在运行的计算机上直接访问NTDS.dit数据库文件,因为该文件将由相关的Active Directory使用并会被锁定。
然而,攻击者仍然有各种方法可以访问目标计算机中的NTDS.dit数据库文件。本小节将讨论如何使用ntdsutil
和Diskshadow
工具来获得NTDS文件的副本,以及如何转储该文件所包含的内容。
需要注意的是,在解密NTDS文件时,我们还需要一个系统引导密钥来尝试解密由LSA所隔离的凭据,该凭据存储在SECURITY
文件系统中;因此,我们还必须转储包含所有需要解密的文件的security文件。
NTDSutil
Ntdsutil是一个Windows实用程序,主要用于管理和维护Active Directory配置,它可以在各种场景中使用,例如:
- 恢复活动目录(Active Directory)中已删除的对象。
- 执行针对AD数据库的维护措施。
- 活动目录(Active Directory)快照管理。
- 设置目录服务还原模式(DSRM-Directory Services Restore Mode)的管理员密码。
无凭据本地转储
如果我们作为攻击者没有可用的凭据,但是拥有对目标域控制器(DC)的管理员访问权限,那么我们通常可以尝试执行本地转储操作。
要成功转储NTDS文件的内容,我们还需要在目标域控制器中获取以下文件:
- C:\Windows\NTDS\ntds.dit
- C:\Windows\System32\config\SYSTEM
- C:\Windows\System32\config\SECURITY
使用Ntdsutil工具将NTDS文件转储到目标机器中的C:\temp目录下。
powershell "ntdsutil.exe 'ac i ntds' 'ifm' 'create full c:\temp' q q"
#ntdsutil.exe:ntdsutil.exe是Windows中的一个工具,可用于管理Active Directory数据库。 #'ac i ntds':这是ntdsutil.exe工具中的命令,用于连接Active Directory。
#'ifm':进入控制台交互界面。
#'create full c:\temp':执行备份操作,创建完整的NTDS.dit数据库的副本文件到c:\temp目录下。 #q q:退出ntdsutil.exe工具。
现在进入c:\temp
目录,我们将会看到两个文件夹:Active Directory和registry,其中包含了我们所需要的三个文件。
将所需的上述三个文件传输到我们的攻击机中,然后再运行secretsdump.py脚本从我们所转储的内存文件中提取密码哈希值。
secretsdump.py -sam /tmp/SECURITY -system /tmp/SYSTEM -ntds /tmp/ntds.dit local
有凭据远程转储
远程转储,需要我们拥有相关凭据,例如密码或NTLM哈希值。我们还需要拥有对目标域控制器具有管理及访问权限的用户或者使用下文的DC Sync部分内容中所讨论的具有特殊权限的凭据。
DC Sync
简单说就是攻击者模拟一个额外域控,向其他域控发起数据同步请求(目录复制)以拿到用户凭据。
DC Sync(DC同步)是攻击者会在Active Directory环境中执行的一种常用攻击方式,目的是远程转储凭据。当攻击者获得具有以下AD权限的帐户(具有必要权限的特殊帐户)或者目标网络环境中的AD admin帐户被攻破时,此类攻击就可能会发生:
- Replicating Directory Changes
- Replicating Directory Changes All
- Replicating Directory Changes in Filtered Set
攻击者可以利用上述这些AD配置来执行域复制,通常也被称为“DC Sync”或域控制器同步。
Impacket SecretsDump脚本工具提供了相关功能可直接完成DC同步攻击:
secretsdump.py -just-dc THM.red/thm@10.10.231.22
#Password:Passw0rd!
THM.red用户具有管理员权限。
-just-dc
命令参数用于指定提取目标DC中的NTDS文件。
注意,如果我们只想转储目标DC中所存储的NTLM密码哈希值,那么我们可以使用-just-dc-ntlm
参数来指定。
secretsdump.py -just-dc-ntlm THM.red/thm@10.10.231.22
#Password:Passw0rd!
0x07 LAPS
本小节将讨论如何在已经配置并启用了LAPS(本地管理员密码解决方案)功能的Active Directory环境中枚举和获取目标机的本地管理员密码。
组策略首选项(GPP)
Windows操作系统有内置管理员(built-in Administrator)帐户,用户可以使用密码对其进行访问。对于攻击者而言,在具有许多计算机的大型Windows环境中更改密码更加有挑战性,因此,攻击者可以尝试基于Microsoft实现一种使用组策略首选项(GPP)来跨工作站更改本地管理员帐户的方法。
GPP(组策略首选项)是一种允许管理员创建具有嵌入式凭据的域策略的工具。一旦部署了GPP,就会在目标机器的SYSVOL文件夹中创建不同的XML文件,SYSVOL是Active Directory的一个重要组件,它可以在NTFS卷上创建一个共享目录,所有经过身份验证的域用户都能够以可读权限来访问该共享目录。
与GPP相关的XML文件还将包含一个使用AES-256位加密算法进行加密处理的密码,这种加密技术足够好,直到微软官方以某种方式在MSDN上公布了它的私钥。由于域用户可以读取SYSVOL文件夹的内容,因此攻击者对该文件夹中所存储的密码进行解密变得很容易。
破解SYSVOL的加密密码的工具之一是Get-GPPPassword脚本。
LAPS
本地管理员密码解决方案(LAPS)
在2015年,微软删除了Windows计算机在SYSVOL文件夹中存储加密密码的功能(GPP),引入了本地管理员密码解决方案(LAPS),LAPS能够提供一种更安全的方法来远程管理Windows机器上的本地管理员密码。
LAPS方法将在AD环境中包含计算机对象的两个新属性(ms-mcs-AdmPwd和ms-mcs-AdmPwdExpirationTime),其中ms-mcs-AdmPwd
属性包含本地管理员的明文密码,而ms-mcs-AdmPwdExpirationTime
属性则包含密码过期时间。
LAPS将使用
admpwd.dll
修改本地管理员密码,并会更新相关的ms-mcs-AdmPwd
的值。
枚举LAPS
首先,我们可以检查目标计算机中是否安装了LAPS,这可以通过检查admpwd.dll
路径来完成(查看AdmPwd.dll文件是否存在):
dir "C:\Program Files\LAPS\CSE"
确认目标机器上有LAPS,接下来检查AdmPwd
cmdlet的可用命令,如下所示:
Get-Command *AdmPwd*
接下来,我们需要找到哪个AD组织单元(OU)具有处理LAPS的“所有扩展权限”属性,我们将使用“Find-AdmPwdExtendedRights”cmdlet并附加我们所需要检查的组织单元(OU)。
注意:获取可用OU应在执行枚举步骤时完成,本例中的目标OU是
THMorg
,我们还可以使用-Identity *
参数来列出所有可用的OU。
上面输出显示在THMorg中的LAPsReader组对于LAPS具有正确的访问权限,接着检查一下这个组及其成员。
获取密码
通过上述枚举操作,我们可以发现bk-admin用户是LAPsReader组的成员,因此为了获得目标LAPS中所存储的密码,我们需要入侵或冒充bk-admin用户。
在找到正确的用户之后,我们就可以通过向启用了LAPS的目标计算机使用Get-AdmPwdPassword命令来获取LAPS中所存储的密码。
Get-AdmPwdPassword -ComputerName creds-harvestin
注意:在实际的AD环境中,LAPS仅会在特定的计算机上被启用;因此,我们需要枚举并找到正确的目标计算机以及正确的用户帐户,以便能够获取LAPS中的密码。
0x08 其他方法
在上文内容中,所假设的场景是我们已经拥有对目标系统的初始访问权限,并且将尝试从Windows操作系统的内存中或者各种敏感文件中获取凭据,而在其他情况下,我们还可以尝试针对目标网络执行某些攻击以获取相关凭据。
Kerberoasting
Kerberoasting是一种常见的AD攻击,可用于获取AD票据,从而帮助攻击者实现权限维持。
为了有效地执行这种攻击,攻击者必须能够访问SPN(服务主体名称)帐户,如IIS用户、MSSQL等。Kerberoasting攻击主要涉及请求票据授予票据(TGT)和票据授予服务(TGS),这种攻击的最终目标是实现权限提升和内网横向移动。
首先,我们需要找到目标域控制器的一个SPN帐户,然后我们再发送请求以获得TGS票据。
如以下命令所示,我们将在攻击机上使用GetUserSPNs.py脚本来针对目标机器枚举SPN帐户。
GetUserSPNs.py -dc-ip 10.10.23.153 THM.red/thm
#Password:Passw0rd!
上面的命令很简单:我们只需要提供目标域控制器的IP地址和相关的domain name\user name
,然后GetUserSPNs脚本就会请求我们输入用户密码以检索我们所想要获取的信息。
上面的输出结果显示了一个名为svc-thm
的SPN帐户,在找到该SPN用户之后,我们可以使用-request-user参数来发送单个请求,从而为srv-user用户获取TGS票据。
GetUserSPNs.py -dc-ip 10.10.23.153 THM.red/thm -request-user svc-thm
#Password:Passw0rd!
然后,我们就可以使用HashCat工具中的-m 13100
模式来破解我们已经获取的TGS票据:
hashcat -a 0 -m 13100 spn.hash /usr/share/wordlists/rockyou.txt
AS-REP Roasting
AS-REP Roasting技术将使得攻击者能够检索帐户选项被设置为“不需要Kerberos预认证”的AD用户的密码哈希,此帐户选项依赖于旧的Kerberos身份验证协议,它能够允许在没有密码的情况下进行身份验证。
可以利用的情况下配置项长这样:
在执行AS-REP Roasting之前,我们通常还需要执行枚举步骤以收集相关的目标域帐户列表,在本例中我们已经获得了users.txt。
接下来,还是使用Impacket中的Get-NPUsers脚本:
GetNPUsers.py -dc-ip 10.10.23.153 thm.red/ -usersfile users.txt
一旦GetNPUsers.py脚本在执行时找到了没有Kerberos预认证配置的正确用户(上例中是victim),那么此脚本就会为我们生成相关的票据。然后就可以尝试破解拿明文了。
SMB自动中继
SMB Relay攻击的原理是滥用NTLM认证机制(NTLM质询-响应协议),攻击者会通过执行中间人攻击来监控和捕获SMB报文并提取哈希值。为了使这种攻击生效,攻击者还必须确保目标机器的SMB签名已经被禁用,SMB签名是一种针对信息完整性的安全检查,可用于确保通信在受信任的源(客户端、服务端)之间进行。
具体利用见AD Exploitation。
LLMNR/NBNS投毒攻击
LLMNR (Link-Local Multicast Name Resolution-链路本地组播名称解析)和NBT-NS (NetBIOS Name Service-NetBIOS名称服务)可以帮助本地网络中的计算机在DNS查询失败时找到正确的机器;例如,假设某网络中的一台机器想要在没有现有的DNS记录的情况下进行通信(即DNS解析失败),那么该机器就可以通过LLMNR或者NBT-NS向所有本地网络中的其他机器发送多播消息,以请求获取正确的地址。
LLMNR/NBNS投毒攻击发生在攻击者试图欺骗目标网络上的权威源,并使用主机标识服务对请求主机的链路本地多播名称解析(LLMNR)和NetBIOS名称服务(NBT-NS)的流量进行响应时。
具体利用见AD Breaching。
-
-
-
-
-
-
-
-