ARTICLE DETAIL

资讯详情

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

内网渗透工具链实战:Metasploit、Impacket、CME与mimikatz组合打法

内网渗透工具链实战:Metasploit、Impacket、CME与mimikatz组合打法 在拿到一个内网初期的立足点之后大多数人会陷入一种“不知道下一步该干嘛”的状态。弱口令进了一台机器或者钓鱼打到一台主机shell就在手边但接下来从“打进”到“打穿”中间的这段路恰恰是最暴露功力的部分。这篇文章想聊的就是这条路上最常用的一套工具栈Metasploit、Impacket、CrackMapExec、mimikatz。它们不是同一个厂家的套装也不是某个框架里的插件而是分别负责内网渗透链路上不同环节的“单兵武器”。把这四个组合明白基本就能覆盖从权限获取到凭据收集、再到横向移动的完整闭环。适合看这篇文章的一是刚入门内网安全、想把工具链串起来的人二是有一定基础但习惯依赖单一工具、想拓展思路的人。我不会按官方文档复述命令而是从实战顺序出发讲清楚每一类工具解决什么问题、为什么在这个环节用它、以及哪些参数和细节会在真实环境里救你一命。1. 工具栈的定位逻辑为什么偏偏是这四个先说结论这四个工具不是功能重复的同类竞品它们的配合逻辑非常清晰分别是链路上的四个节点。1.1 从“打进”到“打穿”的完整链路一次典型的内网渗透按执行顺序可以拆成下面这几个阶段获取初始立足点拿到一台机器的执行权限不一定是system普通用户权限也算。信息收集判断当前机器在内网的位置搞清楚网段、域环境、信任关系、可利用的凭据。凭据获取从内存、SAM、NTDS.dit、本地文件里提取明文密码或hash。横向移动用已有的凭据访问更多机器扩大控制面。权限提升与持久化在目标机器上拿到更高权限并维持访问。Metasploit在前两个阶段充当“瑞士军刀”既能生成payload、接收会话又有大量post模块做本机信息收集和自动提权检测。Impacket则是横向移动和远程命令执行的“命令库”它是一组Python脚本的集合覆盖了SMB、LDAP、Kerberos等协议的客户端实现几乎能调用Windows内网环境里所有跟认证和远程管理相关的功能。CrackMapExecCME负责批量化和自动化——它的定位是“面向内网的多协议探测和利用框架”用同一组凭据跑整个网段的机器批量收集结果是信息收集效率之王。mimikatz则聚焦在凭据提取这一件事上虽然市面上提取凭据的工具很多但mimikatz依然是最直接、最稳定、兼容性最好的一个。1.2 每个工具解决的核心问题域如果把内网比作一个大型写字楼Metasploit是你已经拿到的一把钥匙Impacket是一整套能开各种门锁的工具箱CrackMapExec是一个能告诉你哪些房间用同一把钥匙能打开的“门禁扫描仪”mimikatz则是从墙上的门牌号里帮你翻出备用钥匙信息的小工具。说实话很多新手容易犯的一个错误是“一个工具打天下”。有人只会用Metasploit的exploit模块有人只知道mimikatz抓密码结果一遇到复杂内网就卡住。真正稳定的一套工作流是用Metasploit建立会话和做单点深入用CME批量摸清内网资产和凭据适用面用Impacket做具体的横向移动动作需要提取凭据时再上mimikatz。这四件事配合起来覆盖的边界远大于任何一个工具的单独能力。2. 立足之后的第一件事数据收集决定后续走向很多文章上来就教你怎么提权、怎么dump hash但我个人经验是刚拿到初始权限的头30分钟最重要的不是急着横向而是把当前机器和它所在的环境摸清楚。方向错了后续全是白费功夫。2.1 网络拓扑与主机发现的实战顺序这一步我通常用Metasploit的post模块和系统内置命令交叉确认而不是一上来就跑扫描器。先看当前主机的基本信息# 当前用户及权限 whoami /all net user currentdomain %USERNAME% /domain 2nul # 网络位置与路由 ipconfig /all route print arp -a # 域环境判断 systeminfo | findstr /B Domain OS nltest /dclist:%USERDOMAIN%这些命令能让你快速判断三件事当前用户有没有域权限、当前机器能不能直接访问域控、当前网段还有哪些活跃主机arp缓存会给你一个粗略名单。在拿到网段信息之后再用CME做一次批量主机存活和SMB服务探测效率会比nmap高很多尤其是面对大网段时crackmapexec smb 192.168.10.0/24这一条命令会把网段内开放SMB且接受SMB签名协商的主机全部列出来还会自动标记出当前凭据对这些主机是否有管理员权限。CME输出的[]和[Pwn3d!]标记基本就是内网安全测试里最直观的“可移动目标地图”。我习惯先手工看一两台再用CME拉全量。原因很简单手工命令能看到进程、服务、补丁等上下文信息CME批量结果能帮你找范围和优先级两者互相补充。2.2 共享与策略探测的细节很多测试人员在这时候会遗漏一个信息源SMB共享列表。内网环境里的共享往往存放着大量敏感明文文件——脚本里的数据库密码、配置文件里的连接字符串、甚至备份文件里的SAM。用CME直接拉目标主机的共享列表和访问权限crackmapexec smb 192.168.10.2 -u user -p Passw0rd! --shares输出里会列出每个共享的相对路径、是否可读可写。如果发现C$和ADMIN$可访问基本等于拿到管理员权限的一半了。这种直接访问管理共享的能力在很多真实环境中因为默认共享未关闭而长期存在。另一个容易被低估的是会话和登录会话的枚举。用CME获取目标主机当前登录的用户会话crackmapexec smb 192.168.10.5 -u user -p Passw0rd! --sessions这会返回每个SMB会话中已认证的用户名。如果有域管账号在某一台普通机器上保持登录会话这台机器立即就是“必打卡”的点。这一招比单纯扫漏洞的价值高得多因为漏洞可能不存在或者补丁已打但域管永远不会不用电脑。Metasploit在这个阶段的价值体现在post模块比如本地会话里直接执行系统命令、上传下载文件、以及配合run post/multi/recon/local_exploit_suggester做本机提权建议。不过说句实在话这个模块在真实场景里经常会有误报和漏报其输出只能作为参考最终还是要用systeminfo的补丁列表和实际环境做判断。3. 凭据是内网的第一货币mimikatz的正确打开方式内网渗透圈的共识是拿到一个账号密码往往等于拿到半个域。而凭据提取这件事mimikatz依然是绕不开的角色。3.1 mimikatz的常用姿势与适用条件mimikatz最经典的操作用两条命令就够privilege::debug sekurlsa::logonpasswords第一条privilege::debug是让当前进程启用SeDebugPrivilege权限没有这个权限后面读取LSASS进程内存会被拒绝。第二条sekurlsa::logonpasswords会读取LSASS进程内存中缓存的登录凭据包括明文密码如果系统策略允许WDigest缓存和NTLM hash。在较新版本的Windows上明文密码默认不再缓存但NTLM hash基本都还在。这就够了——hash传递不依赖明文密码。用Metasploit里的内置mimikatz也可以不需要额外上传二进制文件meterpreter load kiwi meterpreter creds_allcreds_all输出的内容等价于sekurlsa::logonpasswords好处是不落地文件、不触发基于文件的杀软查杀。但kiwi模块和独立版mimikatz在某些特定系统版本上解析略有差异所以遇到奇奇怪怪的失败时可以换另一种方式试试。3.2 hash传递和票据获取的取舍拿到hash之后的下一步通常是hash传递或用hash去申请票据。这两个操作更推荐Impacket来执行# 用NTLM hash直接远程执行命令 impacket-wmiexec -hashes :NTMLHASH domain/user192.168.10.5 # 用hash dump远程主机的本地账号hash impacket-secretsdump -hashes :NTMLHASH domain/user192.168.10.5wmiexec走的是WMI协议会比psexec的SVCCTL方式更隐蔽一些因为不再创建服务也不依赖ADMIN$共享。当然隐蔽性这东西是相对的WMI的日志同样会被记录只能说比psexec少一步“创建服务”的动作噪声小一点。mimikatz在域控上还有一个不可忽视的能力lsadump::dcsync。它允许一个拥有复制目录权限的账号例如域管或具备DS-Replication-Get-Changes权限的账号直接从域控同步所有用户hash不需要在域控上执行代码只需要一个能访问域控LDAP/SMB的网络连接lsadump::dcsync /domain:corp.local /user:administrator这也是从“域管账号掌握一半”到“全域尽在掌握”的关键一步。与其在一台机器上刨LSASS不如拿到域管hash后直接去域控上把整个域的用户hash dump下来。两种思路在实战中的位置完全不同——前者是单机落地后者是全域收割。4. 横向移动的实战选择从单点推进到全域覆盖横向移动是整个内网渗透过程中动作最频繁、也是翻车率最高的环节。在这个环节Metasploit和Impacket之间的配合尤为重要。4.1 不同横向移动方式的场景适配拿到一组域凭据或本地管理员hash后横向移动方式主要有四条路SMB服务创建、WMI远程调用、WinRM/PowerShell远程、计划任务。用Impacket的psexec走的是SMB服务创建的方式impacket-psexec domain/user192.168.10.8 -hashes :HASH它会通过ADMIN$上传一个服务二进制并创建系统服务来执行命令每次执行完服务自删。优点是稳定、支持交互式shell缺点是SMB协商特征明显很多EDR都会盯着服务创建这个动作。wmiexec则完全不落盘直接在远程机器上调用WMI创建进程impacket-wmiexec domain/user192.168.10.8 -hashes :HASH它返回的是半交互式shell每条命令的执行结果带上一条命令的输出分隔符虽然不落盘但执行命令的进程树和事件日志会记录到Event ID 4688进程创建和WMI活动日志。讲究速度的时候优先psexec讲究少留文件的时候优先wmiexec这个取舍要根据目标环境的监控强度来定。还有一个常被忽视但极其好用的方式是通过计划任务横向执行Metasploit的exploit/windows/smb/psexec模块内部就是走的服务或计划任务路径但在复杂域环境中手动用schtasks或者impacket-atexec更直接impacket-atexec domain/user192.168.10.8 -hashes :HASH whoamiatexec通过Task Scheduler远程创建计划任务执行命令不依赖ADMIN$共享在禁用了默认共享或SMB签名要求严格的环境里它经常是唯一能打通的方式。4.2 CME作为横向移动的“指挥中心”CME在横向移动阶段的价值不只是批量探测它还能帮你在决策上省时间。比如拿到一组账号密码你想快速知道哪几台机器可以直接打穿crackmapexec smb 192.168.10.0/24 -u user -p Passw0rd! --exec-method wmiexec -x whoami-x参数会在所有成功认证的主机上执行指定命令配合--exec-method指定执行方式。这一条命令跑完你手里就有一张“哪些机器能打通”的清单直接决定下一步的利用顺序。CME还内置了mimikatz模块可以批量抓取全网段主机的本地凭据crackmapexec smb 192.168.10.0/24 -u user -p Passw0rd! -M mimikatz这个操作的速度和体感远比逐台ssh进去人工执行mimikatz要快非常适合在拿到域管的hash之后对整个内网做一次大规模凭据清洗。不过要注意这个动作的动静非常大内网的安全监控在短时间内会接到大量来自同一IP的远程登录成功告警所以执行前务必权衡目标环境的监控水平。5. 实战中最容易翻车的几个环节工具链越熟练越容易在阴沟里翻船。这几个坑我基本每次带人做项目都会遇到值得单独列出来。5.1 杀软与EDR的静态查杀mimikatz原版二进制在2023年之后的杀软库中几乎是必报的这个不用抱侥幸心理。但很多人忽略的是不落地文件不等于不做查杀。Metasploit的kiwi模块虽然躲过了文件扫描但如果你在sekurlsa::logonpasswords直接在meterpreter会话里执行EDR的行为检测一样会报警——读取LSASS进程内存这个动作本身就是一个高危行为特征不管是谁执行的。个人经验是几条路并行能抓缓存会话就先抓缓存会话能走dcsync就直接走dcsync实在需要读LSASS的时候优先考虑在内存中反射加载mimikatz或者用其他更轻量的凭据提取方式比如procdump转储LSASS后离线分析。如果只死磕原版mimikatz落地执行大概率会在某个环节被拦下。5.2 SMB签名强迫症与协议降级在某些安全要求高的网络里SMB签名是强制开启的。这时psexec的SMB服务创建方式和-hashes传递会直接被拒。我见过不少新手在这时候以为账号密码不对反复重试导致账号被锁定。正确处理方式是用wmiexec和atexec这类走不同协议的方式绕过或者先确认目标主机SMB签名状态crackmapexec smb 192.168.10.20 -u user -p Passw0rd! | grep signingCME输出中signing:True或者signing:False会明确标出来支持签名的主机直接用SMB类工具大概率会被弹回。这里的建议是建立一套自己的“横向移动工具优先级”先wmiexec协议层面更灵活再atexec不依赖管理共享然后才考虑psexec。5.3 账号锁定策略引发的第二次灾难看到密码喷溅几个网段后目标域账号触发锁定策略造成的后果比想象中严重。一次真实的项目中我见过测试人员在夜里跑了三个网段的密码喷洒第二天早上域里一半的账号被锁定业务方直接停了测试。解决这个问题的核心是控制节奏。CME提供了--no-bruteforce参数和延时选项实际执行时可以限制并发并设置合理的延时crackmapexec smb 192.168.10.0/24 -u user -p Passw0rd! --exec-method wmiexec -x whoami --rate 20--rate能限制每秒目标数量虽然不是万无一失但至少能延缓触发阈值。更重要的是做密码喷洒之前先摸清域策略里的账号锁定阈值和锁定时长这往往比工具本身更关键。6. 用攻击视角做防御自检写到最后这部分其实是这些年做攻防项目的最大体会一套工具栈能不能用好跟懂不懂防守方怎么看你的一举一动高度正相关。自己把自己摆到被监控的位置上去想很多操作就不会那么鲁莽了。6.1 还原攻击路径的几个关键检测点如果你在内网里用上述工具走了一遍防守方会从哪些地方发现你我总结下来基本是这几个点LSASS进程访问任何形式的sekurlsa::logonpasswords或者procdump转储LSASS都会触发对lsass.exe进程的打开和读取这类行为在EDR里通常有专门规则。SMB服务创建psexec留下的服务名通常带随机字符串和事件日志里的服务安装记录是横向移动的关键告警点。WMI进程创建wmiexec虽然不落盘但远程启动进程的行为会在目标机器上留下Microsoft-Windows-Shell-Core/Operational等日志记录。远程登录成功大量同一来源IP对多台机器的成功登录在SIEM里会被聚合为“横向移动”行为。DCsync复制目录这个行为是域控上最敏感的一类任何没有合法备份理由的GetNCChanges调用都应该被拦截或告警但它往往也是整个攻击链里杀伤力最大的一步。6.2 加固思路与自检清单用这套工具栈审视自己的内网时我通常会按下面这个清单做加固排查对LSASS的访问权限做限制启用Windows Credential Guard、启用“保护LSASS进程”的LSA保护策略mimikatz的读取难度就会直接上一个台阶。对域管账号做精细权限拆分避免所有域管账号都有dcsync权限限制可以复制目录的账号数量并单独监控。对SMB签名做全局策略有条件就强制启用能有效拦掉psexec和hash传递里的很大一部分利用路径。对远程管理协议做源IP白名单WMI、WinRM、SMB管理共享都只允许跳板机IP访问能大幅压缩横向移动的攻击面。定期拉一遍“同一源IP在短时间内登录成功多台机器”的查询这是发现CME类批量操作最直接的手段。最后再提醒一句内网渗透测试里的每一步都必须在获得明确授权的前提下进行工具本身没有正邪但用的边界和目的必须清楚。把工具栈吃透最大的价值不是多抓几份口令而是真正理解内网认证体系里“信任”和“凭据”这两个核心要素有多么容易被打穿这样你在做防守设计时才会从骨子里重视这些问题。这四件工具配合起来能走多远最终取决于你对自己所做操作的理解深度而不是命令记了多少条。
返回列表