NMAP:网络探索和安全审计手册 Chapter7 扫描 Windows 系统

本章包括以下操作步骤:

  • 从 SMB 获取系统信息

  • 检测禁用了 SMB 签名的 Windows 客户端

  • 检测披露 Windows 8.3 名称的 IIS 网络服务器

  • 检测易受 MS08-067 影响的 Windows 主机

  • 检索主机的 NetBIOS 名称和 MAC 地址

  • 枚举 Windows 主机的用户账户

  • 枚举共享文件夹

  • 枚举 SMB 会话

  • 查找域控制器

  • 检测影子经纪人的 DOUBLEPULSAR SMB 植入物

引言

基于 Windows 的网络仍然是企业中最常见的网络类型,这主要是因为活动目录(AD)技术可以帮助系统管理员简化许多日常任务。虽然 Windows 系统在安全性方面已经取得了长足的进步,但仍有一些默认配置我们可以认为是不安全的。不仅是默认配置,一些不受欢迎的功能也是设计出来的,比如可以通过 SMBv1 获取系统信息而无需验证。扫描 Windows 系统

因此,扫描 Windows 机器是渗透测试人员和系统管理员的一项常见任务,幸好 Nmap 提供了大量资源来帮助我们。作为高级 Nmap 用户,我们需要了解有哪些可用脚本,最重要的是这些脚本在哪些平台和配置上工作。

本章介绍服务器消息块 (SMB) 的 NSE 脚本,SMB 无疑是 Windows 中最重要的协议,可用于枚举用户、共享文件夹、策略和系统信息。本章还介绍了在每个网络中都应注意的一些漏洞/错误配置的检测脚本,如臭名昭著的 MS08-067 和 NSA 的 DOUBLEPULSAR 后门。通过本章的学习,您将对针对 Windows 主机的侦察步骤有一个坚实的了解。由于 Nmap 并不专注于漏洞利用,因此在侦察之后,请参考您最喜欢的 Metasploit 或 Shadow Brokers 模块。

从 SMB 获取系统信息

SMB 是微软 Windows 客户端中常见的一种协议,经过多年的发展已日趋成熟。尽管有了更新的版本,但出于兼容性考虑,SMBv1 仍可在大多数系统中启用。SMBv1 有一个被滥用多年的有趣功能,那就是 SMBv1 服务器无需验证即可返回系统信息。这些信息包括 Windows 版本、版本号、NetBIOS 计算机名称、工作组和准确的系统时间。这些信息非常有用,可以让我们在没有操作系统检测扫描噪音的情况下对系统进行指纹识别。

本食谱展示了如何使用 Nmap 从 SMB 获取系统信息。

How to do it...

打开终端,输入以下 Nmap 命令:

$ nmap -p139,445 --script smb-os-discovery <target> 

如果启用了 SMBv1,脚本 smb-os-discovery 将返回有价值的系统信息:

 PORT STATE SERVICE 
 445/tcp open microsoft-ds 
 MAC Address: 9C:2A:70:10:84:BF (Hon Hai Precision Ind.) 
 Host script results: 
 | smb-os-discovery: 
 | OS: Windows 10 Home 14393 (Windows 10 Home 6.3) 
 | OS CPE: cpe:/o:microsoft:windows_10::- 
 | NetBIOS computer name: ALIEN 
 | Workgroup: MATRIX 
 |_ System time: 2017-04-14T20:40:46-05:00 

How it works...

由于协议规范的原因,SMBv1 允许攻击者在所有系统中获取系统信息而无需验证。虽然 Windows 会返回特定的系统版本和服务包,但其他系统并不遵循这一规定。多年来,攻击者一直在滥用这一功能,因为出于兼容性原因,SMBv1 仍在现代系统中启用,尽管 Windows 的最后一个能与 SMBv1 进行协商的版本是 Windows Server 2003。返回的信息因服务器是否属于 Windows AD 网络而异。SMB 返回的信息包括 Windows 版本、计算机名、域名、林名、FQDN、NetBIOS 计算机名、NetBIOS 域名、工作组和系统时间。

smb-os-discovery 脚本由 Ron Bowes 提交(包含整个 SMBv1 和 MSRPC 库),用于从 SMBv1 数据包中检索系统信息。在前面的命令中,我们探测了常用的 Windows SMB 端口 TCP/139 和 TCP/445 (-p139,445),并启动了 --script smb-os-discovery 脚本来检索前面提到的系统信息:

 PORT STATE SERVICE
 445/tcp open microsoft-ds
 MAC Address: 9C:2A:70:10:84:BF (Hon Hai Precision Ind.)
 Host script results:
 | smb-os-discovery:
 | OS: Windows Server (R) 2008 Standard 6001 Service Pack 1
 (Windows Server (R) 2008 Standard 6.0)
 | OS CPE: cpe:/o:microsoft:windows_2008::sp1
 | Computer name: Sql2008
 | NetBIOS computer name: SQL2008
 | Domain name: lab.test.local
 | Forest name: test.local
 | FQDN: Sql2008.lab.test.local
 | NetBIOS domain name: LAB
 |_ System time: 2011-04-20T13:34:06-05:00

There's more...

来自 SMB 的系统信息非常准确,在对 Windows 系统进行指纹识别时可节省大量扫描时间。由于这些信息是对 SMB SMB_COM_SESSION_SETUP_ANDX 命令的有效 SMB 响应,因此在许多受监控的网络中可能会作为正常流量通过。如果目标上有 SMBv1,请考虑在启动全面操作系统检测扫描前检查 SMB 返回的操作系统。

检测禁用 SMB 签名的 Windows 客户端

SMB 无疑是基于 Windows 的主机最重要的协议,它支持消息签名,以帮助主机确认所传输数据的来源和真实性。遗憾的是,除域控制器外,所有系统都默认禁用了这一功能。这使得 Windows 主机容易受到中间人(MitM)攻击,这些攻击可通过 SMB 中毒/中继导致远程代码执行。

本教程介绍如何使用 Nmap 获取 Windows 机器的 SMB 签名配置。

How to do it...

打开终端,输入以下 Nmap 命令:

$ nmap -p137,139,445 --script smb-security-mode <target> 

如果已禁用 SMB 消息签名,则应查看消息_签名:已禁用:

 PORT STATE SERVICE
 445/tcp open microsoft-ds
 MAC Address: 9C:2A:70:10:84:BF (Hon Hai Precision Ind.)
 Host script results:
 | smb-security-mode:
 | account_used: guest
 | authentication_level: user
 | challenge_response: supported
 |_ message_signing: disabled (dangerous, but default)
 Nmap done: 1 IP address (1 host up) scanned in 0.68 seconds

How it works...

SMB 报文签名是一种安全功能,可检查报文来源和内容的有效性。如果禁用,网络内的攻击者就可能利用 SMB 中毒/中继技术远程执行恶意代码。如果网络管理员或具有管理权限的应用程序连接到攻击者的服务器,系统就会被完全入侵。

smb-security-mode 脚本由 Ron Bowes(连同整个 SMBv1 库)提交,用于检索有关 SMB 安全级别的信息。在前面的命令中,我们探测了常用的 Windows SMB 端口 TCP/139 和 TCP/445(-p139,445),并启动了 --script smb-security-mode 脚本来检索 SMB 消息签名配置:

 PORT STATE SERVICE
 445/tcp open microsoft-ds
 MAC Address: 9C:2A:70:10:84:BF (Hon Hai Precision Ind.)
 Host script results:
 | smb-security-mode:
 | account_used: guest
 | authentication_level: user
 | challenge_response: supported
 |_ message_signing: disabled (dangerous, but default)
 Nmap done: 1 IP address (1 host up) scanned in 0.68 seconds

There's more...

如果您使用的是 Windows 系统,那么启用 SMB 的可能性非常大。让我们回顾一下与 SMB 和 SMB 签名相关的一些方面。

在 TCP 流量受阻时检查 UDP

有些目标会过滤 TCP 流量,因此也不要忘记检查 UDP。管理员往往会忘记过滤 UDP 流量。在 Windows 机器中,请检查 UDP 端口 137:

$ nmap -sU -p137 --script smb-security-mode <target> 

攻击已禁用信息签名的主机

一旦找到禁用 SMB 消息签名的潜在目标,就可以尝试 Impacket'ssmbrelayx.py (https://github.com/CoreSecurity/impacket),我在这段视频中演示了这一方法:https://www.youtube.com/watch?v=se9YgJCp7DI。另一个功能强大的优秀工具是 Responder (https://github.com/lgandx/Responder)。

检测披露 Windows 8.3 名称的 IIS 网络服务器

已知 IIS 服务器存在信息泄露漏洞,该漏洞会泄露网络服务器根文件夹中文件的 Windows 8.3 名称。它通常被称为 IIS tilde 字符漏洞,也可用于绕过身份验证并导致拒绝服务情况。由于它揭示了未公开的文件信息,因此会带来风险,导致攻击者访问隐藏功能或被遗忘的文件(如备份)。每次看到 IIS 网络服务器时,都应检查是否存在此漏洞。

本教程演示了如何使用 Nmap 检测和提取易受 Windows 8.3 名称泄露影响的 IIS Web 服务器中托管文件的列表。

How to do it...

打开终端,输入以下 Nmap 命令:

$ nmap -p80 --script iis-short-name-brute <target> 

如果脚本检测到网络服务器存在漏洞,它就会返回一份报告,其中包括提取的 Windows 8.3 文件名列表和 webroot 文件夹中托管的目录:

 PORT STATE SERVICE
 80/tcp open http
 | http-iis-short-name-brute:
 | VULNERABLE:
 | Microsoft IIS tilde character "~" short name disclosure and
 denial of service
 | State: VULNERABLE (Exploitable)
 | Description:
 | Vulnerable IIS servers disclose folder and file names with a
 Windows 8.3 naming scheme inside the webroot folder.
 | Shortnames can be used to guess or brute force sensitive
 filenames. Attackers can exploit this vulnerability to
 | cause a denial of service condition.
 |
 | Extra information:
 |
 | 8.3 filenames found:
 | Folders
 | admini~1
 | Files
 | backup~1.zip
 | certsb~2.zip
 | siteba~1.zip
 |
 | References:
 |
 http://soroush.secproject.com/downloadable/microsoft_iis_
 tilde_charact er_vulnerability_feature.pdf
 |_ http://code.google.com/p/iis-shortname-scanner-poc/

How it works...

IIS tilde 字符漏洞(http://soroush.secproject.com/downloadable/mic rosoft_iis_tilde_character_vulnerability_feature.pdf)影响 IIS 6.0 至 8.0 版本,如今发现受此影响的 Web 服务器非常普遍。多年来,人们一直认为该漏洞只影响 IIS 6.0,但最近证实,使用 HTTP 方法 OPTIONS 可以在较新版本中利用该漏洞。在有漏洞的服务器上,攻击者可以获取网络根目录下文件夹中所有文件的 Windows 8.3 名称表示。Windows 8.3 也称为短名称,文件名限制为 6 个字符,扩展名限制为 3 个字符。例如

  • backup~1.zip
  • certsb~2.zip
  • siteba~1.zip

由于攻击者需要全名才能访问文件,因此他们将依靠猜测文件名或暴力破解缺失字符的能力(根据字符集的不同,如果缺失字符超过 3-5 个,那就不切实际了)来完全利用这个漏洞。但是,如果托管文件使用的是短文件名(实际全名),则会非常简单直接。

nmap -p80 --script iis-short-name-brute 命令告诉 Nmap 探测 TCP 端口 80 (-p80),如果端口打开,则启动 NSE 脚本 --script iis-short-namebrute。脚本报告包括漏洞的全部详细信息,包括其他参考信息以及发现暴露的文件夹和文件列表:

 PORT STATE SERVICE
 80/tcp open http
 | http-iis-short-name-brute:
 | VULNERABLE:
 | Microsoft IIS tilde character "~" short name disclosure and
 denial of service
 | State: VULNERABLE (Exploitable)
 | Description:
 | Vulnerable IIS servers disclose folder and file names with a
 Windows 8.3 naming scheme inside the webroot folder.
 | Shortnames can be used to guess or brute force sensitive
 filenames. Attackers can exploit this vulnerability to
 | cause a denial of service condition.
 |
 | Extra information:
 |
 | 8.3 filenames found:
 | Folders
 | admini~1
 | Files
 | backup~1.zip
 | certsb~2.zip
 | siteba~1.zip
 |
 | References:
 |
 http://soroush.secproject.com/downloadable/microsoft_iis_
 tilde_characte r_vulnerability_feature.pdf
 |_ http://code.google.com/p/iis-shortname-scanner-poc/

There's more...

我发现这个漏洞非常有趣,因为它传播广泛,影响到旧版本和更现代版本的 IIS。如果我们使用的是 Windows 系统,就必须了解不同的检测技术以及如何利用该漏洞。

Bruteforcing Windows 8.3 names

如果您无法猜出完整的文件名,而又想尝试从简短的文件名中强求出文件名,您可以使用我发布的一个脚本:8dot3-brute,可在 https://github.com/cldrn/8dot3-brute 上获取。该脚本会通过迭代默认字符集来强制执行文件和目录名,但你也可以指定自己的字符集和长度规则。

例如,如果 8.3 目录名为 DOCUME~,我们将运行以下命令:

./8dot3-brute.py -u <target> -d 'DOCUME' -v 

通过不同的 HTTP 方法检测 Windows 8.3 名称

http-iis-short-name 脚本基于最初的 IIS 短名扫描器,该扫描器提供了有趣的配置特性和功能。如果您在使用 NSE 脚本时遇到问题,我建议您试试 https://github.com/irsdl/IIS-ShortName-Scanner 上提供的 IIS ShortName 扫描器。

检测易受 MS08-067 影响的 Windows 主机

影响过时系统的最臭名昭著的远程代码执行漏洞是 MS08-067,俗称 netapi 或 CVE-2008-4250。该漏洞影响 Microsoft Windows 2000、XP 和 Windows Server 2003。多年来,攻击者一直在利用这个漏洞,因为 32 位和 64 位平台都有公开的漏洞利用程序。

本教程介绍如何使用 Nmap 检测易受 MS08-067 影响的 Windows 机器。

How to do it...

打开终端,输入以下 Nmap 命令:

$ nmap -p445 --script smb-vuln-ms08-067 <target> 

如果目标存在漏洞,你就会看到一份漏洞报告,将主机标记为存在漏洞,并提供有关该问题的其他信息:

 PORT STATE SERVICE
 445/tcp open microsoft-ds
 | smb-vuln-ms08-067:
 | VULNERABLE:
 | Microsoft Windows system vulnerable to remote code execution
 (MS08-067)
 | State: VULNERABLE
 | IDs: CVE:CVE-2008-4250
 | The Server service in Microsoft Windows 2000 SP4, XP SP2
 and SP3, Server 2003 SP1 and SP2,
 | Vista Gold and SP1, Server 2008, and 7 Pre-Beta allows
 remote attackers to execute arbitrary
 | code via a crafted RPC request that triggers the
 overflow during path canonicalization.
 |
 | Disclosure date: 2008-10-23
 | References:
 |
 https://technet.microsoft.com/en-us/library/security/ms08-067.aspx
 |_
 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-4250

How it works...

微軟視窗主機曾受大量針對 SMB 的漏洞影響,但沒有一個像 MS08-067 或 netapi 這麼有名。这个通过特制 RPC 请求执行远程代码的漏洞会影响 Windows 2000、XP、Server 2003、Vista Gold、Server 2008 和 7 Pre-Beta,以及上述所有产品的不同 SP 级别。Shadow Broker 在 2017 年 4 月泄露的信息中还包括一个针对已打补丁系统的漏洞。由于这些产品已经过时,但仍存在于许多网络中,因此它们不会收到补丁。

smb-vuln-ms08-067 脚本最初由 Ron Bowes 提交(包含整个 SMBv1 和 MSRPC 库),用于检测易受 MS08-067 影响的主机。在前面的命令中,我们探测了常用的 Windows SMB 端口 TCP/445 (-p445),并启动了 -- 脚本 smb-security-mode 脚本来检索 SMB 消息签名配置:

 PORT STATE SERVICE 
 445/tcp open microsoft-ds 
 | smb-vuln-ms08-067: 
 | VULNERABLE: 
 | Microsoft Windows system vulnerable to remote code execution  (MS08-067) 
 | State: VULNERABLE 
 | IDs: CVE:CVE-2008-4250 
 | The Server service in Microsoft Windows 2000 SP4, XP SP2  and SP3, Server 2003 SP1 and SP2, 
 | Vista Gold and SP1, Server 2008, and 7 Pre-Beta allows  remote attackers to execute arbitrary 
 | code via a crafted RPC request that triggers the  overflow during path canonicalization. 
 | 
 | Disclosure date: 2008-10-23 
 | References: 
 | https://technet.microsoft.com/en-us/library/security/ms08-067.aspx 
 |_ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-4250 

There's more...

SMB 是攻击者最喜欢的协议,因为多年来,许多漏洞都影响到了多个实施方案。即使是 MS08-067 这样的老漏洞也经常出现在企业网络中,大多数情况下只能依靠端点防护。作为渗透测试人员,我们需要经常检查 Microsoft Windows 系统中的 SMB 漏洞。

利用 MS08-067

一旦检测到易受 MS08-067 感染的主机,就可以使用漏洞利用工具远程执行代码并获得进一步的访问权限。对于未打补丁的系统,可使用 Metasploit 的 ms08_067_netapi (https://www.rapid7.com/db/modules/exploit/windows/smb/ms08_067_netapi);对于已打补丁的系统,可使用 Shadow Broker 的 ECLIPSEDWING。

检测其他 SMB 漏洞

旧版本的 Nmap 曾经有一个名为 smb-check-vulns 的脚本,其中包含对多个 SMB 漏洞的检查:

  • conficker
  • cve2009-3103
  • ms06-025
  • ms07-029
  • regsvc-dos
  • ms08-067

该脚本被分为可单独运行的单个漏洞检查,如 smb-vuln-ms08-067。要检查 Nmap 脚本引擎中可用的所有 SMB 漏洞,请运行以下命令:

$ nmap -p445 --script smb-vuln-* <target> 

检索主机的 NetBIOS 名称和 MAC 地址

目前,大多数 Windows 客户端都启用了 NetBIOS 名称解析功能,甚至还随 Windows 提供了一个名为 nbtstat 的调试实用程序,用于诊断 TCP/IP 上 NetBIOS 的名称解析问题。我们可以使用 NetBIOS 通过一次请求获取计算机名称、用户和 MAC 地址等有用信息。

本食谱演示如何使用 Nmap 获取 Windows 主机的 NetBIOS 信息和 MAC 地址。

How to do it...

打开终端,输入以下 Nmap 命令:

$ nmap -sU -p137 --script nbstat <target> 

NSE 脚本 nbstat 将返回系统的 NetBIOS 名称、NetBIOS 用户和 MAC 地址:

 PORT STATE SERVICE 
 137/udp open microsoft-ds 
 MAC Address: 9C:2A:70:10:84:BF (Hon Hai Precision Ind.) 
 Host script results: 
 |_nbstat: NetBIOS name: ALIEN, NetBIOS user: <unknown>, NetBIOS MAC: 
 9C:2A:70:10:84:BF (Hon Hai Precision Ind.) 

How it works...

NetBIOS 名称可识别 Windows 网络中的资源。默认情况下,Microsoft Windows 客户端会启用 NetBIOS 名称解析,并通过网络提供系统的唯一标识符和组标识符。NSE 脚本 nbstat 就是为了在 Nmap 中实现 NetBIOS 名称解析而设计的。

我们探测了 UDP 端口 137 (-sU -p137),并启动 NSE 脚本 --script nbstat 来获取 NetBIOS 名称、NetBIOS 用户和 MAC 地址。这对于识别特定机器或调试网络上的 NetBIOS 解析问题非常有用。

 PORT STATE SERVICE 
 137/udp open microsoft-ds 
 MAC Address: 9C:2A:70:10:84:BF (Hon Hai Precision Ind.) 
 Host script results: 
 |_nbstat: NetBIOS name: ALIEN, NetBIOS user: <unknown>, NetBIOS MAC: 
 9C:2A:70:10:84:BF (Hon Hai Precision Ind.) 

There's more...

要列出为这台机器注册的所有名称,请运行前面的命令并启用冗长度:

$ nmap -v -sU -p137 --script nbstat <target> 
 PORT STATE SERVICE 
 137/udp open microsoft-ds 
 MAC Address: 9C:2A:70:10:84:BF (Hon Hai Precision Ind.) 
 Host script results: 
 | nbstat: NetBIOS name: ALIEN, NetBIOS user: <unknown>, NetBIOS 
 MAC: 9C:2A:70:10:84:BF (Hon Hai Precision Ind.) 
 | Names: 
 | ALIEN<00> Flags: <unique> <active> 
 | ALIEN<20> Flags: <unique> <active> 
 | MATRIX<00>Flags: <group> <active> 
 | MATRIX<1e>Flags: <group> <active> 
 | MATRIX<1d>Flags: <unique> <active> 
 |_ \x01\x02__MSBROWSE__\x02<01> Flags: <group> <active> 

名称后面的数字与表示其类型的 NetBIOS 后缀相对应。下表列出了 Windows 使用的一些 NetBIOS 后缀:

NumberTypeUsage
00UWorkstation service
01UMessenger service
01GMaster browser
03UMessenger service
06URAS server service
1FUNetDDE service
20UFile server service
21URAS client service
22UMicrosoft exchange interchange
23UMicrosoft exchange store
24UMicrosoft exchange directory
87UMicrosoft exchange MTA
6AUMicrosoft exchange IMC
BEUNetwork monitor agent
BFUNetwork monitor application
03UMessenger service
00GDomain name
1BUDomain master browser
1CGDomain controllers
1DUMaster browser
1EGBrowser service elections
1CGIIS
00UIIS

枚举 Windows 主机的用户账户

用户枚举允许攻击者对系统进行字典攻击,并揭示谁可以访问这些系统的信息。针对 Windows 系统,有两种已知的技术可以枚举系统中的用户:SAMR 枚举和 LSA 强制。这两种用户枚举技术都在 Nmap 脚本引擎中实现。虽然这种攻击在大多数系统上都需要一个有效账户,但有些系统(默认情况下是 Windows 2000)允许匿名用户枚举。

本食谱演示如何使用 Nmap 枚举登录 Microsoft Windows 系统的用户。

How to do it...

打开终端,输入以下 Nmap 命令:

$ nmap -p139,445 --script smb-enum-users <target> 

如果系统允许匿名枚举用户,用户列表将包含在扫描结果中。请记住,在现代系统中,您需要提供有效的凭据,因为匿名访问默认是禁用的:

 Host script results: 
 | smb-enum-users: 
 |_ |_ Domain: DC-TEST; Users: Administrator, Guest, auser 

How it works...

通过 SAMR 枚举和 LSA 强制枚举,可以枚举 Microsoft Windows 系统中的用户。如果系统配置不正确,就会允许匿名用户枚举。不过,在现代系统中,这些技术需要一个有效账户才能起作用。

smb-enum-users 脚本由 Ron Bowes 提交(包含整个 SMBv1 和 MSRPC 库),试图使用前面提到的技术枚举 Microsoft Windows 系统中的用户。在 Nmap nmap -p139,445 --script smb-enum-users 命令中,我们探测了常见的 Windows SMB 端口 TCP/139 和 TCP/445(-p139,445),并启动了 --script smb-enum-users 脚本来检索系统的用户:

 Host script results: 
 | smb-enum-users: 
 |_ |_ Domain: DC-TEST; Users: Administrator, Guest, auser 

有关 smb-enum-users 脚本如何实现 LSA 强制枚举或 SAMR 枚举的更多信息,请访问官方文档页面:https://nmap.org/nsedoc/scripts/smb-enum-users.html。

There's more...

要显示有关用户的更多信息,请提高扫描的冗长程度:

 Host script results:
 | smb-enum-users:
 | | DC-TEST\Administrator (RID: 500)
 | | | Description: Built-in account for administering the
 computer/domain
 | | |_ Flags: Password does not expire, Normal user account
 | | DC-TEST\Guest (RID: 501)
 | | | Description: Built-in account for guest access to the
 computer/domain
 | | |_ Flags: Password not required, Password does not
 expire, Normal user account
 | | DC-TEST\auser (RID: 1005)
 | | |_ Flags: Normal user account

只选择 LSA 强制枚举或 SAMR 枚举

这些技术使用不同的机制试图列出系统的有效用户,各有利弊。一般来说,LSA 查询噪音较大,但您可以通过设置脚本参数 Samronly 或 lsaonly 来选择在枚举用户时使用哪种技术:

$ nmap -sU -p137 --script smb-enum-users --script-args lsaonly=true <target> 
$ nmap -sU -p137 --script smb-enum-users --script-args samronly=true <target> 

在 TCP 流量受阻时检查 UDP

有些目标会过滤 TCP 流量,因此也不要忘记检查 UDP。

管理员经常会忘记过滤 UDP 流量。在 Windows 机器中,检查 microsoft-ds 的 UDP 端口 137:

$ nmap -sU -p137 --script smb-enum-users <target> 

枚举共享文件夹

共享文件夹在企业中非常普遍,而用户之间的不良行为则带来了重大风险。即使共享文件夹没有完全对外界开放,但错误配置的权限会让组织中的任何人都能访问敏感信息,这种情况并不少见。

本教程介绍如何使用 Nmap 列出 Windows 机器的共享文件夹。

How to do it...

打开终端,输入以下 Nmap 命令:

$ nmap -p139,445 --script smb-enum-shares --script-args smbusername=Administrator,smbpassword=Password <target> 

将返回一份股票列表,包括其权限:

 Host script results: 
 | smb-enum-shares: 
 | account_used: WORKGROUP\Administrator 
 | ADMIN$ 
 | Type: STYPE_DISKTREE_HIDDEN 
 | Comment: Remote Admin 
 | Users: 0 
 | Max Users: <unlimited> 
 | Path: C:\WINNT 
 | Anonymous access: <none> 
 | Current user access: READ/WRITE 
 | C$ 
 | Type: STYPE_DISKTREE_HIDDEN 
 | Comment: Default share 
 | Users: 0 
 | Max Users: <unlimited> 
 | Path: C:\ 
 | Anonymous access: <none> 
 | Current user access: READ 
 | IPC$ 
 | Type: STYPE_IPC_HIDDEN 
 | Comment: Remote IPC 
 | Users: 1 
 | Max Users: <unlimited> 
 | Path: 
 | Anonymous access: READ 
 |_ Current user access: READ 

How it works...

SMB 专为文件共享而设计,是 Windows 工作站中最常用的服务之一。允许共享文件夹的组织存在风险,因为用户错误配置权限或数据管理不善而遗忘文件的情况非常普遍。作为系统管理员和渗透测试人员,建议检查网络上的可用共享文件夹。你会惊讶地发现,敏感文件、配置文件甚至密码经常被不安全地存储在这些文件夹中。

smb-enum-shares 脚本由 Ron Bowes 提交(包含整个 SMBv1 和 MSRPC 库),用于列出 Windows 系统的共享文件夹。该脚本可在 Windows 2000 系统上匿名运行,但需要一个用户级账户来列出共享,并需要一个管理账户来获取共享的更多信息。不过,如果没有提供账户,脚本仍可使用常用共享文件夹名称列表从响应中推断共享文件夹是否存在。

在上一条命令中,我们探测了常用的 Windows SMB 端口 TCP/139 和 TCP/445 (-p139,445),并启动了 --script smb-enum-shares 脚本来列出系统的共享文件夹。在本例中,我们提供了管理员凭据(--script-args smbusername=Administrator,smbpassword=password)以获取共享文件夹的其他信息:

 Host script results:
 | smb-enum-shares:
 | account_used: WORKGROUP\Administrator
 | ADMIN$
 | Type: STYPE_DISKTREE_HIDDEN
 | Comment: Remote Admin
 | Users: 0
 | Max Users: <unlimited>
 | Path: C:\WINNT
 | Anonymous access: <none>
 | Current user access: READ/WRITE
 | C$
 | Type: STYPE_DISKTREE_HIDDEN
 | Comment: Default share
 | Users: 0
 | Max Users: <unlimited>
 | Path: C:\
 | Anonymous access: <none>
 | Current user access: READ
 | IPC$
 | Type: STYPE_IPC_HIDDEN
 | Comment: Remote IPC
 | Users: 1
 | Max Users: <unlimited>
 | Path:
 | Anonymous access: READ
 |_ Current user access: READ

There's more...

有些目标会过滤 TCP 流量,因此也不要忘记检查 UDP。管理员往往会忘记过滤 UDP 流量。在 Windows 机器中,请检查 UDP 端口 137:

$ nmap -sU -p137 --script smb-enum-shares <target> 

枚举 SMB 会话

SMB 会话反映了连接到文件共享或进行 RPC 调用的人员情况,它们可以提供宝贵的信息,用于对用户和机器进行剖析。SMB 会话信息包括用户名、源 IP 地址甚至空闲时间。由于这些信息可用于发起其他攻击,因此远程列出 SMB 会话对于渗透测试人员来说非常方便。

本教程介绍如何使用 Nmap 枚举 Windows 机器的 SMB 会话。

How to do it...

打开终端,输入以下 Nmap 命令:

$ nmap -p445 --script smb-enum-sessions <target> 

Local users on the system will be listed, as well as the SMB connections detected: 

 Host script results: 

 | smb-enum-sessions: 

 | Users logged in: 

 | | MATRIX\Administrator since 2017-01-12 12:03:20 

 | Active SMB Sessions: 

 |_ |_ ADMINISTRATOR is connected from xxx.xxx.xxx.xxx for [just logged in, it's probably you], idle for [not idle] 

How it works...

登录的 SMB 连接可能来自本地用户,也可能来自连接到共享或与 RPC 通信的远程用户。枚举登录用户是通过 MSRPC 完成的,有趣的是,在旧版系统(Windows 2000、XP、2003 和 Vista)中,该操作不需要管理员权限,因此非常有效。

smb-enum-sessions 脚本由 Ron Bowes 提交(包含整个 SMBv1 和 MSRPC 库),用于列出系统的 SMB 会话,它基于 Sysinternal 的 PSLoggedOn.exe。在上一条命令中,我们探测了 Windows SMB 常用端口 TCP/445 (-p445),并启动了 --script smb-enum-sessions 脚本来列出当前的 SMB 会话。权限的大小不同于枚举用户和 SMB 连接,但在现代版本的 Windows 中,获取所有信息都需要管理权限。SMB 会话信息包括用户名、源 IP 地址甚至空闲时间。

 Host script results: 

 | smb-enum-sessions: 

 | Users logged in: 

 | | MATRIX\Administrator since 2017-01-12 12:03:20 

 | Active SMB Sessions: 

 |_ |_ ADMINISTRATOR is connected from xxx.xxx.xxx.xxx for [just 

 logged in, it's probably you], idle for [not idle] 

准备暴力密码审计攻击

利用 smb-enum-sessions 的结果,使用 NSE smb-brute 脚本或 Metasploit 的 smb_login 模块对 SMB 执行暴力密码审计攻击。在 Nmap 中,您可以使用以下命令:

$ nmap -p445 --script smb-brute --script-args userdb=users.txt,passdb=passwords.txt <target> 

在 TCP 流量受阻时检查 UDP

有些目标会过滤 TCP 流量,因此也不要忘记检查 UDP。管理员往往会忘记过滤 UDP 流量。在 Windows 机器中,请检查 UDP 端口 137:

$ nmap -sU -p137 --script smb-enum-sessions <target> 

查找域控制器

域控制器是使用 AD 技术的 Microsoft Windows 网络中最重要的系统,因为它们控制着网络中的所有机器,并承载着组织运行的关键服务,如 DNS 解析。在黑盒渗透测试中,攻击者需要找到这些关键系统,检查它们是否存在漏洞。

本教程介绍如何使用 Nmap 查找网络上的域控制器。

How to do it...

打开终端,输入以下 Nmap 命令:

$ nmap -p389 -sV <target> 

域控制器将显示运行 Microsoft Windows AD LDAP 服务的端口 389:

 PORT STATE SERVICE VERSION 
 389/tcp open ldap Microsoft Windows AD LDAP (Domain:TESTDOMAIN, Site: TEST) 

How it works...

渗透测试人员经常需要确定网络中域控制器的位置,因为它们是最重要的系统,一旦受到攻击,就会影响到属于 AD 的任何机器的访问权限。有不同的方法可以从不在域内的机器上识别域控制器。一种方法是定位 LDAP 服务。它通常在 TCP 端口 389 上运行,Nmap 脚本引擎的版本检测签名可以帮助我们正确识别该服务。

在 Nmap nmap -p389 -sV 命令中,我们探测了 TCP 端口 389,并启用了版本检测引擎来识别 LDAP 服务:

 PORT STATE SERVICE VERSION 

 389/tcp open ldap Microsoft Windows AD LDAP (Domain:TESTDOMAIN, Site: TEST) 

There's more...

可以通过多种方法找到域控制器。扫描 LDAP 服务是其中之一,但我们也可以检测某些默认配置或查询服务来定位域控制器。请记住,找到 AD 网络中的所有域控制器非常重要。

查找域名主浏览器

域主浏览器位于域主域控制器上,我们可以使用 Nmap 脚本引擎发送广播请求,查找网络上的主浏览器和域:

$ nmap -sn --script broadcast-netbios-master-browser 
 | broadcast-netbios-master-browser: 
 | ip server domain 
 |_192.168.1.100 WIN2008-PDC TEST 

查找 DNS 服务器

域控制器通常在网络上运行 DNS 解析服务。第一步是检查 DNS 服务器是否是域控制器;在大多数 Windows 网络中,它们都是域控制器。如果网络自动发送其名称服务器,我们就可以简单地解析主机并检查连接位置:

$nmap -R -sn google.com --packet-trace -Pn
 NSOCK INFO [0.0290s] nsock_iod_new2(): nsock_iod_new (IOD #1)
 NSOCK INFO [0.0290s] nsock_connect_udp(): UDP connection requested
 to 192.168.1.100:53 (IOD #1) EID 8
 NSOCK INFO [0.0290s] nsock_read(): Read request from IOD #1
 [192.168.1.100:53] (timeout: -1ms) EID 18
 NSOCK INFO [0.0290s] nsock_write(): Write request for 45 bytes to
 IOD #1 EID 27 [192.168.1.100:53]
 NSOCK INFO [0.0290s] nsock_trace_handler_callback(): Callback:
 CONNECT SUCCESS for EID 8 [192.168.1.100:53]
 NSOCK INFO [0.0290s] nsock_trace_handler_callback(): Callback: WRITE
 SUCCESS for EID 27 [192.168.1.100:53]
 NSOCK INFO [0.0400s] nsock_trace_handler_callback(): Callback: READ
 SUCCESS for EID 18 [192.168.1.100:53] (115 bytes)
 NSOCK INFO [0.0400s] nsock_read(): Read request from IOD #1
 [192.168.1.100:53] (timeout: -1ms) EID 34
 NSOCK INFO [0.0400s] nsock_iod_delete(): nsock_iod_delete (IOD #1)
 NSOCK INFO [0.0400s] nevent_delete(): nevent_delete on event #34
 (type READ)
 Nmap scan report for google.com (216.58.192.110)
 Host is up.
 Other addresses for google.com (not scanned):
 2607:f8b0:4008:804::200e
 rDNS record for 216.58.192.110: mia07s35-in-f110.1e100.net
 Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds

在本例中,配置的 DNS 服务器是 192.168.1.100。如前所述,这很可能是 Microsoft Windows 网络中的域控制器。

检测影子经纪人的 DOUBLEPULSAR 中小型企业植入程序

Shadow Brokers 泄露的代号为 DOUBLEPULSAR 的 NSA 后门使用 SMB 的 Trans2 来通知漏洞利用者系统是否已被感染。如果系统已被感染,攻击者就可以使用 SMB 远程执行命令。

本教程介绍如何使用 Nmap 检测受 Shadow Brokers 的 DOUBLEPULSAR 感染的系统。

How to do it...

打开终端,输入以下 Nmap 命令:

$ nmap -p445 --script smb-vuln-double-pulsar-backdoor <target> 

如果系统正在运行 DOUBLEPULSAR 后门,你应该会看到类似下面的报告:

 | smb-vuln-double-pulsar-backdoor: 
 | VULNERABLE: 
 | Double Pulsar SMB Backdoor 
 | State: VULNERABLE 
 | Risk factor: HIGH CVSSv2: 10.0 (HIGH) (AV:N/AC:L/Au:N/C:C/I:C/A:C) 
 | The Double Pulsar SMB backdoor was detected running on the remote machine. 
 | 
 | Disclosure date: 2017-04-14 
 | References: 
 | https://isc.sans.edu/forums/diary/Detecting+SMB+Covert+Channel+Double+Pulsar/22312/ 
 | https://github.com/countercept/doublepulsar-detection-script 
 |_ https://steemit.com/shadowbrokers/@theshadowbrokers/lost-in-translation 

How it works...

DOUBLEPULSAR 后门会响应 SMB 事务 2 子命令扩展(trans2)SESSION_SETUP 数据包,通知攻击者系统是否已被感染。如果系统响应 0x51,则说明系统已被感染,可以远程接收命令。

smb-vuln-double-pulsar-backdoor 脚本由 Andrew Orr 提交,用于检测运行 DOUBLEPULSAR 的系统。它基于 Countercept 的 Luke Jennings 最初发布的检测脚本(https://github.com/countercept/doublepulsar-detection-script)。在前面的命令中,我们探测了常用的 Windows SMB 端口 TCP/445(-p445),并启动了 --script smb-vuln-double-pulsar-backdoor脚本,以检查系统是否受到感染:

 | smb-vuln-double-pulsar-backdoor: 
 | VULNERABLE: 
 | Double Pulsar SMB Backdoor 
 | State: VULNERABLE 
 | Risk factor: HIGH CVSSv2: 10.0 (HIGH) (AV:N/AC:L/Au:N/C:C/I:C/A:C) 
 | The Double Pulsar SMB backdoor was detected running on the remote machine. 
 | 
 | Disclosure date: 2017-04-14 
 | References: 
 | https://isc.sans.edu/forums/diary/Detecting+SMB+Covert+Channel+Double+Pulsar/22312/ 
 | https://github.com/countercept/doublepulsar-detection-script 
 |_ https://steemit.com/shadowbrokers/@theshadowbrokers/lost-in-translation 

There's more...

Shadow Brokers 在 2017 年 4 月的泄密事件中包含了几个影响 Microsoft Windows NT 4.0、2000、XP、2003、7、Vista、Windows 8、2008、2008 R2 和 2012 的工具。已在 GitHub 上创建了一个包含已发布文件内容的存储库:https://github.com/misterch0c/shadowbroker