使用 Nmap 进行 Web 应用程序渗透测试

NmapBeginner
立即练习

简介

在本实验中,我们将学习 Web 应用程序渗透测试,这是信息安全的一个关键领域。Web 应用程序广泛应用于各个领域,因此其安全性是重中之重。本实验旨在提供在目标机器上托管的易受攻击的 Web 应用程序中识别并利用漏洞的实践经验。我们的目标是深入了解常见的 Web 应用程序漏洞以及用于利用这些漏洞的技术。

设置环境

在这一步中,我们将设置实验环境,并熟悉相关工具和目标系统。

首先,我们需要获取 Kali Linux 镜像的 ID。双击桌面上的 xfce 终端并运行以下命令即可查看:

docker images

我们需要启动 Kali Linux 容器,它将作为我们的攻击机。打开终端并运行以下命令:

docker run -ti --network host image-id bash

该命令将启动一个新的 Kali Linux 容器,并允许你与其 shell 进行交互。

接下来,打开一个新的终端,我们需要启动目标机器,即一个名为 Metasploitable2 的易受攻击系统。运行以下命令启动虚拟机:

sudo virsh start Metasploitable2

等待目标机器启动,这可能需要 1-3 分钟。

虚拟机运行后,验证是否可以从 Kali Linux 容器 ping 通目标机器:

ping 192.168.122.102

侦察与信息收集

在这一步中,我们将执行侦察并使用各种技术收集有关目标系统的信息。

首先,我们在 Kali Linux 容器中使用 nmap 工具扫描目标机器,以识别开放端口和运行的服务:

nmap -sV -sC -oN nmap_scan.txt 192.168.122.102

该命令将执行 TCP 连接扫描(-sC)以确定哪些端口是开放的,并进行版本扫描(-sV)以识别每个开放端口上运行的服务及其版本。输出结果将保存到名为 nmap_scan.txt 的文件中(-oN)。

扫描需要一些时间。扫描完成后,使用 cat 命令查看 nmap_scan.txt 文件,根据开放端口和服务识别潜在的攻击向量:

cat nmap_scan.txt

接下来,我们将使用 gobuster 工具对目标 Web 服务器进行目录和文件枚举:

gobuster dir -u http://192.168.122.102 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 30 -o gobuster_scan.txt

该命令将使用指定的字典文件(-w)对目标 Web 服务器上的目录和文件进行暴力破解。-t 选项指定并发线程数,-o 选项将输出保存到名为 gobuster_scan.txt 的文件中。

分析 gobuster_scan.txt 文件,找出任何可能提供额外信息或攻击向量的有趣目录或文件。

漏洞利用

在这一步中,我们将尝试利用在上一步中识别出的漏洞。

根据从 nmap 和 gobuster 扫描中收集到的信息,识别目标系统中的潜在漏洞。Metasploitable2 包含易受攻击的 Mutillidae 训练应用程序,因此在这一步中,我们将测试该应用程序中的真实页面,而不是使用占位符 URL。

Web 应用程序中常见的漏洞之一是 SQL 注入。Mutillidae 中的 user-info.php 页面接受查询字符串中的 username 参数,这为我们在 Kali Linux 容器中使用 sqlmap 提供了一个具体的攻击目标。

sqlmap -u "http://192.168.122.102/mutillidae/index.php?page=user-info.php&username=admin&password=admin&user-info-php-submit-button=View+Account+Details" -p username --batch --risk=3 --level=5 --random-agent --dbs

该命令测试目标虚拟机上真实的 Mutillidae 端点。-u 选项提供完整的易受攻击 URL,-p username 告诉 sqlmap 重点关注哪个参数,--batch 以非交互方式运行,--risk=3--level=5 启用更深入的测试,--random-agent 会轮换用户代理字符串,--dbs 则要求 sqlmap 在利用成功后枚举数据库名称。

根据你尝试利用的漏洞,你可能需要使用不同的工具或技术。请参考特定漏洞和工具的文档及资源。

后渗透与权限提升

在这一步中,我们将利用侦察期间发现的服务暴露情况,确认目标系统上的 shell 访问权限,并获取基本的后渗透证据。

Metasploitable2 的 nmap 扫描通常显示 TCP 端口 1524 是开放的。在此虚拟机上,该服务提供了一个 root shell,因此我们可以直接从 Kali Linux 容器连接到它,而无需假设已经存在单独的反向 shell。

在 Kali Linux 容器中运行以下命令:

printf 'id\nuname -a\nexit\n' | nc 192.168.122.102 1524

这会向目标虚拟机上暴露的 shell 服务发送三条命令。id 命令确认该服务赋予你的账户权限,uname -a 记录内核信息,exit 在输出打印到终端后干净地关闭 shell。

如果连接成功,你应该会看到包含 uid=0(root) 和 Metasploitable2 内核详细信息的输出。这些输出足以证明在后渗透阶段成功获得了 shell 访问权限。

在实际评估中,你会将此暴露的服务记录为关键发现,因为它无需任何额外的利用链即可直接获得特权访问权限。

总结

在本实验中,我们学习了 Web 应用程序渗透测试,并获得了在目标机器上托管的易受攻击的 Web 应用程序中识别并利用漏洞的实践经验。我们涵盖了侦察、Web 应用程序枚举、使用 sqlmap 进行 SQL 注入测试以及基本的后渗透验证。

本实验提供了一个受控环境,用于练习现实场景并培养 Web 应用程序安全技能。通过遵循这些步骤,我们学习了如何设置实验环境、执行侦察和信息收集、测试真实的 Mutillidae 端点以进行 SQL 注入,以及通过目标系统上暴露的服务确认 shell 访问权限。

本实验使我们掌握了 Web 应用程序渗透测试的实用知识和经验,这对于保护 Web 应用程序并在恶意攻击者利用漏洞之前识别潜在风险至关重要。