当前位置: 首页 > news >正文

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.2使用 smb-enum-shares 脚本列出远程主机上共享的 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

根据上述问题,🛡️ 防御建议:

  1. 修改默认管理员账户名(不再使用 Administrator

  2. 为 krbtgt 账户设置超强密码(50+字符)

  3. 删除或禁用账户描述中的敏感职位信息

  4. 启用账户登录失败锁定策略


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 枚举脚本,提供关于目标系统、共享资源、用户、协议版本和安全设置的详细信息。

为什么这种方式很妙?🕵️‍♂️

  1. 更隐蔽: 相比主动的 -O 操作系统扫描,通过 SMB 协议进行查询 产生的网络流量 更少、更自然,更容易融入正常的 企业网络活动背景噪音 中,降低了被发现的风险

  2. 更多信息: 提供了 Active Directory 域环境 相关的关键上下文信息 (如域名),这对理解目标环境至关重要。


创作不易~感谢您的点赞、关注、收藏、分享~

您的支持是我创作最大的动力!

艺术欣赏环节~放松心情👁️👁️

 

http://www.dtcms.com/a/312040.html

相关文章:

  • 硬件-可靠性学习DAY1——系统可靠性设计指南:从原理到实践
  • Markdown 中的图表 Mermaid 与 classDiagram
  • Thread 中的 run() 方法 和 start() 方法的
  • 笔记:C语言中指向指针的指针作用
  • MQTT协议测试环境部署
  • 错误: 找不到或无法加载主类 原因: java.lang.ClassNotFoundException
  • (nice!!!)(LeetCode 每日一题) 2561. 重排水果 (哈希表 + 贪心)
  • UNet改进(29):记忆增强注意力机制在UNet中的创新应用-原理、实现与性能提升
  • 【嵌入式汇编基础】-ARM架构基础(三)
  • 动态规划解最长回文子串:深入解析与优化问题
  • 【redis】基于工业界技术分享的内容总结
  • JS的作用域
  • 第15届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2024年1月28日真题
  • sqli-labs:Less-20关卡详细解析
  • MFC 实现托盘图标菜单图标功能
  • 中州养老Day02:服务管理护理计划模块
  • 中之人模式下的虚拟主持人:动捕设备与面捕技术的协同驱动
  • 2025系规教材改革后,论文怎么写?
  • 错误处理_IncompatibleKeys
  • 在Linux上对固态硬盘进行分区、格式化和挂载的步骤
  • CH32V单片机启用 FPU 速度测试
  • MVVM——ArkUI的UI开发模式
  • 使用Python开发Ditto剪贴板数据导出工具
  • 使用C++实现日志(2)
  • MCP终极指南 - 从原理到实战(基础篇)
  • 面试实战,问题二十二,Java JDK 17 有哪些新特性,怎么回答
  • windows内核研究(软件调试-异常的处理流程)
  • 幂等性介绍和下单接口幂等性保证实现方案
  • 雷卯针对香橙派Orange Pi RV2开发板防雷防静电方案
  • kotlin小记(1)