跳转到帖子

渗透攻防实战:一次授权内网渗透中的 SMB 横向验证、日志留痕与修复闭环

精选回复

发布于

背景

最近在一次授权内网渗透测试里,入口点是一台已纳入域的 Windows 业务终端。测试目标不是“拿多少机器”,而是验证域内权限边界、弱口令/凭据复用风险、SMB 横向访问面,以及蓝队日志是否能完整还原攻击链。

环境大致如下:

  • 域:corp.local
  • 网段:10.10.20.0/24
  • 入口主机:WIN10-OPS,普通域用户权限
  • 域控:DC01,Windows Server 2019
  • 重点验证:SMB 管理共享、远程服务创建、登录事件、凭据复用、横向移动留痕
说明:本文只讨论授权渗透测试中的验证与排查方法,重点是攻防链路、日志定位和修复建议。不要在未授权环境执行。

问题定位

初始阶段拿到一组普通域账号后,发现该账号对部分服务器存在异常访问权限。常见情况有两类:

  • 域用户被加入了某些服务器本地 Administrators 组
  • 多台服务器复用同一组本地管理员口令,导致凭据横向可用

在渗透测试里,我一般先不急着执行远程命令,而是先做三件事:

  • 确认账号权限边界:能访问哪些主机、哪些共享、是否有管理权限
  • 控制验证动作:优先使用只读、低影响命令,避免影响业务
  • 同步记录日志点:方便后续和蓝队核对告警与事件链

技术分析

SMB 横向验证里,常见有效路径是:

  • 通过 445 端口确认主机存活和 SMB 服务状态
  • 使用已授权凭据测试 IPC$、ADMIN$、C$ 等共享访问
  • 如果具备管理员权限,进一步验证远程服务创建或计划任务执行能力
  • 在目标主机与域控上回溯登录、服务创建、进程启动、共享访问日志

需要关注的是,很多横向行为即使没有成功执行命令,也会留下认证痕迹。例如:

  • 目标主机安全日志中的 4624 / 4625
  • 域控上的 4768 / 4769 / 4771 / 4776
  • 目标主机系统日志中的 7045 服务创建
  • 启用对象访问审计后可见的 5140 / 5145 共享访问
  • Sysmon 中的 1 进程创建、3 网络连接、11 文件创建

操作步骤

下面是一套比较克制的验证流程,适合授权测试时使用。

1. 枚举 SMB 存活与基础信息

先确认 445 暴露面,不直接爆破,不做大流量扫描。

nmap -Pn -p445 --open 10.10.20.0/24 -oA smb_445_scan

如果环境对扫描敏感,可以降低速率:

nmap -Pn -p445 --open --max-rate 50 10.10.20.0/24 -oA smb_445_slow

2. 使用授权账号验证共享访问

示例使用 crackmapexec 进行登录验证和共享枚举。重点看哪些机器返回 Pwn3d 或可访问 ADMIN$ / C$。

crackmapexec smb 10.10.20.0/24 -d corp.local -u test.user -p 'Password123!' --shares

如果不希望工具自动做过多动作,也可以用 smbclient 单点验证:

smbclient -L //10.10.20.35 -U 'corp.local/test.user%Password123!'

看到 ADMIN$ 或 C$ 并不等于一定可以远程执行命令,但通常说明权限边界已经存在问题,需要进一步确认该用户在目标主机本地组中的身份。

3. 验证本地管理员权限

可通过远程查询本地 Administrators 组。Windows 环境下可使用 net 命令:

net localgroup administrators /domain

对目标主机单点验证时,可以使用 PowerShell 远程查询,但前提是 WinRM 已开启且授权范围允许:

$cred = Get-Credential corp.local\test.user
Invoke-Command -ComputerName 10.10.20.35 -Credential $cred -ScriptBlock {
    net localgroup administrators
}

如果 WinRM 未开,不建议为了测试强行开启服务。渗透验证应尽量不改变目标配置。

4. 控制远程执行验证

如果客户明确允许验证远程命令执行能力,我通常只执行无破坏的短命令,例如 hostname、whoami、ipconfig,并约定时间窗口。

crackmapexec smb 10.10.20.35 -d corp.local -u test.user -p 'Password123!' -x "whoami && hostname"

该行为通常会触发远程服务创建或类似执行痕迹,蓝队侧应该能在目标主机看到对应事件。

日志留痕与排查方法

1. 目标主机安全日志

横向登录最关键的是 4624。SMB 常见登录类型为 3,即网络登录。

Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4624; StartTime=(Get-Date).AddHours(-6)} |
Where-Object { $_.Properties[8].Value -eq 3 } |
Select-Object TimeCreated, Id, @{n='Account';e={$_.Properties[5].Value}}, @{n='SourceIP';e={$_.Properties[18].Value}}, @{n='LogonType';e={$_.Properties[8].Value}}

常见字段关注:

  • Logon Type:3 表示网络登录
  • Account Name:发起登录的账号
  • Source Network Address:来源 IP
  • Authentication Package:NTLM 或 Kerberos

2. 失败登录排查

如果存在密码喷洒或错误凭据验证,会出现 4625。授权测试中不建议进行高频尝试,避免触发锁定策略。

Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4625; StartTime=(Get-Date).AddHours(-6)} |
Select-Object TimeCreated, @{n='Account';e={$_.Properties[5].Value}}, @{n='SourceIP';e={$_.Properties[19].Value}}, @{n='Status';e={$_.Properties[7].Value}}

3. 远程服务创建事件

如果使用了基于服务创建的远程执行方式,系统日志中通常会出现 7045。

Get-WinEvent -FilterHashtable @{LogName='System'; Id=7045; StartTime=(Get-Date).AddHours(-6)} |
Select-Object TimeCreated, ProviderName, Message

重点看:

  • Service Name 是否随机或异常
  • Service File Name 是否指向 ADMIN$、Temp 或异常路径
  • 创建时间是否与测试动作匹配

4. 共享访问事件

如果启用了对象访问审计,可以看 5140 / 5145。

Get-WinEvent -FilterHashtable @{LogName='Security'; Id=5140; StartTime=(Get-Date).AddHours(-6)} |
Select-Object TimeCreated, @{n='Account';e={$_.Properties[1].Value}}, @{n='ShareName';e={$_.Properties[6].Value}}, @{n='SourceIP';e={$_.Properties[5].Value}}

5145 可以进一步看到访问了什么相对路径、权限掩码和访问结果,对判断 ADMIN$ 写入特别有用。

5. 域控侧认证日志

如果使用域账号访问 SMB,域控上一般可以看到 Kerberos 或 NTLM 相关事件:

  • 4768:请求 TGT
  • 4769:请求服务票据,常见服务名 cifs/hostname
  • 4771:Kerberos 预认证失败
  • 4776:NTLM 认证
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4769; StartTime=(Get-Date).AddHours(-6)} |
Where-Object { $_.Properties[2].Value -like 'cifs/*' } |
Select-Object TimeCreated, @{n='User';e={$_.Properties[0].Value}}, @{n='Service';e={$_.Properties[2].Value}}, @{n='ClientIP';e={$_.Properties[6].Value}}

检测规则思路

蓝队可以把以下条件作为告警线索,不建议单点定罪,要结合上下文:

  • 普通域用户在短时间内访问多台主机的 ADMIN$ 或 C$
  • 同一来源 IP 对多个目标产生 4624 Type 3 登录
  • 4624 Type 3 后紧跟 7045 服务创建
  • 4769 中出现大量 cifs/ 主机服务票据请求
  • 非运维时间段出现远程服务创建或远程命令执行痕迹

一个简单的关联逻辑是:源 IP 相同、账号相同、5 分钟内同时出现 4624 Type 3 和 7045,应优先排查。

风险与修复建议

1. 清理本地管理员权限

不要把普通域用户或大范围域组加入服务器本地 Administrators。建议按业务系统拆分最小权限组,并定期导出核查。

Get-LocalGroupMember Administrators

域内可以通过 GPO 或脚本批量核查本地管理员成员,发现 Domain Users、Authenticated Users、业务普通组进入本地管理员时应立即整改。

2. 禁止本地管理员口令复用

推荐部署 Windows LAPS 或新版 Windows LAPS,确保每台机器本地管理员密码唯一且定期轮换。这样即使单台机器凭据泄露,也难以横向扩散。

3. 收敛 SMB 管理面

  • 限制 445 端口访问范围,只允许堡垒机、运维网段、管理服务器访问
  • 普通办公终端之间禁止互访 445
  • 服务器区按业务和管理面拆分 ACL
  • 禁用不必要的 ADMIN$ 使用场景,至少做到来源可控

4. 强化认证与审计策略

  • 开启账号锁定策略,但阈值要结合业务避免误伤
  • 开启 Kerberos 与 NTLM 审计,逐步减少 NTLM 使用
  • 开启命令行审计和 PowerShell 日志
  • 部署 Sysmon,重点采集进程、网络连接、文件创建和服务创建

建议的 Sysmon 关注项:

  • Event ID 1:异常远程执行进程,例如 cmd.exe /c、powershell.exe
  • Event ID 3:来自非管理网段的 445/135/5985 连接
  • Event ID 11:ADMIN$、Temp 目录下异常文件写入
  • Event ID 13:可疑注册表修改

5. 渗透测试后的闭环验证

修复完成后不要只看配置是否改了,应重新验证:

  • 原账号是否仍可访问 ADMIN$ / C$
  • 原来源 IP 是否还能访问目标 445
  • 远程命令执行是否被阻断
  • 蓝队是否能在日志平台关联到测试动作
  • 告警是否有明确字段:账号、源 IP、目标主机、事件 ID、时间线

总结

内网渗透里的 SMB 横向并不复杂,真正容易出问题的是权限边界长期失控、本地管理员口令复用、日志没有关联起来。授权测试时应控制动作强度,明确记录每一步时间点和目标,方便蓝队复盘。

比较有效的防护思路也很直接:最小化本地管理员权限、LAPS 管理本地口令、限制 445 横向访问、完善 4624/4625/4769/7045/5140/5145 等日志采集,并把登录、共享访问、服务创建放在同一条时间线上看。这样即使攻击链没有完全阻断,也能更早发现并压缩影响范围。

服务器与云环境安全示意图
服务器、云资产与权限边界梳理示意

这个案例如果重点是“SMB 横向验证 + 留痕 + 修复闭环”,建议把复盘做成可验证的证据链,而不是只记录是否能连通。

1. 横向验证阶段建议补充最小化验证项

授权场景下验证 SMB 横向时,尽量避免用“拿到交互式 shell”作为唯一判断标准,可以拆成几类证据:

  • 445 端口连通性
  • 认证是否成功
  • 是否具备管理共享访问权限
  • 是否能远程创建服务 / 计划任务
  • 是否触发目标侧安全日志

Windows 侧可以用内置命令做低侵入验证:

net use \\10.0.0.23\IPC$ /user:DOMAIN\user password
net view \\10.0.0.23
dir \\10.0.0.23\C$
sc.exe \\10.0.0.23 query
schtasks /query /s 10.0.0.23 /u DOMAIN\user /p password

这里要特别区分:

  • IPC$ 成功:只能说明认证链路和基础权限成立
  • C$ 可访问:通常意味着本地管理员或等价权限
  • sc.exe 可远程操作:风险等级更高,基本具备远程执行条件

2. 日志留痕建议按事件 ID 串起来

SMB 横向相关日志不要只看 4624,最好把源主机、目标主机和域控三边日志对齐。常见事件可以重点关注:

  • 4624:登录成功,重点看 Logon Type 3
  • 4625:登录失败,可用于发现密码喷洒或口令试探
  • 4672:特殊权限登录,管理员权限常见
  • 5140:访问网络共享
  • 5145:详细文件共享访问
  • 7045:新服务安装,常见于远程服务执行
  • 4698:计划任务创建
  • 4768 / 4769 / 4771:Kerberos 认证链路,主要看域控
  • 4776:NTLM 认证,定位 NTLM 横向比较有用

目标主机上可以这样快速拉取相关日志:

wevtutil qe Security /q:"*[System[(EventID=4624 or EventID=4625 or EventID=4672 or EventID=5140 or EventID=5145)]]" /f:text /c:50

wevtutil qe System /q:"*[System[(EventID=7045)]]" /f:text /c:20

wevtutil qe Security /q:"*[System[(EventID=4698)]]" /f:text /c:20

如果环境开了 PowerShell 日志,还可以补一下:

wevtutil qe Microsoft-Windows-PowerShell/Operational /f:text /c:50

3. 修复闭环要落到“验证前后对比”

修复建议不要只写“关闭 SMB”这种大而化之的结论。内网里很多业务还依赖 SMB,实际闭环可以按优先级来:

  • 禁用 SMBv1
  • 限制 445 横向访问范围,只允许文件服务器、运维跳板机等必要节点
  • 清理本地管理员组里的域账号
  • 部署 LAPS / Windows LAPS,避免本地管理员密码复用
  • 关闭不必要的管理共享访问或限制远程管理来源
  • 开启 SMB 签名,降低中间人和中继风险
  • 对域管、高权限账号禁止在普通终端登录

几条可直接检查的命令:

# 查看 SMBv1 状态
Get-WindowsOptionalFeature -Online -FeatureName SMB1Protocol

# 禁用 SMBv1
Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol -NoRestart

# 查看 SMB 配置
Get-SmbServerConfiguration | Select EnableSMB1Protocol, EnableSMB2Protocol, RequireSecuritySignature, EnableSecuritySignature

# 启用 SMB 签名要求
Set-SmbServerConfiguration -RequireSecuritySignature $true -Force

防火墙侧可以做源地址限制,例如只允许运维网段访问 445:

New-NetFirewallRule `
  -DisplayName "Allow SMB from Admin Subnet" `
  -Direction Inbound `
  -Protocol TCP `
  -LocalPort 445 `
  -RemoteAddress 10.10.10.0/24 `
  -Action Allow

New-NetFirewallRule `
  -DisplayName "Block SMB from Others" `
  -Direction Inbound `
  -Protocol TCP `
  -LocalPort 445 `
  -Action Block

注意规则顺序和现有 GPO 是否会覆盖,本地改完最好在组策略层固化。

4. 建议在报告中补一个“复测矩阵”

闭环最容易被忽略的是复测。可以做一个简单矩阵:

源主机 目标主机 账号 修复前结果 修复后结果 对应日志
普通办公终端 服务器 A 普通域账号 IPC$ 成功 失败 4625 / 防火墙日志
运维跳板机 服务器 A 授权运维账号 C$ 成功 成功 4624 Type 3、5140
普通终端 服务器 A 本地管理员复用账号 C$ 成功 失败 4625 / 4776

这样可以证明修复不是“一刀切断业务”,而是把横向面收敛到授权路径。

整体来看,这类授权内网项目最有价值的不是证明 SMB 能打通,而是把“权限复用路径、日志证据、整改动作、复测结果”串起来。这样后续无论给安全团队还是运维团队,都能直接落地。

还有一个点建议补上:把“目标侧到底留下了什么”按日志源拆开,不然修复闭环时容易只看到攻击机侧命令记录,看不到蓝队能不能稳定检出。 SMB 横向验证时,Windows 目标机上至少可以对照这些事件:
  • 4624:登录成功,重点看 Logon Type,SMB 常见是 3,并记录来源 IP、账号、认证包。
  • 4625:登录失败,适合验证密码喷洒/错误凭据是否被发现。
  • 4672:特殊权限登录,管理员类账号很关键。
  • 5140:访问共享对象,比如 \\*\IPC$、\\*\C$。
  • 5145:详细文件共享访问,需要开启对象访问审计后更有价值。
  • 7045:创建服务,若用 sc.exe 做远程服务验证,这条基本要重点关注。
  • 4698:创建计划任务,适合对应 schtasks 远程验证。
  • 4688:进程创建日志,如果启用了进程命令行审计,可以看到服务或任务拉起的命令。
可以在目标机上用 PowerShell 快速拉一段时间窗口内的证据,避免事后只靠截图:
$start = (Get-Date).AddHours(-2)

Get-WinEvent -FilterHashtable @{
  LogName='Security'
  Id=4624,4625,4672,5140,5145,4698,4688
  StartTime=$start
} | Select-Object TimeCreated, Id, ProviderName, Message |
  Export-Csv C:\Temp\smb_lateral_security_events.csv -NoTypeInformation -Encoding UTF8

Get-WinEvent -FilterHashtable @{
  LogName='System'
  Id=7045
  StartTime=$start
} | Select-Object TimeCreated, Id, ProviderName, Message |
  Export-Csv C:\Temp\smb_lateral_system_events.csv -NoTypeInformation -Encoding UTF8
如果环境里已经接入了域控或 SIEM,也建议把域控侧事件一起看。很多时候目标机能看到 4624,但账号认证链路在 DC 上更完整,例如 Kerberos/NTLM 认证行为、失败原因、来源主机名是否匹配等。 修复闭环部分可以做得更落地一些,不只是“关闭 SMB”:
  • 确认管理共享访问是否真的需要跨网段开放,至少用防火墙限制 445/TCP 到运维跳板机或管理网段。
  • 本地管理员密码要用 LAPS / Windows LAPS 管理,避免一台机器管理员口令横向通用。
  • 普通域账号不要进入本地 Administrators,单独梳理 GPO、登录脚本、历史加域模板。
  • 启用“拒绝从网络访问这台计算机”策略,把高权限账号限制在必要主机上。
  • 远程服务创建、计划任务创建要做告警,特别是 7045、4698 这类事件。
GPO 上可以重点看这些位置:
Computer Configuration
 └─ Windows Settings
    └─ Security Settings
       └─ Local Policies
          ├─ User Rights Assignment
          │  ├─ Deny access to this computer from the network
          │  ├─ Deny log on as a service
          │  └─ Deny log on as a batch job
          └─ Security Options
             ├─ Network access: Sharing and security model for local accounts
             └─ Microsoft network server: Digitally sign communications
我一般会在报告里加一个小表,把每一步验证和对应日志绑定起来,例如:
验证动作 预期结果 目标侧日志 风险判断 修复动作
net use \\host\IPC$ 认证成功 4624、5140 账号可进行网络登录 限制账号网络登录范围
dir \\host\C$ 可列目录 4624、5140、5145 具备管理共享访问 收敛本地管理员权限
sc \\host query 可远程查询服务 4624,必要时结合 7045 具备服务控制权限 限制 445/RPC,仅允许运维源
schtasks /query /s host 可查询任务 4624,创建时看 4698 可能具备任务远程操作面 审计任务创建并告警
这样复盘时就比较清楚:不是单纯证明“我能横向”,而是能回答三个问题:权限边界在哪里、日志是否覆盖、修复后同样路径是否失效。这个对授权测试和后续整改验收都更有说服力。

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。