1. 项目概述内网横向移动中的“无文件”执行艺术在内网渗透测试中横向移动是攻防对抗的核心环节其目标是在攻陷一台主机后以此为跳板向网络内部的其他主机扩散控制权。而执行命令是横向移动的“临门一脚”。今天我们不聊那些花哨的漏洞利用就聚焦于三种最经典、最基础但也最考验基本功的远程命令执行方式WMIExec、PSExec和DCOMExec。很多新手拿到一个域内普通用户权限后面对内网成百上千台机器往往不知道如何下手或者只知道用MSF的psexec模块一通乱打结果触发了大量告警还一无所获。这几种方法本质上都是在目标主机上“无文件”或“少文件”地创建一个进程来执行我们的指令但它们在实现原理、依赖条件、网络流量和日志痕迹上有着天壤之别。理解这些差异不仅能让你在红队行动中选择最隐蔽、最合适的“交通工具”更能让你在蓝队防守时一眼看穿攻击者的手法精准溯源。我们这次就深入对比这三种技术把它们的“指纹”和“脚印”掰开揉碎了讲清楚。2. 核心原理与机制深度拆解要对比痕迹首先必须理解它们各自是如何“隔空”让目标机器执行命令的。这就像不同的交通工具汽车、火车和飞机都能把你从A送到B但它们的引擎、轨道和天空留下的痕迹完全不同。2.1 WMIExec基于Windows管理规范的远程作业WMIExec的核心是Windows Management Instrumentation。你可以把WMI想象成Windows系统的一个超级管理员接口它通过一套标准的协议允许远程查询和操控系统的几乎一切从硬件信息到启动进程。WMIExec利用的正是WMI的Win32_Process类的Create方法。实现流程建立连接攻击者使用已有的凭据如哈希或密码通过DCOMDistributed Component Object Model或WinRMWindows Remote Management协议与目标主机的WMI服务Winmgmt建立认证连接。默认使用135端口DCOM或5985HTTP WinRM/5986HTTPS WinRM。创建进程连接成功后攻击者调用Win32_Process.Create方法并传入要执行的命令如cmd.exe /c whoami作为参数。进程执行WMI服务在目标系统上以指定的用户身份通常是连接所用的凭据对应的用户创建并执行该进程。获取输出标准输出和错误流可以通过WMI异步查询获取但很多工具如Impacket的wmiexec.py为了简化会创建命名管道来接收输出。关键特征无文件落地命令执行完全在内存中通过WMI接口完成不需要先将可执行文件上传到目标磁盘。高权限需求执行命令的用户需要对目标机器的WMI命名空间通常是root\cimv2有足够的访问权限通常需要是本地管理员组或域管理员组成员。依赖WMI服务目标主机的WMI服务Winmgmt必须正常运行。2.2 PSExec模仿Sysinternals的经典远程执行PSExec可能是知名度最高的工具它原本是Sysinternals现属微软的一款合法管理工具。其原理比WMIExec要“重”一些。实现流程上传服务二进制文件攻击者通过SMB445端口连接到目标主机的ADMIN$共享指向C:\Windows这需要管理员权限。然后将一个小型的服务端可执行文件PSEXESVC.exe上传到目标系统的C:\Windows目录下。创建并启动服务通过Service Control ManagerSCM远程接口在目标系统上创建一个新的服务其可执行文件路径指向刚刚上传的PSEXESVC.exe。服务执行命令启动该服务。PSEXESVC.exe服务启动后会连接回攻击者机器或监听一个端口接收要执行的命令并创建子进程来执行。清理命令执行完毕后服务会被停止和删除上传的PSEXESVC.exe文件通常也会被删除。关键特征文件短暂落地PSEXESVC.exe文件会被物理写入目标磁盘尽管执行后通常会被删除但这个“写入-删除”的动作会留下痕迹。依赖SMB和SCM整个过程严重依赖445端口的SMB协议和SCM远程管理接口。需要高权限同样需要目标主机的管理员权限以访问ADMIN$共享和创建服务。2.3 DCOMExec通过Office组件“借壳”执行DCOMExec是一种更为隐蔽的横向移动方式它利用了Windows系统中一些默认存在的、允许远程执行的DCOM组件。最常见的是MMCMicrosoft Management Console应用程序类MMC20.Application和ShellWindows/ShellBrowserWindow组件。实现流程以MMC20.Application为例建立DCOM连接攻击者使用凭据通过DCOM协议135端口用于初始的OXID解析随后连接会转移到由DCOM服务动态分配的高位端口与目标机器建立连接并实例化MMC20.Application这个COM对象。调用方法执行命令MMC20.Application对象有一个Document.ActiveView属性该属性下有一个ExecuteShellCommand方法。这个方法本意是用来在MMC管理单元中执行命令但可以被滥用。执行进程攻击者远程调用ExecuteShellCommand方法传入cmd.exe路径和命令参数该方法会在目标机器上以当前DCOM会话的用户身份通常是连接用户创建进程。关键特征无文件落地与WMIExec类似完全通过合法的DCOM组件接口执行无磁盘文件写入。依赖DCOM核心是DCOM远程协议需要135端口进行初始化。权限要求相对灵活对MMC20.Application等组件的远程访问权限可能比完全的管理员权限要宽松一些取决于系统的DCOM配置。但在默认配置下通常仍需要管理员权限才能成功实例化并执行。极其隐蔽由于是利用系统自带组件的合法功能行为看起来与正常的系统管理活动相似度更高。3. 网络流量与协议特征对比在流量侧安全设备如IDS/IPS、流量分析系统可以通过协议和交互模式来识别这些活动。特征维度WMIExecPSExecDCOMExec主要协议DCOM over RPC(端口135初始化随后动态高位端口) 或WinRM(HTTP.sys, 端口5985/5986)SMB(端口445, 用于文件上传和SCM通信)DCOM over RPC(端口135初始化随后动态高位端口)关键网络行为1. 135端口DCOM激活。2. 后续大量RPC调用IWbemServices接口操作。3. 若用WinRM则是标准的HTTP/HTTPS POST请求到/wsman端点。1. SMB会话建立与认证。2. 文件写入操作到\\host\ADMIN$\。3. SCM RPC调用svcctl接口创建/启动服务。4. 可能还有反向连接或新端口的命令通道流量。1. 135端口DCOM激活解析特定CLSID如49B2791A-B1AE-4C90-9B8E-E860BA07F889对应MMC20。2. 后续RPC调用IRemoteDispatch或特定接口方法如ExecuteShellCommand。流量识别关键词IWbemServices、Win32_Process、Create、WSMANSMB2 WRITE、PSEXESVC、svcctl、CreateServiceWCoGetInstanceFromIStorage、MMC20.Application、ExecuteShellCommand、特定CLSID隐蔽性中等。WMI是常见管理协议但大量Win32_Process.Create调用是可疑的。WinRM流量可加密更难检测。较低。SMB写入系统目录远程创建服务这一组合特征非常明显容易被安全产品规则匹配。高。利用合法DCOM组件流量与某些管理软件行为相似需要更深入的行为分析才能发现异常。实操心得在实际的渗透测试中如果目标网络出口有严格的IDSPSExec的SMB特征几乎会被立刻告警。WMIExec在流量层面稍好但安全设备可以通过“非管理终端频繁进行WMI远程进程创建”这样的行为模型来检测。DCOMExec的检测难度最大防守方需要具备对DCOM异常调用链的分析能力。4. 主机日志痕迹深度分析网络流量可能被加密或绕过但主机日志是攻击者难以彻底清除的“铁证”。我们分别看看在Windows安全日志和Sysmon日志下这三者会留下什么。4.1 Windows安全日志痕迹安全日志Event ID 4688、4624、4672等是审计登录和进程创建的关键。WMIExec登录事件会产生一次网络登录Logon Type 3对应攻击者连接到WMI服务。账户是使用的凭据对应的账户。进程创建事件产生的进程创建事件4688有一个关键特征父进程是WmiPrvSE.exe。这是WMI服务的宿主进程。命令行会显示通过WMI执行的命令。同时新进程的登录ID与原网络登录的登录ID不同WMI会使用自己的令牌创建进程。来源IP进程创建事件中的“源网络地址”可能为空或指向本地::1或127.0.0.1因为实际执行动作的是本地的WMI服务。真正的源IP记录在之前的网络登录事件中。PSExec登录事件首先会产生一次网络登录Logon Type 3用于访问ADMIN$共享。随后当PSEXESVC服务启动时可能会产生一次服务登录Logon Type 5不过具体表现取决于版本和配置。进程创建事件这是PSExec最明显的痕迹。父进程是PSEXESVC.exe。这个独特的映像路径C:\Windows\PSEXESVC.exe和进程名是极强的指示器。即使文件被删除日志中已记录的路径无法被篡改。服务操作事件会产生Event ID 7045服务被安装服务名通常是“PSEXESVC”或类似变体。这是PSExec的“招牌”日志。DCOMExecMMC20登录事件产生一次网络登录Logon Type 3用于DCOM激活。进程创建事件父进程是mmc.exe。这是一个非常具有迷惑性的点因为mmc.exe是系统自带的合法管理控制台程序。命令行参数会显示被执行的命令。攻击溯源时如果只看父进程是mmc.exe很容易误判为是管理员在本地MMC控制台的操作需要结合登录类型为网络登录以及**mmc.exe的命令行参数异常**例如执行了cmd /c whoami来综合判断。4.2 Sysmon日志痕迹如果部署Sysmon提供了更细粒度的监控是分析横向移动的利器。WMIExecEvent ID 1 (Process Creation)进程创建父进程为WmiPrvSE.exe。Event ID 3 (Network Connection)WmiPrvSE.exe进程可能会建立出站连接来回传数据如果工具采用反向连接方式但Impacket等工具常用管道可能不产生网络连接事件。Event ID 10 (Process Access)如果配置了可能会记录远程线程注入等行为但WMIExec通常不涉及。PSExecEvent ID 1 (Process Creation)进程创建父进程为PSEXESVC.exe。同时之前会有services.exe创建PSEXESVC.exe的事件。Event ID 11 (FileCreate)关键痕迹会记录文件C:\Windows\PSEXESVC.exe的创建事件。即使后续删除这个创建事件已经留存。Event ID 13 (RegistryEvent)可能会记录服务相关的注册表项创建HKLM\System\CurrentControlSet\Services\PSEXESVC。DCOMExecEvent ID 1 (Process Creation)进程创建父进程为mmc.exe。这是最核心的日志。Event ID 18 (PipeEvent)DCOM通信会使用命名管道可能产生诸如\pipe\LRPC-*或\pipe\epmapper的管道创建或连接事件。其他文件、注册表操作很少因为是无文件操作。注意事项日志分析时一定要做关联分析。单独一个来自mmc.exe的进程创建可能是正常的但如果这个mmc.exe进程的启动时间恰好紧跟着一个来自某个非常用管理终端的、针对同一台主机的网络登录事件那么可疑度就急剧上升。这就是所谓“上下文”的力量。5. 防御检测与溯源实战建议了解了攻击痕迹我们就可以有针对性地构建防御和检测策略。5.1 针对性的防御加固措施最小权限原则限制WMI远程访问在组策略中计算机配置 - 管理模板 - Windows组件 - Windows远程管理(WinRM) - WinRM服务和 WMI控制面板将远程WMI访问权限限制给真正需要的管理账户而非所有管理员。可以禁用低版本、不安全的DCOM协议。限制DCOM激活权限使用dcomcnfg.exe组件服务对MMC20.Application等高危DCOM组件编辑其“安全”设置在“启动和激活权限”中移除无关用户的“远程启动”和“远程激活”权限。这是一项细致但非常有效的工作。限制SMB共享访问严格控制对ADMIN$、C$等管理共享的访问仅限必要的管理账户。网络层控制分段隔离将关键服务器、域控放在独立网段严格限制从办公区、DMZ区发起的、指向这些区域的SMB、WMI、DCOM135端口连接。主机防火墙在非服务器的工作站上可以通过Windows防火墙入站规则禁止来自非信任IP段的135、445、5985等端口的连接。启用并强化审计启用详细审计策略确保“审核登录事件”、“审核进程创建”、“审核策略更改”、“审核对象访问”针对文件和服务等策略已启用并设置为同时记录成功和失败。部署Sysmon这是性价比最高的增强检测手段。精心配置Sysmon规则例如告警所有父进程为WmiPrvSE.exe且命令行包含cmd.exe或powershell.exe的进程创建。告警任何在C:\Windows目录下创建.exe文件的行为捕获PSExec上传。告警由mmc.exe启动的、命令行参数异常的子进程。5.2 安全监控与告警规则示例以下是一些可以部署在SIEM或日志分析平台中的检测规则思路检测PSExec(event_id:4688 OR event_id:1) AND parent_process_name:”PSEXESVC.exe”event_id:11 AND target_file:”*\\Windows\\PSEXESVC.exe”event_id:7045 AND service_name:”PSEXESVC”(event_id:4688 OR event_id:1) AND process_command_line:”*PSEXESVC*”检测WMIExec(event_id:4688 OR event_id:1) AND parent_process_name:”WmiPrvSE.exe” AND process_name:(“cmd.exe” OR “powershell.exe” OR “whoami.exe”)event_id:4688 AND process_command_line:”*Win32_Process.Create*”(如果命令行记录了WMI调用细节)关联规则在短时间内同一源IP对多台主机的Winmgmt服务或5985端口进行网络登录4624, Logon Type 3并随后立即有WmiPrvSE.exe创建进程。检测DCOMExec(event_id:4688 OR event_id:1) AND parent_process_name:”mmc.exe” AND process_name:(“cmd.exe” OR “powershell.exe”)关联规则一个网络登录4624, Logon Type 3事件后在极短时间内如2秒内同一主机上出现了由mmc.exe创建的、执行系统命令的子进程。并且这个mmc.exe进程的启动时间与其父进程如svchost.exe的启动时间间隔异常正常的MMC是用户交互启动的而DCOMExec启动的mmc.exe通常是作为子进程快速启动执行命令后退出。5.3 应急响应与溯源排查清单当怀疑发生横向移动时可以按此清单快速排查时间线定位确定可疑的大致时间范围。检索安全日志查找该时间范围内所有的网络登录Logon Type 3事件Event ID 4624重点关注来源IP是否为内网其他已失陷主机。根据登录事件中的Logon ID关联查找后续的进程创建事件4688。分析进程创建链检查可疑进程的父进程。如果是WmiPrvSE.exe、PSEXESVC.exe或是由一个网络登录后立即启动的mmc.exe则高度可疑。检查进程的命令行看是否包含侦察whoami,ipconfig,systeminfo、凭证窃取mimikatz,procdump或横向移动命令net use,sc,wmic。检查文件与服务在文件系统如使用Everything工具中搜索PSEXESVC.exe是否残留。检查服务列表sc query或注册表HKLM\SYSTEM\CurrentControlSet\Services中是否有名称奇怪或已被删除的服务记录。网络流量回溯如果有全流量记录在对应时间点过滤源/目的IP的135、445、5985端口流量分析其协议载荷如果未加密或交互模式。6. 攻击视角下的工具选择与隐蔽技巧作为渗透测试人员理解痕迹是为了更好地规避检测。在实际项目中如何选择和使用这些技术环境侦察先行先用net view、portscan或BloodHound等工具摸清环境。如果目标主机开放5985且允许你的当前凭据连接WinRMWMI over WinRM可能是首选因为其流量可走HTTPS5986加密后更难被检测内容。优先尝试无文件方式DCOMExec是当前最推荐的首选尝试方式尤其是利用MMC20.Application或ShellBrowserWindow因为其日志痕迹最具迷惑性。可以使用Invoke-DCOM等PowerShell脚本或Impacket的dcomexec.py。如果DCOM失败再尝试WMIExec。注意可以尝试使用-no-output选项如果工具支持来避免创建用于回显输出的命名管道减少网络和进程树噪音。谨慎使用PSExec除非环境非常宽松如某些测试内网或者你已经拿到了域管权限且不在乎触发告警比如在最后的“收割”阶段否则应尽量避免使用原生PSExec。Metasploit的psexec模块特征非常明显。痕迹清理的局限要清醒认识到在专业的蓝队面前完全无痕的横向移动几乎不可能。我们的目标不是“绝对隐身”而是“延迟被发现”和“增加溯源成本”。清除日志如使用wevtutil cl本身会产生新的、更可疑的日志事件Event ID 1102。更高级的做法是使用“生活模拟”Living off the Land技术完全利用系统自带工具和合法协议让行为融入“噪音”。工具变种与混淆使用自定义编译的、修改了服务名和二进制特征的PSExec变种可以绕过基于已知哈希或字符串的静态检测。对于WMI和DCOM可以编写自定义的VBScript或PowerScript来调用避免使用公开的工具框架能有效规避基于工具命令行的检测规则。横向移动是内网渗透的筋骨而WMIExec、PSExec、DCOMExec则是其中最基本的步法。掌握它们不仅要知道怎么用更要明白它们每一步踩下去会留下什么样的脚印以及如何从一堆脚印中分辨出敌人的踪迹。攻防的本质是知识的对抗红队需要知道蓝队在看什么才能藏得更深蓝队需要知道红队会怎么走才能防得更准。希望这篇详细的对比能成为你手中一张清晰的“地图”无论你站在地图的哪一边都能更从容地应对这片名为“内网”的战场。