发布于20小时前20小时 问题背景在已授权的内网测试中,测试账号能够访问目标主机的 445 端口,甚至可以完成 SMB 身份认证,但远程查询或创建服务时返回“拒绝访问”或“RPC 服务器不可用”。这类情况应如何区分网络、身份、令牌过滤和服务控制管理器权限问题?目标端应检查哪些日志?这类问题不能只用“445 端口已开放”判断权限是否成立。SMB 文件共享和远程服务控制是两条相关但不等价的链路:前者主要涉及 TCP 445、共享权限和 NTFS 权限;后者通常还依赖 RPC Endpoint Mapper、动态 RPC 端口、服务控制管理器权限以及目标主机实际生成的访问令牌。先明确验证边界建议使用专门的测试账号,并记录测试源 IP、目标主机、开始时间和结束时间。不要直接以生产域管理员账号反复尝试,也不要为了“让测试通过”临时关闭防火墙、UAC 或终端防护。SMB 认证成功,不代表能够访问 ADMIN$。能够访问 ADMIN$,不代表具备远程服务控制权限。出现 4624,不代表已经获得管理员令牌。出现 4672,只说明该登录会话被分配了敏感特权,仍需结合具体操作日志判断。未出现 7045,也不能证明没有发生其他远程管理行为,例如 WinRM、WMI 或计划任务操作。第一步:拆分网络与协议问题从测试端分别验证 SMB、RPC Endpoint Mapper 和 WinRM。不要只使用端口扫描结果,因为中间防火墙可能允许建立连接,但拦截后续动态 RPC 流量。$target = '10.10.10.20' Test-NetConnection $target -Port 445 Test-NetConnection $target -Port 135 Test-NetConnection $target -Port 5985 Test-NetConnection $target -Port 5986 # 仅验证共享访问,不写入文件 cmd /c "dir \\$target\ADMIN$" # 仅查询远程服务列表,不创建或修改服务 sc.exe \\$target query结果可以按下面的方式理解:445 不通:优先检查主机防火墙、网络 ACL、Server 服务和 SMB 监听状态。445 可通但 ADMIN$ 拒绝访问:重点检查账号是否属于目标本地管理员组、远程 UAC 过滤、共享权限和账号来源。ADMIN$ 可访问,但远程服务查询提示 RPC 不可用:检查 TCP 135、动态 RPC 端口以及“远程服务管理”相关防火墙规则。远程服务查询成功,但修改操作被拒绝:通常已经进入服务控制管理器权限或令牌权限问题,不应继续归因于 SMB。第二步:确认目标端实际身份与权限在目标主机本地或经批准的管理通道上检查管理员组成员。需要注意,嵌套域组可能不会被简单的本地组列表完全展开,最终应以实际登录令牌和域组关系为准。whoami /all Get-LocalGroupMember -Group 'Administrators' Get-Service RpcSs,LanmanServer,WinRM Get-NetTCPConnection -State Listen | Where-Object LocalPort -in 135,445,5985,5986 | Select-Object LocalAddress,LocalPort,OwningProcess reg.exe query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v LocalAccountTokenFilterPolicy如果测试使用的是目标主机本地管理员账号,应重点关注远程 UAC 令牌过滤。LocalAccountTokenFilterPolicy 不存在或为 0 时,本地管理员通过网络登录通常会得到受过滤令牌;设置为 1 会削弱这一保护,不建议把修改该值作为常规修复方案。更稳妥的做法是使用受控域账号、JEA、受限 WinRM 或集中运维平台完成远程管理。如果使用域账号,还应确认其域组成员关系已同步,并排除 Kerberos 票据尚未更新的情况。账号刚被加入管理组时,旧登录会话中的访问令牌不会自动刷新,通常需要注销并重新登录后再验证。第三步:按时间窗口收集日志建议以测试开始时间前后 15 至 30 分钟为窗口,在目标端导出 Security 和 System 日志。关键事件包括:4624:成功登录。网络访问通常对应登录类型 3。4625:登录失败,可查看 Status 和 SubStatus 区分错误密码、账号限制和登录类型限制。4672:为新登录分配敏感特权,应通过 Logon ID 与 4624 关联。4688:进程创建,需要提前启用“审核进程创建”;命令行记录还需启用相应策略。4697:安装服务,依赖“审核安全系统扩展”。5140:访问网络共享,通常每个共享会话记录一次。5145:详细共享访问,可看到共享名、相对目标名称和访问权限。7045:System 日志中的服务安装事件,包含服务名、映像路径和启动类型。New-Item -ItemType Directory -Path 'C:\IR' -Force | Out-Null $start = (Get-Date).AddMinutes(-30) $securityIds = 4624,4625,4672,4688,4697,5140,5145 Get-WinEvent -FilterHashtable @{ LogName='Security' Id=$securityIds StartTime=$start } | Sort-Object TimeCreated | Select-Object TimeCreated,Id,MachineName,Message | Out-File 'C:\IR\security-window.txt' -Encoding utf8 Get-WinEvent -FilterHashtable @{ LogName='System' Id=7045 StartTime=$start } | Sort-Object TimeCreated | Select-Object TimeCreated,Id,MachineName,Message | Out-File 'C:\IR\service-install-window.txt' -Encoding utf8 # 查看当前审核策略,子类别名称可能随系统语言变化 auditpol.exe /get /category:*分析时不要只按事件 ID 搜索。应至少关联以下字段:4624 中的源网络地址、目标账号、登录类型和 Logon ID。4672、5140、5145 中与登录会话对应的 Logon ID。5145 中的 Share Name、Relative Target Name 和 Access Mask。7045 中的 Service Name、Image Path、Service Type 和 Start Type。4697 中的 SubjectLogonId,用于确定发起服务安装的安全主体。7045 本身通常不能直接给出远端源 IP,因此应以时间为主线,将其与 4624、5145、4697、4688 以及防火墙日志关联。若部署了 Sysmon,还可以参考事件 1 的进程创建和事件 3 的网络连接,但事件 3 默认可能未启用,并且高流量服务器需要谨慎配置过滤规则。常见误判把 4624 当作提权成功:4624 只说明一次登录成功,必须检查登录类型、账号、源地址和后续授权结果。把 4672 当作域管理员证据:本地 SYSTEM、服务账号及部分内置主体也会产生 4672。看到 ADMIN$ 就认为发生文件投递:5140 仅代表共享被访问,是否读取或写入应查看 5145 的目标路径和访问权限。没有 7045 就认定不存在横向行为:WMI、WinRM、远程计划任务和远程注册表具有不同的日志链路。直接启用 LocalAccountTokenFilterPolicy:这会扩大本地管理员凭据被用于横向移动的风险。修复与加固建议限制 TCP 445、135 和动态 RPC 端口的来源,仅允许管理网段或跳板机访问。避免多台主机复用本地管理员密码,使用 Windows LAPS 管理唯一且定期轮换的本地管理员凭据。优先通过 WinRM HTTPS、JEA 或受控运维平台提供最小权限管理,不把 ADMIN$ 和远程服务管理作为通用运维入口。通过组策略启用登录、详细文件共享、进程创建和安全系统扩展审核,并根据日志量调整 Security 日志容量。启用进程命令行审核前评估敏感参数泄露风险,日志平台应限制读取权限和保存周期。对 7045、4697 以及异常 5145 写入行为建立告警,重点关注用户可写目录、临时目录和非标准服务路径。保留主机防火墙,不要用全局关闭防火墙的方法排障;应创建限定源地址、目标端口和程序的临时规则,并在验证后回收。完成测试后检查是否遗留测试文件、服务、账号、计划任务或防火墙规则,并保存清理记录。结论SMB 可访问但远程服务操作失败,通常不是单一端口问题。可靠的定位顺序是:先拆分 445、135 和动态 RPC 链路,再确认账号在目标端生成的实际令牌,最后通过 4624、4672、5145、4697 和 7045 建立时间线。排障目标应是确认权限边界和审计覆盖是否符合设计,而不是通过关闭安全机制强行让验证成功。 服务器、云资产与权限边界梳理示意 网络请求、日志与边界流量分析示意
19小时前19小时 SMB 可访问只说明 445、身份认证和某个共享对象的 ACL 通过了,不代表该账号具备 SCM、WMI、计划任务或 WinRM 的远程管理权限。建议先用只读操作把失败点分层,不要直接通过关闭 UAC、防火墙来验证。 1. 先确认实际使用的身份和认证方式 net use \\TARGET\IPC$ /delete klist purge net use \\TARGET\IPC$ /user:DOMAIN\User * net use \\TARGET\IPC$ klist 重点排除已有 SMB 会话复用了其他凭据。Windows 对同一目标同时使用多组凭据时也可能出现 1219 错误。域环境下再看是否拿到了目标的 CIFS Kerberos 票据;只有 NTLM 时,需要继续检查 DNS、SPN、时间同步和域连通性。 建议分别测试: dir \\TARGET\Share dir \\TARGET\ADMIN$ sc.exe \\TARGET query type= service state= all powershell -NoProfile -Command "Test-NetConnection TARGET -Port 445" powershell -NoProfile -Command "Test-NetConnection TARGET -Port 135" powershell -NoProfile -Command "Test-WSMan TARGET" 普通共享可读、ADMIN$ 拒绝:通常只是共享或文件 ACL 权限,不具备远程管理权限。 sc.exe 返回错误 5:已到达 SCM,但令牌或 SCM/服务对象 DACL 不允许。 返回 1722:优先检查 RPC、防火墙及动态 RPC 端口,而不是 SMB 权限。 返回 1326:认证或凭据问题。 WinRM、WMI、SCM 使用的是不同授权模型,某一种成功不能推导其他方式也成功。 2. 检查目标端权限边界 在目标机由管理员执行只读检查: whoami /all net localgroup Administrators sc.exe sdshow scmanager sc.exe sdshow ServiceName reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy secedit /export /cfg C:\Windows\Temp\secpol.cfg findstr /i "SeNetworkLogonRight SeDenyNetworkLogonRight" C:\Windows\Temp\secpol.cfg 常见边界包括: 账号能通过网络登录,但不在本地管理员组,也没有被单独授予服务查询、启动或停止权限。 使用目标机本地管理员账号时,被 Remote UAC 过滤成受限令牌。LocalAccountTokenFilterPolicy 默认值或值为 0 时需要重点关注,但不建议为了测试直接改成 1;更合理的是使用域账号、JEA/WinRM 委派,或给具体服务设置最小权限。 SCM 管理器允许枚举,但具体服务 DACL 不允许启动、停止或修改,因此可能出现“能查询、不能操作”。 “拒绝从网络访问这台计算机”策略、受保护用户组、认证策略筒仓等覆盖了本地组成员关系。 若是启动服务失败,还要区分“调用者无权控制服务”和“服务自身账号缺少作为服务登录权限、密码错误、依赖项失败”。后者通常会在 System 日志中留下明确错误。 3. 按远程管理协议检查网络路径 SMB/命名管道:TCP 445。 WMI/DCOM:TCP 135 加动态 RPC 端口。 WinRM:TCP 5985/5986,并受监听器、认证方式和会话配置约束。 远程计划任务和 SCM 通常还受 RPC、防火墙规则组及服务状态影响。 如果 445 正常但 WMI 报 RPC 不可用,应让网络侧核对 135 及动态 RPC,不要把它归因于共享权限。可在目标机查看对应规则是否启用: Get-NetFirewallRule | Where-Object DisplayGroup -match 'Windows Management|Remote Service|Remote Event Log|Windows Remote Management' | Select-Object DisplayName, DisplayGroup, Enabled, Direction, Action 4. 用日志判断请求到底到达了哪一层 按测试时间、源 IP、账号进行关联,重点查看: Security 4624/4625:网络登录是否成功,通常为 Logon Type 3;同时看认证包、源地址和失败状态码。 Security 4672:是否分配了管理员级特殊权限。没有该事件并不一定表示认证失败,但能帮助判断远程令牌。 Security 5140/5145:共享和具体文件/命名管道访问,5145 中的访问掩码及状态可区分共享 ACL、NTFS ACL和管道访问。 System / Service Control Manager:服务启动、停止、登录失败及配置变化;创建服务常见为 7045。 Microsoft-Windows-WMI-Activity/Operational:WMI 请求和提供程序错误。 Microsoft-Windows-TaskScheduler/Operational:计划任务注册、启动和执行结果。 Microsoft-Windows-WinRM/Operational:WinRM 认证、监听器及会话错误。 Windows Defender Firewall 日志或 Security 5156/5157:判断是否被主机防火墙允许或阻止。 可以先导出测试时间窗,避免只截取单条事件: $start = (Get-Date).AddMinutes(-30) Get-WinEvent -FilterHashtable @{ LogName = 'Security' Id = 4624,4625,4672,5140,5145,5156,5157 StartTime = $start } | Select-Object TimeCreated, Id, Message | Out-File C:\Windows\Temp\remote-test-security.txt -Width 300 Get-WinEvent -FilterHashtable @{ LogName = 'System' ProviderName = 'Service Control Manager' StartTime = $start } | Select-Object TimeCreated, Id, LevelDisplayName, Message | Out-File C:\Windows\Temp\remote-test-scm.txt -Width 300 如果 4624 已成功、5145 显示命名管道访问成功,但 sc.exe 返回错误 5,基本可以把范围收敛到远程令牌过滤或 SCM/具体服务 DACL;如果目标端完全没有对应认证事件,则应回到名称解析、凭据复用、网络设备或实际连接目标是否正确。 最后建议在测试记录里保存精确时间、源/目标 IP、使用账号、执行命令、原始错误码和对应事件 ID。尤其不要只写“SMB 成功、服务失败”,这两个结论分别属于连通性、认证和对象授权的不同层级。
创建帐户或登录后发表意见