枚举 SMB (Kioptrix)

SMB 是一种主要在 Windows 上使用的协议,允许同一网络上的设备共享文件。 SMB 允许写入、读取、下载文件等。

SMB/“samba”服务(通常托管在端口 445139 上)可以在 Linux 上使用 smbclient 命令进行访问。 SMB 上托管的文件称为“共享”,要访问它们,您需要通过“工作组”登录。

Kioptrix 框中,我们可以从 nmap 扫描中看到端口 445 上识别的工作组是 MYGROUP

版本控制

确定正在运行的 SMB 服务的版本很有用(并被视为一项发现),因为您可以使用该版本来查找 CVE 以及已开发并成功针对该服务使用的漏洞。

如果 Nmap 无法找到带有 -sV 标志的确切版本(并且 --version-intensity 设置为 9),那么您可以使用其他工具。

Metasploit

Metasploit 是一个命令行工具,可用于漏洞利用的大多数阶段。它可以执行侦察、扫描、枚举、利用等操作。在 Kioptrix 中,目前我们要做的就是获取目标正在使用的 SMB 版本:

msfconsole

使用此命令启动metasploit框架控制台。这是我们构建漏洞的环境。

在新的shell环境中,使用search命令查找与SMB相关的模块。

1
2
3
4
5
6
7
8
9
       =[ metasploit v6.3.27-dev                          ]
+ -- --=[ 2335 exploits - 1217 auxiliary - 413 post ]
+ -- --=[ 1385 payloads - 46 encoders - 11 nops ]
+ -- --=[ 9 evasion ]

Metasploit tip: Open an interactive Ruby terminal with irb
Metasploit Documentation: https://docs.metasploit.com/

msf6 > search SMB # This is your input

一旦结果弹出,我们就会寻找一个与版本控制有关的辅助模块

1
2
3
...
111 auxiliary/scanner/smb/smb_version normal No SMB Version Detection
...

该扫描仪模块看起来正确,因此要使用它,我们使用 use 命令并为其指定编号,即:use 111。使用此命令,我们已经设置了模块,并且 shell 应该反映这一点:

1
msf6 auxiliary(scanner/smb/smb_version) > 

设置变量:

一旦我们设置了要针对目标使用的模块,我们需要设置环境变量以供其使用。其中包括目标的 IP 地址、我们想要访问的端口等。

要查看模块所需的变量列表,请使用 options 和/或 info 命令:

1
2
3
4
5
6
7
8
msf6 auxiliary(scanner/smb/smb_version) > options
Module options (auxiliary/scanner/smb/smb_version):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOSTS yes The target host(s), see (...)
THREADS 1 yes The number of concurrent threads (max one
per host)
View the full module info with the info, or info -d command.

我们想要设置 RHOSTS 变量,它将成为我们目标的 IP 地址。为此,只需使用 set 命令:

1
2
msf6 auxiliary(scanner/smb/smb_version) > set RHOSTS 10.0.3.5
RHOSTS => 10.0.2.5

保存输出:

在运行模块之前我们可能希望将输出保存到文件中。为此,您可以使用带有目标文件的 spool 命令:

1
msf6 auxiliary(scanner/smb/smb_version) > spool output.txt

启动模块:

现在我们已经选择了一个模块并给了它一个目标,我们可以使用 run 命令运行该模块。

1
2
3
4
5
6
7
8
msf6 auxiliary(scanner/smb/smb_version) > run

[*] 10.0.3.5:139 - SMB Detected (versions:) (preferred dialect:)
(signatures:optional)
[*] 10.0.3.5:139 - Host could not be identified: Unix (Samba 2.2.1a)
[*] 10.0.3.5: - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
msf6 auxiliary(scanner/smb/smb_version) >

现在我们知道目标正在运行 Samba 2.2.1a,我们可以在其中查找相关的漏洞/CVE。

其他 SMB 枚举工具:

nmblookup

nmblookup 是一个 CLI 工具,它将网络上设备的 NetBIOS 名称解析为其 IP 地址。它通过利用网络上进行的查询来实现这一点。

nbtscan

nbtscan 是另一个 CLI 命令,它将通过向提供的 IP 地址或 IP 地址范围发送 NetBIOS 状态查询来返回有关网络上计算机的信息。它可以返回以下信息:

  • IP地址
  • NetBIOS 计算机名称
  • 当前登录用户
  • MAC 地址

enum4linux

enum4linux 是一个专门用于枚举目标上的 SMB 信息的枚举工具(但也可以返回附加信息)。

只需给 enum4linux 我们的目标 IP,并且没有标志,我们就可以得到很多信息:

1
enum4linux 10.0.3.5

返回了很多输出,包括有趣的信息,例如:

  1. 目标的密码策略
  2. 用户帐户和组
    3.RID
  3. 用户
  4. 工作组
  5. 域名
  6. NetBIOS
  7. 股份
  8. 等等

嵌入命令:

enum4linux通过使用其他常见的SMB命令来枚举目标信息。其中包括 smbclientsmbgetrpcclientnetnmblookup 等。

Nmap nbstat.nse 脚本

此 Nmap 脚本专门用于枚举目标上的 NetBIOS 名称和 MAC 地址。它返回登录计算机的名称以及用户的名称。如果您增加详细程度,它还可以返回它*认为系统拥有的所有名称。

它还将为我们提供与 nmblookup 相同的标志。

黑客文章

Nmap smb-os-discovery.nse 脚本

此 Nmap 脚本使用匿名帐户通过 SMB *启动与目标的连接。在此过程中,它能够收集并返回信息,包括操作系统、计算机名称、域、工作组和当前时间。

这是可能的,因为 SMB 服务器在您发起与其的连接时会发回所有这些信息。该脚本可以返回的其他信息包括:

提示

检查/etc/samba/smb.conf

转到 min protocol:这需要匹配远程目标的协议和/或目标版本需要落在该范围内。

摆脱

RID 基本上就像使用机器的 SID 并在最后添加某些用户已知的数字,然后查询它是否存在……

[!资源]

[!我以前的笔记(在文本中链接)]