Skip to main content

SAM

安全帐户管理器 (SAM) 数据库以 NTLM 哈希格式存储本地 Windows 凭 在本地登录期间,用户输入密码后,本地安全机构 (LSA) 通过根据存储在 SAM 中的数据验证凭来验证登录尝试。 散列输入的密码的哈希与 SAM 中的 NTLM 散列哈希匹配时,登录尝试成功。 一旦我们在主机上得到了提升,我们就可以通过多种方式从 SAM 检索中提取 在域环境中,本地帐户的凭对我们来说可能看起来不那么有趣令人兴奋 但是,凭证考虑到密码重用可能的。 性,如果我们获得主机上本地管理员帐户的 NTLM 哈希或明文密码,域用户可能会在另一台主机上重用该凭 一个实际生活中的子可以是如果服务器 Srv01 和 Srv02 由同一系统管理员同时管理 2 个 SQL 数据库服务器为了方便记忆,于是给这 Srv012 和 Srv02 可能具有台服务器设置了相同的本地管理员帐户密码。

至于从 SAM 中导出哈希,我们有多种方法来转储 SAM。

1:通过 mimikatz 导出

privilege::debug

lsadump::sam,分别如下。


通过工具在线导出

2:复制我们可以借助诸如 mimikatz 之类的工具在线导出 SAM 中的凭证,十分方便。我们需要获得一个受害主机的 SYSTEM 会话。

mimikatz

考虑到 Cobalt Strike 自带了 Mimikatz 的命令,我们可以直接使用内置的 mimikatz 导出 SAM 中的凭证。命令为 mimikatz lsadump::sam

不出所料,我们得到的都是本地帐号

image.png

C2 内置命令

导出 SAM 数据库中的凭证并不是 mimikatz 的独有功能,因此诸多 C2 也集成了导出 SAM 的内置命令,在 Cobalt Strike 中,也有这样的一个单独命令的存在,使用 hashdump 命令即可。

输出十分简洁明了。

image.png

Impacket 远程导出

Impacket 中的 secretdump.py 脚本可以在提供凭证后远程导出 SAM 中的凭证,通过远程注册表的方法。

image.png

 

离线导出

使用 mimikatz 之类的工具在线导出固然很方便,我们也可以将相关文件复制或导出,然后进行离线解析从而获得之中的凭证。

注册表复制

分别从注册表 HKLM\sam 和 HKTM\system 的位置拷贝 SAM 数据库和 SYSTEM。

image.png

在这之后,我们可以通过多种工具来解密,例如 mimikatz,impacket 等。


3:

拷贝 SAM 数据库文件

SAM 数据库的文件地址是 C:\Windows\System32\config\SAM,我们是否可以直接复制该文件,然后通过工具来解密呢?

image.png

实际上是不可行的,因为该文件被锁定了,无法对其进行读和写。但我们可以通过卷影复制实现。在提升特权的命令行中,使用 wmic 创建一个新的卷影并且指定来源磁盘,这样可以创建一个 C 盘的快照。我们可以用 vssadmin 命令来验证我们的操作。接着,我们可以从影拷贝中拷贝出 SAM 数据库 以及 SYSTEM 文件。之后用工具来解密 SAM 数据库。


image.png

image.png