发布于15小时前15小时 问题背景在已授权的 Windows 内网测试中,经常会遇到这类现象:测试账号属于目标主机本地 Administrators 组,网络连通性正常,445 端口也已开放,但访问管理共享时仍返回“拒绝访问”。同一账号通过交互式登录操作本地文件却没有问题。典型现象:执行 net use 或访问 \\HOST\C$ 时收到 System error 5 has occurred,或者 PowerShell 返回 Access is denied。这类问题不应直接归因于“密码错误”或“管理员权限失效”。Windows 的网络登录类型、远程 UAC 令牌过滤、共享权限、NTFS ACL、认证协议和安全策略都会影响最终结果。下面给出一套适合授权验证和蓝队复核的排查顺序。问题定位思路检查层关键问题常见证据网络层445/TCP 是否可达,SMB 服务是否监听Test-NetConnection、Windows 防火墙日志身份层实际使用的是本地账号还是域账号4624、4625 事件中的 Account Domain令牌层本地管理员的远程令牌是否被 UAC 过滤LocalAccountTokenFilterPolicy、登录类型 3授权层共享权限与 NTFS ACL 是否同时允许Get-SmbShareAccess、Get-Acl策略层是否存在拒绝网络登录、NTLM 限制等策略secpol.msc、组策略结果、相关审计日志操作步骤以下命令应在授权范围内执行。先采集证据,再考虑调整策略,避免为了“验证成功”直接关闭 UAC、防火墙或审计。一、确认网络与 SMB 服务状态# 在测试端确认 445/TCP 是否可达 Test-NetConnection -ComputerName 10.10.20.15 -Port 445 # 在目标端确认 Server 服务与 SMB 配置 Get-Service -Name LanmanServer Get-SmbServerConfiguration | Select-Object EnableSMB1Protocol,EnableSMB2Protocol,AuditSmb1Access # 查看目标端相关防火墙规则 Get-NetFirewallRule -DisplayGroup "File and Printer Sharing" | Select-Object DisplayName,Enabled,Direction,Action如果端口不可达,应优先处理路由、主机防火墙或网络 ACL。不要把网络拒绝与身份授权问题混在一起。生产环境通常应保留 SMB 入站限制,只允许管理网段和必要的运维主机访问。二、明确账号来源,避免同名账号误判本地账号和域账号即使名称相同,也属于不同安全主体。使用明确的账号限定符进行验证:# 本地账号使用目标主机名或点号限定 net use \\10.10.20.15\IPC$ /user:TARGET01\audituser * # 域账号明确指定域 net use \\10.10.20.15\IPC$ /user:CORP\audituser * # 清除旧的 SMB 会话,避免缓存凭据干扰结果 net use \\10.10.20.15\IPC$ /delete cmdkey /listWindows 不允许同一客户端以不同凭据同时连接同一服务器。若此前已经建立会话,可能出现 1219 错误或凭据与预期不一致。清理会话后再测试,并记录准确时间。三、检查远程 UAC 令牌过滤当本地管理员账号通过网络登录时,Windows 默认可能对其管理令牌进行过滤。账号仍能完成身份认证,但访问 C$、ADMIN$ 或远程管理接口时会被拒绝。域管理员或符合特定条件的域账号行为可能不同,因此不能仅凭域账号测试结果推断本地账号权限。# 在目标端只读检查,不要先修改 $path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System' Get-ItemProperty -Path $path -Name LocalAccountTokenFilterPolicy -ErrorAction SilentlyContinue # 确认账号是否确实位于本地管理员组 Get-LocalGroupMember -Group Administrators # 查看当前管理共享 Get-SmbShare | Where-Object Name -in 'C$','ADMIN$','IPC$'LocalAccountTokenFilterPolicy 不存在或值为 0 时,通常表示继续执行远程 UAC 过滤;值为 1 会放宽本地管理员的远程令牌限制。为了通过测试而将其设为 1,会扩大横向移动风险,不建议作为常规修复。更合理的做法是使用受管域账号、Windows LAPS 管理的唯一口令、JEA 或受控运维通道。四、核对共享权限和 NTFS ACL访问普通共享时,最终权限取共享权限与 NTFS 权限的交集。即使账号是管理员,显式 Deny ACE 仍可能导致拒绝访问。# 查看共享定义及共享级权限 Get-SmbShare -Name Data Get-SmbShareAccess -Name Data # 查看目录 NTFS ACL (Get-Acl 'D:\Data').Access | Select-Object IdentityReference,FileSystemRights,AccessControlType,IsInherited # 检查管理共享是否被策略关闭 Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters' | Select-Object AutoShareWks,AutoShareServer不要通过给 Everyone 添加 Full Control 来绕过定位。应确认业务所需主体,使用最小权限组授予读取、修改或管理权限,并检查继承关系中是否存在意外的拒绝项。五、检查用户权限分配与认证策略本地安全策略中的“从网络访问此计算机”和“拒绝从网络访问这台计算机”会直接影响 SMB 网络登录。拒绝项优先级更高。域组策略还可能限制 NTLM,导致旧客户端、IP 地址访问或无法使用 Kerberos 的场景失败。# 导出目标端本地安全策略供离线核对 secedit /export /cfg C:\Windows\Temp\security-policy.cfg # 查看生效的计算机组策略摘要 gpresult /scope computer /r # 查看 Kerberos 票据;使用 IP 访问 SMB 时通常无法按常规方式匹配主机 SPN klist # 检查目标主机的 CIFS SPN setspn -Q cifs/TARGET01 setspn -Q cifs/TARGET01.corp.example重点核对 SeNetworkLogonRight 与 SeDenyNetworkLogonRight。若环境要求禁用或限制 NTLM,测试时应优先使用主机名和正确 DNS,使 Kerberos 能正常匹配 cifs SPN,而不是为了兼容直接放宽 NTLM 策略。日志取证与关联分析排查时建议记录客户端地址、目标地址、测试账号和精确到秒的时间。目标主机安全日志至少关注以下事件:4624:登录成功。SMB 通常对应 Logon Type 3。4625:登录失败。重点查看 Status、Sub Status、Authentication Package 和 Source Network Address。4672:为新登录分配特殊权限,可辅助判断令牌是否具有管理特权。5140:访问网络共享对象。5145:检查共享对象访问权限,可看到 Share Name、Relative Target Name 和访问掩码。# 查询最近一小时与 SMB 登录、共享访问有关的事件 $start = (Get-Date).AddHours(-1) $ids = 4624,4625,4672,5140,5145 Get-WinEvent -FilterHashtable @{ LogName = 'Security' Id = $ids StartTime = $start } | Select-Object TimeCreated,Id,Message | Format-List # 查询 SMB 服务端操作日志 Get-WinEvent -FilterHashtable @{ LogName = 'Microsoft-Windows-SMBServer/Operational' StartTime = $start } | Select-Object TimeCreated,Id,LevelDisplayName,Message如果只有 4625 而没有 5140,问题通常发生在身份认证或用户权限分配阶段。如果出现 4624、5140,随后 5145 显示权限检查失败,则更应检查令牌过滤、共享权限和 NTFS ACL。若完全没有目标端事件,优先回到网络路径、名称解析和日志审计配置。常见状态码解释状态或现象常见含义优先检查0xC000006A密码错误凭据、缓存会话、账号限定符0xC0000064账号不存在本地与域账号来源、拼写0xC000015B未授予请求的登录类型网络登录权利与拒绝项认证成功但 C$ 拒绝可能是远程 UAC 过滤或授权不足令牌策略、4672、共享与 ACL使用 IP 失败、主机名成功认证协议或 SPN 差异DNS、Kerberos、NTLM 限制风险与修复建议不要将 LocalAccountTokenFilterPolicy=1 作为通用解决方案。该配置会增强本地管理员凭据被用于远程横向访问的能力。本地管理员口令应通过 Windows LAPS 实现每台主机唯一化,避免相同口令在多台设备间复用。限制 445/TCP 的来源,仅允许管理网段、备份节点和必要服务器,终端之间默认不应互通 SMB。管理共享如无明确业务需求,可结合运维流程评估限制,但不要把关闭共享当作唯一防护措施。启用登录与文件共享审计,集中采集 4624、4625、4672、5140、5145 以及 SMBServer Operational 日志。检测同一源主机短时间连接多台设备管理共享、异常本地管理员登录、工作站账号访问服务器 C$ 等行为。优先使用受控域账号、分层管理、PAW 管理终端和 JEA,避免日常账号直接持有广泛本地管理员权限。结论“本地管理员却无法访问 SMB”通常不是单一故障,而是身份、令牌和资源 ACL 共同作用的结果。推荐的定位顺序是:先验证网络与服务,再确认账号来源和缓存会话,随后检查远程 UAC、共享权限、NTFS ACL、登录权利及认证策略,最后用安全日志闭环验证。授权测试的目标应是确认权限边界是否符合设计,而不是通过关闭安全控制强行获得访问。 服务器、云资产与权限边界梳理示意 日志证据、时间线与事件还原示意
14小时前14小时 先把“拒绝访问”拆成三个阶段:认证是否成功、是否允许通过网络登录、对目标共享及文件是否有权限。不要只根据客户端的一句报错判断。 1. 先确认实际使用的身份和失败位置 net use * /delete /y cmdkey /list whoami /all net use \\TARGET\IPC$ /user:TARGET\LocalAdmin * net use \\TARGET\C$ /user:TARGET\LocalAdmin * 明确写成 TARGET\LocalAdmin,避免同名本地账户、域账户或缓存凭据造成误判。若 IPC$ 都失败,优先查认证和“从网络访问此计算机”;若 IPC$ 成功但 C$ 失败,则更像管理员共享、远程 UAC 令牌过滤或 ACL 问题。 2. 在目标机核实管理员身份与远程 UAC 边界 net localgroup Administrators Get-LocalGroupMember -Group Administrators Get-SmbShare -Name C$,ADMIN$ -ErrorAction SilentlyContinue | Format-List Name,Path,ShareState,FolderEnumerationMode reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System ^ /v LocalAccountTokenFilterPolicy 本地管理员通过网络访问时,可能被 Remote UAC 过滤为标准令牌,因此能认证但无法访问 C$/ADMIN$。这通常影响本地账户,域管理员账户的行为不同。不要直接把注册表改动当作最终修复;测试时如确需验证,可在变更记录和回滚条件明确的情况下临时设置,验证后恢复: reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System ^ /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f rem 验证结束后恢复默认行为 reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System ^ /v LocalAccountTokenFilterPolicy /f 生产环境更建议使用受控域账户、单独共享和最小化 ACL,而不是长期关闭令牌过滤。 3. 检查用户权利分配,尤其是显式拒绝项 secedit /export /cfg C:\Windows\Temp\secpol.cfg findstr /i "SeNetworkLogonRight SeDenyNetworkLogonRight" C:\Windows\Temp\secpol.cfg gpresult /h C:\Windows\Temp\gp.html 重点看: SeNetworkLogonRight:从网络访问此计算机; SeDenyNetworkLogonRight:拒绝从网络访问此计算机。 “拒绝”优先级高于“允许”。账户即使属于本地 Administrators,只要同时落入被拒绝的组,仍会失败。若设置由域 GPO 下发,应以 gpresult 和策略来源为准,不要只看本地安全策略界面。 4. 若是普通共享,分别检查共享 ACL 和 NTFS ACL Get-SmbShareAccess -Name ShareName icacls D:\SharePath Get-SmbSession | Format-Table ClientComputerName,ClientUserName,NumOpens Get-SmbOpenFile | Format-Table ClientComputerName,ClientUserName,Path 最终权限是共享权限与 NTFS 权限的交集,并且显式 Deny 优先。管理员身份不会自动绕过 SMB 路径上的 ACL。还要确认共享是否启用了基于访问的枚举,以及账户是否实际通过预期的组获得权限。 5. 用目标机日志建立证据链 在失败时间点附近查看 Security 日志: 4624:登录成功,网络 SMB 通常是 Logon Type 3; 4625:登录失败,记录 Status/SubStatus 和实际账户; 5140:访问了网络共享; 5145:共享对象访问检查,可看到 Share Name、Relative Target Name、Access Mask; 4656/4663:对象访问,需提前启用文件系统审核并配置 SACL; 4776:NTLM 凭据验证;域环境下再结合 DC 上的 4768/4769。 $start = (Get-Date).AddMinutes(-15) Get-WinEvent -FilterHashtable @{ LogName = 'Security' Id = 4624,4625,5140,5145,4656,4663,4776 StartTime = $start } | Select-Object TimeCreated,Id,Message | Format-List 如果没有 5140/5145,往往说明请求尚未走到共享授权阶段;有 4624 和 5140,但 5145 显示访问检查失败,则重点对照 AccessMask、共享 ACL 和目标路径 ACL。4625 中常见的 0xC000015B 指向未授予所需登录类型,0xC000006A 是密码错误,0xC0000064 是账户不存在;保留原始 Status/SubStatus 比只记录“拒绝访问”更有价值。 建议最终按“客户端命令与时间戳 → 目标机 4624/4625 → 5140/5145 → 策略来源及 ACL”整理证据。这样能区分凭据问题、网络登录权、远程 UAC 和资源授权四类边界,也便于在不扩大权限的前提下给出修复建议。
创建帐户或登录后发表意见