使用 Nmap 枚举 HTTP 服务

NmapBeginner
立即练习

介绍

在本实验中,你的目标是学习如何使用 Nmap 枚举 HTTP 服务。你将首先在本地主机 127.0.0.1 上运行一个带有 http-enum 脚本的 HTTP 枚举。然后,你将扫描端口 80,添加一个用户代理(user agent),并保存枚举结果。最后,你将审查 HTTP 发现结果,并在 Xfce 终端中将其与 banner 扫描进行比较。

请记住,在真实场景中,你只能在获得明确许可的网络和系统上进行扫描。

使用 nmap --script http-enum 127.0.0.1 运行 HTTP 枚举

在此步骤中,我们将使用 Nmap 和 http-enum 脚本来枚举本地主机的 HTTP 服务。此脚本通过发现常见的 Web 服务器文件和目录来帮助识别潜在的漏洞和配置错误。

在我们开始之前,让我们简要讨论一下 Nmap 和 NSE 脚本是什么。Nmap("Network Mapper")是一个免费开源的网络发现和安全审计工具。NSE(Nmap Scripting Engine)允许用户编写脚本来自动化各种网络任务。http-enum 脚本就是这样一种用于枚举常见 HTTP 资源的 NSE 脚本。

本次实验,我们将目标定为本地主机 IP 地址 127.0.0.1。这是一种安全的学习方法,因为我们正在扫描自己的本地机器。

现在,让我们执行 Nmap 命令:

sudo nmap --script http-enum 127.0.0.1

此命令告诉 Nmap:

  • sudo: 以超级用户权限执行命令,某些 Nmap 操作可能需要此权限。
  • nmap: 调用 Nmap 工具。
  • --script http-enum: 指定我们要使用 http-enum 脚本。
  • 127.0.0.1: 要扫描的目标 IP 地址(localhost)。

运行命令后,你将看到类似以下的输出(具体输出将取决于目标系统):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000020s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus
8080/tcp open  http-proxy
| http-enum:
|   /robots.txt: Robots file
|_  /session/: Potentially interesting folder

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

输出显示 http-enum 脚本在端口 8080 上发现了一些有趣的资源:

  • /robots.txt: 一个指定网站哪些部分不应被网络机器人抓取的 robots 文件。
  • /session/: 一个可能包含与会话相关文件或功能的有趣目录。

这些发现可以进一步调查,以识别潜在的漏洞或配置错误。

使用 nmap --script http-enum -p 8080 127.0.0.1 扫描端口 8080

在此步骤中,我们将使用 http-enum 脚本将 Nmap 扫描的重点放在特定端口,即端口 8080。指定端口有助于缩小扫描范围并提供更具针对性的结果。我们将扫描 127.0.0.1,这是回环地址,代表本地机器。这对于测试在你自己的系统上运行的服务很有用。

让我们分解一下我们将使用的命令:

sudo nmap --script http-enum -p 8080 127.0.0.1

以下是命令各部分的意思:

  • sudo: 以超级用户权限执行命令。这可能对于获得准确的结果是必要的,尤其是在较低的端口号上。
  • nmap: 调用 Nmap 工具。
  • --script http-enum: 指定我们要使用 http-enum 脚本来枚举 HTTP 资源。
  • -p 8080: 此选项告诉 Nmap 只扫描端口 8080。端口 8080 通常用作备用 HTTP 端口,通常用于开发服务器或代理服务。
  • 127.0.0.1: 目标 IP 地址,在此情况下是回环地址,指向本地机器。

现在,在你的终端中执行命令:

sudo nmap --script http-enum -p 8080 127.0.0.1

输出将与此类似(具体输出取决于你本地机器上运行的服务):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:05 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000020s latency).

PORT     STATE SERVICE
8080/tcp open  http-proxy
| http-enum:
|   /robots.txt: Robots file
|_  /session/: Potentially interesting folder

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

在此示例中,http-enum 脚本发现了 /robots.txt/session/。这些是 Web 服务器上的常见资源,进一步调查可能会揭示有关服务器配置和潜在漏洞的更多信息。通过指定端口 8080,我们集中了扫描范围,并获得了针对本地机器上运行的 HTTP 服务的特定结果。

使用 nmap --script http-enum --script-args http.useragent=Test 127.0.0.1 添加 User-Agent

在此步骤中,我们将自定义 http-enum 脚本使用的 User-Agent 头。User-Agent 头由客户端(在此例中为 Nmap)发送到服务器,用于标识客户端软件。修改 User-Agent 可能出于多种原因有用,例如:

  • 绕过基本安全措施:某些服务器可能会阻止来自已知扫描工具的请求。更改 User-Agent 有助于规避这些阻止。
  • 测试服务器行为:你可以观察服务器对不同 User-Agent 字符串的响应方式。
  • 隐蔽性:使用不常见的 User-Agent 可以使你的扫描不那么显眼。

我们将使用 --script-args 选项来修改 http.useragent 的值。

这是我们将使用的命令:

sudo nmap --script http-enum --script-args http.useragent=Test 127.0.0.1

让我们分解一下这个命令:

  • sudo: 以超级用户权限执行命令。
  • nmap: 调用 Nmap 工具。
  • --script http-enum: 指定我们要使用 http-enum 脚本。
  • --script-args http.useragent=Test: 这是关键部分。它将一个参数传递给 http-enum 脚本。具体来说,它将 http.useragent 变量设置为 "Test" 值。这意味着当脚本发送 HTTP 请求时,它将使用 "Test" 作为 User-Agent 头。
  • 127.0.0.1: 要扫描的目标 IP 地址(localhost)。

在你的终端中执行命令:

sudo nmap --script http-enum --script-args http.useragent=Test 127.0.0.1

输出将与第一步的输出类似,但发送到服务器的 HTTP 请求现在将包含 User-Agent: Test 头。你不会在 Nmap 输出中直接看到 User-Agent,但它会在扫描过程中在后台使用。

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:10 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000020s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus
8080/tcp open  http-proxy
| http-enum:
|   /robots.txt: Robots file
|_  /session/: Potentially interesting folder

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

此步骤演示了如何使用 --script-args 选项自定义 Nmap 脚本。这使你能够微调脚本的行为并根据特定情况进行调整。

使用 nmap --script http-enum -oN http_enum.txt 127.0.0.1 保存枚举结果

在此步骤中,我们将把 http-enum 脚本的结果保存到文件中。这对于后续的分析和报告至关重要。Nmap 提供了多种以不同格式保存扫描结果的选项。我们将使用 -oN 选项,它以“正常”(normal)人类可读的格式保存结果。

这是我们将使用的命令:

sudo nmap --script http-enum -oN http_enum.txt 127.0.0.1

让我们分解一下这个命令:

  • sudo: 以超级用户权限执行命令。
  • nmap: 调用 Nmap 工具。
  • --script http-enum: 指定我们要使用 http-enum 脚本。
  • -oN http_enum.txt: 此选项告诉 Nmap 以正常格式将结果保存到名为 http_enum.txt 的文件中。该文件将在你当前的目录 (~/project) 中创建。
  • 127.0.0.1: 要扫描的目标 IP 地址(回环地址)。

在你的终端中执行命令:

sudo nmap --script http-enum -oN http_enum.txt 127.0.0.1

终端中的输出将与前几个步骤的输出类似,但除了在屏幕上显示结果外,Nmap 还会将它们保存到 http_enum.txt 文件中。

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:15 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000020s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus
8080/tcp open  http-proxy
| http-enum:
|   /robots.txt: Robots file
|_  /session/: Potentially interesting folder

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

要验证文件是否已创建并包含扫描结果,你可以使用 cat 命令显示文件内容:

cat http_enum.txt

你应该会在输出中看到 Nmap 扫描结果。此文件现在可用于进一步分析、报告或作为其他工具的输入。

在 Xfce 终端中查看 HTTP 扫描结果

在此步骤中,我们将查看在上一步中创建的 http_enum.txt 文件中的 HTTP 发现项。我们将使用 Xfce 终端和 cat 命令来显示文件内容并分析结果。

首先,请确保你位于 ~/project 目录。http_enum.txt 文件应该就位于此处。

要查看 http_enum.txt 文件内容,请使用以下命令:

cat http_enum.txt

此命令会将文件内容打印到你的终端。

示例输出(实际输出可能因目标而异):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:15 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000020s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus
8080/tcp open  http-proxy
| http-enum:
|   /robots.txt: Robots file
|_  /session/: Potentially interesting folder

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

现在,让我们分析一下输出。http-enum 脚本会尝试识别 Web 服务器上潜在的有趣文件和目录。在此示例中,它发现了:

  • /robots.txt: 此文件向 Web 机器人(爬虫)提供有关网站哪些部分不应被索引的说明。它有时会揭示网站的隐藏或敏感区域。
  • /session/: 这是一个潜在的有趣目录,可能包含与会话相关的文件、配置文件或其他敏感信息。

通过查看这些发现项,你可以更好地了解 Web 服务器的结构,并识别进一步调查的潜在领域。例如,你可以使用 Web 浏览器访问 http://127.0.0.1:8080/robots.txthttp://127.0.0.1:8080/session/ 来查看它们的内容。

此步骤演示了如何查看 Nmap 脚本的输出并识别潜在的有趣信息。这是侦察过程中的一个关键部分。

在此步骤中,我们将使用 Nmap 执行 Banner 扫描,并将其结果与 http-enum 脚本的发现项进行比较。Banner 抓取是一种通过检查服务在建立连接时呈现的 Banner 来收集有关该服务信息的技术。这可以揭示软件版本和其他详细信息。

首先,让我们使用 Nmap 对目标(127.0.0.1)的 8080 端口执行 Banner 扫描。我们将使用 -sV 选项,它启用版本检测:

sudo nmap -sV -p 8080 127.0.0.1

此命令将尝试确定在 8080 端口上运行的服务和版本。

示例输出:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:20 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000087s latency).

PORT     STATE SERVICE VERSION
8080/tcp open  http    SimpleHTTPServer 0.6 (Python 3.7.5)

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

在此示例中,Banner 扫描显示 Web 服务器是运行在 Python 3.7.5 上的 SimpleHTTPServer 0.6

现在,让我们将此信息与我们在上一步中审查过的 http-enum 脚本的发现项进行比较。http-enum 脚本识别了潜在的文件和目录,例如 /robots.txt/session/

通过比较 Banner 扫描和 http-enum 脚本的结果,我们可以构建一个更完整的目标系统图景。Banner 扫描提供了有关软件版本的信息,而 http-enum 脚本则揭示了潜在的文件和目录。这些组合信息对于识别漏洞和规划进一步的攻击非常有价值。

例如,了解 Web 服务器软件的版本允许你搜索该版本特有的已知漏洞。然后,可以针对已识别的文件和目录进行利用。

此步骤演示了结合使用不同的扫描技术来收集有关目标系统的全面信息的重要性。

总结

在此实验中,参与者学习了如何使用 Nmap 的 http-enum 脚本来枚举 HTTP 服务。他们执行了命令来扫描 localhost (127.0.0.1),目标是 8080 端口,添加了自定义用户代理(user agent),并将结果保存到文本文件中。该实验强调了对某些操作使用超级用户权限,并通过使用 localhost 展示了安全的扫描实践。

运行扫描后,参与者在 Xfce 终端中审查了 HTTP 发现项,并将其结果与 Banner 扫描进行了比较,这有助于他们识别本地 Web 服务器上潜在的漏洞和配置错误。这种实践方法提供了网络侦察技术的实际操作经验。