发布于10月10日10月10日 背景在内网授权渗透测试里,SMB/域账号相关验证很常见,但很多人把工具当成“扫一遍出结果”,最后报告里只剩下弱口令截图,缺少权限边界、日志留痕和修复建议。这里以 Kali 下常用的 CrackMapExec(新版本社区也常见 NetExec,命令基本兼容)为例,记录一个比较标准的 SMB 枚举与权限验证流程。场景限定:已获得书面授权,测试范围为 10.10.20.0/24,域为 corp.local,测试账号为 corp\audit.test。目标是确认该账号在内网 SMB 上的访问面、是否存在本地管理员权限、是否能读取敏感共享,并输出可复现证据与修复建议。注意:下面命令只适合授权环境。不要对非授权网段做登录尝试、密码喷洒或远程执行。问题定位实际项目里经常遇到几个问题:只知道某个域账号能登录,但不知道它能访问哪些主机和共享。无法区分“账号有效”“普通权限”“本地管理员权限”。工具跑完后没有记录日志侧证,蓝队无法根据测试行为做检测规则。发现可写共享后,没有确认权限来源,比如 Everyone、Domain Users、特定业务组。所以本次测试的重点不是追求更深的利用链,而是把 SMB 枚举、权限验证、留痕位置和修复动作串起来。工具准备Kali 上可以直接安装 CrackMapExec,如果源里版本较旧,也可以使用 pipx 安装 NetExec。两者在 SMB 枚举方面用法相近。sudo apt update sudo apt install -y crackmapexec smbclient ldap-utils # 如果使用 NetExec,可选: python3 -m pip install --user pipx python3 -m pipx ensurepath pipx install git+ 建议把本次测试相关文件放到单独目录,避免和历史项目混在一起:mkdir -p ~/pt-corp-smb/{input,output,loot} cd ~/pt-corp-smb cat > input/targets.txt <<EOF 10.10.20.0/24 EOF cat > input/user.txt <<EOF corp\\audit.test EOF 技术分析CrackMapExec 对 SMB 的常见返回结果里,最关键的是三类信息:[+]:认证成功,账号密码或哈希有效。(Pwn3d!):通常表示该账号对目标具备本地管理员级别能力,具体还要结合 UAC、远程服务、管理员共享可用性验证。shares 结果:列出共享名和读写权限,判断数据暴露面。在域环境中,SMB 登录成功并不等于可以横向移动;能访问共享也不等于能执行命令。建议把“账号有效性、共享权限、本地管理员权限、敏感文件命中”分开记录。操作步骤1. 先做存活和 SMB 基线探测先确认 445 端口开放范围,不建议一开始就用账号全网登录,避免产生大量无意义认证日志。nmap -n -Pn -p445 --open -iL input/targets.txt -oA output/nmap_smb_445 awk '/445\/tcp open/{print $2}' output/nmap_smb_445.gnmap | sort -u > input/smb_alive.txt wc -l input/smb_alive.txt 如果目标数量较大,建议按网段或业务区域分批测试,便于后续和日志时间点对应。2. 验证授权账号是否有效这里使用单账号验证,不做密码喷洒。密码建议通过环境变量传递,避免进入 shell history。export SMB_PASS='这里替换为授权测试密码' crackmapexec smb input/smb_alive.txt \ -d corp.local \ -u audit.test \ -p "$SMB_PASS" \ --continue-on-success \ | tee output/cme_auth_check.txt 结果里如果出现大量 STATUS_LOGON_FAILURE,先检查域名、用户名格式和时间同步,不要急着加大尝试量。域控时间偏差、账号被限制登录工作站、账号过期都会影响结果。3. 枚举共享权限确认账号有效后,再做共享枚举。重点关注 READ、WRITE、READ,WRITE。crackmapexec smb input/smb_alive.txt \ -d corp.local \ -u audit.test \ -p "$SMB_PASS" \ --shares \ | tee output/cme_shares.txt 可以快速筛出可写共享:grep -Ei 'READ,WRITE|WRITE' output/cme_shares.txt | tee output/writable_shares.txt 对可疑共享用 smbclient 做人工确认,不建议直接批量上传测试文件。若需要验证写权限,使用明确命名、无害文本,并在测试后删除。smbclient //10.10.20.35/ShareName -U 'corp.local/audit.test%你的密码' # 进入 smbclient 后: # ls # put proof_audit_test.txt # del proof_audit_test.txt # quit 4. 判断是否具备本地管理员权限如果输出中出现 Pwn3d!,不要直接做远程命令执行。建议先记录主机、时间、账号,再通过低影响方式验证管理员共享。crackmapexec smb input/smb_alive.txt \ -d corp.local \ -u audit.test \ -p "$SMB_PASS" \ --local-auth 2>/dev/null | tee output/cme_localauth_check.txt 如果是域账号验证本地管理员权限,通常不需要 --local-auth;该参数主要用于本地账号。域账号场景可直接:crackmapexec smb input/smb_alive.txt \ -d corp.local \ -u audit.test \ -p "$SMB_PASS" \ | tee output/cme_admin_check.txt 报告中建议写清楚:哪些主机返回管理员权限、是否启用 ADMIN$、是否允许远程服务管理。不要把“认证成功”误写成“已获得主机权限”。5. 检索敏感文件名但避免拖库共享里常见风险包括密码表、配置备份、数据库连接串、VPN 配置、堡垒机导出文件等。建议先只列目录和文件名,不下载大文件。crackmapexec smb input/smb_alive.txt \ -d corp.local \ -u audit.test \ -p "$SMB_PASS" \ -M spider_plus \ -o DOWNLOAD_FLAG=False \ | tee output/cme_spider_plus.txt NetExec 的模块参数可能略有差异,可用下面命令确认:crackmapexec smb -L | grep -i spider crackmapexec smb -M spider_plus --options 后续只对命中的少量样本做授权取证,并记录文件路径、大小、修改时间、权限,不建议整目录打包。日志留痕与排查方法蓝队侧可以根据以下日志回溯本次测试行为。为了便于关联,测试前最好约定时间窗口和源 IP。位置事件或日志关注点域控安全日志4624、4625、4768、4769、4771、4776账号登录成功/失败、Kerberos/NTLM 认证、源地址文件服务器安全日志4624、5140、5145共享访问、具体共享名、访问权限Windows Defender/EDR进程与网络连接来自测试机的 SMB 连接、工具指纹防火墙/流量日志TCP 445扫描范围、连接频率、异常访问路径Windows 上可以用 PowerShell 快速查某个账号在文件服务器上的共享访问日志:$User = 'audit.test' $Start = (Get-Date).AddHours(-4) Get-WinEvent -FilterHashtable @{LogName='Security'; Id=5140,5145; StartTime=$Start} | Where-Object { $_.Properties.Value -match $User } | Select-Object TimeCreated, Id, ProviderName, Message | Format-List 如果 5140/5145 没有记录,需要检查对象访问审计策略和共享审核是否开启。仅有 4624 不能说明访问了哪个共享。关键结果整理测试输出建议至少整理成三张表:SMB 存活主机:IP、主机名、域、签名状态、SMB 版本。共享访问面:IP、共享名、权限、是否可写、样本路径。高权限主机:IP、主机名、返回标记、验证方式、影响说明。可以用简单命令抽取重点内容,但最终还是建议人工复核。# 提取认证成功主机 grep '\[+\]' output/cme_auth_check.txt | tee output/auth_success_hosts.txt # 提取疑似管理员权限主机 grep -i 'Pwn3d' output/cme_admin_check.txt | tee output/admin_hosts.txt # 提取可写共享 grep -Ei 'READ,WRITE|WRITE' output/cme_shares.txt | tee output/writable_shares.txt 风险与修复建议收敛共享权限:避免 Everyone、Authenticated Users、Domain Users 拥有写权限;按业务组授权。清理敏感文件:共享目录中不要存放密码表、数据库连接串、运维脚本明文凭据;必要时用专用密钥管理。限制本地管理员:域普通账号不应进入大量终端或服务器本地管理员组;使用 GPO 定期校验本地组成员。启用 SMB 签名:关键服务器建议强制 SMB signing,降低中间人攻击风险。关闭 SMBv1:老旧协议应禁用,避免历史漏洞和降级风险。加强审计:文件服务器开启共享访问审计,至少覆盖 5140/5145;域控保留认证日志并接入 SIEM。控制测试频率:蓝队规则中可加入单位时间内多主机 445 连接、多次 4625、异常共享枚举行为。总结CrackMapExec 这类工具在 Kali 渗透测试里很实用,但价值不在于“跑出 Pwn3d”,而在于把账号权限边界、共享暴露面、日志证据和修复动作对应起来。授权内网测试建议按“存活探测 → 单账号验证 → 共享枚举 → 权限确认 → 日志回溯 → 修复建议”的顺序执行,既能减少误报,也方便蓝队复盘和整改。 服务器、云资产与权限边界梳理示意
10月10日10月10日 补充几个实战里比较容易踩坑的点,尤其是“授权内网枚举”和“日志回溯”这两块。 CrackMapExec 现在很多环境里建议直接用 NetExec,参数基本兼容,后续维护也更活跃: nxc smb 10.0.0.0/24 -u user -p 'Passw0rd!' --shares nxc smb targets.txt -u user -H NTLM_HASH --shares --sessions --loggedon-users 如果只是做权限验证,建议先控制线程和频率,避免把域控或老旧文件服务器打挂,也减少误报成暴力破解的概率: nxc smb 10.0.0.0/24 -u user -p 'Passw0rd!' --shares --continue-on-success --timeout 5 --jitter 2 --threads 10 几个常用判断点: 1. 判断凭据是否有效 看输出里是否出现 `Pwn3d!`、`STATUS_LOGON_FAILURE`、`STATUS_ACCOUNT_LOCKED_OUT`、`STATUS_PASSWORD_EXPIRED`。其中 `Pwn3d!` 不一定等于域管,更多表示当前账号在该主机上具备本地管理员权限。 2. 区分本地账号和域账号 内网里经常存在同名本地管理员,建议显式指定域,避免误判: nxc smb 10.0.0.0/24 -d corp.local -u zhangsan -p 'Passw0rd!' --shares 本地账号可以用: nxc smb 10.0.0.0/24 -u Administrator -p 'xxx' --local-auth 3. 枚举共享时重点看可写目录 只看 `READ` 意义有限,实战里更关注 `WRITE`、`READ,WRITE` 的共享,比如 `NETLOGON`、`SYSVOL`、部门共享、备份目录: nxc smb 10.0.0.0/24 -u user -p 'Passw0rd!' --shares | grep -Ei "WRITE|READ,WRITE" 4. 会话和登录用户枚举要注意权限 `--sessions`、`--loggedon-users` 在普通权限下不一定都能拿到结果,空输出不代表没有用户在线,可能只是权限不足或远程注册表、RPC 访问受限。 日志回溯方面,如果是蓝队复盘,建议重点对照以下事件: - 4624:成功登录,SMB 常见是 Logon Type 3 - 4625:失败登录,可用于识别密码喷洒或错误凭据 - 4672:特权登录,常见于管理员权限账号 - 5140:访问网络共享 - 5145:详细共享访问,开启对象访问审计后更有价值 - 4776:NTLM 认证,定位哈希或本地账号认证很有用 Windows 侧可以这样筛: Get-WinEvent -FilterHashtable @{ LogName='Security' Id=4624,4625,4672,5140,5145,4776 StartTime=(Get-Date).AddHours(-6) } | Select-Object TimeCreated,Id,ProviderName,Message 如果要定位 CME/NXC 的来源主机,优先看 4624/4625 里的字段: - `IpAddress` - `WorkstationName` - `AccountName` - `LogonType` - `AuthenticationPackageName` SMB 枚举通常会留下比较密集的 Type 3 登录记录,源 IP 集中、目标主机范围广,和正常用户访问行为差异明显。 另外,授权测试里最好提前确认账号锁定策略: net accounts /domain 重点看: Lockout threshold Lockout duration Lockout observation window 如果锁定阈值比较低,不建议用 CME/NXC 直接扫大段网段做密码验证,先用已知有效凭据做共享和权限枚举更稳。
创建帐户或登录后发表意见