Skip to content

Nmap 网络枚举 - HTB 笔记

介绍

枚举

枚举是最关键的部分。困难的不是获得目标计算机的访问权限,而是识别我们可以找到攻击目标的所有方式。

不能仅仅靠工具,必须了解这些服务如何工作以及它们使用什么语法来与不同服务进行有效通讯和交互。

此阶段旨在提高我们对技术、协议以及其工作方式的知识和理解,并学习处理新信息并适应我们已经获得的知识。枚举正在收集尽可能多的信息。我们掌握的信息越多,就越容易找到突破口。

一旦我们知道如何访问目标系统,就不难了。我们获得访问权限的大多数方式可以缩小到以下两点:

  • 允许我们与目标交互 and/or 提供额外信息的功能 and/or 资源。

  • 为我们提供访问目标的更重要的信息。

在扫描和检查时,我们正是在寻找这两种可能性。我们获得的大部分信息来自错误配置或忽视相应服务的安全性。错误配置要么是无知的结果,要么是错误的安全心态。例如,如果管理员仅依靠防火墙、组策略对象 (GPO) 和持续更新,通常不足以保护网络安全。

如何与服务交互以及相关的东西是关键的,投入几个小时来更多地了解该服务、它的工作原理以及它的用途,他们将可以节省几个小时甚至几天的时间来实现他们的目标并访问该系统。

Manual enumeration是一个critical组件。许多扫描工具简化并加速了这个过程。但是,这些不能总是绕过服务的安全措施。说明这一点的最简单方法是使用以下示例:

大多数扫描工具都有一个超时设置,直到它们收到来自服务的响应。如果此工具在特定时间内没有响应,此服务/端口将被标记为关闭、过滤或未知。在后两种情况下,我们仍然可以使用它。然而,如果一个端口被标记为关闭并且 Nmap 没有向我们显示它,我们就会处于糟糕的境地。该服务/端口可能为我们提供了找到访问系统的方法的机会。因此,在我们找到它之前,这个结果可能会花费很多不必要的时间。

Nmap 简介

Network Mapper ( Nmap) 是一个用 C、C++、Python 和 Lua 编写的开源网络分析和安全审计工具。它旨在扫描网络并使用原始数据包、服务和应用程序(包括名称和版本)识别网络上可用的主机。它还可以识别这些主机的操作系统和版本。除了其他功能外,Nmap 还提供扫描功能,可以确定是否根据需要配置了数据包过滤器、防火墙或入侵检测系统 (IDS)。

建议存储每一次扫描。这可以在以后用于比较、文档和报告。毕竟,不同的工具可能会产生不同的结果。因此,区分哪个工具产生哪个结果可能是有益的。

用例

该工具是网络管理员和 IT 安全专家最常用的工具之一。它用于:

  • 审计网络的安全方面
  • 模拟渗透测试
  • 检查防火墙和 IDS 设置和配置
  • 网络连接的可能类型
  • 网络映射
  • 响应分析
  • 识别开放端口
  • 脆弱性评估。

Nmap架构

Nmap 提供了许多不同类型的扫描,可用于获取有关我们目标的各种结果。基本上,Nmap 可以分为以下几种扫描技术:

  • 主机发现
  • 端口扫描
  • 服务枚举和检测
  • 操作系统检测
  • 与目标服务的脚本化交互(Nmap 脚本引擎)

语法

Nmap 的语法相当简单,如下所示:

darkinga@htb[/htb]$ nmap <scan types> <options> <target>

扫描技术

Nmap 提供了许多不同的扫描技术,建立不同类型的连接并使用不同结构的数据包来发送。在这里我们可以看到 Nmap 提供的所有扫描技术:

darkinga@htb[/htb]$ nmap --help

<SNIP>
SCAN TECHNIQUES:
  -sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon scans
  -sU: UDP Scan
  -sN/sF/sX: TCP Null, FIN, and Xmas scans
  --scanflags <flags>: Customize TCP scan flags
  -sI <zombie host[:probeport]>: Idle scan
  -sY/sZ: SCTP INIT/COOKIE-ECHO scans
  -sO: IP protocol scan
  -b <FTP relay host>: FTP bounce scan
<SNIP>

例如,除非我们另有定义,否则TCP-SYN 扫描 (-sS ) 是默认设置之一,也是最流行的扫描方法之一。这种扫描方法可以每秒扫描数千个端口。TCP-SYN 扫描发送一个带有 SYN 标志的数据包,因此永远不会完成三次握手,从而导致无法与扫描端口建立完整的 TCP 连接。

  • 如果我们的目标将SYN-ACK标记的数据包发送回扫描的端口,Nmap 会检测到该端口是open.
  • 如果数据包收到RST标志,则表明该端口是closed
  • 如果 Nmap 没有收到返回的数据包,它将显示为filtered. 根据防火墙配置,某些数据包可能会被防火墙丢弃或忽略。

让我们举一个这样的扫描的例子。

darkinga@htb[/htb]$ sudo nmap -sS localhost

Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-11 22:50 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000010s latency).
Not shown: 996 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
5432/tcp open  postgresql
5901/tcp open  vnc-1

Nmap done: 1 IP address (1 host up) scanned in 0.18 seconds

在这个例子中,我们可以看到我们打开了四个不同的 TCP 端口。在第一列中,我们看到端口号。然后,在第二列中,我们看到服务的状态以及它是什么类型的服务。

主机枚举

主机发现

最有效快速的方法是使用 ICMP 回显请求方法

扫描网络范围

$ sudo nmap 10.10.10.10/24 -sn -oA tnet | grep for | cut -d" " -f5

10.10.10.10/24 目标网络范围

-sn 禁用端口扫描

-oA tnet 以名称“tnet”开头的所有格式存储结果。

主机防火墙未禁用 ICMP 时才生效

扫描 IP 列表

在内部渗透测试期间,向我们提供包含我们需要测试的主机的 IP 列表的情况并不少见。 Nmap 还为我们提供了实用列表并从列表中读取主机的选项,而不是手动定义或输入它们。

$ sudo nmap -sn -oA tnet -iL hosts.lst | grep for | cut -d" " -f5

10.129.2.18
10.129.2.19
10.129.2.20
扫描选项 描述
-sn 禁用端口扫描。
-oA tnet 以名称“tnet”开头的所有格式存储结果。
-iL 针对提供的“hosts.lst”列表中的目标执行定义的扫描。

扫描多个IP

也可能我们只需要扫描网络的一小部分。我们上次使用的方法的替代方法是指定多个 IP 地址。

扫描网络范围

darkinga@htb[/htb]$ sudo nmap -sn -oA tnet 10.129.2.18 10.129.2.19 10.129.2.20| grep for | cut -d" " -f5

10.129.2.18
10.129.2.19
10.129.2.20

如果这些 IP 地址彼此相邻,我们也可以在各自的八位字节中定义范围。

扫描网络范围

darkinga@htb[/htb]$ sudo nmap -sn -oA tnet 10.129.2.18-20| grep for | cut -d" " -f5

10.129.2.18
10.129.2.19
10.129.2.20

扫描单个IP

在我们扫描单个主机的开放端口及其服务之前,我们首先必须确定它是否存活。为此,我们可以使用与以前相同的方法。

扫描网络范围

darkinga@htb[/htb]$ sudo nmap 10.129.2.18 -sn -oA host 

Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-14 23:59 CEST
Nmap scan report for 10.129.2.18
Host is up (0.087s latency).
MAC Address: DE:AD:00:00:BE:EF
Nmap done: 1 IP address (1 host up) scanned in 0.11 seconds
扫描选项 描述
10.129.2.18 针对目标执行定义的扫描。
-sn 禁用端口扫描。
-oA host 以名称“主机”开头的所有格式存储结果。

如果我们禁用端口扫描 ( ),Nmap 会自动使用( ) -snping 扫描。一旦发送了这样的请求,我们通常会期待ping 主机是否处于活动状态。更有趣的是,我们之前的扫描并没有这样做,因为在 Nmap 可以发送 ICMP 回显请求之前,它会发送一个. 我们可以通过“ ”选项确认这一点。为确保发送 ICMP 回显请求,我们还为此定义了选项 ( )。ICMP Echo Requests``-PE``ICMP reply``ARP ping``ARP reply``--packet-trace``-PE

扫描网络范围

darkinga@htb[/htb]$ sudo nmap 10.129.2.18 -sn -oA host -PE --packet-trace 

Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-15 00:08 CEST
SENT (0.0074s) ARP who-has 10.129.2.18 tell 10.10.14.2
RCVD (0.0309s) ARP reply 10.129.2.18 is-at DE:AD:00:00:BE:EF
Nmap scan report for 10.129.2.18
Host is up (0.023s latency).
MAC Address: DE:AD:00:00:BE:EF
Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds
扫描选项 描述
10.129.2.18 针对目标执行定义的扫描。
-sn 禁用端口扫描。
-oA host 以名称“主机”开头的所有格式存储结果。
-PE 通过使用“ICMP Echo 请求”对目标执行 ping 扫描。
--packet-trace 显示所有发送和接收的数据包

另一种确定为什么 Nmap 将我们的目标标记为“活动”的方法是使用“ --reason”选项。

扫描网络范围

darkinga@htb[/htb]$ sudo nmap 10.129.2.18 -sn -oA host -PE --reason 

Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-15 00:10 CEST
SENT (0.0074s) ARP who-has 10.129.2.18 tell 10.10.14.2
RCVD (0.0309s) ARP reply 10.129.2.18 is-at DE:AD:00:00:BE:EF
Nmap scan report for 10.129.2.18
Host is up, received arp-response (0.028s latency).
MAC Address: DE:AD:00:00:BE:EF
Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds
扫描选项 描述
10.129.2.18 针对目标执行定义的扫描。
-sn 禁用端口扫描。
-oA host 以名称“主机”开头的所有格式存储结果。
-PE 通过使用“ICMP Echo 请求”对目标执行 ping 扫描。
--reason 显示特定结果的原因。

我们在这里看到确实确实通过and单独Nmap检测了宿主是否存活。要禁用 ARP 请求并使用所需的扫描我们的目标,我们可以通过设置“ ”选项来禁用 ARP ping。然后我们可以再次扫描我们的目标并查看发送和接收的数据包。ARP request``ARP reply``ICMP echo requests``--disable-arp-ping

扫描网络范围

darkinga@htb[/htb]$ sudo nmap 10.129.2.18 -sn -oA host -PE --packet-trace --disable-arp-ping 

Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-15 00:12 CEST
SENT (0.0107s) ICMP [10.10.14.2 > 10.129.2.18 Echo request (type=8/code=0) id=13607 seq=0] IP [ttl=255 id=23541 iplen=28 ]
RCVD (0.0152s) ICMP [10.129.2.18 > 10.10.14.2 Echo reply (type=0/code=0) id=13607 seq=0] IP [ttl=128 id=40622 iplen=28 ]
Nmap scan report for 10.129.2.18
Host is up (0.086s latency).
MAC Address: DE:AD:00:00:BE:EF
Nmap done: 1 IP address (1 host up) scanned in 0.11 seconds

我们已经在“ Learning Process,”中提到,在本模块的开头,注意细节是必不可少的。一个ICMP echo request可以帮助我们确定我们的目标是否活着并识别它的系统。有关主机发现的更多策略,请访问:

https://nmap.org/book/host-discovery-strategies.html

主机和端口扫描

必须了解我们使用的工具如何工作以及它如何执行和处理不同的功能。只有知道结果的含义和获得方式,我们才能理解结果。因此,我们将仔细研究和分析一些扫描方法。在我们发现我们的目标是活的之后,我们想得到一个更准确的系统图。我们需要的信息包括:

  • 开放端口及其服务
  • 服务版本
  • 服务提供的信息
  • 操作系统

对于一个被扫描的端口,我们总共可以获得6种不同的状态:

状态 描述
open 这表明已建立与扫描端口的连接。这些连接可以是TCP 连接UDP 数据报以及SCTP 关联
closed 当端口显示为关闭时,TCP 协议表明我们收到的数据包包含一个RST标志。这种扫描方法也可以用来判断我们的目标是否还活着。
filtered Nmap 无法正确识别扫描的端口是打开还是关闭,因为目标没有为该端口返回任何响应,或者我们从目标获得错误代码。
unfiltered 端口的这种状态只在TCP-ACK扫描时出现,表示端口可以访问,但无法判断是open还是closed。
open|filtered 如果我们没有得到特定端口的响应,Nmap将把它设置为该状态。这表明防火墙或数据包过滤器可能会保护该端口。
closed|filtered 这种状态只出现在IP ID空闲扫描中,表示无法确定扫描的端口是否被防火墙关闭或过滤。

发现开放的 TCP 端口

默认情况下,Nmap使用 SYN 扫描 ( -sS) 扫描前 1000 个 TCP 端口。由于创建原始 TCP 数据包需要套接字权限,因此当我们以 root 身份运行时,此 SYN 扫描仅设置为默认值。-sT否则,默认执行TCP 扫描 ( )。这意味着如果我们不定义端口和扫描方法,这些参数会自动设置。我们可以通过扫描所有端口 ( -p 22,25,80,139,445) 以及定义快速端口扫描,通过扫描所有端口 ( -p 22-445)--top-ports=10以及定义快速端口扫描,其中包含顶级100 个端口 ( )。Nmap``-p-``-F

扫描前 10 个 TCP 端口

扫描前 10 个 TCP 端口

darkinga@htb[/htb]$ sudo nmap 10.129.2.28 --top-ports=10 

Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-15 15:36 CEST
Nmap scan report for 10.129.2.28
Host is up (0.021s latency).

PORT     STATE    SERVICE
21/tcp   closed   ftp
22/tcp   open     ssh
23/tcp   closed   telnet
25/tcp   open     smtp
80/tcp   open     http
110/tcp  open     pop3
139/tcp  filtered netbios-ssn
443/tcp  closed   https
445/tcp  filtered microsoft-ds
3389/tcp closed   ms-wbt-server
MAC Address: DE:AD:00:00:BE:EF (Intel Corporate)

Nmap done: 1 IP address (1 host up) scanned in 1.44 seconds
扫描选项 描述
10.129.2.28 扫描指定目标。
--top-ports=10 扫描已定义为最频繁的指定顶级端口。

我们看到我们只扫描了目标的前 10 个 TCP 端口,并Nmap相应地显示它们的状态。如果我们跟踪Nmap发送的数据包,我们将看到目标发送回给我们的RST标志。TCP port 21为了清楚地了解 SYN 扫描,我们禁用 ICMP 回显请求 ( -Pn)、DNS 解析 ( -n) 和 ARP ping 扫描 ( --disable-arp-ping)。

Nmap - 跟踪数据包

Nmap - 跟踪数据包

darkinga@htb[/htb]$ sudo nmap 10.129.2.28 -p 21 --packet-trace -Pn -n --disable-arp-ping

Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-15 15:39 CEST
SENT (0.0429s) TCP 10.10.14.2:63090 > 10.129.2.28:21 S ttl=56 id=57322 iplen=44  seq=1699105818 win=1024 <mss 1460>
RCVD (0.0573s) TCP 10.129.2.28:21 > 10.10.14.2:63090 RA ttl=64 id=0 iplen=40  seq=0 win=0
Nmap scan report for 10.11.1.28
Host is up (0.014s latency).

PORT   STATE  SERVICE
21/tcp closed ftp
MAC Address: DE:AD:00:00:BE:EF (Intel Corporate)

Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds
扫描选项 描述
10.129.2.28 扫描指定目标。
-p 21 只扫描指定的端口。
--packet-trace 显示所有发送和接收的数据包。
-n 禁用 DNS 解析。
--disable-arp-ping 禁用 ARP ping。

从 SENT 行可以看出,我们 ( )向我们的目标 ( )10.10.14.2发送了一个带有SYN标志 ( ) 的 TCP 数据包。在下一个 RCVD 行中,我们可以看到目标使用包含和标志 ( ) 的 TCP 数据包进行响应。和标志用于确认收到 TCP 数据包 ( ) 和结束 TCP 会话 ( )。S``10.129.2.28``RST``ACK``RA``RST``ACK``ACK``RST

请求
信息 描述
SENT (0.0429s) 表示Nmap的SENT操作,向目标发送数据包。
TCP 显示用于与目标端口交互的协议。
10.10.14.2:63090 > 表示我们的 IPv4 地址和源端口,Nmap 将使用它们来发送数据包。
10.129.2.28:21 显示目标 IPv4 地址和目标端口。
S 发送的 TCP 数据包的 SYN 标志。
ttl=56 id=57322 iplen=44 seq=1699105818 win=1024 mss 1460 附加的 TCP 标头参数。
响应
信息 描述
RCVD (0.0573s) 指示从目标接收到的数据包。
TCP 显示正在使用的协议。
10.129.2.28:21 > 表示目标 IPv4 地址和源端口,将用于回复。
10.10.14.2:63090 显示我们的 IPv4 地址和将回复的端口。
RA 发送的 TCP 数据包的 RST 和 ACK 标志。
ttl=64 id=0 iplen=40 seq=0 win=0 附加的 TCP 标头参数。
连接扫描

Nmap TCP 连接扫描( -sT) 使用 TCP 三向握手来确定目标主机上的特定端口是打开还是关闭。扫描SYN向目标端口发送数据包并等待响应。如果目标端口以SYN-ACK数据包响应,则认为它是打开的;如果它以RST数据包响应,则认为它是关闭的。

扫描Connect很有用,因为它是确定端口状态的最准确方法,也是最隐秘的方法。与 SYN 扫描等其他类型的扫描不同,Connect 扫描不会在目标主机上留下任何未完成的连接或未发送的数据包,这使得它不太可能被入侵检测系统 (IDS) 或入侵防御系统 (IPS) 检测到). 当我们想要映射网络并且不想干扰其背后运行的服务时,它很有用,因此造成的影响最小,有时被认为是一种更礼貌的扫描方法。

当目标主机具有丢弃传入数据包但允许传出数据包的个人防火墙时,它也很有用。在这种情况下,连接扫描可以绕过防火墙并准确确定目标端口的状态。但是,请务必注意,连接扫描比其他类型的扫描慢,因为它要求扫描器在发送每个数据包后等待目标的响应,如果目标繁忙或无响应,这可能需要一些时间。

在 TCP 端口 443 上进行连接扫描

在 TCP 端口 443 上进行连接扫描

darkinga@htb[/htb]$ sudo nmap 10.129.2.28 -p 443 --packet-trace --disable-arp-ping -Pn -n --reason -sT 

Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-15 16:26 CET
CONN (0.0385s) TCP localhost > 10.129.2.28:443 => Operation now in progress
CONN (0.0396s) TCP localhost > 10.129.2.28:443 => Connected
Nmap scan report for 10.129.2.28
Host is up, received user-set (0.013s latency).

PORT    STATE SERVICE REASON
443/tcp open  https   syn-ack

Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds

过滤端口

当端口显示为已过滤时,可能有多种原因。在大多数情况下,防火墙设置了特定的规则来处理特定的连接。数据包可以是dropped, 或rejected。当一个数据包被丢弃,Nmap没有收到来自我们目标的响应,默认情况下,重试率 ( --max-retries) 设置为 1。这意味着Nmap将重新发送请求到目标端口,以确定前一个数据包是否被意外错误处理。

让我们看一个示例,其中防火墙drops对我们发送的 TCP 数据包进行端口扫描。因此我们扫描 TCP 端口139,它已经显示为已过滤。为了能够跟踪我们发送的数据包是如何处理的,我们再次停用 ICMP 回显请求 ( -Pn)、DNS 解析 ( -n) 和 ARP ping 扫描 ( )。--disable-arp-ping

在 TCP 端口 443 上进行连接扫描

darkinga@htb[/htb]$ sudo nmap 10.129.2.28 -p 139 --packet-trace -n --disable-arp-ping -Pn

Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-15 15:45 CEST
SENT (0.0381s) TCP 10.10.14.2:60277 > 10.129.2.28:139 S ttl=47 id=14523 iplen=44  seq=4175236769 win=1024 <mss 1460>
SENT (1.0411s) TCP 10.10.14.2:60278 > 10.129.2.28:139 S ttl=45 id=7372 iplen=44  seq=4175171232 win=1024 <mss 1460>
Nmap scan report for 10.129.2.28
Host is up.

PORT    STATE    SERVICE
139/tcp filtered netbios-ssn
MAC Address: DE:AD:00:00:BE:EF (Intel Corporate)

Nmap done: 1 IP address (1 host up) scanned in 2.06 seconds
扫描选项 描述
10.129.2.28 扫描指定目标。
-p 139 只扫描指定的端口。
--packet-trace 显示所有发送和接收的数据包。
-n 禁用 DNS 解析。
--disable-arp-ping 禁用 ARP ping。
-Pn 禁用 ICMP Echo 请求。

我们在上次扫描中看到Nmap发送了两个带有 SYN 标志的 TCP 数据包。2.06s通过扫描的持续时间 ( ),我们可以看出它花费的时间比之前的 ( ~0.05s) 长得多。如果防火墙拒绝数据包,情况就不同了。为此,我们查看 TCP 端口445,它由防火墙的此类规则相应地处理。

在 TCP 端口 443 上进行连接扫描

darkinga@htb[/htb]$ sudo nmap 10.129.2.28 -p 445 --packet-trace -n --disable-arp-ping -Pn

Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-15 15:55 CEST
SENT (0.0388s) TCP 10.129.2.28:52472 > 10.129.2.28:445 S ttl=49 id=21763 iplen=44  seq=1418633433 win=1024 <mss 1460>
RCVD (0.0487s) ICMP [10.129.2.28 > 10.129.2.28 Port 445 unreachable (type=3/code=3) ] IP [ttl=64 id=20998 iplen=72 ]
Nmap scan report for 10.129.2.28
Host is up (0.0099s latency).

PORT    STATE    SERVICE
445/tcp filtered microsoft-ds
MAC Address: DE:AD:00:00:BE:EF (Intel Corporate)

Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds
扫描选项 描述
10.129.2.28 扫描指定目标。
-p 445 只扫描指定的端口。
--packet-trace 显示所有发送和接收的数据包。
-n 禁用 DNS 解析。
--disable-arp-ping 禁用 ARP ping。
-Pn 禁用 ICMP Echo 请求。

作为响应,我们收到ICMP带有type 3和 的回复error code 3,这表明无法访问所需的主机。然而,如果我们知道主机是活的,我们可以强烈假设这个端口上的防火墙拒绝了数据包,我们稍后必须仔细查看这个端口。


发现开放的 UDP 端口

有些系统管理员有时会忘记过滤 TCP 端口之外的 UDP 端口。由于UDP是一个stateless protocol并且不需要像 TCP 这样的三向握手。我们没有收到任何确认。因此,超时时间长得多,使整个UDP scan( -sU) 比TCP scan( -sS) 慢得多。

让我们看一个 UDP 扫描 ( ) 的示例-sU以及它给我们的结果。

在 TCP 端口 443 上进行连接扫描

darkinga@htb[/htb]$ sudo nmap 10.129.2.28 -F -sU

Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-15 16:01 CEST
Nmap scan report for 10.129.2.28
Host is up (0.059s latency).
Not shown: 95 closed ports
PORT     STATE         SERVICE
68/udp   open|filtered dhcpc
137/udp  open          netbios-ns
138/udp  open|filtered netbios-dgm
631/udp  open|filtered ipp
5353/udp open          zeroconf
MAC Address: DE:AD:00:00:BE:EF (Intel Corporate)

Nmap done: 1 IP address (1 host up) scanned in 98.07 seconds
扫描选项 描述
10.129.2.28 扫描指定目标。
-F 扫描前 100 个端口。
-sU 执行 UDP 扫描。

这样做的另一个缺点是我们经常得不到响应,因为Nmap向扫描的 UDP 端口发送空数据报,我们收不到任何响应。所以我们无法确定 UDP 数据包是否已经到达。如果 UDP 端口是open,我们只有在应用程序配置为这样做时才会收到响应。

在 TCP 端口 443 上进行连接扫描

darkinga@htb[/htb]$ sudo nmap 10.129.2.28 -sU -Pn -n --disable-arp-ping --packet-trace -p 137 --reason 

Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-15 16:15 CEST
SENT (0.0367s) UDP 10.10.14.2:55478 > 10.129.2.28:137 ttl=57 id=9122 iplen=78
RCVD (0.0398s) UDP 10.129.2.28:137 > 10.10.14.2:55478 ttl=64 id=13222 iplen=257
Nmap scan report for 10.129.2.28
Host is up, received user-set (0.0031s latency).

PORT    STATE SERVICE    REASON
137/udp open  netbios-ns udp-response ttl 64
MAC Address: DE:AD:00:00:BE:EF (Intel Corporate)

Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds
扫描选项 描述
10.129.2.28 扫描指定目标。
-sU 执行 UDP 扫描。
-Pn 禁用 ICMP Echo 请求。
-n 禁用 DNS 解析。
--disable-arp-ping 禁用 ARP ping。
--packet-trace 显示所有发送和接收的数据包。
-p 137 只扫描指定的端口。
--reason 显示端口处于特定状态的原因。

如果我们收到一个带有(端口不可达)的 ICMP 响应error code 3,我们就知道该端口确实是closed

在 TCP 端口 443 上进行连接扫描

darkinga@htb[/htb]$ sudo nmap 10.129.2.28 -sU -Pn -n --disable-arp-ping --packet-trace -p 100 --reason 

Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-15 16:25 CEST
SENT (0.0445s) UDP 10.10.14.2:63825 > 10.129.2.28:100 ttl=57 id=29925 iplen=28
RCVD (0.1498s) ICMP [10.129.2.28 > 10.10.14.2 Port unreachable (type=3/code=3) ] IP [ttl=64 id=11903 iplen=56 ]
Nmap scan report for 10.129.2.28
Host is up, received user-set (0.11s latency).

PORT    STATE  SERVICE REASON
100/udp closed unknown port-unreach ttl 64
MAC Address: DE:AD:00:00:BE:EF (Intel Corporate)

Nmap done: 1 IP address (1 host up) scanned in  0.15 seconds
扫描选项 描述
10.129.2.28 扫描指定目标。
-sU 执行 UDP 扫描。
-Pn 禁用 ICMP Echo 请求。
-n 禁用 DNS 解析。
--disable-arp-ping 禁用 ARP ping。
--packet-trace 显示所有发送和接收的数据包。
-p 100 只扫描指定的端口。
--reason 显示端口处于特定状态的原因。

对于所有其他 ICMP 响应,扫描的端口标记为 ( open|filtered)。

在 TCP 端口 443 上进行连接扫描

darkinga@htb[/htb]$ sudo nmap 10.129.2.28 -sU -Pn -n --disable-arp-ping --packet-trace -p 138 --reason 

Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-15 16:32 CEST
SENT (0.0380s) UDP 10.10.14.2:52341 > 10.129.2.28:138 ttl=50 id=65159 iplen=28
SENT (1.0392s) UDP 10.10.14.2:52342 > 10.129.2.28:138 ttl=40 id=24444 iplen=28
Nmap scan report for 10.129.2.28
Host is up, received user-set.

PORT    STATE         SERVICE     REASON
138/udp open|filtered netbios-dgm no-response
MAC Address: DE:AD:00:00:BE:EF (Intel Corporate)

Nmap done: 1 IP address (1 host up) scanned in 2.06 seconds
扫描选项 描述
10.129.2.28 扫描指定目标。
-sU 执行 UDP 扫描。
-Pn 禁用 ICMP Echo 请求。
-n 禁用 DNS 解析。
--disable-arp-ping 禁用 ARP ping。
--packet-trace 显示所有发送和接收的数据包。
-p 138 只扫描指定的端口。
--reason 显示端口处于特定状态的原因。

扫描端口的另一种便捷方法是-sV用于从打开的端口获取其他可用信息的选项。此方法可以识别版本、服务名称和有关目标的详细信息。

在 TCP 端口 443 上进行连接扫描

darkinga@htb[/htb]$ sudo nmap 10.129.2.28 -Pn -n --disable-arp-ping --packet-trace -p 445 --reason  -sV

Starting Nmap 7.80 ( https://nmap.org ) at 2022-11-04 11:10 GMT
SENT (0.3426s) TCP 10.10.14.2:44641 > 10.129.2.28:445 S ttl=55 id=43401 iplen=44  seq=3589068008 win=1024 <mss 1460>
RCVD (0.3556s) TCP 10.129.2.28:445 > 10.10.14.2:44641 SA ttl=63 id=0 iplen=44  seq=2881527699 win=29200 <mss 1337>
NSOCK INFO [0.4980s] nsock_iod_new2(): nsock_iod_new (IOD #1)
NSOCK INFO [0.4980s] nsock_connect_tcp(): TCP connection requested to 10.129.2.28:445 (IOD #1) EID 8
NSOCK INFO [0.5130s] nsock_trace_handler_callback(): Callback: CONNECT SUCCESS for EID 8 [10.129.2.28:445]
Service scan sending probe NULL to 10.129.2.28:445 (tcp)
NSOCK INFO [0.5130s] nsock_read(): Read request from IOD #1 [10.129.2.28:445] (timeout: 6000ms) EID 18
NSOCK INFO [6.5190s] nsock_trace_handler_callback(): Callback: READ TIMEOUT for EID 18 [10.129.2.28:445]
Service scan sending probe SMBProgNeg to 10.129.2.28:445 (tcp)
NSOCK INFO [6.5190s] nsock_write(): Write request for 168 bytes to IOD #1 EID 27 [10.129.2.28:445]
NSOCK INFO [6.5190s] nsock_read(): Read request from IOD #1 [10.129.2.28:445] (timeout: 5000ms) EID 34
NSOCK INFO [6.5190s] nsock_trace_handler_callback(): Callback: WRITE SUCCESS for EID 27 [10.129.2.28:445]
NSOCK INFO [6.5320s] nsock_trace_handler_callback(): Callback: READ SUCCESS for EID 34 [10.129.2.28:445] (135 bytes)
Service scan match (Probe SMBProgNeg matched with SMBProgNeg line 13836): 10.129.2.28:445 is netbios-ssn.  Version: |Samba smbd|3.X - 4.X|workgroup: WORKGROUP|
NSOCK INFO [6.5320s] nsock_iod_delete(): nsock_iod_delete (IOD #1)
Nmap scan report for 10.129.2.28
Host is up, received user-set (0.013s latency).

PORT    STATE SERVICE     REASON         VERSION
445/tcp open  netbios-ssn syn-ack ttl 63 Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
Service Info: Host: Ubuntu

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.55 seconds
扫描选项 描述
10.129.2.28 扫描指定目标。
-Pn 禁用 ICMP Echo 请求。
-n 禁用 DNS 解析。
--disable-arp-ping 禁用 ARP ping。
--packet-trace 显示所有发送和接收的数据包。
-p 445 只扫描指定的端口。
--reason 显示端口处于特定状态的原因。
-sV 执行服务扫描。

我们可以在以下位置找到有关端口扫描技术的更多信息:https ://nmap.org/book/man-port-scanning-techniques.html

保存结果

不同的格式

当我们运行各种扫描时,我们应该始终保存结果。稍后我们可以使用这些来检查我们使用的不同扫描方法之间的差异。 Nmap可以以 3 种不同的格式保存结果。

  • 正常输出( -oN) 带.nmap文件扩展名
  • 带有文件扩展名的Grepable 输出 ( -oG).gnmap
  • 带有文件扩展名的XML 输出 ( -oX).xml

我们还可以指定选项 ( -oA) 以所有格式保存结果。该命令可能如下所示:

darkinga@htb[/htb]$ sudo nmap 10.129.2.28 -p- -oA target

Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-16 12:14 CEST
Nmap scan report for 10.129.2.28
Host is up (0.0091s latency).
Not shown: 65525 closed ports
PORT      STATE SERVICE
22/tcp    open  ssh
25/tcp    open  smtp
80/tcp    open  http
MAC Address: DE:AD:00:00:BE:EF (Intel Corporate)

Nmap done: 1 IP address (1 host up) scanned in 10.22 seconds
扫描选项 描述
10.129.2.28 扫描指定目标。
-p- 扫描所有端口。
-oA target 以所有格式保存结果,每个文件的名称以“目标”开头。

如果没有给出完整路径,结果将存储在我们当前所在的目录中。接下来,我们看看为Nmap我们创建的不同格式。

darkinga@htb[/htb]$ ls

target.gnmap target.xml  target.nmap
正常输出

正常输出

darkinga@htb[/htb]$ cat target.nmap

# Nmap 7.80 scan initiated Tue Jun 16 12:14:53 2020 as: nmap -p- -oA target 10.129.2.28
Nmap scan report for 10.129.2.28
Host is up (0.053s latency).
Not shown: 4 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
25/tcp open  smtp
80/tcp open  http
MAC Address: DE:AD:00:00:BE:EF (Intel Corporate)

# Nmap done at Tue Jun 16 12:15:03 2020 -- 1 IP address (1 host up) scanned in 10.22 seconds
Grepable 输出

Grepable 输出

darkinga@htb[/htb]$ cat target.gnmap

# Nmap 7.80 scan initiated Tue Jun 16 12:14:53 2020 as: nmap -p- -oA target 10.129.2.28
Host: 10.129.2.28 ()    Status: Up
Host: 10.129.2.28 ()    Ports: 22/open/tcp//ssh///, 25/open/tcp//smtp///, 80/open/tcp//http///  Ignored State: closed (4)
# Nmap done at Tue Jun 16 12:14:53 2020 -- 1 IP address (1 host up) scanned in 10.22 seconds
XML 输出

XML 输出

darkinga@htb[/htb]$ cat target.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE nmaprun>
<?xml-stylesheet href="file:///usr/local/bin/../share/nmap/nmap.xsl" type="text/xsl"?>
<!-- Nmap 7.80 scan initiated Tue Jun 16 12:14:53 2020 as: nmap -p- -oA target 10.129.2.28 -->
<nmaprun scanner="nmap" args="nmap -p- -oA target 10.129.2.28" start="12145301719" startstr="Tue Jun 16 12:15:03 2020" version="7.80" xmloutputversion="1.04">
<scaninfo type="syn" protocol="tcp" numservices="65535" services="1-65535"/>
<verbose level="0"/>
<debugging level="0"/>
<host starttime="12145301719" endtime="12150323493"><status state="up" reason="arp-response" reason_ttl="0"/>
<address addr="10.129.2.28" addrtype="ipv4"/>
<address addr="DE:AD:00:00:BE:EF" addrtype="mac" vendor="Intel Corporate"/>
<hostnames>
</hostnames>
<ports><extraports state="closed" count="4">
<extrareasons reason="resets" count="4"/>
</extraports>
<port protocol="tcp" portid="22"><state state="open" reason="syn-ack" reason_ttl="64"/><service name="ssh" method="table" conf="3"/></port>
<port protocol="tcp" portid="25"><state state="open" reason="syn-ack" reason_ttl="64"/><service name="smtp" method="table" conf="3"/></port>
<port protocol="tcp" portid="80"><state state="open" reason="syn-ack" reason_ttl="64"/><service name="http" method="table" conf="3"/></port>
</ports>
<times srtt="52614" rttvar="75640" to="355174"/>
</host>
<runstats><finished time="12150323493" timestr="Tue Jun 16 12:14:53 2020" elapsed="10.22" summary="Nmap done at Tue Jun 16 12:15:03 2020; 1 IP address (1 host up) scanned in 10.22 seconds" exit="success"/><hosts up="1" down="0" total="1"/>
</runstats>
</nmaprun>

样式表

通过 XML 输出,我们可以轻松创建易于阅读的 HTML 报告,即使对于非技术人员也是如此。这在以后对文档非常有用,因为它以详细和清晰的方式展示了我们的结果。要将存储的结果从 XML 格式转换为 HTML,我们可以使用该工具xsltproc

XML 输出

darkinga@htb[/htb]$ xsltproc target.xml -o target.html

如果我们现在在浏览器中打开 HTML 文件,我们会看到清晰且结构化的结果展示。

Nmap报告

图像

有关输出格式的更多信息,请访问:https ://nmap.org/book/output.html

服务枚举

对我们来说,尽可能准确地确定应用程序及其版本至关重要。我们可以使用此信息扫描已知漏洞,并在找到时分析该版本的源代码。确切的版本号使我们能够搜索适合目标服务和操作系统的更精确的漏洞利用。


服务版本检测

建议首先执行快速端口扫描,这可以让我们大致了解可用端口。这会显着减少流量,这对我们来说是有利的,否则我们可能会被安全机制发现并阻止。我们可以先处理这些并在后台运行端口扫描,它会显示所有打开的端口 ( -p-)。我们可以使用版本扫描来扫描服务及其版本的特定端口(-sV)。

完整的端口扫描需要相当长的时间。要查看扫描状态,我们可以在[Space Bar]扫描过程中按 ,这将导致Nmap向我们显示扫描状态。

darkinga@htb[/htb]$ sudo nmap 10.129.2.28 -p- -sV

Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-15 19:44 CEST
[Space Bar]
Stats: 0:00:03 elapsed; 0 hosts completed (1 up), 1 undergoing SYN Stealth Scan
SYN Stealth Scan Timing: About 3.64% done; ETC: 19:45 (0:00:53 remaining)
扫描选项 描述
10.129.2.28 扫描指定目标。
-p- 扫描所有端口。
-sV 对指定端口进行服务版本检测。

我们可以使用的另一个选项 ( --stats-every=5s) 是定义应显示状态的时间段。在这里我们可以指定秒数 ( s) 或分钟数 ( m),在此之后我们想要获取状态。

darkinga@htb[/htb]$ sudo nmap 10.129.2.28 -p- -sV --stats-every=5s

Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-15 19:46 CEST
Stats: 0:00:05 elapsed; 0 hosts completed (1 up), 1 undergoing SYN Stealth Scan
SYN Stealth Scan Timing: About 13.91% done; ETC: 19:49 (0:00:31 remaining)
Stats: 0:00:10 elapsed; 0 hosts completed (1 up), 1 undergoing SYN Stealth Scan
SYN Stealth Scan Timing: About 39.57% done; ETC: 19:48 (0:00:15 remaining)
扫描选项 描述
10.129.2.28 扫描指定目标。
-p- 扫描所有端口。
-sV 对指定端口进行服务版本检测。
--stats-every=5s 每 5 秒显示一次扫描进度。

我们还可以增加verbosity level-v/ -vv),这样在检测到端口时会直接显示给我们打开的端口Nmap

darkinga@htb[/htb]$ sudo nmap 10.129.2.28 -p- -sV -v 

Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-15 20:03 CEST
NSE: Loaded 45 scripts for scanning.
Initiating ARP Ping Scan at 20:03
Scanning 10.129.2.28 [1 port]
Completed ARP Ping Scan at 20:03, 0.03s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 20:03
Completed Parallel DNS resolution of 1 host. at 20:03, 0.02s elapsed
Initiating SYN Stealth Scan at 20:03
Scanning 10.129.2.28 [65535 ports]
Discovered open port 995/tcp on 10.129.2.28
Discovered open port 80/tcp on 10.129.2.28
Discovered open port 993/tcp on 10.129.2.28
Discovered open port 143/tcp on 10.129.2.28
Discovered open port 25/tcp on 10.129.2.28
Discovered open port 110/tcp on 10.129.2.28
Discovered open port 22/tcp on 10.129.2.28
<SNIP>
扫描选项 描述
10.129.2.28 扫描指定目标。
-p- 扫描所有端口。
-sV 对指定端口进行服务版本检测。
-v 增加扫描的详细程度,显示更详细的信息。

横幅抓取

扫描完成后,我们将看到所有具有相应服务的 TCP 端口及其在系统上处于活动状态的版本。

darkinga@htb[/htb]$ sudo nmap 10.129.2.28 -p- -sV

Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-15 20:00 CEST
Nmap scan report for 10.129.2.28
Host is up (0.013s latency).
Not shown: 65525 closed ports
PORT      STATE    SERVICE      VERSION
22/tcp    open     ssh          OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
25/tcp    open     smtp         Postfix smtpd
80/tcp    open     http         Apache httpd 2.4.29 ((Ubuntu))
110/tcp   open     pop3         Dovecot pop3d
139/tcp   filtered netbios-ssn
143/tcp   open     imap         Dovecot imapd (Ubuntu)
445/tcp   filtered microsoft-ds
993/tcp   open     ssl/imap     Dovecot imapd (Ubuntu)
995/tcp   open     ssl/pop3     Dovecot pop3d
MAC Address: DE:AD:00:00:BE:EF (Intel Corporate)
Service Info: Host:  inlane; OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 91.73 seconds
扫描选项 描述
10.129.2.28 扫描指定目标。
-p- 扫描所有端口。
-sV 对指定端口进行服务版本检测。

首先,Nmap查看扫描端口的横幅并将其打印出来。如果它无法通过横幅识别版本,Nmap则会尝试通过基于签名的匹配系统来识别它们,但这会显着增加扫描的持续时间。Nmap显示结果的一个缺点是自动扫描可能会遗漏一些信息,因为有时Nmap不知道如何处理它。让我们看一个这样的例子。

darkinga@htb[/htb]$ sudo nmap 10.129.2.28 -p- -sV -Pn -n --disable-arp-ping --packet-trace

Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-16 20:10 CEST
<SNIP>
NSOCK INFO [0.4200s] nsock_trace_handler_callback(): Callback: READ SUCCESS for EID 18 [10.129.2.28:25] (35 bytes): 220 inlane ESMTP Postfix (Ubuntu)..
Service scan match (Probe NULL matched with NULL line 3104): 10.129.2.28:25 is smtp.  Version: |Postfix smtpd|||
NSOCK INFO [0.4200s] nsock_iod_delete(): nsock_iod_delete (IOD #1)
Nmap scan report for 10.129.2.28
Host is up (0.076s latency).

PORT   STATE SERVICE VERSION
25/tcp open  smtp    Postfix smtpd
MAC Address: DE:AD:00:00:BE:EF (Intel Corporate)
Service Info: Host:  inlane

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 0.47 seconds
扫描选项 描述
10.129.2.28 扫描指定目标。
-p- 扫描所有端口。
-sV 对指定端口进行服务版本检测。
-Pn 禁用 ICMP Echo 请求。
-n 禁用 DNS 解析。
--disable-arp-ping 禁用 ARP ping。
--packet-trace 显示所有发送和接收的数据包。

如果我们查看 的结果Nmap,我们可以看到端口的状态、服务名称和主机名。不过,让我们看看这里的这一行:

  • NSOCK INFO [0.4200s] nsock_trace_handler_callback(): Callback: READ SUCCESS for EID 18 [10.129.2.28:25] (35 bytes): 220 inlane ESMTP Postfix (Ubuntu)..

然后我们看到我们目标上的 SMTP 服务器给了我们比Nmap显示给我们更多的信息。因为在这里,我们看到的是 Linux 发行版Ubuntu。发生这种情况是因为,在成功的三次握手之后,服务器通常会发送一个标语以供识别。这用于让客户端知道它正在使用哪个服务。在网络级别,这发生PSH在 TCP 标头中的标志。但是,某些服务可能不会立即提供此类信息。也可以从相应服务中删除或操纵横幅。如果我们manually使用 连接到 SMTP 服务器nc,抓取横幅并使用 拦截网络流量tcpdump,我们可以看到Nmap没有显示给我们的内容。

转储

转储

darkinga@htb[/htb]$ sudo tcpdump -i eth0 host 10.10.14.2 and 10.129.2.28

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
数控

数控

darkinga@htb[/htb]$  nc -nv 10.129.2.28 25

Connection to 10.129.2.28 port 25 [tcp/*] succeeded!
220 inlane ESMTP Postfix (Ubuntu)
Tcpdump - 拦截的流量

Tcpdump - 拦截的流量

18:28:07.128564 IP 10.10.14.2.59618 > 10.129.2.28.smtp: Flags [S], seq 1798872233, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 331260178 ecr 0,sackOK,eol], length 0
18:28:07.255151 IP 10.129.2.28.smtp > 10.10.14.2.59618: Flags [S.], seq 1130574379, ack 1798872234, win 65160, options [mss 1460,sackOK,TS val 1800383922 ecr 331260178,nop,wscale 7], length 0
18:28:07.255281 IP 10.10.14.2.59618 > 10.129.2.28.smtp: Flags [.], ack 1, win 2058, options [nop,nop,TS val 331260304 ecr 1800383922], length 0
18:28:07.319306 IP 10.129.2.28.smtp > 10.10.14.2.59618: Flags [P.], seq 1:36, ack 1, win 510, options [nop,nop,TS val 1800383985 ecr 331260304], length 35: SMTP: 220 inlane ESMTP Postfix (Ubuntu)
18:28:07.319426 IP 10.10.14.2.59618 > 10.129.2.28.smtp: Flags [.], ack 36, win 2058, options [nop,nop,TS val 331260368 ecr 1800383985], length 0

前三行向我们展示了三次握手。

1. [SYN] 18:28:07.128564 IP 10.10.14.2.59618 > 10.129.2.28.smtp: Flags [S], <SNIP>
2. [SYN-ACK] 18:28:07.255151 IP 10.129.2.28.smtp > 10.10.14.2.59618: Flags [S.], <SNIP>
3. [ACK] 18:28:07.255281 IP 10.10.14.2.59618 > 10.129.2.28.smtp: Flags [.], <SNIP>

之后,目标 SMTP 服务器向我们发送一个带有PSHACK标志的 TCP 数据包,其中PSH声明目标服务器正在向我们发送数据,同时ACK通知我们所有需要的数据已发送。

4. [PSH-ACK] 18:28:07.319306 IP 10.129.2.28.smtp > 10.10.14.2.59618: Flags [P.], <SNIP>

我们发送的最后一个 TCP 数据包以ACK.

5. [ACK] 18:28:07.319426 IP 10.10.14.2.59618 > 10.129.2.28.smtp: Flags [.], <SNIP>

Nmap 脚本引擎

Nmap 脚本引擎 ( NSE) 是Nmap. 它为我们提供了在 Lua 中创建脚本以与某些服务交互的可能性。这些脚本总共可以分为 14 类:

类别 描述
auth 身份验证凭据的确定。
broadcast 用于通过广播发现主机的脚本和发现的主机可以自动添加到剩余的扫描中。
brute 执行尝试通过使用凭据进行暴力破解来登录相应服务的脚本。
default 使用该-sC选项执行的默认脚本。
discovery 评估无障碍服务。
dos 这些脚本用于检查服务是否存在拒绝服务漏洞,并且由于会损害服务而较少使用。
exploit 此类脚本会尝试利用扫描端口的已知漏洞。
external 使用外部服务进行进一步处理的脚本。
fuzzer 这使用脚本通过发送不同的字段来识别漏洞和意外数据包处理,这可能会花费很多时间。
intrusive 可能对目标系统产生负面影响的侵入性脚本。
malware 检查某些恶意软件是否感染了目标系统。
safe 不执行侵入性和破坏性访问的防御脚本。
version 服务检测扩展。
vuln 特定漏洞的识别。

我们有几种方法可以在Nmap.

默认脚本

默认脚本

darkinga@htb[/htb]$ sudo nmap <target> -sC

特定脚本类别

特定脚本类别

darkinga@htb[/htb]$ sudo nmap <target> --script <category>

定义脚本

定义脚本

darkinga@htb[/htb]$ sudo nmap <target> --script <script-name>,<script-name>,...

例如,让我们继续使用目标 SMTP 端口并查看我们使用两个定义的脚本获得的结果。

Nmap - 指定脚本

Nmap - 指定脚本

darkinga@htb[/htb]$ sudo nmap 10.129.2.28 -p 25 --script banner,smtp-commands

Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-16 23:21 CEST
Nmap scan report for 10.129.2.28
Host is up (0.050s latency).

PORT   STATE SERVICE
25/tcp open  smtp
|_banner: 220 inlane ESMTP Postfix (Ubuntu)
|_smtp-commands: inlane, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN, SMTPUTF8,
MAC Address: DE:AD:00:00:BE:EF (Intel Corporate)
扫描选项 描述
10.129.2.28 扫描指定目标。
-p 25 只扫描指定的端口。
--script banner,smtp-commands 使用指定的 NSE 脚本。

我们看到使用'banner'脚本可以识别Linux的Ubuntu发行版。smtp-commands脚本向我们展示了我们可以通过与目标 SMTP 服务器交互来使用哪些命令。在此示例中,此类信息可能会帮助我们找出目标上的现有用户。Nmap还使我们能够使用攻击性选项 ( -A) 扫描我们的目标。这会使用多个选项扫描目标,如服务检测 ( -sV)、操作系统检测 ( -O)、跟踪路由 ( --traceroute) 和默认 NSE 脚本 ( -sC)。

Nmap - 攻击性扫描

Nmap - 攻击性扫描

darkinga@htb[/htb]$ sudo nmap 10.129.2.28 -p 80 -A
Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-17 01:38 CEST
Nmap scan report for 10.129.2.28
Host is up (0.012s latency).

PORT   STATE SERVICE VERSION
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-generator: WordPress 5.3.4
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: blog.inlanefreight.com
MAC Address: DE:AD:00:00:BE:EF (Intel Corporate)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive OS guesses: Linux 2.6.32 (96%), Linux 3.2 - 4.9 (96%), Linux 2.6.32 - 3.10 (96%), Linux 3.4 - 3.10 (95%), Linux 3.1 (95%), Linux 3.2 (95%), 
AXIS 210A or 211 Network Camera (Linux 2.6.17) (94%), Synology DiskStation Manager 5.2-5644 (94%), Netgear RAIDiator 4.2.28 (94%), 
Linux 2.6.32 - 2.6.35 (94%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 1 hop

TRACEROUTE
HOP RTT      ADDRESS
1   11.91 ms 10.129.2.28

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 11.36 seconds
扫描选项 描述
10.129.2.28 扫描指定目标。
-p 25 只扫描指定的端口。
-A 执行服务检测、操作系统检测、路由跟踪并使用默认脚本扫描目标。

借助使用的扫描选项 ( ),我们找出了系统上运行的是-A哪种 Web 服务器 ( ),使用了哪个 Web 应用程序 ( ),以及网页的标题 ( )。此外,表明它很可能是( ) 操作系统。Apache 2.4.29``WordPress 5.3.4``blog.inlanefreight.com``Nmap``Linux``96%


漏洞评估

现在让我们转到 HTTP 端口 80,看看我们可以使用vuln来自的类别找到哪些信息和漏洞NSE

Nmap - 漏洞类别

Nmap - 漏洞类别

darkinga@htb[/htb]$ sudo nmap 10.129.2.28 -p 80 -sV --script vuln 

Nmap scan report for 10.129.2.28
Host is up (0.036s latency).

PORT   STATE SERVICE VERSION
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
| http-enum:
|   /wp-login.php: Possible admin folder
|   /readme.html: Wordpress version: 2
|   /: WordPress version: 5.3.4
|   /wp-includes/images/rss.png: Wordpress version 2.2 found.
|   /wp-includes/js/jquery/suggest.js: Wordpress version 2.5 found.
|   /wp-includes/images/blank.gif: Wordpress version 2.6 found.
|   /wp-includes/js/comment-reply.js: Wordpress version 2.7 found.
|   /wp-login.php: Wordpress login page.
|   /wp-admin/upgrade.php: Wordpress login page.
|_  /readme.html: Interesting, a readme.
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.
| http-wordpress-users:
| Username found: admin
|_Search stopped at ID #25. Increase the upper limit if necessary with 'http-wordpress-users.limit'
| vulners:
|   cpe:/a:apache:http_server:2.4.29:
|       CVE-2019-0211   7.2 https://vulners.com/cve/CVE-2019-0211
|       CVE-2018-1312   6.8 https://vulners.com/cve/CVE-2018-1312
|       CVE-2017-15715  6.8 https://vulners.com/cve/CVE-2017-15715
<SNIP>
扫描选项 描述
10.129.2.28 扫描指定目标。
-p 80 只扫描指定的端口。
-sV 对指定端口进行服务版本检测。
--script vuln 使用指定类别中的所有相关脚本。

用于上次扫描的脚本与网络服务器及其网络应用程序交互,以查找有关其版本的更多信息,并检查各种数据库以查看是否存在已知漏洞。我们可以在以下位置找到有关 NSE 脚本和相应类别的更多信息: https: //nmap.org/nsedoc/index.html

表现

当我们需要扫描广泛的网络或处理低网络带宽时,扫描性能起着重要作用。我们可以使用各种选项来判断测试数据包应该Nmap有多快 ( -T <1-5>)、频率 ( --min-parallelism <number>)、超时 ( --max-rtt-timeout <time>)、应该同时发送多少数据包 ( ) 以及被扫描端口的--min-rate <number>重试次数 ( )--max-retries <number>应该扫描目标。


超时

当 Nmap 发送数据包时,需要一些时间 ( Round-Trip-Time- RTT) 才能从扫描的端口接收到响应。通常,Nmap以 100 毫秒的高超时 ( --min-RTT-timeout) 开始。让我们来看一个示例,扫描具有 256 台主机的整个网络,包括前 100 个端口。

默认扫描

默认扫描

darkinga@htb[/htb]$ sudo nmap 10.129.2.0/24 -F

<SNIP>
Nmap done: 256 IP addresses (10 hosts up) scanned in 39.44 seconds
优化 RTT

优化 RTT

darkinga@htb[/htb]$ sudo nmap 10.129.2.0/24 -F --initial-rtt-timeout 50ms --max-rtt-timeout 100ms

<SNIP>
Nmap done: 256 IP addresses (8 hosts up) scanned in 12.29 seconds
扫描选项 描述
10.129.2.0/24 扫描指定的目标网络。
-F 扫描前 100 个端口。
--initial-rtt-timeout 50ms 将指定的时间值设置为初始 RTT 超时。
--max-rtt-timeout 100ms 将指定的时间值设置为最大 RTT 超时。

比较两次扫描,我们可以看到优化扫描少找到两台主机,但扫描只用了四分之一的时间。由此,我们可以得出结论,将初始 RTT 超时 ( --initial-rtt-timeout) 设置得太短可能会导致我们忽略主机。


最大重试次数

另一种提高扫描速度的方法是指定发送数据包的重试率 ( --max-retries)。重试率的默认值为10,因此如果Nmap没有收到端口的响应,它将不再向该端口发送任何数据包并将被跳过。

默认扫描

默认扫描

darkinga@htb[/htb]$ sudo nmap 10.129.2.0/24 -F | grep "/tcp" | wc -l

23
减少重试

减少重试

darkinga@htb[/htb]$ sudo nmap 10.129.2.0/24 -F --max-retries 0 | grep "/tcp" | wc -l

21
扫描选项 描述
10.129.2.0/24 扫描指定的目标网络。
-F 扫描前 100 个端口。
--max-retries 0 设置将在扫描期间执行的重试次数。

同样,我们认识到加速也会对我们的结果产生负面影响,这意味着我们可能会忽略重要信息。


费率

在白盒渗透测试中,我们可能会获得安全系统的白名单,以检查网络中的系统是否存在漏洞,而不仅仅是测试保护措施。如果我们知道网络带宽,我们可以使用发送数据包的速率,这会显着加快我们使用Nmap. 在设置发送数据包的最小速率 ( --min-rate <number>) 时,我们告诉Nmap同时发送指定数量的数据包。它将尝试相应地维持速率。

默认扫描

默认扫描

darkinga@htb[/htb]$ sudo nmap 10.129.2.0/24 -F -oN tnet.default

<SNIP>
Nmap done: 256 IP addresses (10 hosts up) scanned in 29.83 seconds
优化扫描

优化扫描

darkinga@htb[/htb]$ sudo nmap 10.129.2.0/24 -F -oN tnet.minrate300 --min-rate 300

<SNIP>
Nmap done: 256 IP addresses (10 hosts up) scanned in 8.67 seconds
扫描选项 描述
10.129.2.0/24 扫描指定的目标网络。
-F 扫描前 100 个端口。
-oN tnet.minrate300 以普通格式保存结果,从指定的文件名开始。
--min-rate 300 设置将同时发送的数据包数。

默认扫描 - 找到打开的端口

默认扫描 - 找到打开的端口

darkinga@htb[/htb]$ cat tnet.default | grep "/tcp" | wc -l

23
优化扫描 - 找到开放端口

优化扫描 - 找到开放端口

darkinga@htb[/htb]$ cat tnet.minrate300 | grep "/tcp" | wc -l

23

定时

因为这样的设置不能总是手动优化,就像在黑盒渗透测试中一样,Nmap提供了六种不同的时间模板 ( -T <0-5>) 供我们使用。这些值 ( 0-5) 决定了我们扫描的积极性。如果扫描过于激进,这也会产生负面影响,并且安全系统可能会由于产生的网络流量而阻止我们。当我们没有定义任何其他内容时使用的默认时序模板是正常的 ( -T 3)。

  • -T 0 / -T paranoid
  • -T 1/-T sneaky
  • -T 2/-T polite
  • -T 3/-T normal
  • -T 4/-T aggressive
  • -T 5/-T insane

这些模板包含我们也可以手动设置的选项,并且已经看到了其中的一些。开发人员根据其最佳结果确定为这些模板设置的值,使我们更容易使我们的扫描适应相应的网络环境。我们可以在这里找到确切使用的选项及其值:https ://nmap.org/book/performance-timing-templates.html

默认扫描

默认扫描

darkinga@htb[/htb]$ sudo nmap 10.129.2.0/24 -F -oN tnet.default 

<SNIP>
Nmap done: 256 IP addresses (10 hosts up) scanned in 32.44 seconds
疯狂扫描

疯狂扫描

darkinga@htb[/htb]$ sudo nmap 10.129.2.0/24 -F -oN tnet.T5 -T 5

<SNIP>
Nmap done: 256 IP addresses (10 hosts up) scanned in 18.07 seconds
扫描选项 描述
10.129.2.0/24 扫描指定的目标网络。
-F 扫描前 100 个端口。
-oN tnet.T5 以普通格式保存结果,从指定的文件名开始。
-T 5 指定疯狂计时模板。

默认扫描 - 找到打开的端口

默认扫描 - 找到打开的端口

darkinga@htb[/htb]$ cat tnet.default | grep "/tcp" | wc -l

23
疯狂扫描 - 发现开放端口

疯狂扫描 - 发现开放端口

darkinga@htb[/htb]$ cat tnet.T5 | grep "/tcp" | wc -l

23

我们可以在https://nmap.org/book/man-performance.html找到有关扫描性能的更多信息

绕过安全措施

防火墙和 IDS/IPS 规避

Nmap为我们提供了许多不同的方法来绕过防火墙规则和 IDS/IPS。这些方法包括数据包分段、诱饵的使用以及我们将在本节中讨论的其他方法。


防火墙

防火墙是一种防止来自外部网络的未授权连接尝试的安全措施。每个防火墙安全系统都基于一个软件组件,该组件监视防火墙和传入数据连接之间的网络流量,并根据已设置的规则决定如何处理连接。它检查单个网络数据包是否被传递、忽略或阻止。此机制旨在防止可能具有潜在危险的不需要的连接。


入侵检测系统/IPS

与防火墙一样,入侵检测系统(IDS)和入侵防御系统(IPS)也是基于软件的组件。IDS扫描网络以寻找潜在的攻击,对其进行分析,并报告检测到的任何攻击。如果应该检测到潜在的攻击,则采取特定的防御措施作为IPS补充。IDS此类攻击的分析基于模式匹配和签名。如果检测到特定模式,例如服务检测扫描,IPS可能会阻止挂起的连接尝试。


确定防火墙及其规则

我们已经知道,当端口显示为已过滤时,可能有多种原因。在大多数情况下,防火墙设置了特定的规则来处理特定的连接。数据包可以是dropped, 或rejected。数据dropped包被忽略,主机不返回任何响应。

这对于rejected返回带有RST标志的数据包是不同的。这些数据包包含不同类型的 ICMP 错误代码或根本不包含任何内容。

此类错误可能是:

  • 网络不可达
  • 网络禁止
  • 主机不可达
  • 主机禁止
  • 端口不可达
  • 原型无法访问

Nmap 的 TCP ACK 扫描 ( ) 方法比常规 SYN ( ) 或连接扫描 ( )-sA更难过滤防火墙和 IDS/IPS 系统,因为它们只发送带有标志的 TCP 数据包。当端口关闭或打开时,主机必须响应一个标志。与传出连接不同,来自外部网络的所有连接尝试(带有标志)通常都被防火墙阻止。但是,带有标志的数据包往往会被防火墙通过,因为防火墙无法确定连接首先是从外部网络还是内部网络建立的。-sS``sT``ACK``RST``SYN``ACK

如果我们查看这些扫描,我们将看到结果有何不同。

同步扫描

同步扫描

darkinga@htb[/htb]$ sudo nmap 10.129.2.28 -p 21,22,25 -sS -Pn -n --disable-arp-ping --packet-trace

Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-21 14:56 CEST
SENT (0.0278s) TCP 10.10.14.2:57347 > 10.129.2.28:22 S ttl=53 id=22412 iplen=44  seq=4092255222 win=1024 <mss 1460>
SENT (0.0278s) TCP 10.10.14.2:57347 > 10.129.2.28:25 S ttl=50 id=62291 iplen=44  seq=4092255222 win=1024 <mss 1460>
SENT (0.0278s) TCP 10.10.14.2:57347 > 10.129.2.28:21 S ttl=58 id=38696 iplen=44  seq=4092255222 win=1024 <mss 1460>
RCVD (0.0329s) ICMP [10.129.2.28 > 10.10.14.2 Port 21 unreachable (type=3/code=3) ] IP [ttl=64 id=40884 iplen=72 ]
RCVD (0.0341s) TCP 10.129.2.28:22 > 10.10.14.2:57347 SA ttl=64 id=0 iplen=44  seq=1153454414 win=64240 <mss 1460>
RCVD (1.0386s) TCP 10.129.2.28:22 > 10.10.14.2:57347 SA ttl=64 id=0 iplen=44  seq=1153454414 win=64240 <mss 1460>
SENT (1.1366s) TCP 10.10.14.2:57348 > 10.129.2.28:25 S ttl=44 id=6796 iplen=44  seq=4092320759 win=1024 <mss 1460>
Nmap scan report for 10.129.2.28
Host is up (0.0053s latency).

PORT   STATE    SERVICE
21/tcp filtered ftp
22/tcp open     ssh
25/tcp filtered smtp
MAC Address: DE:AD:00:00:BE:EF (Intel Corporate)

Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds
确认扫描

确认扫描

darkinga@htb[/htb]$ sudo nmap 10.129.2.28 -p 21,22,25 -sA -Pn -n --disable-arp-ping --packet-trace

Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-21 14:57 CEST
SENT (0.0422s) TCP 10.10.14.2:49343 > 10.129.2.28:21 A ttl=49 id=12381 iplen=40  seq=0 win=1024
SENT (0.0423s) TCP 10.10.14.2:49343 > 10.129.2.28:22 A ttl=41 id=5146 iplen=40  seq=0 win=1024
SENT (0.0423s) TCP 10.10.14.2:49343 > 10.129.2.28:25 A ttl=49 id=5800 iplen=40  seq=0 win=1024
RCVD (0.1252s) ICMP [10.129.2.28 > 10.10.14.2 Port 21 unreachable (type=3/code=3) ] IP [ttl=64 id=55628 iplen=68 ]
RCVD (0.1268s) TCP 10.129.2.28:22 > 10.10.14.2:49343 R ttl=64 id=0 iplen=40  seq=1660784500 win=0
SENT (1.3837s) TCP 10.10.14.2:49344 > 10.129.2.28:25 A ttl=59 id=21915 iplen=40  seq=0 win=1024
Nmap scan report for 10.129.2.28
Host is up (0.083s latency).

PORT   STATE      SERVICE
21/tcp filtered   ftp
22/tcp unfiltered ssh
25/tcp filtered   smtp
MAC Address: DE:AD:00:00:BE:EF (Intel Corporate)

Nmap done: 1 IP address (1 host up) scanned in 0.15 seconds
扫描选项 描述
10.129.2.28 扫描指定目标。
-p 21,22,25 只扫描指定的端口。
-sS 在指定端口上执行 SYN 扫描。
-sA 对指定端口执行 ACK 扫描。
-Pn 禁用 ICMP Echo 请求。
-n 禁用 DNS 解析。
--disable-arp-ping 禁用 ARP ping。
--packet-trace 显示所有发送和接收的数据包。

请注意我们从目标收到的 RCVD 数据包及其设置标志。使用 SYN 扫描 ( -sS),我们的目标尝试通过发送回SA设置了 SYN-ACK () 标志的数据包来建立 TCP 连接,而使用 ACK 扫描 ( -sA),我们获得RST标志,因为 TCP 端口 22 是打开的。对于 TCP 端口 25,我们没有收到任何返回的数据包,这表明数据包将被丢弃。


检测 IDS/IPS

与防火墙及其规则不同,IDS/IPS 系统的检测要困难得多,因为它们是被动流量监控系统。IDS systems检查主机之间的所有连接。如果 IDS 发现包含定义的内容或规范的数据包,管理员会收到通知并在最坏的情况下采取适当的措施。

IPS systems采取管理员自主配置的措施,自动防范潜在攻击。必须知道 IDS 和 IPS 是不同的应用程序,并且 IPS 是对 IDS 的补充。

VPS建议使用多个具有不同 IP 地址的虚拟专用服务器 ( ) 来确定此类系统在渗透测试期间是否在目标网络上。如果管理员在目标网络上检测到此类潜在攻击,第一步就是阻止潜在攻击来自的 IP 地址。因此,我们将无法再使用该 IP 地址访问网络,我们的互联网服务提供商 ( ISP) 将被联系并被阻止访问互联网。

  • IDS systems通常单独存在可以帮助管理员检测对其网络的潜在攻击。然后他们可以决定如何处理此类连接。我们可以触发管理员的某些安全措施,例如,通过积极扫描单个端口及其服务。根据是否采取了具体的安全措施,我们可以检测出网络中是否存在一些监控应用。
  • 确定IPS system目标网络中是否存在此类问题的一种方法是从单个主机进行扫描 ( VPS)。如果在任何时候该主机被阻止并且无法访问目标网络,我们就知道管理员已经采取了一些安全措施。因此,我们可以继续我们的渗透测试与另一个VPS

因此,我们知道我们需要更安静地进行扫描,并且在最好的情况下,伪装与目标网络及其服务的所有交互。


诱饵

在某些情况下,管理员原则上会阻止来自不同地区的特定子网。这会阻止对目标网络的任何访问。另一个例子是 IPS 什么时候应该阻止我们。因此,诱饵扫描方法 ( -D) 是正确的选择。使用这种方法,Nmap 会生成各种随机 IP 地址,并将其插入到 IP 标头中,以伪装所发送数据包的来源。使用这种方法,我们可以生成随机 ( RND) 个特定数量(例如:5)的 IP 地址,用冒号 (:). 然后我们的真实 IP 地址随机放置在生成的 IP 地址之间。因此,在下一个示例中,我们的真实 IP 地址位于第二个位置。另一个关键点是诱饵必须是活的。否则,由于 SYN 泛洪安全机制,目标上的服务可能无法访问。

使用诱饵扫描

使用诱饵扫描

darkinga@htb[/htb]$ sudo nmap 10.129.2.28 -p 80 -sS -Pn -n --disable-arp-ping --packet-trace -D RND:5

Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-21 16:14 CEST
SENT (0.0378s) TCP 102.52.161.59:59289 > 10.129.2.28:80 S ttl=42 id=29822 iplen=44  seq=3687542010 win=1024 <mss 1460>
SENT (0.0378s) TCP 10.10.14.2:59289 > 10.129.2.28:80 S ttl=59 id=29822 iplen=44  seq=3687542010 win=1024 <mss 1460>
SENT (0.0379s) TCP 210.120.38.29:59289 > 10.129.2.28:80 S ttl=37 id=29822 iplen=44  seq=3687542010 win=1024 <mss 1460>
SENT (0.0379s) TCP 191.6.64.171:59289 > 10.129.2.28:80 S ttl=38 id=29822 iplen=44  seq=3687542010 win=1024 <mss 1460>
SENT (0.0379s) TCP 184.178.194.209:59289 > 10.129.2.28:80 S ttl=39 id=29822 iplen=44  seq=3687542010 win=1024 <mss 1460>
SENT (0.0379s) TCP 43.21.121.33:59289 > 10.129.2.28:80 S ttl=55 id=29822 iplen=44  seq=3687542010 win=1024 <mss 1460>
RCVD (0.1370s) TCP 10.129.2.28:80 > 10.10.14.2:59289 SA ttl=64 id=0 iplen=44  seq=4056111701 win=64240 <mss 1460>
Nmap scan report for 10.129.2.28
Host is up (0.099s latency).

PORT   STATE SERVICE
80/tcp open  http
MAC Address: DE:AD:00:00:BE:EF (Intel Corporate)

Nmap done: 1 IP address (1 host up) scanned in 0.15 seconds
扫描选项 描述
10.129.2.28 扫描指定目标。
-p 80 只扫描指定的端口。
-sS 在指定端口上执行 SYN 扫描。
-Pn 禁用 ICMP Echo 请求。
-n 禁用 DNS 解析。
--disable-arp-ping 禁用 ARP ping。
--packet-trace 显示所有发送和接收的数据包。
-D RND:5 生成五个随机 IP 地址,指示连接来自的源 IP。

欺骗性数据包通常会被 ISP 和路由器过滤掉,即使它们来自相同的网络范围。因此,我们也可以指定我们的 VPS 服务器的 IP 地址,并结合IP IDIP 标头中的“”操作来使用它们来扫描目标。

另一种情况是只有个别子网无法访问服务器的特定服务。所以我们也可以手动指定源IP地址( -S) 来测试用这个是否能得到更好的结果。诱饵可用于 SYN、ACK、ICMP 扫描和操作系统检测扫描。那么让我们看看这样一个例子,并确定它最有可能是哪个操作系统。

测试防火墙规则

测试防火墙规则

darkinga@htb[/htb]$ sudo nmap 10.129.2.28 -n -Pn -p445 -O

Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-22 01:23 CEST
Nmap scan report for 10.129.2.28
Host is up (0.032s latency).

PORT    STATE    SERVICE
445/tcp filtered microsoft-ds
MAC Address: DE:AD:00:00:BE:EF (Intel Corporate)
Too many fingerprints match this host to give specific OS details
Network Distance: 1 hop

OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 3.14 seconds
使用不同源 IP 扫描

使用不同源 IP 扫描

darkinga@htb[/htb]$ sudo nmap 10.129.2.28 -n -Pn -p 445 -O -S 10.129.2.200 -e tun0

Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-22 01:16 CEST
Nmap scan report for 10.129.2.28
Host is up (0.010s latency).

PORT    STATE SERVICE
445/tcp open  microsoft-ds
MAC Address: DE:AD:00:00:BE:EF (Intel Corporate)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive OS guesses: Linux 2.6.32 (96%), Linux 3.2 - 4.9 (96%), Linux 2.6.32 - 3.10 (96%), Linux 3.4 - 3.10 (95%), Linux 3.1 (95%), Linux 3.2 (95%), AXIS 210A or 211 Network Camera (Linux 2.6.17) (94%), Synology DiskStation Manager 5.2-5644 (94%), Linux 2.6.32 - 2.6.35 (94%), Linux 2.6.32 - 3.5 (94%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 1 hop

OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 4.11 seconds
扫描选项 描述
10.129.2.28 扫描指定目标。
-n 禁用 DNS 解析。
-Pn 禁用 ICMP Echo 请求。
-p 445 只扫描指定的端口。
-O 执行操作系统检测扫描。
-S 使用不同的源 IP 地址扫描目标。
10.129.2.200 指定源IP地址。
-e tun0 通过指定接口发送所有请求。

DNS 代理

默认情况下,Nmap除非另有说明,否则执行反向 DNS 解析以查找有关我们目标的更多重要信息。在大多数情况下,这些 DNS 查询也会通过,因为应该找到并访问给定的 Web 服务器。DNS 查询是通过UDP port 53. 以前TCP port 53仅用于 DNS 服务器之间所谓的“ Zone transfers”或大于 512 字节的数据传输。由于 IPv6 和 DNSSEC 扩展,这种情况越来越多地发生变化。这些更改导致许多 DNS 请求通过 TCP 端口 53 发出。

但是,Nmap仍然为我们提供了一种自己指定 DNS 服务器的方法 ( --dns-server <ns>,<ns>)。如果我们处于非军事区 ( DMZ),这种方法对我们来说可能是基本的。公司的 DNS 服务器通常比来自 Internet 的服务器更受信任。因此,例如,我们可以使用它们与内部网络的主机进行交互。作为另一个示例,我们可以将( ) 用作扫描的TCP port 53源端口。--source-port如果管理员使用防火墙控制这个端口,没有正确过滤IDS/IPS,我们的TCP数据包就会被信任并通过。

过滤端口的 SYN 扫描

过滤端口的 SYN 扫描

darkinga@htb[/htb]$ sudo nmap 10.129.2.28 -p50000 -sS -Pn -n --disable-arp-ping --packet-trace

Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-21 22:50 CEST
SENT (0.0417s) TCP 10.10.14.2:33436 > 10.129.2.28:50000 S ttl=41 id=21939 iplen=44  seq=736533153 win=1024 <mss 1460>
SENT (1.0481s) TCP 10.10.14.2:33437 > 10.129.2.28:50000 S ttl=46 id=6446 iplen=44  seq=736598688 win=1024 <mss 1460>
Nmap scan report for 10.129.2.28
Host is up.

PORT      STATE    SERVICE
50000/tcp filtered ibm-db2

Nmap done: 1 IP address (1 host up) scanned in 2.06 seconds
从 DNS 端口进行 SYN 扫描

从 DNS 端口进行 SYN 扫描

darkinga@htb[/htb]$ sudo nmap 10.129.2.28 -p50000 -sS -Pn -n --disable-arp-ping --packet-trace --source-port 53

SENT (0.0482s) TCP 10.10.14.2:53 > 10.129.2.28:50000 S ttl=58 id=27470 iplen=44  seq=4003923435 win=1024 <mss 1460>
RCVD (0.0608s) TCP 10.129.2.28:50000 > 10.10.14.2:53 SA ttl=64 id=0 iplen=44  seq=540635485 win=64240 <mss 1460>
Nmap scan report for 10.129.2.28
Host is up (0.013s latency).

PORT      STATE SERVICE
50000/tcp open  ibm-db2
MAC Address: DE:AD:00:00:BE:EF (Intel Corporate)

Nmap done: 1 IP address (1 host up) scanned in 0.08 seconds
扫描选项 描述
10.129.2.28 扫描指定目标。
-p 50000 只扫描指定的端口。
-sS 在指定端口上执行 SYN 扫描。
-Pn 禁用 ICMP Echo 请求。
-n 禁用 DNS 解析。
--disable-arp-ping 禁用 ARP ping。
--packet-trace 显示所有发送和接收的数据包。
--source-port 53 从指定的源端口执行扫描。

现在我们已经发现防火墙接受TCP port 53,很可能 IDS/IPS 过滤器的配置也比其他过滤器弱得多。我们可以通过尝试使用连接到这个端口来测试这一点Netcat

连接到过滤端口

连接到过滤端口

darkinga@htb[/htb]$ ncat -nv --source-port 53 10.129.2.28 50000

Ncat: Version 7.80 ( https://nmap.org/ncat )
Ncat: Connected to 10.129.2.28:50000.
220 ProFTPd