内网渗透四件套实战:从入口突破到域控验证

发布时间:2026/9/16 9:31:48
内网渗透四件套实战:从入口突破到域控验证 最近一段时间圈子里的朋友总在聊同一个话题拿下一台边界机器之后下一步到底怎么走很多新手容易卡在这一步shell有了但内网环境不确定、横向思路乱、凭据不知道从哪下手。我自己做安全评估这些年踩过不少坑也沉淀下一套比较顺手的工具栈——Metasploit、Impacket、CrackMapExec、mimikatz这四个基本覆盖了从入口突破到域控验证的完整链路。这篇文章就把它们怎么配合、各自擅长的环节、常见坑和防御视角全部拆开讲一遍。先说清楚前提所有操作必须基于授权测试环境比如自建靶场、CTF平台或甲方明确委托的攻防演练。这篇文章的核心目的是帮安全测试人员、蓝队成员和安全爱好者理解攻击链路的底层逻辑从而在真实场景里做好检测和加固而不是教人去打真实目标。合规是底线脱离了授权再精妙的技术也是有害无益。1. 内网测试的完整链路从入口到域控1.1 四件套各管哪一段很多人第一次接触内网渗透时会被一堆工具搞晕其实核心链路非常清晰信息收集、漏洞利用、凭据获取、横向移动、权限维持。Metasploit在漏洞利用阶段特别能打它的模块生态成熟载荷生成方便适合在拿到入口后快速建立稳定的代理通道Impacket套件则更像是Windows协议层面的“瑞士军刀”它直接操作SMB、WMI、LDAP这些协议不需要在目标上装任何东西横向移动全靠它CrackMapExec是个批量化的“侦察兵”一个命令扫完整网段的共享、会话、密码策略效率极高mimikatz则是凭据获取的终点站专门从内存、SAM、域控里把密码和票据“拽”出来。这四个工具并不是各干各的而是前后衔接的关系。Metasploit解决“怎么进去”的问题Impacket解决“怎么在里面走”的问题CrackMapExec解决“哪里值得走”的问题mimikatz解决“进去后能拿到什么”的问题。如果非要打个比方Metasploit是撬锁器Impacket是万能钥匙CrackMapExec是地图和探测器mimikatz是保险柜破拆器。四者配合起来一条完整的攻击链才跑得通。1.2 为什么不用单一工具硬刚我见过有人只靠Metasploit一条路走到黑结果遇到杀软查杀、模块不支持就卡住了。单一工具的局限在于第一覆盖面不够内网环境千奇百怪总有Metasploit模块覆盖不到的服务第二效率太低搞内网测试要面对几十台甚至上百台机器一台一台去试根本做不完第三隐蔽性差反复用同一个工具容易被流量设备抓到特征。组合工具栈的意义就在于用最小成本覆盖最大范围同时分散流量特征降低被日志关联分析识别的概率。从实战角度看工具栈还有一个容易被忽视的价值就是“交叉验证”。Metasploit打进去后dump下来的hash可以用CrackMapExec批量验证是否在其他机器上有效mimikatz抓到的明文密码或票据可以直接丢给Impacket做横向。这种工具间的数据流转才是整个工作流的核心价值所在。2. Metasploit测试入口与漏洞利用的基石2.1 常用模块与载荷选择Metasploit的模块体系很庞大但内网测试场景下真正高频用到的其实就是几类。Exploit模块里用得最多的是针对Windows SMB、RDP、Web服务的已知漏洞利用比如MS17-010系列、CVE-2019-0708对应的模块、各种Web中间件的反序列化漏洞等。Payload方面我最常用的是windows/x64/meterpreter/reverse_tcp和windows/x64/meterpreter/reverse_https前者稳定通用后者能躲过一部分基于明文TCP的流量检测。模块选择有个原则能用带psexec或bind类型的模块就不要轻易用单纯的staged payload。比如exploit/windows/smb/ms17_010_psexec这类模块它把利用过程和后续载荷执行合并在一起生成的就是一个功能完整的Meterpreter会话不需要再手动去传二次载荷。很多新手习惯用msfvenom生成一个exe再想办法上传执行在真实测试里反而容易触发文件落地检测。2.2 实战中的session管理与后渗透前置session是Metasploit里最核心的抽象概念。每台被打下来的机器对应一个或多个sessionsessions -l查看列表sessions -i id切换进去。但光有session还不够后渗透阶段要做的第一件事永远是确认权限和机器信息用getuid、sysinfo、ipconfig快速摸清楚当前环境。然后是升级权限。Meterpreter里用getsystem直接尝试提权这依赖当前进程的令牌不一定每次都成功。不成功就退出来用exploit/windows/local/下的本地提权模块结合目标系统的补丁情况打对应漏洞。提权完成后我一般会立刻run post/multi/manage/autoroute设置路由让MSF框架自身能访问到目标内网的其他网段同时把session挂到后台用sessions -u给每个session升级成meterpreter。这一步做完Metasploit的使命就算完成大半接下来的内网漫游和横向移动可以交给其他工具。2.3 几个关于Metasploit的硬经验第一handler的配置要跟payload严格对应reverse_tcp就用exploit/multi/handler配合相同payload端口和LHOST别写错。第二payload防杀是个大话题cerber和shikata_ga_nai这种编码器在真实环境里只能算是入门更好用的思路是用小体积的下载器或白名单程序加载方式让目标机器主动去访问我们的服务器拉取后续载荷。第三session不稳定时优先考虑set SessionRetryTotal和set SessionRetryWait同时在模版里把AutoRunScript配上migrate让Meterpreter启动后自动迁移到一个稳定的系统进程里去减少被用户关掉进程导致断线的情况。3. Impacket套件Windows协议工具箱3.1 Impacket是什么为什么说它是横向的瑞士军刀Impacket是一套基于Python的Windows网络协议库里面附带了一堆可以直接用的命令行工具。它不走常规的“上传后门再执行”流程而是直接通过SMB、WMI、DCOM、LDAP这些协议和服务端本身做交互远程调用目标Windows机器的接口来执行命令。所以它的隐蔽性天然比传一个exe上去要好因为很多杀软对PowerShell和WMI的监控虽然已经加强了但比起直接落地一个可执行文件这种“协议级操作”还是要轻量得多。这个套件里我几乎每次都会用到的有impacket-psexec、impacket-wmiexec、impacket-atexec、impacket-secretsdump以及票据相关的一组工具比如impacket-getTGT、impacket-getST、impacket-ticketer。它们覆盖了横向执行和凭据导出两个最常用的场景。3.2 psexec、wmiexec、atexec怎么选三者的核心功能都是“用一组凭据在远程机器上执行命令”但实现机制完全不同选哪个取决于目标机器的环境。psexec方式是把一个服务二进制传到目标的ADMIN$共享然后通过SMB创建服务来执行。要求目标开启ADMIN$共享而且要有管理员权限。优点是通道干净、执行稳定缺点是文件落地行为明显还容易触发服务创建类的日志告警。wmiexec走的是WMI的Win32_Process.Create方法不需要文件落地直接创建进程执行命令再把输出回写到一个临时文件里读取。它对防火墙策略相对友好因为很多环境允许WMI流量通过。缺点是每次执行都有一些额外的网络请求速度稍慢。atexec利用的是Windows任务计划程序把命令注册成一个计划任务来触发执行。优势是不依赖ADMIN$共享在一些精简配置的服务器上可能更好使。代价则是会在系统里留下计划任务的痕迹蓝队在排查时比较容易通过计划任务日志关联到异常行为。我的选择逻辑很简单默认先用wmiexec因为隐蔽性和兼容性最均衡如果要跑复杂的脚本或需要高稳定性用psexec明确知道目标是Windows Server且想快速执行单条命令时atexec是不错的选择。3.3 Impacket高频踩坑记录使用impacket-psexec时最常遇到的就是NT_STATUS_ACCESS_DENIED。此时先确认账号密码或hash是否正确再确认目标是否开放了ADMIN$和IPC$。还有一点容易忽视Psexec执行要求目标机器的“本地安全策略”里允许该用户从网络访问此计算机。默认域管理员一般可以但普通域用户可能没权限。impacket-secretsdump是导hash和凭据的神器用法分几种场景。有本地管理员凭据时可以对单台机器执行secretsdump导出SAM、LSA缓存等拿到域管哈希时可以对域控执行lsadump::dcsync风格的目录复制从而获得整个域所有用户的hash。这个工具的价值在于它把“从一台机器提取凭据”和“用凭据继续渗透整个域”这两步完美衔接起来。还有个常见问题是Python环境版本不兼容。Impacket要求比较新的Python和某些依赖库如果系统自带的Python过旧运行时经常报No module named impacket或加密库相关的错。我建议直接用pip建个虚拟环境安装impacket避免污染系统环境。4. CrackMapExec批量横向与信息收集的效率之王4.1 CME的典型用法与参数CrackMapExec现在常被称为NetExec是内网测试效率提升最明显的一件工具。它的核心思路是用一套统一语法对网段内所有机器批量执行同一种检查。最简单的用法crackmapexec smb 192.168.10.0/24 -u admin -d corp.local -p Pss123它会自动遍历这个网段里所有开放SMB的机器逐一尝试使用该用户名密码然后把成功的结果直接标记出来。单这一条命令就能把网段内所有使用同一密码的机器全部筛出来横向移动的目标瞬间清晰。如果你手里已经有hash而不是明文密码把-p换成-H就能做hash传递。这是内网测试里最常用也最出效果的姿势。crackmapexec smb 192.168.10.0/24 -u admin -H aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0 --shares可以批量查看每台机器的共享目录列表配合--sessions能看到当前登录会话配合--users能枚举用户列表。这类信息收集一多内网的整体画像就出来了。4.2 结合靶场环境快速梳理内网资产我搭靶场时习惯先用CrackMapExec把内网资产摸一遍。比如拿到入口机器后上传一个代理让本地能访问目标内网192.168.10.0/24网段接着直接用CME对网段做批量密码探测和hash验证同时用--shares和--spider去扫描共享文件里是否有敏感文档或脚本很多时候密码和连接字符串就这样暴露出来。CME另一个很好的功能是模块生态。它支持--exec-method选择执行方式也支持mimikatz模块可以在拿到本地管理员权限后直接在所有可访问的机器上批量执行凭据抓取相当于把之前几件工具的活串起来。不过我这里要专门提醒一句批量执行凭据抓取的行为非常容易被EDR标记实际测试中要评估授权范围和风险不可乱用。4.3 细节与坑CME对密码末尾的$符号和特殊字符处理容易出错建议把所有凭据放进~/.cme/cme.conf或环境变量里避免每次在命令行里敲导致Shell历史泄露。另一个坑是目标机器可能只开放了445但对当前网段不通这时用-p 445去强扫反而会拖慢速度可以先做一次端口探测再决定。在真实的攻防演练里CME扫描日志往往很“吵”大批量的SMB连接会触发Windows的登录日志和审计日志。所以我的习惯是分两批执行第一批用小字典只测关键机器第二批才对全量网段做信息枚举这样既控制噪声又把风险范围压到最低。5. mimikatz凭据获取与Kerberos攻击的集大成者5.1 从LSASS抓取凭据的原理与操作mimikatz这个名字在安全圈里无人不知核心能力就是操作Windows的各种凭据存储机制。最经典的操作是privilege::debug开启SeDebugPrivilege权限然后执行sekurlsa::logonpasswords直接从LSASS进程的内存中提取当前已登录用户的明文密码、NTLM Hash和Kerberos票据。这里很多人会问为什么只靠抓LSASS就能拿到这么多东西因为Windows为了保证用户登录后的体验会把很多敏感凭据缓存在内存里比如NTLM认证要用的Hash、Kerberos的TGT票据、某些系统服务用的账号密码等。mimikatz的本质就是读取这块内存区域把它格式化输出出来。这是Windows机制本身的设计使然不是mimikatz有什么“魔法”。实操时要特别注意权限。普通用户权限下运行sekurlsa::logonpasswords基本必失败必须先提到SYSTEM权限或用管理员权限启动进程。拿到输出后优先记录NTLM Hash、Kerberos票据和明文密码这三类。其中很多MSF和Impacket工具都支持直接用Hash做横向不需要知道明文。比如psexec -hashes和wmiexec -hashes都是标准操作。5.2 黄金票据与白银票据没那么神秘mimikatz还有一个重量级能力是Kerberos攻击主要就是Golden Ticket和Silver Ticket。先简单理解一下Kerberos的认证流程用户向KDC通常就是域控申请一个TGT票据然后用TGT去申请访问特定服务时使用的ST票据。TGT的发放在目前版本的域环境里是用域KRBTGT账号的Hash来签名的。黄金票据的原理就是如果我们拿到了KRBTGT的Hash就可以任意伪造TGT从而冒充任何人访问整个域的任何资源包括域控上的任何服务。白银票据类似只不过伪造的是某个具体服务的ST票据影响力局限于该服务但实际测试里也够用了。执行黄金票据攻击时要用mimikatz里的kerberos::golden命令填上KRBTGT Hash、目标域的SID、伪造的用户名等参数生成票据文件后再用kerberos::ptt把它注入当前会话整个域就相当于对你敞开大门了。有一点要记住伪造用户的名称不一定非要是域管理员有时伪造一个普通的服务账号反而不容易被监测到。5.3 检测视角怎么防备mimikatz类行为mimikatz的攻击手段已经很多年了蓝队和终端安全产品都在针对性地做防御和检测。比较有效的思路主要有几个方向。一是禁用WDigest让系统不再以明文存储密码相关注册表键值是把HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest下的UseLogonCredential设为0这能挡掉一部分明文抓取。二是启用Credential Guard把LSASS里的凭据隔离到虚拟安全进程里mimikatz读取时会遇到明显的权限和内存保护限制。三是开启PPL保护将LSASS进程设置为受保护进程这样即使拥有管理员权限也很难直接打开LSASS的内存句柄。当然这些措施都无法做到百分之百防御。攻击者还可以从NTDS.dit、注册表配置单元或备份文件里提取凭据。所以更彻底的做法是在域控上限制不必要的账号访问定期轮换高权限密码并监控异常的对LSASS进程的访问请求。对蓝队来说看到进程尝试打开LSASS、使用SeDebugPrivilege、创建已知的mimikatz相关命令行等行为就必须立刻拉高告警级别。6. 一条完整的攻防验证链路复盘6.1 场景假设与授权说明我拿一个自建的靶场环境来做完整串讲。靶场模拟一个小型企业内网外网入口是一台Linux Web服务器内网网段192.168.10.0/24里面有三台Windows Server并部署了域环境域名为corp.local域控是DC01。整个测试已经获得靶场所有者的书面授权所有操作仅为验证防御盲区。6.2 从Web入口到域控的操作串讲先通过信息收集发现一台Web服务器存在远程命令注入漏洞用Metasploit的对应模块打一个反弹shell成功拿到一个低权限会话。接着getsystem提权过程中发现提权失败随后切换到exploit/windows/local/ms16_032_secondary_logon_handle_privesc模块成功获得SYSTEM权限。sysinfo和ipconfig确认内网还有192.168.10.0/24网段run post/multi/manage/autoroute设置好路由。然后利用Meterpreter自带的hashdump导出本地账号和hash再通过run post/windows/gather/smart_hashdump尝试碰撞域账号。这步拿到一个域普通账号的hash。把得到的hash拿到CrackMapExec里批量验证整个网段crackmapexec smb 192.168.10.0/24 -u corp\\test -H hash --shares扫出两台服务器存在共享文件夹其中一台还是域控。再针对目标机器用impacket-wmiexec或impacket-psexec执行命令验证hash是否有效。如果该账号权限不够则回到MSF会话里用mimikatz插件或上传mimikatz执行privilege::debug和sekurlsa::logonpasswords抓到本地管理员和另一个域用户的明文密码。拿到更高的域账号后对域控执行impacket-secretsdump corp.local/administrator:Pssw0rd192.168.10.10导出域控上的NTDS.dit得到所有域用户的hash包括KRBTGT账号的hash。这个时候已经具备伪造黄金票据的条件再用mimikatz的kerberos::golden伪造一张票据成功访问域控上的文件服务和计划任务。整条链路走完验证了从边界到域控之间的所有薄弱环节。6.3 复盘哪里可以提前止损回看这条链路真正致命的地方有两处。第一Web应用的远程命令注入没有做任何过滤和输入校验这是最容易被攻击者利用的入口第二内网中多个Windows服务使用了同一个弱口令导致hash一旦泄露就能横向扩散到大量机器。如果蓝队从一开始为Web服务设置WAF同时对内网账号做定期轮换和蜜蜂账户监测这条链路的推进难度会高很多。7. 常见问题与排查技巧实录7.1 工具执行失败类问题速查现象常见原因排查方向psexec/wmiexec报NT_STATUS_ACCESS_DENIED凭据错误或目标策略限制核对用户名、域、hash格式检查目标是否关闭ADMIN$共享Metasploit模块执行成功但迟迟不回连handler配置错误或防火墙拦截确认LHOST、LPORT与实际网络路径可达尝试换成reverse_httpsmimikatz运行后没有输出明文系统启用了Credential Guard检查进程是否受保护改用hash提取或者内存转储分析CME扫描结果全部为空目标网段不通或SMB口关闭先做端口探测确认445可达再检查指定网段是否正确secretsdump导出NTDS时提示权限不足当前账号没有域控上的复制权限需使用域管或具备Directory Replication权限的账号执行7.2 行为规避与蓝队监测之间的关系必须说清楚了解绕过手段的唯一目的是帮助蓝队更好地发现它们在而不是教人去绕监测。真实攻防演练中蓝队最关注的行为特征包括LSASS进程被远程打开、大量SMB登录失败后的成功记录、多个机器短时间内出现类似的服务创建或计划任务创建。所以作为安全测试人员在执行上述命令时要自觉控制节奏减少高频暴击带来的告警洪峰把对业务和系统的影响降到最低。还有一个小细节内网测试中所有工具的输出最好都保留成文本方便复盘时对照时间线。我自己的习惯是把“获取时间、机器名、执行命令、输出结果”记成一张简单的表不仅自己看得懂后续给客户写报告时也不需要重新跑一遍命令。7.3 给防御方的几条实用建议如果负责防守我建议优先从两层入手。在终端侧开启Credential Guard并启用LSASS保护同时禁用不必要的WDigest。在网络侧重点监控域控和其他敏感服务器上“非常规来源访问445、3389端口”的行为以及短时间内账号登录失败的批量模式。再配合一个“假账号”作为蜜罐一旦有人在域内尝试使用这个账号立刻触发告警往往能抢在攻击者扩大战果之前把它拦下来。另外不要只盯着工具特征日志和行为的结合分析才是关键。红队工具一直在变但攻击的底层逻辑不会变——总得要接触到凭据、总得要横向移动、总得要造访域控。明白这个逻辑防守时就更能抓住要害而不是被工具名牵着走。说实话工具栈的熟练度只能代表一个人的下限真正代表上限的是对协议、系统和凭据流转机制的理解。我刚开始接触内网测试时也容易死记命令总在换工具后来才发现把Metasploit、Impacket、CrackMapExec、mimikatz的核心链路打透就足以应对绝大多数场景了。这篇内容全部基于我自己的靶场和授权测试经验整理希望大家在实际操作中严格守住授权边界把每一次测试都当作一次提升防御水平的机会。