ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

内网横向移动与凭证窃取:Mimikatz与Pillager实战解析

内网横向移动与凭证窃取:Mimikatz与Pillager实战解析 如果你是一名网络安全工程师、渗透测试人员或者负责企业安全运维那么你一定对“内网横向移动”和“凭证窃取”这两个词不陌生。在攻防演练或真实攻击中攻击者一旦突破边界首要目标往往不是破坏而是潜伏和扩张。他们如何像幽灵一样在内网中悄无声息地游走获取更多权限答案的核心就藏在那些看似不起眼的、存储在内存和文件系统中的“敏感信息”里。很多人以为拿到一台机器的管理员权限就是终点。但实际上这仅仅是开始。真正的挑战在于如何利用这台机器作为跳板获取更多主机的访问凭证从而控制整个域网络传统的手工收集效率低下且容易遗漏而自动化工具的出现彻底改变了这场“猫鼠游戏”的效率和深度。本文将聚焦于两个在实战中极具代表性的工具Mimikatz和Pillager。我们不只介绍它们“是什么”和“怎么用”更重要的是剖析它们“为什么能成功”以及作为防御方“如何有效检测和防御”。文章将提供完整的操作示例、清晰的原理拆解以及基于真实攻防场景的深度思考。无论你是红队人员需要精进技术还是蓝队人员希望筑牢防线这篇文章都将提供直接的、可落地的价值。1. 这篇文章真正要解决的问题从单点突破到全域沦陷的“钥匙”在攻防对抗中获取一台主机权限Webshell、RCE等通常只是第一步。攻击者的核心诉求是扩大战果实现内网横向移动最终可能控制域控制器DC获取整个网络的控制权。这个过程中最大的障碍就是身份认证。现代企业网络普遍采用域环境使用Kerberos、NTLM等协议进行身份验证。攻击者需要合法的用户凭证用户名和密码哈希或票据才能访问其他资源。那么这些凭证从哪里来它们就存储在已经控制的主机上以多种形式存在内存中当用户交互式登录或运行某些服务时其明文密码、密码哈希LM Hash, NTLM Hash甚至Kerberos票据Ticket会暂存在系统的LSASS进程内存中。文件系统中包括浏览器保存的密码、远程桌面连接管理器mstsc保存的凭据、各类应用配置文件、SSH私钥等。注册表中系统缓存的域用户哈希等。手工从这些地方提取信息既繁琐又容易触发警报。因此自动化信息收集工具成为红队的必备利器。Mimikatz是这方面的“上古神兵”几乎成为凭证提取的代名词而Pillager则是一个功能更聚合、更现代化的“瑞士军刀”旨在系统性地掠夺Pillage主机上的所有敏感信息。本文将解决的核心问题是如何系统化、自动化地获取Windows系统内的敏感信息并理解这些信息在横向移动中的具体作用。我们会深入Mimikatz的核心模块并展示Pillager如何实现更全面的信息收集最后从防御视角给出切实可行的缓解措施。2. 基础概念与核心原理理解凭证存储与提取的战场在深入工具之前必须理解几个关键概念这是所有操作的理论基础。2.1 LSASS进程与内存凭证LSASSLocal Security Authority Subsystem Service是Windows系统中负责安全策略、认证和审计的核心进程。当用户登录时无论是本地登录、网络登录还是解锁屏幕认证信息会由LSASS处理并可能缓存于其进程内存中以供后续的SSO单点登录等操作使用。这使其成为密码哈希和票据的“金矿”。2.2 NTLM Hash与Pass-the-Hash (PtH)NTLM是一种挑战/响应认证协议。用户的密码会经过加密运算生成一个固定长度的字符串即NTLM Hash。关键在于在许多情况下如网络认证系统并不需要明文密码只需要这个Hash值。Pass-the-Hash攻击正是利用这一点攻击者获取了用户的NTLM Hash后可以直接使用该Hash进行身份验证而无需破解出明文密码。2.3 Kerberos票据与Pass-the-Ticket (PtT)在Windows域环境中更常用的是Kerberos协议。用户登录域控制器后会获得一个TGT票据授予票据用于申请访问特定服务的ST服务票据。这些票据也缓存在内存中。Pass-the-Ticket攻击允许攻击者窃取这些票据并直接使用它们来访问对应的服务同样无需密码。2.4 常见敏感信息存储位置除了内存工具还会扫描以下位置浏览器%LocalAppData%\Google\Chrome\User Data\Default\Login Data(Chrome)远程桌面%UserProfile%\AppData\Local\Microsoft\Credentials\*和%UserProfile%\AppData\Roaming\Microsoft\Credentials\*系统凭证管理器通过Windows Credential Manager访问。注册表HKLM\SECURITY和HKLM\SAM存储着系统密钥和本地用户哈希需要SYSTEM权限访问。各类配置文件如WinSCP.ini,FileZilla的sitemanager.xml等。理解了这些你就会明白Mimikatz和Pillager等工具本质上是在对这些“存储仓库”进行定向的、自动化的“开采”。3. 环境准备与前置条件重要声明以下所有操作仅限用于授权的安全测试、渗透测试教学研究及企业自身的安全评估。严禁用于任何非法入侵和未授权的测试。操作前务必获得明确书面授权。3.1 测试环境搭建操作系统Windows 10 / Windows Server 2012 R2 或更高版本。本文演示基于Windows 10。权限要求这是最关键的一点。要成功提取LSASS内存中的凭证执行进程需要调试权限或等同于LSASS进程的权限。通常意味着你需要管理员权限Administrator可以执行大部分操作但某些受保护进程PPL设置可能会阻止读取。SYSTEM权限最高权限能绕过绝大多数保护。Mimikatz通常通过privilege::debug和token::elevate命令来尝试获取SYSTEM权限。防御状态真实的攻防环境中终端防护软件EDR/AV可能会拦截此类工具。测试时可在隔离的虚拟机中暂时关闭实时防护以观察工具原始行为。生产环境切勿关闭防护工具准备Mimikatz从官方GitHub仓库gentilkiwi/mimikatz下载最新Release版本。通常是一个mimikatz_trunk.zip压缩包内含x64和win32目录。Pillager从相关安全研究项目获取注意由于其敏感性公开仓库可能不稳定。它是一个Go语言编写的可执行文件通常为单文件pillager.exe。3.2 基础命令解释器Mimikatz有自己的命令行界面。Pillager通常是直接运行带参数的可执行文件。我们将使用系统自带的cmd.exe或PowerShell来运行它们。4. 核心流程拆解从权限提升到信息提取整个敏感信息获取的流程可以抽象为以下步骤这符合红队操作的基本逻辑权限获取与提升确保当前会话拥有足够权限如Debug、SYSTEM。进程访问定位并访问目标进程如lsass.exe的内存空间。数据解析从内存或文件中识别并解析出特定数据结构如MSV1_0结构、Kerberos票据。信息输出与格式化将提取的凭证明文、哈希、票据以可读或可重用的格式输出。横向利用将提取的凭证用于后续攻击如PtH, PtT。Mimikatz和Pillager都封装了这些步骤但侧重点不同。Mimikatz更专注于第2-4步的深度操作而Pillager则实现了从第1步到第5步的更自动化、更全面的流水线。5. 完整示例与代码实现5.1 Mimikatz 经典用法实战首先以管理员身份运行cmd或PowerShell导航到Mimikatz所在目录例如x64。步骤1启动Mimikatz并提升权限# 进入Mimikatz目录 cd C:\Tools\mimikatz\x64 # 运行Mimikatz .\mimikatz.exe # 在Mimikatz命令行中首先尝试启用调试权限这通常是读取LSASS的前提 mimikatz # privilege::debug Privilege 20 OK # 如果成功输出会是 Privilege 20 OK。如果失败可能是权限不足或存在更强的防护。privilege::debug命令试图为当前进程启用SeDebugPrivilege权限这是打开其他进程如lsass.exe进行读取操作所必需的。步骤2转储内存中的凭证这是Mimikatz最核心的功能。# 提取所有登录会话的NTLM哈希、明文密码如果系统支持等 mimikatz # sekurlsa::logonpasswords # 该命令会输出大量信息包括 # * Authentication Id : 会话ID # * Session : 会话类型 # * User Name : 用户名 # * Domain : 域名 # * Logon Server : 登录服务器 # * Logon Time : 登录时间 # * SID : 安全标识符 # msv : MSV1_0认证信息 # [00000003] Primary # * Username : 用户名 # * Domain : 域名 # * NTLM : NTLM哈希值 (这是PtH攻击的关键) # * SHA1 : SHA1哈希值 # tspkg : Terminal Services信息 # wdigest : WDigest信息可能包含明文密码 # * Username : 用户名 # * Domain : 域名 # * Password : (明文密码如果系统未禁用WDigest缓存) # kerberos : Kerberos凭证 # * Username : 用户名 # * Domain : 域名 # * Password : (通常为空) # * Ticket Encryption Type : 票据加密类型 # * Ticket : Base64编码的Kirbi票据这是PtT攻击的关键如果系统启用了WDigest默认在Win8.1/Win2012R2之前是启用的或者通过注册表UseLogonCredential被设置为1那么wdigest部分很可能出现明文密码。这是Mimikatz早年“声名大噪”的主要原因。步骤3专门提取哈希或票据# 只提取NTLM哈希格式更简洁便于后续利用 mimikatz # sekurlsa::msv # 只提取Kerberos票据用于Pass-the-Ticket攻击 mimikatz # sekurlsa::tickets /export # 此命令会将内存中的所有Kerberos票据导出为.kirbi文件到当前目录。导出的.kirbi文件可以直接被Mimikatz或其他工具如Rubeus用来注入当前会话模拟用户访问网络资源。步骤4Pass-the-Hash 实战演示假设我们从sekurlsa::msv中获取了域用户DOMAIN\victim的NTLM哈希aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4。# 首先退出mimikatz或新开一个cmd使用psexec或wmi等工具进行横向移动。 # 这里以Mimikatz自带的pth功能为例它创建一个带有指定哈希的新进程 mimikatz # sekurlsa::pth /user:victim /domain:DOMAIN /ntlm:32ed87bdb5fdc5e9cba88547376818d4 # 执行后会弹出一个新的命令窗口这个窗口的上下文已经使用了victim用户的哈希进行认证可以用于访问网络共享等。/ntlm后面跟的是NTLM Hashaad3b...部分是LM Hash在现代系统中通常为空或固定值。5.2 Pillager 自动化信息收集实战Pillager的设计理念是“一键收集所有可能有用的信息”。它通常以命令行参数驱动。基本运行示例# 假设pillager.exe在当前目录 .\pillager.exe -h # 查看帮助了解所有参数 # 进行一次全面的信息收集输出到当前目录的results.json文件 .\pillager.exe -o results.json # 或者指定只收集某几类信息例如浏览器凭证和系统信息 .\pillager.exe -modules browser,systeminfo -o quick_scan.jsonPillager 典型输出解析Pillager的输出通常是结构化的JSON便于后续自动化处理。一个简化的输出片段可能如下{ system_info: { hostname: DESKTOP-ABC123, os_version: Windows 10 Enterprise, current_user: DESKTOP-ABC123\\AdminUser, is_domain_joined: false, domain_name: }, browser_credentials: [ { browser: chrome, url: https://mail.example.com, username: userexample.com, password: SuperSecret123! } ], saved_rdp_connections: [ { target: 192.168.1.100, username: administrator } ], filezilla_sites: [ { host: ftp.server.com, user: ftpuser, pass: ftpPass123 } ], wifi_passwords: [ { ssid: HomeWiFi, password: MyWiFiPassword } ] // ... 还有其他很多模块的输出 }从输出可以看出Pillager覆盖了从系统信息到应用凭证的广泛范围其威胁在于能够快速聚合分散的敏感点形成对主机环境的完整画像。6. 运行结果与效果验证6.1 Mimikatz 结果验证sekurlsa::logonpasswords成功运行的标志是能看到msv、tspkg、wdigest、kerberos等段落并且其中包含有效的用户名、域名和哈希值。如果NTLM哈希部分显示为(null)可能意味着该会话没有缓存哈希或者遇到了更强的防护如Credential Guard。sekurlsa::tickets /export成功运行后会在Mimikatz工作目录下生成多个.kirbi文件。你可以使用dir *.kirbi命令查看。sekurlsa::pth成功运行后会直接弹出一个新的命令行窗口。在这个新窗口中使用whoami /all或尝试访问域内共享\\dc01\sysvol可以验证是否以目标用户身份运行。6.2 Pillager 结果验证直接查看输出文件使用文本编辑器或type results.json命令查看生成的JSON文件。文件内容非空且包含预期的数据结构如browser_credentials数组中有条目即表示收集成功。模块验证如果某个模块如browser未收集到数据可能是因为对应的应用未安装、未保存密码或者当前用户权限无法访问其数据存储位置如Chrome的加密数据库需要解密密钥。6.3 验证失败排查如果工具运行失败或返回空结果请按以下顺序排查权限是否以管理员身份运行运行whoami /groups查看是否包含BUILTIN\Administrators和Mandatory Label\High Mandatory Level。防护软件EDR/AV是否拦截了进程创建或对lsass.exe的访问查看安全软件日志。系统保护是否启用了Credential Guard基于虚拟化的安全这会使从LSASS提取哈希变得极其困难。运行msinfo32查看“基于虚拟化的安全性”是否“正在运行”。WDigest设置对于获取不到明文密码检查注册表HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest下的UseLogonCredential值。如果为0则不会在内存中缓存明文。Windows 8.1/Server 2012 R2之后默认禁用。工具本身版本是否过旧是否与当前系统架构x64/x86匹配尝试从官方渠道重新下载。7. 常见问题与排查思路问题现象可能原因排查方式解决方案Mimikatz运行后立即退出或报错1. 被杀毒软件实时防护拦截。2. 文件损坏或不兼容。1. 查看AV/EDR隔离区或日志。2. 在隔离虚拟机中测试。3. 使用file命令检查完整性。1. 测试时临时禁用防护仅限授权环境。2. 使用不同版本或源码编译。3. 尝试使用免杀加载器或内存加载技术红队技巧。privilege::debug返回错误1. 当前进程非管理员权限。2. 组策略限制了调试权限。1. 确认以管理员身份运行。2. 运行whoami /priv查看SeDebugPrivilege是否被禁用。1. 使用runas /user:Administrator或从管理员启动的CMD运行。2. 尝试使用token::elevate直接获取SYSTEM令牌。sekurlsa::logonpasswords输出中NTLM哈希为(null)1. 该登录会话类型不缓存哈希如网络登录。2. Credential Guard已启用。3. LSASS运行在PPL受保护进程模式。1. 检查登录类型。2. 运行msinfo32查看Credential Guard状态。3. 使用Process Explorer查看lsass.exe进程保护级别。1. 尝试其他已登录用户如切换用户后再执行。2. 针对Credential Guard需要更高级的攻击技术如利用漏洞已超出基础工具范畴。Pillager运行后输出文件为空或缺少模块数据1. 当前用户权限不足访问某些路径。2. 对应软件未安装或未存储数据。3. 模块执行出错。1. 使用-vverbose参数运行查看详细日志。2. 手动检查目标路径如Chrome登录数据文件是否存在。3. 尝试以SYSTEM权限运行。1. 确保以高完整性级别运行。2. 分模块执行定位问题模块。3. 参考项目文档确认模块支持的系统/软件版本。提取的Kerberos票据.kirbi无法使用1. 票据已过期。2. 票据类型不对如不是TGT。3. 目标服务SPN不匹配。1. 检查票据的结束时间。2. 使用Mimikatzkerberos::list查看票据详情。1. 重新登录目标用户生成新票据。2. 确保使用正确的票据文件TGT用于申请STST用于访问特定服务。8. 最佳实践与工程建议8.1 对于攻击方红队/渗透测试权限最大化在获取初始立足点后优先将权限提升至SYSTEM或具有Debug权限的管理员。目标选择优先针对高价值用户如域管理员、IT运维人员的登录会话进行提取。规避检测避免直接运行知名工具的可执行文件。考虑使用反射加载、进程注入如将Mimikatz DLL注入到合法进程或无文件落地的方式执行。使用定制化的Pillager版本或类似工具避免特征码被标记。清理日志如Security, Sysmon但注意这可能本身会触发告警。票据管理窃取的Kerberos票据有时效性。合理规划横向移动路径优先使用未过期的TGT。工具链整合将Mimikatz/Pillager的输出如哈希、票据与Cobalt Strike、Empire、Metasploit等框架整合实现自动化横向移动。8.2 对于防御方蓝队/安全运维启用Credential Guard这是防御内存中凭证窃取最有效的手段之一。它利用虚拟化安全技术将LSASS进程隔离保护起来。禁用WDigest确保注册表UseLogonCredential值为0或不存在防止明文密码缓存在内存。可通过组策略“网络安全配置WDigest身份验证的使用”来设置。实施LSA保护配置RunAsPPL保护LSASS进程防止非受保护进程对其进行内存读取。限制本地管理员权限实施最小权限原则减少拥有本地管理员权限的账户数量。使用“受保护用户”组或“本地管理员密码解决方案LAPS”管理本地管理员密码。加强监控与检测进程创建监控对lsass.exe的进程访问尤其是PROCESS_VM_READ权限工具如Sysmon事件ID 10或ETW。命令行审计记录所有命令行执行记录关注包含sekurlsa、logonpasswords、mimikatz、pillager等关键词的命令。文件行为监控在临时目录或异常路径创建的可执行文件如mimikatz.exe。网络行为检测异常的Pass-the-Hash或Pass-the-Ticket活动例如来自非域成员机器的域认证尝试。定期进行威胁狩猎主动搜索环境中是否存在凭证 dumping 工具或相关攻击痕迹。应用白名单在关键服务器上部署应用控制策略只允许运行经过签名的可信程序。8.3 工具使用的伦理与法律边界再次强调Mimikatz、Pillager等是强大的双刃剑。它们本是安全研究人员用于理解Windows安全机制和测试系统防御能力的工具。务必遵守以下原则合法授权只在你自己拥有完全所有权的系统或已获得明确、书面授权的测试范围内使用。最小影响在授权测试中避免对业务系统造成不必要的干扰或数据泄露。数据保密测试中获取的任何敏感信息包括凭证必须按照授权协议和安全规范进行妥善处理不得保存、传播或用于其他目的。持续学习理解工具背后的原理比单纯会使用工具更重要。这有助于你从本质上提升攻防两端的技能。9. 总结与后续学习方向通过本文的深入探讨我们清晰地看到Mimikatz和Pillager这类工具之所以在攻防对抗中经久不衰根本原因在于它们精准地击中了Windows身份认证体系中的“信任存储”环节。攻击的本质是窃取和冒用信任而防御的核心则是保护信任的存储与传递过程。对于安全从业者而言掌握这些工具的使用是必要的但绝不能止步于此。真正的价值在于知其然更知其所以然明白了LSASS内存存储、NTLM/Kerberos协议流程你才能预判攻击者的下一步并设计出更根本的防御策略。从单点工具到体系化对抗现代EDR和高级威胁防护ATP方案已经能够有效检测经典的Mimikatz调用。攻击技术也在进化出现了更多无文件、利用合法系统组件如comsvcs.dll的凭证提取方式。防守方需要构建从终端检测、网络流量分析到行为建模的纵深防御体系。关注新兴技术随着Windows Defender Credential Guard、Azure AD混合加入、基于证书的身份验证等技术的普及传统的哈希传递攻击场景在减少但攻击面转移到了云身份、OAUTH令牌、API密钥等领域。后续你可以深入的方向包括深入研究Kerberos协议学习白银票据、黄金票据、钻石票据、蓝宝石票据等高级攻击技术以及如何通过强化Kerberos策略如启用AES加密、设置票证属性进行防御。探索无文件攻击与内存取证学习如何通过PowerShell、WMI、COM等原生组件实现“无文件”的凭证窃取并研究如何通过内存取证工具如Volatility检测此类攻击。学习现代EDR绕过技术了解直接系统调用Syscall、API钩子绕过、进程镂空Process Hollowing等技术理解攻防博弈的最前沿。关注云环境下的身份安全研究Azure AD、AWS IAM、GCP IAM中的凭证管理、角色委派和风险检测。工具会迭代漏洞会被修补但攻防对抗中围绕“身份”和“信任”展开的核心逻辑不会改变。将本文作为起点深入原理构建体系化的知识网络才能在这个动态的领域中保持优势。建议收藏本文并在授权的实验环境中反复练习将理论转化为肌肉记忆。
返回列表