1-7〔 OSCP ◈ 研记 〕❘ 信息收集▸主动采集E:SMB基础
郑重声明: 本文所有安全知识与技术,仅用于探讨、研究及学习,严禁用于违反国家法律法规的非法活动。对于因不当使用相关内容造成的任何损失或法律责任,本人不承担任何责任。 如需转载,请注明出处且不得用于商业盈利。
感谢您的点赞、关注、收藏、分享!
𖤐 深 呼 吸 、 放 轻 松 ,这 只 是 一 个 故 事。
𖤐 𝓓𝓮𝓮𝓹 𝓫𝓻𝓮𝓪𝓽𝓱, 𝓻𝓮𝓵𝓪𝔁, 𝓲𝓽'𝓼 𝓳𝓾𝓼𝓽 𝓪 𝓼𝓽𝓸𝓻𝔂.
→ 信息收集▸主动采集▸SMB·基础-----我们在这儿~ 🔥🔥🔥
→ 漏洞检测
→ 初始立足点
→ 权限提升
→ 横向移动
→ 报告/分析
→ 教训/修复
目录
1.4 主动信息收集(SMB 枚举)
1.4.1 了解SMB协议
1.4.1.1SMB协议是什么?
1.4.1.2SMB协议使用端口?
1.4.1.3如何禁用TCP端口139?
1.4.1.4为啥在信息收集中通常同时扫 139 和 445?
1.4.1.5总结:NetBIOS, NetBIOS over TCP/IP (NBT), SMB 关系大梳理
1.4.2 使用 Nmap 扫描 SMB (基础枚举)
1.4.3 使用 Nmap 的 NSE 脚本深挖 SMB(进阶枚举)
1.4.3.1使用 smb-os-discovery 脚本探测SMB 主机的操作系统信息
1.4.3.3使用 smb-enum-users 脚本用于枚举目标主机上的有效用户
1.4.3.4其他有关smb脚本简介
创作不易~感谢您的点赞、关注、收藏、分享~
1.4 主动信息收集(SMB 枚举)
服务器消息块(SMB)协议,堪称 Windows 网络世界的“老熟人”,也是安全界的“常客”——它的安全性历史可以说是相当坎坷!😅 从 Windows 2000/XP 时代毫无防备的 SMB 空会话(无需密码就能连接!),到多年来曝出的海量漏洞(还记得永恒之蓝/WannaCry吗?💥),SMB 绝对是攻击者最爱的“突破口”之一。
当然,微软也在不断改进,新版本的 Windows 对 SMB 协议做了很多安全加固和功能更新。但“老习惯”难改,枚举 SMB 服务仍然是渗透测试和信息收集的关键步骤!
1.4.1 了解SMB协议
1.4.1.1SMB协议是什么?
SMB(Server Message Block):是一种网络文件共享协议,主要用于局域网(LAN)中不同设备(如计算机、服务器、打印机)之间的文件、打印机和串行端口等资源的共享与访问。它允许用户像操作本地文件一样读写远程文件,支持多用户并发访问、身份验证、加密传输等功能,是Windows系统的核心文件共享协议(如“网络邻居”),也兼容Linux/Unix(通过Samba实现)。
🧐说人话:SMB协议就像一家超市的“共享购物车系统”��。通过这个系统,所有人高效共享资源,如同SMB让设备在局域网内无缝协作。
超市(服务器):提供商品(各种文件、打印机等资源)。
顾客(客户端设备):推着购物车(SMB连接)进入超市。
自由存取:顾客可随时将货架上的商品放入购物车(读取文件),或将自带物品存进货架(写入文件)。
多人协作:多名顾客可同时操作同一区域(多用户编辑共享文件)。
收银台验证(身份认证):结账时需出示会员卡(账号密码),确保安全。
超市规则(权限控制):部分区域仅限员工进入(权限设置限制访问)。
1.4.1.2SMB协议使用端口?
SMB协议主要使用两个端口:
·TCP 445(主要端口):现代SMB(从Windows 2000开始)直接运行在TCP/IP协议栈上,默认使用TCP 445端口。这是当前Windows和Samba系统最常用的端口。
·TCP 139(传统端口):早期SMB(Windows NT/98等)依赖NetBIOS over TCP/IP (NBT),使用TCP 139端口(用于会话服务)。现代系统通常已淘汰此端口。
现代SMB通信默认使用TCP 445端口。TCP 139是旧版NetBIOS的遗留端口,除非环境包含老旧设备,否则无需开放。
想象一下 SMB 协议有两条回家的路:
·🛣️ 新高速路 (Direct Hosting): TCP 445
Windows 2000 及以后,SMB 协议进化了!它可以不依赖 NetBIOS/NBT,直接跑在 TCP/IP 协议栈上。这就叫 "Direct hosting of SMB over TCP/IP"。关键端口:TCP 445。一条直达 SMB 服务的“高速公路”!🚀
·🏡 老路 (NetBIOS over TCP/IP - NBT): TCP 139(传统端口)
这条老路由 NetBIOS 这位“老管家”管理。NetBIOS 本身不是网络协议,而是一套 API,让老式局域网程序能互相聊天。为了让这些老程序在现代 TCP/IP 网络上跑,就诞生了 NetBIOS over TCP/IP (NBT/NetBT) 这个协议。SMB 协议最早就是“搭”NBT 的车运行的! 🚗关键端口:TCP 139 (会话服务) + UDP 137 (名字服务) + UDP 138 (数据报服务)。如下图:
1.4.1.3如何禁用TCP端口139?
配置路径:控制面板---网络连接---找到当前网卡---属性---Internet协议版本4属性---高级---WINS---禁用TCP/IP上的NetBios---确认。操作后139端口关闭,SMB就只运行在445端口之上了。
禁用前:在网络连接中可见139端口处于监听状态。
禁用后:在网络连接中找不到139端口了。
1.4.1.4为啥在信息收集中通常同时扫 139 和 445?
-
为了兼容性! 虽然现代 Windows 默认更喜欢走 445 这条新高速 (Direct Hosting),但为了照顾老设备、老软件,系统通常默认同时开启 NBT (TCP 139) 这条老路。🔄
-
“双保险”扫描:攻击者或测试人员不知道目标主机到底开的是哪条路(或者两条都开),所以最稳妥的做法就是同时探测 139 和 445 端口,确保一个不漏!🎯
1.4.1.5总结:NetBIOS, NetBIOS over TCP/IP (NBT), SMB 关系大梳理
概念 | 本质 | 作用 | 关键点 |
---|---|---|---|
NetBIOS | 一套 API (接口) | 提供局域网内计算机通信的基本功能(名字解析、会话建立等) | 不是网络协议! 是软件间通信的“语言规则”。 |
NBT/NetBT | 一个网络协议 | 让依赖 NetBIOS API 的老程序能在 TCP/IP 网络上运行 | 是 NetBIOS API 在 TCP/IP 上的“翻译官”和“司机”。 🚕 |
SMB | 一个应用层协议 | 提供文件共享、打印机共享、进程间通信等核心网络服务 | 如今主要在 Windows 世界运行。是真正的“干活”协议。 ⚙️ |
📡 SMB 的两种运行方式:
①搭车模式 (传统):SMB over NBT over TCP/IP:TCP 139 (用于建立SMB会话)
[SMB 协议] --> [NetBIOS API] --> [NBT 协议] --> [TCP/UDP] --> **端口:TCP 139, UDP 137/138**
②直达模式 (现代):Direct Hosting (SMB over TCP/IP):TCP 445, 完全绕过 NetBIOS/NBT,更简洁高效!✨
[SMB 协议] --> [TCP/UDP] --> **端口:TCP 445**
1.4.2 使用 Nmap 扫描 SMB (基础枚举)
想要快速找出网络中哪些机器开放了关键的 SMB 服务 (常用于文件共享、打印机等),nmap
是你的好帮手!只需一条命令就能扫描整个网段:
$ nmap -v -p 139,445 -oG smb.txt 192.168.50.1-254
-
-v
: 详细输出,让你看到扫描过程 (可选但推荐)。 -
-p 139,445
: 🎯 核心参数! 明确指定扫描 SMB 专属端口 139 (NetBIOS) 和 445 (SMB over TCP)。 -
-oG smb.txt
: 将扫描结果以 Grepable 格式 保存到smb.txt
文件中,方便后续处理。 -
192.168.50.1-254
: 扫描整个192.168.50.0/24
网段的所有主机。
结果在哪?📁 打开生成的 smb.txt
文件,它会清晰地告诉你哪些 IP 地址 开放了端口 139 和/或 445,这些都是潜在的 SMB 服务器目标!
kali@kali:~s cat smb.txt
# Nmap 7.92 scan initiated Thu Mar 17 06:03:12 2022 as:nmap -v -p 139,445 -oG smb.txt 192.168.50.1-254
# Ports scanned: TCP(2;139,445) UDP(0;) SCTP(0;) PROTOCOLS(0;)
Host:192.168.50.1() Status:Down
...
Host:192.168.50.25() Status:Up
Host:192.168.50.25() Ports:139/closed/tcp//netbios-ssn///,445/closed/tcp//microsoft-ds///
...
Host:192.168.50.162() Status:Up
Host:192.168.50.162() Ports:139/closed/tcp//netbios-ssn///,445/closed/tcp//microsoft-ds///
# Nmap done at Thu Mar 17 06:03:18 2022 --254 IP addresses (15 hosts up) scanned in 6.17 seconds
1.4.3 使用 Nmap 的 NSE 脚本深挖 SMB(进阶枚举)
Nmap 的强大之处在于它的 NSE (Nmap Scripting Engine) 脚本库!我们可以在
/usr/share/nmap/scripts目录中找到这些脚本。 每个脚本都能执行特定的 SMB 枚举或检测任务。
kali@kali:~$ ls -1 /usr/share/nmap/scripts/smb* # smb*指的是匹配以smb为开头的文件名。
/usr/share/nmap/scripts/smb2-capabilities.nse
/usr/share/nmap/scripts/smb2-security-mode.nse
/usr/share/nmap/scripts/smb2-time.nse
/usr/share/nmap/scripts/smb2-vuln-uptime.nse
/usr/share/nmap/scripts/smb-brute.nse
/usr/share/nmap/scripts/smb-double-pulsar-backdoor.nse
/usr/share/nmap/scripts/smb-enum-domains.nse
/usr/share/nmap/scripts/smb-enum-groups.nse
/usr/share/nmap/scripts/smb-enum-processes.nse
/usr/share/nmap/scripts/smb-enum-sessions.nse
/usr/share/nmap/scripts/smb-enum-shares.nse
/usr/share/nmap/scripts/smb-enum-users.nse
/usr/share/nmap/scripts/smb-os-discovery.nse
1.4.3.1使用 smb-os-discovery
脚本探测SMB 主机的操作系统信息
💻实战示例:探测 SMB 主机的操作系统信息。
试试强大的 smb-os-discovery
脚本,它能通过 SMB 协议本身 来尝试识别目标的操作系统和其他关键信息:
$ nmap -v -p 139,445 --script smb-os-discovery 192.168.50.152
-
--script smb-os-discovery
: 🎯 核心参数! 加载并执行smb-os-discovery.nse
脚本。
脚本输出会告诉你什么?
kali@kali:~$ nmap -v-p 139,445--script smb-os-discovery 192.168.50.152
...
PORT STATE SERVICE REASON
139/tcp open netbios-ssn syn-ack
445/tcp open microsoft-ds syn-ackHost script results:
| smb-os-discovery:
| 0S:Windows 10 Pro 22000 (Windows 10 Pro 6.3)
| 0S CPE:cpe:/o:microsoft:windows_10::-
| Computer name:client06
| NetBIoS computer name:CLIENT1\x00
| Domain name:megacorptwo.com
| Forest name:megacorptwo.com
| FODN:client0l.megacorptwo.com
|_ System time:2025-05-22T10:27:39-09:00
...
-
操作系统猜测: 脚本会报告它检测到的操作系统类型 (例如
Windows 10
)。 ⚠️ 注意: 这个猜测可能不完全准确!例子中目标明明是 Windows 11,却被报告为 Windows 10。不要完全依赖单一来源的 OS 指纹! -
丰富信息: 远超 基础的
nmap -O
操作系统探测!它通常还能提供:-
计算机名 (
Computer name
) -
所属的 域名 (
Domain name
) 或工作组 (Workgroup
) -
系统启动时间 (
System time
) -
甚至 NetBIOS 和 SMB 的详细版本信息。
-
1.4.3.2使用 smb-enum-shares
脚本列出远程主机上共享的 SMB 目录
kali@kali:~$ nmap -p 445 --script smb-enum-shares 192.168.50.152Starting Nmap 7.92 ( https://nmap.org )
Nmap scan report for 192.168.50.152
Host is up (0.035s latency).PORT STATE SERVICE
445/tcp open microsoft-ds # ✅ SMB端口开放Host script results:
| smb-enum-shares:
| account_used: guest # 使用的账户类型
| \\192.168.50.152\ADMIN$:
| Type: STYPE_DISKTREE_HIDDEN # 隐藏磁盘
| Comment: Remote Admin
| Anonymous access: <none> # 匿名不可访问
| Current user access: <none>
| \\192.168.50.152\C$:
| Type: STYPE_DISKTREE_HIDDEN
| Comment: Default share
| Anonymous access: <none>
| Current user access: <none>
| \\192.168.50.152\IPC$:
| Type: STYPE_IPC_HIDDEN # 进程通信管道
| Comment: Remote IPC
| Anonymous access: READ # 匿名可读
| \\192.168.50.152\Public:
| Type: STYPE_DISKTREE # 普通共享
| Comment:
| Anonymous access: READ/WRITE # 匿名可读写!
| Warning: Unprotected share! # ⚠️ 安全警告
| \\192.168.50.152\Finance:
| Type: STYPE_DISKTREE
| Comment: Financial Department
| Anonymous access: <none>
| Current user access: READ
|
|_ Use '--script-args smbusername=user,smbpassword=pass' for auth
1.4.3.3使用 smb-enum-users
脚本用于枚举目标主机上的有效用户
kali@kali:~$ nmap -p 445 --script smb-enum-users 192.168.50.152Starting Nmap 7.92 ( https://nmap.org )
Nmap scan report for 192.168.50.152
Host is up (0.028s latency).PORT STATE SERVICE
445/tcp open microsoft-ds # ✅ SMB端口开放Host script results:
| smb-enum-users:
| DC01\Administrator (RID: 500) # 管理员账户,首要攻击目标!⚠️
| Description: 系统内置管理员账户
| Flags: Normal, Password does not expire # 正常,密码不过期
| DC01\Guest (RID: 501) # 访客账户
| Description: 内置访客账户
| Flags: Disabled, Normal # 禁用,正常
| DC01\krbtgt (RID: 502) # Kerberos服务账户,若获取此账户哈希可伪造黄金票据 🎫
| Description: 密钥分发中心服务账户
| Flags: Disabled, Normal # 禁用,正常
| DC01\jsmith (RID: 1105) # 普通用户
| Full name: John Smith
| Description: 财务部经理 # 社会工程学攻击素材,针对性钓鱼攻击依据 🎣
| Flags: Normal, Password does not expire
| DC01\sarahj (RID: 1106)
| Full name: Sarah Johnson
| Description: IT管理员
| Flags: Normal
| DC01\mikeb (RID: 1107)
| Full name: Mike Brown
| Flags: Password expired # 密码过期账户,可能使用旧密码,密码策略绕过突破口 🔓
|
|_ Statistics: Performed 3 guesses in 1s
根据上述问题,🛡️ 防御建议:
-
修改默认管理员账户名(不再使用
Administrator
) -
为
krbtgt
账户设置超强密码(50+字符) -
删除或禁用账户描述中的敏感职位信息
-
启用账户登录失败锁定策略
1.4.3.4其他有关smb脚本简介
kali@kali:~$ nmap -p 445 --script smb-protocols 192.168.50.152 # 使用smb-protocols脚本来检测目标支持的 SMB 协议版本(如 SMBv1, SMBv2, SMBv3)
kali@kali:~$ nmap -p 445 --script smb-security-mode 192.168.50.152# 枚举 SMB 安全设置,确认是否启用了如加密和签名等安全特性
kali@kali:~$ nmap -p 445 --script smb-os-fingerprint,smb-enum-shares,smb-enum-users,smb-security-mode,smb-protocols 192.168.50.152# 执行多种 SMB 枚举脚本,提供关于目标系统、共享资源、用户、协议版本和安全设置的详细信息。
为什么这种方式很妙?🕵️♂️
-
更隐蔽: 相比主动的
-O
操作系统扫描,通过 SMB 协议进行查询 产生的网络流量 更少、更自然,更容易融入正常的 企业网络活动背景噪音 中,降低了被发现的风险。 -
更多信息: 提供了 Active Directory 域环境 相关的关键上下文信息 (如域名),这对理解目标环境至关重要。
创作不易~感谢您的点赞、关注、收藏、分享~
您的支持是我创作最大的动力!
艺术欣赏环节~放松心情👁️👁️