Kali NetHunter 渗透测试实用指南(一)
原文:
annas-archive.org/md5/459BF96CB0C4FE5AC683E666C385CC38译者:飞龙
前言
《Kali NetHunter 实战渗透测试》专注于使用移动平台进行渗透测试,以模拟真实世界的攻击。Kali NetHunter 平台旨在在基于 Android 的设备上运行,如智能手机和平板电脑。其便携性使其成为一个有趣的话题,并为网络安全领域中的许多可能应用打开了大门。
本书的受众
本书适用于初入渗透测试职业的人员,以及已经在网络安全领域工作并希望进一步了解和掌握使用移动平台进行渗透测试的知识的人员。读者在开始阅读本书之前应具备一些渗透测试或网络安全的基础知识。
本书内容包括
第一章,“Kali NetHunter 简介”,介绍了 Kali NetHunter 并描述了其移动平台中的一些工具。您将了解 Android 平台及其安全模型,最后学习如何在 Android 设备上安装 Kali NetHunter 平台。
第二章,“了解渗透测试过程的各个阶段”,介绍了数字世界中进行渗透测试的重要性和必要性。您将了解组织内不同类型的威胁行为者和网络安全团队。此外,您将通过了解各个阶段和各种框架来学习渗透测试的基础知识。
第三章,“情报收集工具”,探讨了渗透测试人员可以使用的各种方法和资源来获取有关目标的信息。
第四章,“扫描和枚举工具”,概述了扫描和枚举。您将了解各种扫描技术和工具,以更好地对目标进行概况。此外,使用多种技术和工具,您将能够通过枚举过程从目标中提取信息。
第五章,“渗透目标”,涵盖了成功利用系统并获取访问权限的一些顶级技巧。通过本章结束时,您将能够使用各种技术来获取对目标的访问权限。
第六章,“清除痕迹和删除目标上的证据”,介绍了作为渗透测试人员清除痕迹的重要性。您将了解各种类型的日志及其位置,以及一些实用程序和工具,以帮助清除日志数据,并从 Windows 和 Linux 系统中删除文件。
第七章,“数据包嗅探和流量分析”,探讨了各种数据包嗅探技术、工具和设备。在本章结束时,您将能够使用 Kali NetHunter 中的一些本地工具进行数据包嗅探。此外,您还将学习如何使用一些非常知名的工具来分析数据。
第八章,“针对无线设备和网络”,涵盖了无线网络的类型、标准和拓扑结构。您将了解到无线网络上发生的各种威胁和攻击,并能够自己执行这些攻击。
第九章,“避免被检测”,涵盖了渗透测试人员需要了解和理解的基本知识,以便在渗透测试过程中使用各种技术保持隐秘。
第十章,“加固技术和对策”,涵盖了数字世界中常见的威胁,并解释了如何保护网络设备、客户端和服务器操作系统以及移动设备。
第十一章,搭建实验室,介绍了设置个人渗透测试实验室环境的要求和过程,以及如何组装它。
第十二章,选择 Kali 设备和硬件,帮助您选择适合 Kali NetHunter 的设备。
充分利用本书
在开始阅读本书之前,建议您至少具备基本的网络安全知识。您应该了解网络安全领域的网络安全概念和威胁。在本书的实际操作中,我们在 Android 智能设备上同时使用了 Kali Linux 和 Kali NetHunter。第一章介绍了在 Android 上安装 Kali NetHunter。
下载彩色图像
我们还提供了一个 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图像。您可以在这里下载:www.packtpub.com/sites/default/files/downloads/9781788995177_ColorImages.pdf。
使用的约定
本书中使用了许多文本约定。
CodeInText:表示文本中的代码词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄。以下是一个例子:“我通常将文件名指定为 HTML 文件,例如test.html。”
任何命令行输入或输出都是按照以下方式编写的:
apt-get install metagoofil
粗体:表示一个新术语、一个重要词或者屏幕上显示的词。例如,菜单中的单词或对话框中的单词会以这种形式出现在文本中。以下是一个例子:“转到设置 | 开发者选项,并启用高级重启和Android 调试选项。”
警告或重要提示会出现在这样的形式中。
提示和技巧会以这种形式出现。
第一部分:探索 Kali NetHunter
本章将介绍 Kali NetHunter 和 Android,以及 Kali NetHunter 设计的硬件平台。
本节涵盖以下章节:
-
第一章,介绍 Kali NetHunter
-
第二章,理解渗透测试过程的阶段
第一章:Kali NetHunter 简介
黑客是一个许多人感兴趣的讨论话题,无论他们是在网络安全领域工作,还是仅仅对学习如何进行黑客攻击的细节感兴趣。通常,电视节目和电影都会将黑客融入情节中。一些电视节目,无论是虚构的还是非虚构的,都是基于黑客攻击的,其中一个著名的就是《黑客军团》。在这个节目中,一个年轻人使用真实世界的技术对多个组织进行各种网络攻击。
许多电视节目和电影经常展示黑客使用移动设备或其他手持设备渗透目标网络。这引发了一个问题:从移动设备,比如手机,进行黑客攻击是否可能?这个问题的答案是是。我们被如此多的技术和智能设备所包围。想象一下使用你的智能设备来测试网络或系统的漏洞,甚至利用它;这绝对会非常酷。
在本章中,我们将涵盖以下主题:
-
介绍 Kali NetHunter
-
Android 平台和安全模型
-
安装 Kali NetHunter
什么是 Kali NetHunter?
在开始本节之前,让我们回顾一下最受欢迎的渗透测试 Linux 发行版 Kali Linux 的历史和演变。在备受欢迎的 Kali Linux 之前,有它的前身,被称为Backtrack。Backtrack 是由两家合并公司Auditor Security Collection和Whax在 2006 年创建的。Backtrack 操作系统以 Live CD 和 Live USB 可启动媒体的形式存在,这使得渗透测试人员、系统管理员或黑客可以使用支持从 CD/DVD 和/或 USB 驱动器引导的任何计算机。由于 Backtrack 是基于 Linux 的操作系统,live boot简单地将任何计算机变成了网络上的黑客机器。
2011 年,Backtrack 演变成了它的最新版本,被称为Backtrack 5。在这个时候,Backtrack 包括了许多工具和实用程序,帮助渗透测试人员完成工作。
Backtrack 5 中的一些工具包括以下内容:
-
Metasploit:由 Rapid7(www.rapid7.com)创建的著名漏洞利用开发框架。
-
SAINT:由 SAINT Corporation(www.saintcorporation.com)开发的著名漏洞评估工具。
-
Maltego:由 Paterva(www.paterva.com)创建的信息收集工具,利用互联网上的各种资源利用数据挖掘技术。
2013 年,Backtrack 发行版经历了一次重大变化;所有支持都已经结束,同时演变成了我们今天所熟知的Kali Linux渗透测试 Linux 发行版。Kali Linux 的创建者Offensive Security(www.offensive-security.com)从头开始完全重新设计了 Backtrack,使其基于Debian。Kali Linux 渗透测试平台预装了 600 多个工具,可以帮助渗透测试人员、安全工程师或取证人员完成他们的工作。
Kali Linux 最初是设计用于在计算机系统上运行,类似于其前身,无论是 Live Boot(CD/DVD 或 USB)还是安装在本地硬盘驱动器上。2014 年,Kali Linux 的创建者 Offensive Security 发布了Kali NetHunter。这个平台发布在基于Android的设备上,这为全球的渗透测试人员提供了更大的机会,因为他们不再受限于使用台式机或笔记本电脑来测试目标系统和网络。
Kali NetHunter 允许渗透测试人员简单地携带基于 Android 的设备,比如智能手机或平板电脑。想象一下,如果你被分配对客户的系统进行安全审计,特别是他们的无线和内部网络,而你只需要携带一个智能手机就可以进行审计,那将是多么棒的事情。
使用 NetHunter 进行渗透测试的一个示例场景是审计无线安全性,并测试组织网络中任何自带设备(BYOD)政策的安全性。能够通过手持设备进行渗透测试非常重要,因为无线安全配置对网络来说具有最多的安全漏洞。
有时,技术人员可能在网络上部署无线路由器或接入点(AP),同时保留默认配置,其中包括默认或工厂分配的密码。在本书的过程中,我们将探讨使用 Kali NetHunter 执行渗透测试的各种方法,以及如何利用可用的工具库对网络和系统执行成功的渗透测试。
Kali NetHunter 中的工具
Kali NetHunter 平台具有 Kali Linux 中不可用的额外资源。这些额外资源是专注的渗透测试人员手中的强大工具。
MAC 地址更改器
这个实用程序的名称说明了一切:它可以将设备的网络接口卡(NIC)的媒体访问控制(MAC)地址更改为随机值或测试人员定义的特定地址。Kali NetHunter 上的 MAC 地址更改器还具有更改设备主机名的额外功能。这是一个非常有用的功能,可以帮助渗透测试人员进行社会工程攻击:
中间人框架
在执行网络上的所有中间人攻击时,使用中间人(MITM)框架的工具和实用程序。中间人攻击是指黑客坐在受害者和另一台设备之间,例如连接到互联网的默认网关。攻击的目的是拦截沿路径的所有流量。从 PC 到互联网的所有流量应该直接发送到路由器(默认网关),但在网络上有攻击者时,他们可以欺骗受害者的 PC,使其认为攻击者的机器现在是路由器(默认网关),并欺骗路由器认为攻击者的机器是 PC:
这是渗透测试人员的强大工具。它的一些功能包括键盘记录、地址解析协议(ARP)缓存投毒攻击、欺骗和使用 SSLStip+功能进行 SSL 剥离攻击。以下是 NetHunter 上 MITM 框架的主窗口:
在右侧滑动,您将遇到另一个部分,欺骗设置,它将允许渗透测试人员轻松执行网络上的中间人攻击:
HID 攻击
人机接口设备(HID)攻击将 Kali NetHunter 设备,如支持USB On-The-Go(OTG)的智能手机,转换为预编程键盘。如果渗透测试人员使用 OTG 电缆在 Kali NetHunter 设备和目标计算机之间创建物理连接,NetHunter 就具有创建攻击向量的能力。该向量利用手机的硬件和软件组合创建预编程键盘。预编程键盘的目的是将脚本攻击注入目标系统。
根据 Kali NetHunter 的官方文档,USB HID 攻击仅适用于Teensy设备。Teensy 设备可以在www.pjrc.com/teensy/找到。
DuckHunter HID
USB Rubber Ducky 是由Hak5团队(www.hak5.org)创建的。它旨在将超过每分钟 1,000 个字的有效载荷注入目标设备。Kali NetHunter 允许渗透测试人员编写自定义或使用现有的ducky脚本,并简单地使用 DuckHunter HID 攻击功能将 ducky 脚本转换为 NetHunter HID 攻击格式。
为 USB Rubber Ducky 创建有效载荷,请访问ducktoolkit.com/获取更多信息。
Kali NetHunter 支持将USB Rubber Ducky脚本转换为 NetHunter 的 HID 攻击。什么是 USB Rubber Ducky?USB Rubber Ducky 是一种基于硬件的按键注入工具,看起来像一个 USB 闪存驱动器。
以下是 USB Rubber Ducky 的图片。正如我们所看到的,这只小鸭子有一个带可移动微型 SD 存储卡的主板。当它插入计算机的 USB 端口时,USB Rubber Ducky 会接收电源。接收电源后,小鸭子主板上的固件会检查微型 SD 存储卡上是否有任何有效载荷。普通的 USB 闪存驱动器不支持模块化形式,因此 USB 闪存驱动器不允许用户用微型 SD 卡扩展或替换闪存存储:
BadUSB MITM 攻击
到目前为止,您可能已经注意到 Kali NetHunter 平台上一些惊人的基于 HID 和 USB 的攻击。BadUSB MITM 攻击允许渗透测试人员简单地使用 OTG 电缆在受害者计算机和 NetHunter 设备之间创建物理连接。一旦建立连接,所有离开受害者计算机的网络流量将被发送到 NetHunter 设备:
这种类型的攻击被称为中间人(MITM)攻击,因为 NetHunter 设备将自己植入在受害者计算机和互联网或任何其他正在传输数据的网络之间。
MANA 无线工具包
即使您刚开始进行渗透测试,您可能也听说过一个名为Aircrack-ng的无线安全审计框架。Kali NetHunter 上的 MANA 无线工具包的功能类似于 Aircrack-ng。MANA 可以创建一个恶意的双重接入点并执行 MITM 攻击。
恶意双胞胎是黑客在组织中植入的未经授权的 AP。其目标是欺骗不知情的员工建立连接,并在网络上传输敏感信息。使用恶意双胞胎,黑客可以轻松地拦截和重定向用户的流量。
这个工具允许渗透测试人员在创建恶意双胞胎时配置以下内容:
-
基本服务集标识符(BSSID):BSSID 是无线路由器或 AP 的媒体访问控制(MAC)。
-
服务集标识符(SSID):SSID 是无线网络的名称,可以被笔记本电脑、智能手机、平板电脑等设备看到。
-
信道:信道也被称为频谱上的无线频段。
软件定义无线电
软件定义无线电(SDR)功能允许渗透测试人员结合使用HackRF设备(物理组件)和 Kali NetHunter Android 设备,使用各种无线电频率和空间。SDR 黑客攻击允许恶意用户监听无线电频率,从而拦截警察扫描仪、飞机无线电传输等。
网络映射器
渗透测试人员的工具包离不开流行的网络扫描工具网络映射器(Nmap)。这被称为网络扫描之王,因为它的功能远远超出了典型的网络扫描工具。扫描允许渗透测试人员对目标进行概要分析,帮助识别操作系统以及开放和关闭的端口,检测漏洞,确定正在运行的应用程序的服务版本等等。
以下是 NetHunter 应用程序上 Nmap 扫描菜单提供的选项:
NMap 有很多好处:
-
可以确定目标的操作系统
-
检测 TCP 和 UDP 端口
-
通过执行横幅抓取来检测服务版本
-
检测目标设备对各种利用和恶意软件的漏洞
-
可以使用诱饵功能来减少被发现的机会
Metasploit 有效载荷生成器
渗透测试中最具挑战性的阶段之一是利用或获取访问权限阶段。有时,渗透测试人员可能会使用Metasploit Framework(MSF)中的现有利用;然而,如果目标系统已打补丁以防止此类攻击,利用很可能会失败。在 MSF 中有msfvenom有效载荷生成器实用程序,它允许渗透测试人员创建定制的有效载荷。
Metasploit Payload Generator 允许渗透测试人员使用以下选项轻松创建有效载荷:
-
输出类型,如 ASP、Bash(.sh)、PHP、Powershell(.ps1)、Python(.py)、Windows(.exe)等。此功能允许为特定平台制作有效载荷。
-
设置 IP 地址和端口号。
-
负载选项可以是默认的 MSF 格式或命令提示符(CMD)。
以下是 Kali NetHunter 上 Metasploit 有效载荷生成器的界面,我们可以看到各种可用的选项,以及使用该应用程序创建有效载荷是多么简单。完成后,有效载荷可以发送到我们 Android 设备上的本地存储或 HTTP 地址:
创建的有效载荷可以是以下形式:
-
逆向连接或绑定:当受损时,受害者的终端(shell)被发送回攻击者,这被称为逆向连接。当攻击者成功地侵入目标系统时,绑定 shell 就会发生,它会自动获取一个 shell。
-
分阶段或无分阶段:在分阶段有效载荷中,利用发生在多个阶段。攻击向目标系统发送初始有效载荷;一旦受损,其余有效载荷将下载到受害者的系统上。在无分阶段有效载荷中,一个有效载荷被制作,具有所有功能,并发送给潜在受害者。
Searchsploit
渗透测试人员有时可能需要一个已知的、可用的利用来攻击目标系统上的特定漏洞。Exploit-DB(www.exploit-db.com)是由Offensive Security团队(www.offensive-security.com)维护的一个流行的利用存储库。Exploit-DB 包含许多由其社区开发和测试的利用,包括网络安全渗透测试人员和漏洞研究人员。
searchsploit工具允许渗透测试人员简单地搜索并直接下载利用到他们的 Kali NetHunter 设备上。该工具查询用户输入的任何搜索参数在 Exploit-DB 官方存储库中。一旦下载了利用,渗透测试人员可以按原样交付有效载荷,或者自定义以适应目标:
SearchSploit 的完整手册可以在www.exploit-db.com/searchsploit找到。
Android 平台和安全模型
Android 是一种基于修改版 Linux 的流行移动操作系统。另一个好处是开源,这为开发人员和爱好者提供了在 Android 上创建自定义应用程序和修改的机会。基于 Linux 有很多好处,比如运行各种基于 Linux 的工具和实用程序。
当时,市场上有许多竞争对手,其中一些是使用 WebOS 操作系统的惠普(HP)、苹果的 iOS、微软的 Windows Phone 操作系统、黑莓的研究动态(RIM)操作系统和一些第一代手机制造商使用的 Symbian OS,如诺基亚。
Android 架构
与所有操作系统一样,Android 的架构可以分为层,其中包括架构的所有组件,如下所示:
应用程序层
应用程序层包含移动设备的应用程序。这些应用程序包括浏览器、拨号器、联系人、时钟和闹钟,通常显示在主屏幕上。
应用程序框架层
应用程序框架层允许基于 Android 的应用程序(如拨号器)与应用程序框架进行接口,后者又管理资源和语音通话管理的基本移动功能。
以下组件驻留在 Android 操作系统的应用程序框架中:
-
包管理器:跟踪当前安装的基于 Android 的应用程序。
-
活动管理器:处理设备上所有正在运行的应用程序的生命周期。
-
内容提供程序:允许应用程序之间共享数据。
-
电话管理器:负责在设备上建立、维护和终止通话。
-
位置管理器:管理位置功能,如全球定位系统(GPS)。
-
资源管理器:负责设备上应用程序使用的资源类型。
-
通知管理器:在设备屏幕上显示通知和警报。
-
**Java API 框架:**允许开发人员使用 Java 编程语言编写应用程序。该框架允许 Android 操作系统执行这些应用程序。
Android 库
Android 使用用 C 和 C++编写的本地库,负责处理移动操作系统中的各种数据类型。
以下是它使用的一些库:
-
媒体框架:负责提供各种类型的媒体编解码器,允许记录和播放所有媒体类型,如 MP3 和 WAV。
-
SQLite:用于 Android 设备中的数据存储的数据库。
-
OpenGL/ES & SGL:处理设备屏幕上的 2D 和 3D 计算机图形的渲染。
-
WebKit:通过使用 Web 浏览器的引擎来显示网页。
Android Runtime
Android Runtime(ART)允许每个单独的应用程序在其自己的进程和实例中执行,就像桌面上的虚拟机一样。ART 旨在在低内存设备(如智能手机和平板电脑)上运行这些“虚拟实例/机器”。
内核
最重要的是,我们不能忘记 Android 操作系统背后的大脑,即内核,它负责与手持设备的硬件组件进行接口。Android 基于 Linux 操作系统的当前长期支持内核。在开发 Android 时,Linux 内核被修改以更好地满足移动操作系统的需求和功能。内核的修改之一是防止用户在 Android 平台上安装原始的 Linux 软件包。
Android 安全模型
为了更好地了解 Android 的安全状况,我们将深入了解 Android 背后的安全模型。我们将看看 Google 和 Android 团队如何采取额外步骤来保护 Android 设备及其用户的生态系统。
保护开源操作系统存在着挑战,Android 使用多层安全系统来保护其用户和平台。每个 Android 设备通常都有一组由 Google 提供的安全服务,让我们来看看其中一些。
Android 设备管理器
Android 设备管理器是一个网页应用程序和移动应用程序,可用于跟踪您的 Android 智能手机或平板电脑。它可以播放声音,通过远程应用锁定屏幕来保护设备,从 Google 帐户远程注销您的 Android 设备,在锁定屏幕上显示消息,并在设备丢失时远程擦除设备。
要访问 Android 设备管理器的功能,只需在计算机上访问 Google Play 商店,或者使用智能设备上的 Google Play 应用程序搜索Android 设备管理器或Google 查找我的设备,如下图所示:
登录后,您将看到所有可用的功能:
安全网
SafetyNet 保护基于 Android 的设备免受安全威胁,例如恶意 URL、任何潜在有害的应用程序和恶意软件感染,以及检测设备是否已获取 root 权限。它通过不断监视设备上的应用程序和服务,保护用户免受任何威胁。
验证应用程序
Android 操作系统可以检测到设备上运行的有害应用程序,或者试图安装在设备上。此功能将通知用户,或者自动阻止应用程序在设备上执行。此功能利用 Google Play Protect 的功能,定期扫描设备上当前安装的应用程序,以及用户试图安装的应用程序,以查找任何恶意迹象。此功能存在于 Android 操作系统的安全性中。
Google 不断监视应用程序;如果检测到应用程序是恶意的,将在 Android 设备的屏幕上显示通知,鼓励用户卸载它。这确保了 Android 用户的安全和隐私得到维护。
应用程序服务
应用程序服务允许基于 Android 的本地安装在设备上的应用程序利用基于云的服务和功能。基于云的服务和功能的一个例子是数据备份。应用程序服务的一个例子是 Android 设备设置菜单中的备份和重置功能。在用户的许可下,Android 可以自动将其设置备份到 Google 设备,因此在设备进行恢复出厂设置时,配置可以轻松地恢复。此外,应用程序服务始终有许多 Android 应用程序来支持云备份和恢复功能。
Android 更新
此功能负责检查和检索新软件版本的 Android 更新。这些更新通常由 Android 开发团队创建。智能手机制造商可以修改更新以适应其设备,并通过OTA(空中)更新将其推送到各种设备,或者将其发布在其支持页面上,允许用户手动下载和更新其设备。
更新对设备的安全性非常重要。更新通常用于添加新功能,并修复操作系统上的任何安全漏洞。Android 具有安全特定的更新,这些更新是模块化的,因此提供了智能手机制造商更快地推送安全更新的灵活性,同时花费更多的开发时间来更新不那么重要的更新。
Google Play 商店
Google Play 商店是 Android 设备的官方应用程序商店。Google Play 服务通过 Google Play 商店提供购买应用程序的许可验证,并对恶意应用程序进行持续的安全扫描。
Google Play Protect
Google Play Protect 是由 Google 为 Android 创建的移动威胁保护服务。该服务包括内置的恶意软件保护,使用 Google 设计的机器学习技术和算法。
以下是 Android 智能手机上 Google Play Protect 屏幕的截图;它显示了用户可以手动启用或禁用的两个功能:
正如我们所看到的,Google Play Protect 将定期扫描本地设备,以查找潜在的有害应用程序和威胁。因此,用户不需要干预-这个过程对我们来说是自动化的。
安装 NetHunter
Kali NetHunter 最初是为 Google Nexus 设备创建的,如Nexus 4和Nexus 5智能手机以及Nexus 7和Nexus 10平板电脑。后来,它扩展到了OnePlus One智能手机,Offensive Security 表示这是首选的 NetHunter 设备。截至目前,Kali NetHunter 支持来自各种制造商的各种设备,如 Google、OnePlus、三星、LG、HTC 和索尼。让我们看看如何在 Android 设备上安装 Kali NetHunter(在您的设备上安装 Kali NetHunter 之前,请检查www.offensive-security.com/kali-linux-nethunter-download/上支持的设备列表,或在 Offensive Security Kali NetHunter GitHub 存储库的支持设备和 ROM 列表github.com/offensive-security/kali-nethunter/wiki):
-
从
www.offensive-security.com/kali-linux-nethunter-download下载您设备的 Kali NetHunter 的官方版本。下载的文件应该是压缩的。在继续之前,请确保验证哈希值。如果哈希值不匹配,请不要使用。如果您想创建 Kali NetHunter 的自定义版本,请参阅为特定设备构建 Kali NetHunter部分。 -
解锁您的 Android 设备。在 Android 设备上安装 Kali NetHunter 时,安装将在 Android 操作系统之上进行。请确保在执行以下步骤之前在计算机上安装和配置了必要的 Android 驱动程序。为此,请确保您的计算机上安装了Android Studio的副本。此软件可在
developer.android.com/studio找到。Android Studio 将确保设备驱动程序已正确安装并且兼容。 -
将您的设备设置为开发者模式。转到设置|关于,然后点击版本号几次,直到看到通知显示开发者模式已启用。
-
转到设置|开发者选项,并启用高级重启和 Android 调试选项:
- 对您的设备进行 Root(适用于 Nexus 和 OnePlus)。如果您使用的是Nexus设备,您可以使用Nexus Root Toolkit(
www.wugfresh.com/nrt/)。Root 工具包是一个多合一工具,可用于安装设备驱动程序,解锁设备的引导加载程序,并安装自定义恢复工具,如Team Win Recovery Project (TWRP):
-
选择初始设置选项、完整驱动程序安装指南,并按照安装程序向导进行操作。
-
如果您的设备未解锁,请解锁引导加载程序。此过程将擦除整个设备。在执行此步骤之前,请务必创建设备的备份。
-
让我们来root您的 Android 设备。点击Root。如果您使用的是 Nexus,您将在屏幕上看到一个复选框,旁边是Custom Recovery,请确保取消选择它。
-
您的设备将自动重新启动。要验证您的设备是否已成功 Root,请在设备菜单中看到名为SuperSU的新图标/应用程序。打开该应用程序将验证您的设备的状态,无论是否已授予 Root 访问权限。
对于 OnePlus 设备,有一个专门为该设备制作的特定 root 工具,称为Bacon Root Toolkit(www.wugfresh.com/brt/)。此外,Offensive Security 团队提供了一个详细的在 Windows 和 Linux 上安装 Kali NetHunter 的过程。该指南可以在github.com/offensive-security/kali-nethunter/wiki/Windows-install找到。如果您使用 Linux,请访问github.com/offensive-security/nethunter-LRT。
- 前往 Google Play 商店并安装BusyBox应用程序:
- 安装TWRP Manager应用程序。您还可以从
twrp.me下载 APK 安装 TWRP。
安装完两个应用程序后,打开每个应用程序以确保它们正常运行。如果需要超级用户权限,只需选择授予或允许。
-
复制 Kali NetHunter 镜像并粘贴到设备的根目录中。现在是安装自定义恢复的时候了。
-
打开TWRP Manager应用程序并选择安装恢复版本选项。要开始安装,请点击安装恢复。
-
从提供的选项中重新启动设备:
- 点击安装并在目录中选择 Kali NetHunter 镜像 ZIP 文件。此时,自定义恢复将闪存 Kali NetHunter 到您的设备并自动重新启动。
为特定设备构建 Kali NetHunter(可选)
许多智能手机制造商,如 OnePlus、三星、谷歌和 LG,每年都会生产各种手机。您可能会想,我需要购买另一款基于 Android 的智能手机来托管 Kali NetHunter 平台吗? 答案很简单:不需要。我们提供的好处之一是能够为我们的 Android 设备构建 NetHunter 的自定义版本。在步骤 3中,您将能够选择设备类型和您的智能手机当前运行的 Android 版本;这是为了确保输出文件与您的 Android 手机兼容。
如果您想从官方 GitHub 存储库构建自己的 Kali NetHunter 镜像,请使用以下步骤:
- 使用
git clone https://github.com/offensive-security/kali-nethunter命令下载存储库:
- 确保使用
cd kali-nethunter/nethunter-installer命令将目录更改为新文件夹。接下来,在终端上运行./bootstrap.sh命令。在尝试下载系统上设备文件夹之前,将会有一个交互式提示,询问一些问题:
- 使用
python build.py –h命令查看为您的设备构建自定义 Kali NetHunter 镜像的可用选项:
要构建镜像,我们可以使用python build.py -d *<device>* --*<android version>*语法。
如果要为运行 Android Kitkat 的 Nexus 7(2013)设备构建 Kali NetHunter,可以使用python build.py –d flo –kitkat命令。
- 构建完成后,输出将是一个存储在
nethunter-installer目录中的.zip文件。只需将.zip文件复制到 Android 设备的根文件夹中,因为它将需要移动到 Kali NetHunter 中。
要快速定位目录中的.zip文件,请使用ls –l |grep .zip命令仅查看 ZIP 文件。
其他可选硬件
作为一名经验丰富或即将成为网络安全领域的渗透测试人员,您的工具和组件库如果没有外部网络接口卡(NIC)来在 IEEE 802.11 无线网络上进行数据包注入,就不完整。列表中的每个项目都是 Offensive Security 团队推荐的,因为它们与标准基于 Android 的移动设备大多兼容。这些外部 NIC 将允许渗透测试人员执行各种无线攻击,例如以下内容:
-
窃听,即监听目标的无线网络
-
捕获网络流量以供以后分析,其中包含可能通过网络传递的机密信息
-
捕获 WPA 握手以尝试执行各种密码破解技术
-
去认证攻击
每个外部 NIC 都包含芯片组,允许 Kali Linux 和 Kali NetHunter 操作系统启用监控模式来执行这些攻击。
以下是 Kali NetHunter 使用 Android 智能手机支持的外部无线网络接口卡(NIC)列表:
-
Atheros - ATH9KHTC(AR9271,AR7010)
-
Ralink - RT3070
-
Realtek - RTL8192CU
-
TP-Link TL-WN722N
-
TP-Link TL-WN822N v1 - v3
-
Alfa Networks AWUS036NEH
-
Alfa Networks AWUS036NHA
-
Alfa Networks AWUSO36NH
-
Panda PAU05 Nano
以下是 TL-Link TL-WN722N 无线 NIC 的图片:
由于其便携性和在 Kali Linux 平台上的易用性,Alfa Networks 适配器在渗透测试人员中很受欢迎。以下是 Alfa Networks AWUS036NHA 适配器的图片,支持 IEEE 802.11 b/g/n 标准和最高速度达 150 Mbps:
总结
在本章中,我们探讨了使用智能手机或平板电脑等手持设备进行渗透测试的好处和便利性。然后我们介绍了 Kali Linux 的移动平台 NetHunter。我们讨论了预装在 Kali NetHunter 平台上的独特工具和实用程序。我们了解了 Android 安全模型并探讨了其安全功能,这些功能旨在帮助保护 Android 用户。我们结束了本章,介绍了如何安装 Kali NetHunter。
在下一章中,我们将探讨渗透测试的方法和阶段。
第二章:了解渗透测试过程的阶段
在信息技术(IT)的早期,人们不需要担心系统中的任何安全威胁或漏洞。随着技术和移动设备的进步,很多人寻求了解如何利用计算系统和网络。互联网的创建是一个重要的里程碑,它改善了信息的共享和可用性,不仅在一个机构内部,而且在全球范围内。随着信息和知识变得更加容易获得,很多人在数字世界中利用它来进行良性和恶性的活动。
想象一个人只是坐在家里上网,研究如何利用另一个人的计算机或网络上的漏洞/弱点。这真的很可怕,不是吗?一个简单的例子是一个在组织内担任行政人员的不满员工,他对网络安全或计算机领域不了解。这个不满的员工可能想在离开公司时对组织造成伤害,比如破坏公司本地文件服务器中存储的数据。如果他们决定在空闲时间研究各种黑客技术,这最终可能会变成一种内部威胁。
在网络安全领域,渗透测试对许多 IT 专业人士来说是一条非常有趣的道路。让这个过程如此有趣的是,渗透测试人员必须发现许多成功利用系统的方法。有时,一个漏洞可能在一个客户或目标系统上起作用,但在另一个系统上却不起作用。这就是渗透测试人员创造性思维最需要的地方。就我个人而言,我喜欢尝试进入一个看起来有点具有挑战性的系统(作为渗透测试人员);如果一切都容易被黑客入侵,那还有什么乐趣呢?
在本章中,我们将涵盖以下主题:
-
在网络安全领域中,什么是渗透测试?
-
渗透测试方法论
-
渗透测试的阶段
-
使用方法或过程的动机
-
进行渗透测试的预期交付成果
让我们开始吧!
渗透测试的需求
在计算机发展的早期,黑客这个词是用来形容那些在计算机系统上有非凡技能的人。这种人通常被称为计算机高手。如今,黑客这个词是用来形容那些利用计算机进行某种恶意行为或对个人、组织或系统造成伤害的人。
随着新的威胁每天不断出现,黑客们装备了一系列工具和资源,对网络安全专业人员的需求非常高。组织意识到他们的资产面临风险,需要保护免受任何恶意行为者的侵害,无论是内部还是外部。组织寻求了解和发现其系统中的漏洞,如计算机、服务器、交换机、路由器、防火墙、终端设备和员工。公司很快意识到需要聘请网络安全专家来帮助提高组织的安全姿态。渗透测试人员的角色就此在网络安全领域中产生。
黑客的类型
如果你问几个黑客他们黑客背后的意图或动机是什么,你可能会得到不同的答案。人们做恶意的事情有很多原因;在网络安全领域也是如此。有些人喜欢为了好玩而黑客,有些人为了钱而黑客,而其他人则是为了对抗一个国家或地区内的政客而这样做。
白帽
白帽黑客在网络安全领域只是好人。他们利用自己的黑客技能和技术来帮助分析威胁,测试系统和网络,并实施缓解措施。
灰帽黑客
灰帽骇客处于 IT 安全的攻击和防御两端。这群骇客利用他们的知识和技能做好事和坏事。
黑帽
黑帽骇客是一个具有非常独特技能的人,利用他们的知识进行恶意活动。
脚本小子
在渗透测试领域开始时,大多数骇客和专业人士通常从一个脚本小子开始。脚本小子是一个不熟练的骇客,他使用其他骇客的脚本和工具,主要是图形用户界面(GUI)工具来破坏目标系统或网络。
自杀骇客
自杀骇客是一个目标是不惜一切代价摧毁目标系统的骇客,即使这意味着受到法律惩罚。
骇客活动分子
正如你可能知道的,活动人士是为社会或政治议程而奋斗的人。有些活动人士反对动物虐待。在数字世界中,有一些骇客活动人士反对各种议程。骇客活动人士是利用他们的技能来推动社会或政治议程的骇客。一个著名的骇客活动人士团体的例子是众所周知的匿名骇客团体。
国家赞助的骇客
这群骇客通常是由一个国家的政府为了发动网络战争攻击和对另一个国家进行侦察而创建的。
渗透测试
有时在面试中,管理团队可能会问面试者:“为什么我们要雇佣一个骇客?”管理层有时认为具有骇客技能的人会是一个巨大的安全风险,这是准确的。然而,另一个问题出现了:为什么他们不雇佣一个骇客?一个具有骇客技能和善良心灵的人可以利用他们的知识来帮助防止内部和外部安全威胁,并发现组织系统和网络基础设施中的任何隐藏缺陷。
道德骇客,或白帽骇客,通常是指利用他们的信息安全专业知识和渗透组织的系统和网络的能力的人。道德骇客或渗透测试人员发现隐藏的漏洞,并模拟真实世界的攻击来测试组织的安全系统和减轻控制。然而,道德骇客/渗透测试人员必须在进行任何安全测试之前获得客户和相关当局的合法许可。
白帽骇客,道德骇客和渗透测试人员是一样的;这些术语可以互换使用。
为什么有人要对网络或系统进行渗透测试?许多组织认为他们的网络和资产对坏人(骇客)是安全的,但实际上并非如此。正如思科系统前任执行主席兼首席执行官曾经说过的:“有两种公司:被黑客攻击过的和不知道自己被黑客攻击过的。”通常,许多组织并不知道他们的网络上发生了安全漏洞,而发现的时间通常是攻击发生后数月。到那时,攻击者可能已经能够窃取大量数据,创建新的后门,并在公司中植入高级持续威胁(APT)。
要打败一个黑客,你必须像他们一样思考。这就是渗透测试人员的角色。渗透测试人员会发现内部安全团队可能忽略的常规和隐藏的漏洞,并对组织的系统和网络进行模拟真实世界的攻击,以利用发现的任何漏洞。在恶意黑客之前发现缺陷和弱点可以让组织在实施预防和减轻技术和网络控制方面占据上风,从而减少组织的攻击面。
蓝队对红队对紫队
许多组织意识到他们公司需要一个网络安全团队。IT 安全团队通常分为两种颜色:红色和蓝色。每个团队都有其独特的目标,而两个团队的总体目标是确保保持健康的安全姿态,并减少信息安全风险。
蓝队
蓝队的目标是什么?他们做什么?为什么需要他们?重视其资产(有形、无形和员工)的组织将确保它们免受恶意黑客的侵害,因为网络攻击可能随时从内部或外部发起。最困难的任务之一是实时检测网络攻击并加以缓解。通常,在信息技术和通信(ICT)部门内聘请一组网络安全人员,以积极加固组织系统和网络基础设施的安全。这个团队被称为蓝队。
蓝队不断监视网络,以防范公司内部或外部的新威胁。然而,对立的红队有不同的目标。
红队
红队的目标与蓝队大不相同。红队专注于不断攻击组织的系统和网络。你可能会想为什么会有这样的目标的团队存在。正如在《Kali NetHunter 简介》中提到的,黑客总是试图以各种原因未经授权地进入另一个人或公司的系统。然而,未经授权地进入另一个系统或网络是非法的,因为它是侵入性的。由于数字世界中威胁不断增长,组织需要不断改善其安全姿态。
红队是外部承包商或内部团队,其目标是不断模拟真实世界的网络攻击。这是为了确保发现所有漏洞,并确定如何才能被真正的恶意黑客利用。红队就像黑帽黑客一样,他们被组织承包来发现所有隐藏的漏洞,利用任何缺陷,并在测试结束时提供详细报告。
紫队
紫队是红队和蓝队的结合。该团队既致力于进行攻击性安全测试,又致力于防御网络攻击者。与红队和蓝队不同,他们既不专门从事攻击性安全,也不专门从事防御性安全,而是为组织提供统一的安全咨询服务。
渗透测试的类型
每当渗透测试人员被指派对目标组织进行模拟真实世界的攻击时,通常会进行三种类型的渗透测试:白盒、灰盒和黑盒。每种类型都将决定哪些资产暴露给内部威胁和外部方,比如黑客。
白盒测试是一种简单的渗透测试,因为在模拟攻击之前已经完全了解了目标系统和网络。这对于渗透测试人员来说是有益的,因为他们会对目标网络有充分的信息,并且可以更好地利用工具和资源来创建、交付和执行可能在第一次尝试时成功的有效载荷。然而,这种类型的渗透测试也有缺点。道德黑客或渗透测试人员很可能不会寻找任何在测试之前提供的知识之外的隐藏漏洞和系统,或者完全了解系统的基础设施。
黑盒测试是指渗透测试人员对目标系统或基础设施没有任何信息或知识。渗透测试人员将表现得像一个真正的黑客,以获取对目标的访问权限。有时唯一提供的信息是公司的名称或者只是网站。道德黑客或渗透测试人员需要做出所有努力来确定组织的类型和行业、网络基础设施中存在的网络和安全设备类型、其员工等。
灰盒测试介于白盒和黑盒渗透测试之间。在实际进行安全审计或渗透测试之前,渗透测试人员对目标基础设施的信息非常有限。
渗透测试的阶段
在对系统或网络进行渗透测试之前,我们必须首先制定参与规则或行动计划。如果渗透测试人员仅仅匆忙进入网络并对目标发动随机攻击,那将不够专业。此外,制定行动计划可以使在决定基于目标漏洞的工具和攻击类型时,工作变得更加简单。
预攻击阶段
预攻击阶段侧重于渗透测试的规划和准备工作,这是在直接与目标系统或网络进行任何接触之前完成的。在这个阶段,渗透测试人员将创建一系列工具、脚本和操作系统,以便在攻击阶段使用。在实际渗透测试之前确定渗透方法是非常重要的,它将为实现每个渗透测试目标创建一个系统化的方法。
在预攻击阶段,我们不能忘记其中一个最重要的目标,即与客户讨论参与规则。这一点非常重要,因为渗透测试人员和客户双方必须就将进行的测试类型、测试持续时间、目标系统和网络、如果进行远程测试-尽可能提供源 IP 地址、侵入性或非侵入性测试等达成共识和理解。
到目前为止,我们已经了解到组织会聘请安全专业人员,如渗透测试人员,来检查其系统或网络中的安全控制并发现任何隐藏的漏洞。有时,组织可能会聘请渗透测试人员模拟对其 Web 应用程序的真实攻击,而另一家公司可能希望对其 Windows 服务器进行安全审计。从渗透测试人员的角度来看,单一的方法并不总是适用于每个目标。这就是渗透测试人员可以根据目标所需的测试类型制定自己的方法的地方。
在攻击阶段之前尽可能获取有关目标的信息非常有帮助。让我们把这看作是一次军事行动;在发动攻击之前,将军或高级官员会派遣一支士兵小组进行侦察,并在不被发现的情况下收集有关目标的尽可能多的信息。这个概念也适用于渗透测试;对目标了解的信息越多,将有助于渗透测试人员发现漏洞和弱点。一旦在目标上发现了漏洞(弱点),下一步就是利用工作漏洞来利用这个漏洞/弱点。这是在攻击阶段完成的。
在渗透测试的预攻击阶段通常会发现信息,如开放端口、设备类型、操作系统、网络布局、安全设备和网络共享。
攻击阶段
攻击阶段对于渗透测试人员来说可能有些具有挑战性。在这个阶段,利用漏洞来获取对目标系统和/或网络的访问权限。有时,一个利用可能无法生效,这可能会有点令人沮丧。拥有一个利用开发环境对于特定有效负载无法破坏目标的情况非常有用。然而,渗透测试人员不应该仅仅依赖于一个入口点,而是应该有多种获取访问权限的方法。这个概念不仅展示了渗透测试人员的技术技能,也展示了目标本身的许多缺陷。
在攻击前阶段收集的有关目标的信息将被用来确定在目标上使用的利用类型。可以使用现有的利用,这些利用可以从Offensive Security 的 Exploit Database(www.exploit-db.com)等可靠的在线存储库中找到,或者使用Metasploit(www.rapid7.com/products/metasploit/)等利用开发框架。
通常,攻击者会破坏目标系统上的标准帐户以减少被发现的可能性,然后他们将尝试提升权限到系统/管理或根权限。在这个阶段,渗透测试人员会在受损系统中植入恶意代码,以创建远程访问的后门,并开始在网络上进行横向移动,以破坏其他潜在目标。
攻击后阶段
攻击后阶段侧重于清理攻击阶段留下的任何物品。这些是在渗透测试期间使用的有效负载、脚本和其他文件。报告通常在这个阶段结束时完成,并交付给客户,概述了执行的各种安全测试及其结果。
渗透测试方法和框架
在本节中,我们将看一下各种渗透测试方法和框架。首先,我们必须了解什么是方法论。方法论是一套应用于研究领域或活动的方法,采用系统化的方法。在渗透测试领域中,另一个重要的术语是框架。渗透测试框架是一个全面的指南,详细介绍了每个渗透测试类别的使用和安全审计工具。
完成第一次渗透测试培训可能会非常令人兴奋,你可能非常渴望去攻击某些东西。想象一下,你在客户的网络上,然后你开始一次性刺激你的攻击,专注于特定一组漏洞或系统。可能会发生很多失误 - 利用可能会击中未在渗透测试协议范围内指定的目标 - 这可能对业务造成不良影响,并且会产生不良的声誉。其次,如果不使用系统化的方法,可能最终无法获得期望的结果。
因此,在渗透测试的攻击前阶段,最好选择一个最适合潜在目标基础设施的方法论或框架。框架将确保渗透测试人员遵循一组特定的指南,以获得期望的输出和结果的解释。
以下是一些较受欢迎的渗透测试方法和框架:
-
OWASP 测试指南
-
PCI 渗透测试指南
-
渗透测试执行标准
-
开源安全测试方法手册(OSSTMM)
OWASP 测试框架
开放式 Web 应用安全项目(OWASP)测试框架被定义为常见 Web 应用程序和安全服务问题的低级渗透测试指南。它被开发为一个最佳实践的渗透测试框架,供任何人在其组织内实施。
OWASP 测试指南 v4 可在www.owasp.org/index.php/OWASP_Testing_Project找到。
OWASP 测试框架概述了五个阶段:
-
第 1 阶段:开发之前
-
定义系统开发生命周期(SDLC)
-
审查政策
-
制定测量和度量标准并确保追踪
-
第 2 阶段:在定义和设计期间
-
审查安全要求
-
审查设计和架构
-
创建和审查 UML 模型
-
创建和审查威胁模型
-
第 3 阶段:开发期间
-
代码演练
-
代码审查
-
第 4 阶段:在部署期间
-
应用渗透测试
-
配置管理测试
-
第 5 阶段:维护和运营
-
进行操作管理审查
-
进行定期健康检查
-
确保变更验证
有关 OWASP 测试框架的更多信息,请访问www.owasp.org/index.php/The_OWASP_Testing_Framework。
此外,OWASP 一直在全球范围内提供网络安全意识和改进网络安全的方法。他们的OWASP 十大是网络应用中最关键的安全风险列表。
以下是OWASP 十大-2017网络应用关键安全风险列表:
-
A1:2017-注入
-
A2:2017-破坏身份验证
-
A3:2017-敏感数据暴露
-
A4:2017-XML 外部实体(XXE)
-
A5:2017-破坏访问控制
-
A6:2017-安全配置错误
-
A7:2017-跨站脚本(XSS)
-
A8:2017-不安全的反序列化
-
A9:2017-使用已知漏洞的组件
-
A10:2017-日志记录和监控不足
关于 OWASP 十大-2017 列表的每个类别的更多详细信息可在www.owasp.org/index.php/Top_10-2017_Top_10找到。
PCI 渗透测试指南
计划或参与任何形式的支付卡交易的组织,如信用卡等,都需要符合支付卡行业数据安全标准(PCI DSS)。 PCI DSS 政策和标准用于保护和改善信用卡,借记卡和现金交易的安全性,同时保护持卡人的个人可识别信息(PII)。
PCI 渗透测试指南概述了其方法中的以下阶段:
-
预参与(规划)
-
参与:渗透测试(发现和攻击)
-
后参与(后攻击)
渗透测试执行标准
渗透测试执行标准(PTES)由七个阶段组成,涵盖了渗透测试的所有方面:
-
预参与互动
-
情报收集
-
威胁建模
-
漏洞分析
-
利用
-
后利用
-
报告
有关 PTES 的更多信息,请访问www.pentest-standard.org/index.php/Main_Page。
开放源安全测试方法手册
开放源安全测试方法手册(OSSTMM)由安全和开放方法研究所(ISECOM)开发和发布,作为如何改进安全测试和实施的指南。
OSSTMM 与先前提到的方法和框架有些不同,该方法还测试组织,运营和电信安全和合规性。
以下是 OSSTMM 中的领域:
-
操作安全度量
-
信任分析
-
工作流程
-
人员安全测试
-
物理安全测试
-
无线安全测试
-
电信安全测试
-
数据网络安全测试
-
合规法规
-
使用 STAR(安全测试审计报告)进行报告
渗透测试的阶段
到目前为止,我们已经了解了各种渗透方法和框架。现在,你可能想知道如何把它们整合起来。在渗透测试培训课程中,你学到的第一件事就是黑客的五个阶段。在每个阶段,作为渗透测试人员/道德黑客,都有要完成的目标;一个阶段导致下一个,直到完成最后阶段:
-
侦察
-
扫描
-
获取访问权限
-
保持访问权限
-
清除痕迹
侦察
侦察阶段是最重要的阶段。这个阶段是关于收集有关目标的信息;渗透测试人员对目标了解得越多,就越容易利用它。在这个阶段,通常进行以下操作:
-
使用雅虎、必应和谷歌等搜索引擎
-
在社交网络网站上搜索有关公司和员工(过去和现在)的信息
-
执行谷歌黑客技术以收集有关目标的更精确信息
-
使用各种工具对目标网站进行足迹识别
-
执行有关目标的域注册信息收集
-
直接和间接的社会工程
扫描
这个阶段是更直接地接触实际目标。扫描阶段帮助渗透测试人员识别网络上的开放和关闭端口、活动主机、系统和网络上运行的服务、操作系统类型以及系统上的漏洞。在扫描阶段,收集到的信息将为渗透测试人员提供目标环境的拓扑视图。
以下是扫描的目标:
-
检查活动机器
-
检查入侵防护系统(IPS)
-
检查防火墙
-
检查开放和关闭的端口
-
检查服务版本
-
检查漏洞
-
创建网络图
获取访问权限
这是利用阶段,渗透测试人员试图攻破目标系统或网络。在这个阶段,渗透可能会创建一个自定义有效载荷,以远程执行或在实际目标上执行。
这个阶段有两个目标:
-
获取访问权限
-
提升权限
保持访问权限
一旦目标系统被攻破,渗透测试人员将尝试创建多个后门访问实例,以防止他们无法再通过漏洞访问系统。一些渗透测试人员利用这个机会植入远程访问特洛伊木马(RATs)或创建一个僵尸网络来控制被攻破的系统。
这个阶段有以下目标:
-
创建和维护远程访问
-
隐藏文件
-
窃取数据
清除痕迹
这个阶段用于清除目标系统和网络上入侵的所有可能痕迹;作为渗透测试人员,我们希望尽可能隐秘,以模拟真实世界的攻击。
这个阶段有两个目标:
-
清除所有日志
-
掩盖痕迹
可交付成果
在渗透测试结束时,会向客户提供一份报告,其中详细列出了发现的所有漏洞。渗透测试报告还包含了每个系统受到的漏洞威胁的证据,以表明概念的证明。这对客户的安全团队实施减轻技术和预防控制措施对他们的基础设施可能是有帮助的。一些渗透测试报告包含减轻技术,而其他一些则没有。这取决于客户和渗透测试服务提供者之间的共同协议。
最重要的是,报告是对所进行的测试事件和行动以及每个测试的结果的全面总结。作为渗透测试人员,我们的报告有时倾向于过于技术化,然而我们的最终报告应该以高管层次编写,非技术人员可以阅读和理解。
总结
在本章中,我们看到了当今世界和未来进行渗透测试的必要性。随着新威胁的出现,我们的资产和数据的安全风险比以往任何时候都更大。我们对不同类型的黑客及其可能的黑客动机进行了简要比较和对比。此外,我们讨论了组织内各种安全团队的必要性,以帮助改善不断增长的威胁格局的安全状况,最后,我们讨论了黑客方法和概念。
在下一章中,我们将介绍情报收集工具。
第二部分:常见的渗透测试任务和工具
在本节中,我们将学习如何收集、存储和处理信息。我们还将看看如何向目标部署有效载荷,并清除 NetHunter 攻击的痕迹。
本节中包括以下章节:
-
第三章,情报收集工具
-
第四章,扫描和枚举工具
-
第五章,获取受害者的访问权限
-
第六章,保持对受害者的控制
-
第七章,清除痕迹并删除目标上的证据
第三章:情报收集工具
让我们开始使用 Kali NetHunter。我们将从探索从目标主机或网络中收集情报的工具开始这个旅程。在本章中,我们将遇到的工具通常是在渗透测试的第一阶段部署的,有可能在后续阶段再次部署。
在本章中,我们将涵盖以下主题:
-
情报收集的目标
-
收集有用信息的工具
-
下载和复制网站
-
Google 黑客
-
社交网络
-
使用 WHOIS
-
nslookup
技术要求
要完成本章,你需要安装 Kali NetHunter (kali.org)。请参阅第一章,Kali NetHunter 简介,了解如何在 Android 设备上安装 Kali NetHunter。
情报收集的目标
在你有效地部署任何用于入侵系统或以其他方式威胁系统的工具之前,你必须了解你能够获取的有关系统的所有信息。根据你所采取的谨慎程度和需要深入了解的程度,这个过程可能需要很短的时间,也可能需要相当长的时间。为了加快这个过程,NetHunter 提供了一整套专门设计用于此目的的工具。
由于本书没有特定的目标,我们将探索一系列旨在收集不同类型信息的工具。我们将假设有大量关于目标的信息需要收集,我们只需部署正确的工具来获取它。请记住,在现实世界中,你可能会被要求根据客户的需求使用三种流行的方法之一来执行渗透测试。考虑到这一点,让我们来看看基于提供的信息量或需要收集的信息量的渗透测试的三种流行方法:
-
白盒:用来描述在测试开始之前向测试人员提供完整信息并且之后可以提出额外问题的测试术语。通常,这种测试用于客户需要执行审计的情况,模拟实际攻击并不是必要的。
-
灰盒:在这种类型的测试中,为了指导测试或控制测试的范围,向测试人员提供有限的信息。例如,客户可能会提供服务器名称和 IP 地址的列表,如果发现,将是你联系客户以获取进一步指示的地方。
-
黑盒:在这种类型的测试中,不提供任何信息,攻击者必须自行获取所有信息。这种测试最接近外部攻击者可能面临的实际环境,必须在过程中获取信息。
在你进行测试之前,了解客户的目标和他们想要的测试类型是很重要的。对于本书来说,我们将假设我们正在进行黑盒测试,并且必须挖掘并获取我们需要的信息,以便进行后续的渗透测试过程。
在渗透测试领域有许多其他类型的测试格式,但我们不会在本书中包括它们。相反,我们将通过限制自己只使用这三种类型来简化事情。
轻松获取信息
正如你可能已经意识到的那样,由于互联网,有大量的资源可供利用,只需要花时间和精力。我们可以利用丰富的知识;然而,拥有这么多信息也有一个非常现实的缺点:如果不小心的话,你可能会感到不知所措。一旦你测试了足够长的时间并熟悉了可能被揭示的信息类型,你就会学会什么是更有价值的。
根据我自己的经验以及多年来我指导的人的经验,我发现学会快速识别有用信息需要一段时间。通常情况下,作为初学者,您会收集比您实际使用的信息要多得多,同时可能会错过一些看起来没有多大用处的项目。随着您对渗透测试中可以采取的不同行动的经验,您将学会识别有用的信息,无论是立即有用的信息还是以后可能有用的信息。
可用信息类型
在您进行情报收集期间保持专注,简要列出您可以发现的信息类型是很重要的。
让我们开始确定我们正在寻找或可能遇到的信息类型,这些信息将来可能会有用。提前设定您正在寻找的信息有助于您了解应该使用 Kali 的哪些工具来达到您的目标。我想知道哪些信息有最大的可能性是有用的,但我也试图对这些信息进行优先排序,并识别那些我可以用各种工具收集的项目。
网络信息
在我们进行渗透测试的攻击前阶段,获取有关网络的信息可能是有用的。我们的目标是确定设备之间发生了什么交易,使用了哪些服务,IP 和 MAC 地址等。
以下是我们可以从网络中提取的信息的简短列表:
-
DNS 信息
-
IP 地址
-
流氓或未监控的网站
-
正在运行的 TCP/UDP 服务
-
虚拟私人网络(VPN)信息
-
包括模拟和 VoIP 在内的电话号码
-
认证系统
-
用户和组信息
-
来自运行服务的横幅信息
-
系统架构
-
主机名
-
用户名和相关密码
组织数据
组织信息是描述和概述企业或组织内部运作和流程的任何信息。这些信息可能采取多种形式,但可以期待组织结构图、商业计划、社交媒体或行政数据等内容。
可能与组织相关的信息包括以下内容:
-
员工信息,如姓名、职位和电子邮件地址
-
公司网站
-
组织员工目录(例如电话簿)
-
公司的实际地址
-
公司网站代码中的评论
-
组织安全政策
这是很多信息,我们可以使用 Kali NetHunter 中可用的内容收集所有这些信息,甚至更多。您可以期待通过运行一些基本脚本和工具来收集大量信息,这些工具将向您呈现信息。
信息收集方法包括以下内容:
-
开源情报(OSINT):OSINT 从各种在线资源中收集信息;这既是一种有效的,又是相对容易的了解目标的方式。OSINT 使用互联网搜索引擎、社交媒体网站、博客、论坛和其他来源收集有关目标的信息。
-
您可能还会使用一些被设计用来从目标中收集信息的被动方法。要被视为被动方法,您不能直接与目标进行交互或查询,这样就减少了被发现的机会,也避免了您的努力受挫。此外,被动方法也合理地模拟了许多用于从公共来源获取信息的方法,也就是所谓的 OSINT。
您可能会想知道为什么在本书中,我们有时会使用不是 Kali 原生工具的工具。这是因为在许多情况下,我要么试图展示正常的做事方式,而不是使用 Kali 自己的工具来完成相同任务的更完整、更高效、更好的方式。
还有其他可用的工具可以验证结果,如果您希望双重检查您的数据。
收集有用信息的工具
NetHunter 有许多旨在收集有关目标的信息的工具,每个工具都提供其他工具所没有的东西。在本书中,我们将介绍 NetHunter 中的许多工具,但不是全部,因为有太多了。我们将介绍更强大的工具和您在工作中最有可能使用的工具;但是,当您进行自己的探索时,您可能会发现其他工具。
在本章中,既有 Kali 中的工具,也有软件之外存在的工具。展示这两种类型的工具的想法不仅是为了演示如何以其他方式获取信息,还有如何结合多个来源的信息来帮助您进行流程。
如果目标(例如组织)有一个网站,那可能是开始进行侦察的好地方。公司的网站提供了大量细节,例如内部联系人的电子邮件地址、电话号码和分机号。如果有一个职业页面,它将提供有关公司内使用的技术的职位空缺的详细信息。网站是组织在数字世界中的代表。
开始时,检查网站以寻找可能有用的信息。注意以下细节:
-
电子邮件地址
-
物理位置
-
职位发布
-
电话簿列表
使用 Shodan
NetHunter 工具箱中最有用的工具之一是用于访问 Shodan 的第三方应用程序。Shodan 是一个强大的搜索引擎,用于查找连接到互联网的设备。使用 Shodan,可以轻松识别目标组织内的多个硬件和软件。
为什么是奇怪的名字?Shodan 得名于游戏 System Shock。SHODAN角色名称是对赛博朋克恐怖主题游戏的主要反派 Sentient Hyper-Optimized Data Access Network 的首字母缩写。
为了解锁 Shodan 的全部功能,您需要熟练地使用关键字。关键字可以是任意数量的不同项目,但在这种情况下,它们通常是制造商的名称和设备型号。在某些情况下,甚至可以是不寻常设备的名称,例如嵌入式设备或物联网(IoT)设备的名称。一旦您有了要使用的关键字的想法,您可以在 Shodan 中使用这些关键字来搜索设备。如果您感到不知所措,甚至可以使用过滤命令来细化您的结果。
Shodan 已经存在大约十年,并且一直在变得更加强大和有效。Shodan 不同于其他搜索引擎,它具有搜索连接到互联网的设备的能力。最初预期它能够找到连接到互联网的计算机和打印机,但今天它有能力定位设备,例如命名的物联网对象。基本上,只要可以从互联网访问或查看,就存在使用 Shodan 进行搜索的可能性。
作为渗透测试者,您会发现您可以非常快速、轻松地找到不应连接到互联网或没有任何公开暴露的设备或系统。如果需要,搜索引擎也可以成为在您自己的网络上查找未经授权或流氓设备的非常有用的工具。
要开始使用 Shodan,您需要访问他们的网站shodan.io进行注册并创建帐户。完成后,您将获得一个独特的应用程序编程接口(API)密钥,输入到 Shodan 应用程序中:
Shodan 网站
要使用 Shodan,您需要执行以下操作:
-
启动位于应用程序列表中的 Shodan 应用程序。
-
如果这是您第一次使用该应用程序,请输入您的 API 密钥。
-
输入关键字搜索,然后点击搜索按钮
几分钟后,Shodan 将返回符合您搜索条件的个别系统列表。与其他搜索引擎类似,单击任何一个结果以获取有关目标的更详细信息,包括端口和服务等项目。在某些结果上,您甚至可以单击与端口号和服务相关的**+**号标志。
如果您在设备上找不到 Shodan 应用程序,这可能是因为您在安装 Kali NetHunter 时没有选择安装它。如果您没有安装它,您可以在安装后使用 Google Play 轻松安装它并搜索 Shodan 应用程序。
Shodan 搜索结果
使用过滤器进行工作
使用 Shodan,您可以单独或与其他一起使用过滤器来筛选和缩小结果,并将搜索重点放在特定的标准上,例如国家、城市、产品或版本。但是,我们可以使用关键字进行搜索;这些关键字包括目标的特定内容。比如说你想要找到思科设备;关键字将是"cisco"。
例如,为了发现运行 Apache web 服务器版本 3.2.8 的网络服务器,您可以使用以下关键字:
apache/3.2.8 200 ok
虽然这种类型的搜索有效,您将了解到通过结合搜索词和过滤器可以进行更有效的搜索。例如,您可以搜索在萨克拉门托运行 IIS/8.5 的组织的所有 Microsoft 网络服务器:
IIS/8.5 hostname:<targetcompany.com> city:Sacramento
使用 Metagoofil
Metagoofil是一个强大的工具,Kali NetHunter 为您提供了这个工具来收集信息。简而言之,Metagoofil 根据您提供的标准从 Google 中搜索并下载信息。收集到的元数据信息来自您指定的目标公司的公共文档(如 PDF、Doc、XLS、PPT、Docx、PPTX 和 XLSX 文件)。它会将这些文件下载并保存到本地驱动器,然后使用内置库从文件中提取元数据。以下图显示了 Metagoofil 在终端窗口中的情况:
那么,什么是元数据?嗯,元数据是描述计算机上的文件等内容的信息。在实践中,元数据的一个很好的例子是附加到保存在硬盘上的文件的属性。如果这个文件是一张图片,我们可以查看它的属性,并且能够看到拍摄照片的设备、颜色深度、大小以及其他信息,例如在某些情况下的 GPS 数据。根据被分析的文件类型,可以显示的信息可能包括用户名、软件版本以及服务器或机器名称。
元数据存在于许多类型的对象中,包括所有类型的文件和数据存储库。事实上,今天许多应用程序和设备默认情况下在它们创建的信息中嵌入元数据。这适用于许多由数码相机和智能手机创建的图像,以及由 Microsoft Word 等产品创建的文件。这些元数据负责存储诸如照片拍摄地点的坐标之类的细节,这些信息可以被检索出来,会揭示出创作者可能希望保密的事情。
使用 Metagoofil 进行信息收集练习
在这个练习中,我们将使用 Metagoofil 从目标域中的文档中提取元数据。
根据您正在运行的 NetHunter 版本,您可能可以立即从命令行运行此实用程序,而某些更新似乎已将其删除。如果您在终端窗口中输入metagoofil命令并收到指示它不可用的消息,请运行以下命令:
apt-get install metagoofil
让我们使用 Metagoofil 来扫描元数据域。为了保持安全,我们将使用kali.org网站,但你可以用你选择的域替换它。
Metagoofil 为我们提供了许多选项来扫描此域:
-
-d:指定要搜索的域。 -
-t:要下载的文件类型。 -
-l:限制结果(如果未指定,将显示默认值,最多为 200)。值太大将需要更长时间,而值太小将提高性能,但会减少结果。 -
-n:限制要下载的文件。 -
-o:保存下载文件的位置。 -
-f:输出文件的名称,其中包含操作的摘要。
在命令提示符下,输入metagoofil -d kali.org -t pdf,xls -l 200 -n 25 -f results.html,然后按Enter。
结果将需要一段时间才能返回,但它将包括类似于以下截图的详细信息,这些信息是从我的搜索中返回的。我对一个不同的域运行了这个,我已经删除了它的名称。请注意用户名称列表、用于创建检索到的文件的软件,甚至电子邮件地址:
在浏览器中查看 Metagoofil 的结果
这些信息将使用-f开关保存到文件中(或应该保存)。
实际结果要长得多,细节也更多,但出于简洁起见,无法全部显示在这里。
使用 Nikto
获取有关目标及其网站更多信息的一种方法是使用 Nikto。Nikto是一个 Web 服务器扫描程序,旨在测试 Web 服务器的各种问题,包括 6700 多个危险文件和程序,检查服务器的过时版本,并识别大约 300 种不同服务器类型的特定版本问题。此外,它还具有检查服务器配置问题、HTTP 服务器选项的能力,并且还将尝试对 Web 服务器和软件进行指纹识别。最后,扫描项和插件经常更新,并且可以自动更新。
请记住,并非每个问题都一定是可以利用的,但通过一些研究,你会发现其中许多是可以利用的。扫描返回的一些数据将显示可用于添加更多信息的信息项,这些信息可能在以后会有用。还有一些检查未知项的检查,这些项已经在日志文件中进行了扫描。
以下截图显示了使用 Nikto 扫描网站的结果:
Nikto 扫描的结果
让我们用 Nikto 做一些练习,展示它的工作原理并提供一些有用的选项。
练习-使用 Nikto
Nikto 是一个命令行实用程序,因此打开终端窗口开始使用该应用程序。
要运行最基本类型的扫描,我们只需输入以下命令并按Enter:
nikto -h <IP address or host name>
这个命令告诉 Nikto 使用-h开关来针对您选择的主机名或 IP 地址。在我的情况下,我选择了设置用于此类活动/练习的网站webscantest.com。请注意,结果将需要一些时间才能返回,所以如果看起来命令已经挂起或者其他情况下不工作,不要担心。
当你得到结果时,仔细看看返回的内容。
在我的结果中,我注意到了指示存在robots.txt文件的信息。我用浏览器打开了这个文件,输入www.webscantest.com/robots.txt,我得到了关于网站的一些简单信息,包括内容类型和文件夹。我还注意到了指示存在登录页面的信息,网址是www.webscantest.com/login.php。这可能是以后进行密码破解尝试时需要注意的信息。最后,我还应该指出,结果告诉我 Web 服务器的类型和版本,以及操作系统,这种情况下是运行在 Ubuntu 上的 Apache 2.4.7。
还包括其他结果,比如漏洞,这将取决于你的目标。
想知道自己是否可以变得更隐秘?好吧,你可以使用-evasion或-e开关并指定一个选项。在我的情况下,我使用1来指定随机编码。这可能有助于愚弄或规避一些侦察机制,足以使你的攻击不被察觉。你可以按照以下方式使用这个选项:
nikto -e 1 -h webscantest.com
我不会在这里列出所有的选项,但我鼓励你使用帮助选项尝试一些其他开关。你可以通过输入nikto -Help来访问这个选项,以显示所有可用的开关。
关于这个工具的最后一个提示:使用-o开关将你的结果保存到文件中,就像这样:
nikto -h <IP address or hostname> -o <filename>
我通常将文件名指定为 HTML 文件,比如test.html。只需将结果保存为这样可以节省以后需要参考有用信息时的时间。
什么是 robots.txt?
有时搜索引擎并不能得到你想要的,因为它们不会显示你可能想要的所有内容。搜索引擎只显示网络上可用信息的一小部分,许多人利用这一缺点来阻止某些内容出现在搜索引擎中。其中一种方法是调整一个名为robots.txt的文件。
网站所有者可以利用robots.txt文件来尝试控制谁可以在网站内看到什么。实际上,该文件放在网站的根目录下,当机器人访问网站以目录内容时,该文件就会起作用。机器人访问网站,比如www.sample.com。但在访问之前,它会检查robots.txt文件是否存在。如果文件存在,它会读取文件以查看是否允许继续,如果允许,会在哪里。在这种情况下,假设robots.txt在www.sample.com/robots.txt中找到,并且具有以下内容:
User-agent: *
Disallow: /
User-agent: *表示该信息适用于所有机器人。Disallow: /告诉机器人不要访问网站上的任何页面。实际上,robots.txt应该被访问网站以目录其内容的任何机器人读取。当它读取文件时,它应该处理指令并相应地做出反应,但让我们指出实际情况。
实际上,关于这个文件有两个关键点需要记住:
-
虽然
robots.txt的目的是被普遍接受,但实际上,机器人可能会忽略你的/robots.txt。这在恶意网络爬虫扫描网站和 Web 服务器以寻找安全漏洞以及垃圾邮件发送者使用的电子邮件地址收集器的情况下尤其如此。所有这些都倾向于忽略该文件。 -
实际的
robots.txt文件默认是可以被任何人查看的。通过使用谷歌黑客等方式找到这个文件的人可以看到网站的哪些部分被限制,然后无论如何都可以浏览那里。
这里的底线是,robots.txt确实按设计工作。只需要一小段恶意软件或简单的谷歌搜索,就可以了解网站的结构,或者一段不尊重该文件并导致潜在问题的恶意软件。这意味着你不应该使用该文件来隐藏信息,因为它很容易被定位、阅读和绕过。该文件只用于建议不应该访问站点的部分;它不会强制执行它们:
robots.txt 内容的示例
使用 Parsero
就 Kali 而言,实际上有一些工具可以查找网站的robots.txt并读取内容。其中一个工具,Parsero,专门设计用来查看文件的内容,特别关注用于阻止机器人访问这些位置的disallow条目。以下截图显示了 Parsero 的操作:
Parsero 欢迎界面
Parsero 读取 Web 服务器的robots.txt文件,查看 Disallow 条目,然后检查位置是否可访问。实际上,文件中的条目看起来像这样Disallow: /portal/ login表示此网站或链接www.chieforiyano.com/portal/logi…上的内容不应该被蜘蛛索引。这似乎非常简单明了,但如果您想收集有关渗透测试的信息,它可能是一个障碍;幸运的是,我们可以绕过这个文件。
有时,robots.txt中的 Disallow 条目中的路径可以被用户访问,他们只需在其 Web 浏览器中输入路径即可。但是,由于robots.txt中可能有许多 disallow 条目,因此可能需要检查许多条目的长列表。Parsero 可用于检查长列表的条目,并查看哪些是有效的,因此您知道要调查哪些路径,而不会浪费时间。
练习-使用 Parsero
在这个练习中,我们将探讨使用 Parsero 的几个示例。
如果您的 Kali 安装中没有安装 Parsero,请使用apt-get install parsero命令,并选择“是”进行安装。
首先,如果我们想要索引一个网站,以查看哪些 disallow 条目是有效的,我们使用以下命令:
parsero -u www.example.com
或者,我们可以使用这个:
parsero -u <website domain name>
其次,如果我们想要使用搜索引擎查看哪些路径是有效的,我们可以修改命令如下:
parsero -u www.bing.com -sb
或者您可以使用以下命令:
parsero -u <website domain name> -sb
在这种情况下,Parsero 将搜索必应以获取结果。
一旦您有了经过验证的目录列表,您可以使用 Web 浏览器或其他工具查看服务器上的路径,以查看可能存在的文件或信息。
使用 wget
可能会发现下载网站的副本进行本地检查并用它来运行其他测试很有用。如果这是你想要做的事情,最简单的方法是使用wget命令,这是一个标准的 Linux 工具,用于从网站检索信息。wget实用程序是一个非交互式下载器。
重要的是要注意,使用wget或类似的实用程序下载网站的技术并不是完全被动的,而是更半被动的。虽然被动信息收集避免与目标的直接接触,因此使过程匿名且不可能被跟踪,但半被动会留下更多痕迹。半被动信息收集更直接地与目标接触,并且可能会在日志中留下信息,这些信息可以被目标分析并揭示活动。关键在于,这些信息是在事后发现的,我们的活动在进行时不会引起注意。
练习-使用 wget
为了简化操作,在这个练习中,我建议您使用一个小型网站或个人网站,因为这将使整个过程更快,因为需要下载的内容更少。但是,如果您确实需要下载一个较大的网站,请注意带宽需求和存储空间需求将相应增加。
尽管我们正在介绍如何将网站内容下载到本地系统,但这里有一些需要牢记的事情:首先,在移动设备上,存储空间可能是紧缺的,这意味着您需要确保有足够的存储空间来存储目标网站的内容。如果空间不足,命令将失败,或者如果您接近耗尽系统空间而没有完全使用它,您可能会遇到设备的其他问题。
其次,请确保,如果您正在执行此操作,并且正在通过蜂窝数据链路执行此操作,如果您有一个数据分配,您将迅速耗尽您的数据分配。
首先,我们想将网站下载到系统上与目标同名的目录中。要做到这一点,在命令行上输入以下内容:
wget -m http://<web address>
-m选项创建网站的镜像。
如果您需要下载整个网站,请使用以下命令:
wget -r --level=1 -p http://<web address>
这个命令下载指定 URL 上的所有页面,使用了-r 和--level=1 参数。组件,比如图片,将包含在下载的版本中。
如果你已经针对一个小网站,这两个命令都不应该花太长时间完成(也许只需要几秒钟到几分钟),你应该会发现内容被复制到你的本地系统。一旦你下载了内容,你可以在你的网络浏览器中打开它们,并执行一些操作,比如查看源代码,看看是否能找到任何关于网站的评论或线索。你也可以搜索文件,寻找可能给你有用信息的关键词或短语。
使用 HTTrack
当然,wget 只是一个常规的 Linux 工具;让我们使用 HTTrack 工具以不同的方式下载网站。这个工具包含在 Kali 中,提供的选项比 wget 本身要多得多。
HTTrack 是一个网站复制工具。它允许一个人使用图形用户界面(GUI)或命令行界面(CLI)来创建一个网站的离线镜像版本,从而实现离线浏览。
HTTrack 还具有更新现有下载站点和恢复中断下载的功能。
让我们尝试使用 HTTrack 下载一个网站。
练习-使用 HTTrack
要使用 HTTrack,让我们从基本选项开始:
-
打开一个终端窗口。
-
输入
mkdir test命令。这将创建一个名为 test 的目录。你可以使用任何你想要的名字;然而,这将是我们存储下载的地方。 -
输入
cd test或者你用于目录名称的任何内容。 -
输入
httrack <网站名称>命令。 -
按Enter。根据你所针对的网站的大小,下载可能需要一些时间。在我的测试中,我使用
www.webscantest.com进行练习。 -
下载完成后,使用文件管理器(工具栏上的蓝色文件夹图标)浏览到文件夹。
-
点击任何文件,适当的应用程序将被启动,比如你的网络浏览器。可能需要一些探索,但你可能会偶然发现一些有趣的东西。例如,考虑我找到的以下页面:
来自目标网站的登录页面
在较大的网站上,你可能希望稍微调整一下你的请求,以限制结果。你可以通过使用-r 开关来做到这一点,就像这样:
httrack -r2 <website name>
在这个例子中,使用了带有 2 选项的-r 开关,告诉它只在网站上深入两层。请注意,开关是小写 r;如果使用大写 R,这将不起作用。
想在运行httrack时获得更多的指导?那么一个向导式的帮助系统可用于引导您完成整个过程。您可以通过启用大写的-W 开关来使用此功能:
httrack -W <website name>
尝试不同的选项;你可以通过使用httrack -h来看到它们的广泛范围。
完成这个命令后,你可以浏览到你创建的文件夹,并查看已经下载的内容。
Google Hacking
在收集信息时,我们不应忽视搜索引擎。在这一部分,我们将专门关注 Google 和一个称为 Google Hacking 的过程。目前,Google 是一个非常强大的工具,可以通过简单的关键字搜索来收集信息,但如果你想更具体地调整搜索以获得更好的结果呢?你是否曾经在谷歌的搜索框中输入关键字或一组术语,希望得到有用的信息,却得到了几页与你寻找的内容几乎无关的结果?如果你有,你并不是一个人面对这个问题,但好消息是,使用 Google Hacking 可以极大地改善你的结果,帮助你获得相关的信息。
Google 黑客(或者有些人称之为 Google dorking)利用特殊关键词构建查询,以细化搜索以收集信息。在熟练和耐心的操作下,完全有可能检索到有用的信息,如密码、配置数据和登录门户。
练习-什么是正确的搜索引擎
为了成功地进行 Google 黑客攻击,我们需要首先介绍所谓的操作符。操作符是用于指导 Google 查找特定时间或格式信息的特殊关键词或术语。操作符可以在任何搜索的上下文中使用,甚至可以串联在一起创建更复杂和有针对性的搜索。虽然我们将讨论每个操作符的正确使用,但我强烈建议你花一些时间与它们一起工作,学习如何在自己的查询中使用它们的不同方式或如何细化你的搜索:
-
Cache 关键词显示了 Google 先前存储在他们的服务器上的网站的缓存版本。
-
使用:
cache:<网站 URL> -
Link 关键词显示了具有指定 URL 链接的网站。
-
使用:
link:<网站 URL> -
Info 提供有关网站的信息。
-
使用:
info:<网站 URL> -
网站限制了位置的搜索。
-
使用:
<关键词> site:<网站名称> -
Allintitle 返回标题中包含指定关键词的页面。
-
使用:
allintitle:<关键词> -
Filetype 用于返回特定类型的文件。
-
使用:
filetype:<文件扩展名> <关键词> -
Allinurl 返回具有特定查询的结果。
-
使用:
allinurl:<关键词>
有了这些关键词,让我们讨论一些示例,向你展示如何使用每个关键词。我将在这里放一些查询,并提供一个描述,如果你自己尝试,应该返回什么:
-
Allinurl 网络摄像头:这个查询将返回任何 URL 中包含网络和摄像头这两个词的组合。
-
Allintitle 病毒描述:这个查询将返回任何标题中包含病毒和描述这两个词的页面。
-
Filetype:xls username password email:这将返回包含关键词username、password和email的任何 XLS(Microsoft Excel 文件)。还可以组合关键词,以制作更精细和强大的查询。
-
Allinurl:nuke filetype:xls:这个查询将查找包含nuke这个词的 URL,然后查找 XLS 文件并返回结果。
如果你对想法感到困惑,请查看Google 黑客数据库(GHDB)。你可以在www.hackersforcharity.com找到这个网站。在这里,你会找到许多简单和复杂的 Google 黑客使用示例,你可以检查、分解和修改,以了解如何更好地利用你的结果。
位置
许多组织倾向于在各种在线地图上插入他们的商业地址,以帮助客户更容易地找到他们的实际位置。诸如 Google 地图、必应地图、Waze 和 MapQuest 等网站帮助每个人在一个国家中找到自己的方向。然而,这也有助于渗透测试人员更快地找到目标组织,如果他们正在进行黑盒测试或者没有目标公司的实际地址。
社交网络
为了收集有关个人的信息,没有太多的来源能与社交网络竞争。这些网络不仅变得非常普遍,而且是一个非常有价值的信息收集工具。这主要是因为这些服务的用户倾向于过度分享信息。对于大多数人来说,在网上分享东西比保守秘密更令人兴奋。当然,正确使用社交网络是与朋友和家人交流的好方法;然而,在某些情况下,它可能提供了大量关于个人和专业关系的信息。
获取有关目标的最常见社交平台的信息如下:
-
脸书
-
推特
-
Google+(最近被 Google 停用)
-
领英
-
Instagram
-
Tumblr
使用 Echosec
Echosec 是我在这些社交网络服务中挖掘数据的最喜爱工具之一。该服务不仅仅用于定位社交网络站点上的信息;它还会从多个站点聚合信息,然后使用地理数据定位帖子的发布位置。是的,你没看错;它可以在地图上显示网络帖子的发布位置,甚至允许你调整时间范围。
以下图显示了 Echosec 界面:
Echosec 的工作部分是因为社交网络要么使用帖子中嵌入的位置数据,要么使用其他功能将其放在地图上(例如 IP 地址)。Facebook、Twitter 和 Instagram 等服务可以在你发布的帖子中包含来自几乎每个现代设备内置 GPS 的信息。虽然这听起来很酷,因为它可以让你向朋友和家人展示你去过的地方,但它也有一个缺点:它允许其他人看到相同的信息。这可以让恶意方看到你工作、玩耍和生活的地方,更不用说你去过哪里了。所有这些信息对于识别个人习惯以及其他个人信息都是有用的。
作为渗透测试人员,您不应忽视这些信息的价值。我们可以通过一个名为 Echosec 的服务检索这些信息,网址为app.echosec.net。要使用此服务,您只需要一个位置和一点时间。
练习-使用 Echosec
要使用 Echosec 分析某个地点的社交媒体帖子,请参阅以下步骤:
-
点击选择区域按钮。在目标区域周围画一个框。
-
向下滚动查看结果。
搜索结果中可能会偶尔出现色情图片。即使不常见,也会偶尔发生。
使用 Recon-Ng
您想加快信息收集和目标总体侦察的过程吗?Recon-Ng 适合您!虽然您确实会通过手动收集信息变得更熟练,因此更快,但是 Recon-Ng 等工具只会提高此过程的速度和效率。因此,让我们更仔细地了解一下这个工具,以便更好地理解它的工作原理。
Recon-Ng是一个强大的工具,旨在模仿称为框架的类似工具的界面和设计。该工具基于一个设计,包括独立模块、与数据库的交互、交互式帮助,并自动完成用户的命令。然而,Recon-Ng 并不是为了与现有框架竞争,而是更多地作为其他已经流行的渗透测试工具的补充。
Recon-Ng 配备了 80 个侦察模块,2 个发现模块,2 个利用模块,7 个报告模块和 2 个导入模块。以下是一些示例:
-
command_injector:远程命令注入 Shell 界面 -
csv_file:高级 CSV 文件导入器 -
email_validator:验证电子邮件 -
mailtester:MailTester 电子邮件验证器 -
migrate_contacts:联系人到域数据迁移器 -
facebook_directory:Facebook 目录爬虫 -
metacrawler:元数据提取器 -
instagram:Instagram 地理位置搜索 -
twitter:Twitter 地理位置搜索 -
dev_diver:Dev Diver 代码库活动检查员 -
linkedin_crawl:LinkedIn 个人资料爬虫
您可以在www.darknet.org.uk/2016/04/recon-ng-web-reconnaissance-framework/上查看 Recon-Ng 模块的完整列表。
获取技术数据
在侦察过程中收集信息时,你还希望尽可能收集尽可能多的技术数据。幸运的是,今天有很多方法可以帮助我们收集信息;许多方法就在你的指尖,内置在你喜爱的操作系统中,而其他方法则需要不同的方法。
使用 WHOIS
WHOIS 已经存在了相当长的时间,但它是一个非常有用的实用程序。
练习 - 从 WHOIS 中获取最多的信息
- 在 Kali NetHunter 终端上,键入
whois <domainname>,例如:
whois usatoday.com
输出将向你显示有关域名注册的所有公开可访问的信息,例如进行注册的人,公司的联系方式,公司的地址以及域名的创建、续订和到期日期:
WHOIS 对 verisign 的结果
域名注册商通常为他们的客户提供隐私选项。这将限制购买者的信息不被公开记录。
nslookup
我们还应该关注的一个技术领域是 DNS,即域名系统,它负责将主机名解析为 IP 和 IP 解析为主机名。这项服务在网络上非常常见,并且在大多数环境中基本上是一个必需的服务。
如果你回忆一下你的网络经验,DNS 是一个包含有关 IP 地址和相应主机名关系的信息的数据库。当客户端希望获取与给定主机名对应的 IP 地址(在一个称为前向查找的查询中),DNS 内部会进行一个过程,其中主机名位于数据库中并返回地址。数据库中的每个 IP 到主机名的关系都称为记录。DNS 中的不是所有记录都是相同的,它们存在许多不同类型,每种类型都会导致不同类型的资源。寻找文件服务器的 IP?那就是 A 记录。寻找邮件服务器?那就是 MX 记录。以下表列出了这些不同的记录:
| 记录类型 | 描述 |
|---|---|
| A | 将主机名解析为 IPv4 地址 |
| AAAA | 与“A”记录相同,但用于 IPv6 |
| MX | 该域的邮件服务器位置记录 |
| NS | 列出域的名称服务器 |
| CNAME | 创建别名 |
| SOA | 显示谁对域名有权威 |
| SRV | 服务记录 |
| PTR | A 记录的反向 |
| RP | 谁负责管理 |
| HINFO | 主机信息 |
| TXT | 简单的文本记录可以用于注释 |
既然我们知道了这些信息,我们该如何利用它呢?这就是 nslookup 发挥作用的地方。Nslookup 允许我们与 DNS 服务器交互,并查询不同的记录类型。执行检索 HINFO 或 TXT 记录的查询可以获得诸如注释或其他详细信息对你可能有用的信息。此外,检索其他记录,如 MX 记录,可能会给你邮件服务器的地址,或者 NS 记录可能会告诉你目标的 DNS 服务器的地址。
运行nslookup需要使用终端窗口或命令行直接发出命令。
在其默认操作模式下,nslookup将返回与主机名对应的 IP 地址,或者反之,取决于你提供的是哪个。例如,通过运行以下命令来查找 website.com 的 IP 地址:
nslookup website.com
它将返回类似于以下内容:
Server: 8.8.8.8
Address: 8.8.8.8
Non-authoritative answer:
Name: website.com
Address: 134.170.185.46
Name: website.com
Address: 134.170.188.221
这里,8.8.8.8是本地主机配置使用的 DNS 服务器的地址。
紧接着这个,我们看到了website.com的信息。在这种情况下,DNS 服务器返回了两个答案,表明该网站使用一种常称为轮询的负载平衡系统。基本上,这意味着当你浏览这个网站时,你将被发送到这两个地址中的一个,并且你的查询将被解析并适当地回答。
还要注意响应中指出的“非权威答案”文本。此响应表示我们正在查询的 DNS 服务器不包含所查询域的完整信息。这个答案通常表示您已经获得了上次由客户端发出的请求缓存的信息。
反向 DNS 查找
通过提供 IP 地址执行反向查找查询是可能的,如下所示:
nslookup 134.170.185.46
这将返回类似以下内容的信息:
Server: 8.8.8.8
Address: 8.8.8.8
非权威答案:
46.185.170.134.in-addr.arpa name = grv.website.com
查找 NS 记录
域的 NS 记录包含该域的权威名称服务器的 IP 地址。检索 NS 记录很简单:我们只需运行一个类似之前的查询,但现在我们包括-type 开关,告诉实用程序仅返回 NS 记录:
nslookup -type=ns microsoft.com
响应将类似于以下内容:
Server: 8.8.8.8
Address: 8.8.8.8
这是非权威答案:
website.com nameserver = ns3.web.net
website.com nameserver = ns4.web.net
website.com nameserver = ns1.web.net
website.com nameserver = ns2.web.net
查询 MX 记录
域的 MX 记录包含处理该域消息的邮件服务器的 IP 地址。当您发送电子邮件到一个域,例如@website.com,邮件被路由到网站的 MX 服务器。
您可以使用-type=mx选项查询域的 MX 记录。例如:
nslookup -type=mx website.com
它将响应类似于以下内容:
Server: 8.8.8.8
Address: 8.8.8.8
这是非权威答案:
website.com mail exchanger = 10 website-com.mail.protection.mailserver.com
查询 SOA 记录
域的权威起始(SOA)记录提供有关域本身的技术信息。可以使用-type=soa 选项检索它:
nslookup -type=soa website.com
Server: 8.8.8.8
Address: 8.8.8.8
这是非权威答案:
microsoft.com
origin = ns1.website.net
mail addr = msnhst.website.com
serial = 2014110802
refresh = 7200
retry = 600
expire = 2419200
minimum = 3600
查询另一个 DNS
Nslookup 的设计将查询主机系统当前配置的相同 DNS 服务器。但是,如果您希望更改nslookup查询的 DNS 服务器,可以使用以下命令:
nslookup website.com ns1.web.net
这个命令将为我们提供对我们之前对microsoft.com的查询的权威答案:
Server: ns1.web.net Address: 65.55.37.62#53 Name: website.com Address: 134.170.185.46 Name: website.com Address: 134.170.188.221
这不仅有助于获取权威信息,还有助于检索某个 DNS 当前缓存的信息。
还要注意 WHOIS 结果的更仔细的检查,权威于该域的名称服务器位于结果的底部。您可以使用从 WHOIS 查询返回的这些服务器与 nslookup 一起使用。
使用 dnsenum
让我们使用另一个内置在 Kali 中的工具,称为dnsenum,来检查 DNS 信息。简而言之,dnsenum 是一个旨在从域中提取 DNS 信息并显示非连续 IP 块的脚本。以下是此脚本的一些功能的简要列表:
-
获取主机地址记录
-
获取名称服务器
-
获取 MX 记录
-
在名称服务器上执行 AXFR 查询
-
通过谷歌抓取获取额外的名称和子域
-
从文件中暴力破解子域
-
计算 C 类域网络范围并对其执行 WHOIS 查询
-
写入
domain_ips.txt 文件 IP 块
让我们快速看一下如何使用 dnsenum。
练习-使用 dnsenum
Dnsenum是一种快速而非常有效的获取与 nslookup 相同信息的方法,而无需跳过太多障碍。
要在其最基本的情况下使用 dnsenum,只需在终端窗口中输入以下命令:
dnsenum <domain name>
这将返回有关记录的结果列表,包括名称服务器、MX 服务器和 A 记录。它还将尝试执行区域传输。
想尝试为相同的名称查询不同的 DNS 服务器吗?使用以下命令:
dnsenum -dnsserver <IP address of server> <domain name>
在尝试查询域的权威服务器时,使用dnsserver特别有帮助。
使用 DNSMAP
了解子域、IP 地址并构建网络图片或地图的另一种有效方法是使用 DNSMAP。该实用程序能够执行多种操作,但让我们现在将其作为一种了解目标子域和相关 IP 地址的方法。
您可以使用 DNSMAP 执行以下任何操作:
-
查找远程服务器
-
查找域名,以便您可以映射非明显/难以找到的网络块
-
使用暴力破解定位内部 DNS 名称和 IP 地址的能力
使用 DNSMAP 来定位子域名,只需执行以下命令:
dnsmap <domain name>
例如,它会显示如下:
dnsmap microsoft.com
还有另一个工具可以有效地从 DNS 中收集信息:Fierce。Fierce与其类型的其他工具一样,但仍值得关注,因为它提供了另一种有吸引力的选择。
Fierce 本质上是一个扫描程序,可帮助定位目标域的不连续 IP 空间和主机名。在许多方面,它旨在收集信息以供 nmap 等工具使用。它定位潜在目标,无论是在目标网络内部还是外部。
要使用 Fierce 对 DNS 命名空间执行扫描,请发出以下命令:
fierce -dns <domain name>
使用实际域名的示例如下:
fierce -dns zonetransfer.me
以下图显示了此示例扫描的结果:
使用 traceroute
Traceroute是使用 ICMP 协议设计的。Traceroute 允许管理员映射数据包从源到目的地的路径。Traceroute 存在于 Windows 和 Linux 系统中。
Traceroute 通过略微增加 TTL 值发送数据包,最初的 TTL 值为1。第一个路由器接收数据包,减少 TTL 值,然后丢弃数据包,因为它的 TTL 值为0。
路由器向源发送 ICMP 超时消息:
有许多非命令行版本的 traceroute,如果您发现它们更容易使用。
摘要
在进行渗透测试时,您可以利用丰富的资源来获取有关目标来源的详细信息,这些资源对您应该很熟悉。在本章中,我们学习了如何研究目标并利用收集的信息来了解受害者。
在下一章中,我们将在信息收集过程中学到的经验基础上,继续通过扫描和枚举来采取行动。
进一步阅读
您可以查看kali.tools.org以获取有关本章涵盖主题的更多信息。
第四章:扫描和枚举工具
在本章中,我们将讨论概述和扫描技术。如果我们回顾一下第二章,理解渗透测试过程的阶段,扫描是黑客的第二阶段。什么是扫描?它使渗透测试人员能够识别网络中在线/活动的设备,并识别开放和关闭的服务端口、服务版本和漏洞;这些只是它的一些好处。Nmap 和 hping3 是一对著名的扫描工具。
此外,渗透测试人员通常需要提取信息,以快速识别目标系统上的攻击点。信息可以是网络共享、设备的路由表、用户和组以及 DNS 记录。这种提取信息的方式被称为枚举。一些强大且易于使用的枚举工具是 nbtstat、nbtscan、enum4linux 和 nslookup。
在本章中,我们将探讨以下主题:
-
确定主机是上线还是下线
-
使用 Nmap
-
端口扫描
-
横幅抓取
-
使用 NetHunter 进行枚举
-
使用 SMB
技术要求
为了完成本章,您需要安装 Kali NetHunter。有关在 Android 设备上设置 Kali NetHunter 的详细说明,请参阅第一章,Kali NetHunter 简介。
扫描
当我们想要利用使用 NetHunter 本地和外部工具收集的信息时,我们通常会从一系列扫描开始。为了探测目标,我们将使用一系列旨在执行不同类型扫描的工具,每个工具旨在使用特定标准对信息进行分组。这些扫描将帮助我们定位有效的主机目标、网络结构、运行的服务和漏洞。扫描过程进一步细化和处理了我们从第三章获得的信息,情报收集工具,以便更好地了解目标,并帮助您选择更好地执行枚举过程的区域(在使用 NetHunter 进行枚举部分中更多内容)。
扫描可以帮助我们收集以下重要信息,这些信息将在后续的利用过程中证明有用:
-
系统的 IP 地址
-
打开和关闭的端口
-
操作系统及其版本
-
WHOIS 信息
-
软件版本
-
MAC 地址
进行扫描
那么,我们所说的扫描是什么意思?让我们来分解这个过程。要更好地理解它,请参考端口扫描部分。在本章的后面,我们将使用 Nmap 工具和各种扫描技术来查看扫描的实际方面。需要执行以下步骤来进行扫描:
-
分析一系列 IP 地址以定位活动系统,即,目标设备将对 ICMP ECHO Replay 的 ping 扫描做出响应。如果目标上禁用了 ICMP,使用 Nmap,我们可以发送探测来检测目标是否会做出响应,Nmap 分析响应以帮助我们确定系统是否在线。这个阶段帮助我们避免扫描不在线的 IP 地址,因此无法进行扫描。
-
接下来,我们进行端口扫描,以针对特定 IP 地址并探测其开放或关闭的端口,这将用于稍后提取信息。
-
更仔细地探测开放的端口,以确定该端口上是否实际运行了服务或应用程序,以及可以提取什么信息。这个过程类似于给公司打电话并按下分机号,然后听语音信箱是否提供了有关该分机号的信息。
-
对开放端口进行漏洞扫描,以识别可能提供系统入口的弱点。请注意,此扫描发现了弱点,但并未利用它们。
在扫描中要有创造性;尝试新的工具和组合以获得不同的结果。NetHunter 包含了许多扫描工具,还可以运行许多其他工具,其中许多可以免费下载和安装。虽然许多专业人士、网站和书籍都会集中使用特定的扫描工具,但不要犹豫尝试其他工具。
故障扫描结果
如果您没有得到列表上的所有内容怎么办?在大多数情况下,您应该能够轻松获得 IP 地址、WHOIS 信息等。然而,如果您发现缺乏实质性或有用的信息,您可能需要回到收集阶段,看看是否忽略了什么,或者需要采取不同的信息收集方法。收集大量信息将使您的评估更加准确,从而在扫描阶段获得更多回报。
确定主机是活动的还是离线的
如果您要尝试进入一个系统,首先需要有一个要检查和探索的目标,这需要找出哪些主机是在线或活动的,哪些不是。
练习-使用 ping
在这个练习中,我们将使用ping实用程序来检查活动目标:
-
在 Windows 上打开命令提示符,或者在 Linux 上打开终端。
-
Ping
-c <ping 次数> <目标 IP 或主机名>。 -
按Enter。
-
查看结果。
如果省略了-c,ping命令将继续对提供的主机名或地址进行 ping,直到您按下Ctrl + C。
如果您从目标处收到成功的回复,则主机被认为是活动的。如果收到请求超时消息,则意味着两种情况之一:目标处于离线状态,或者目标已禁用 ICMP 响应。系统管理员通常出于安全原因禁用 ICMP 响应;如果一个脚本小子尝试进行 ping 扫描,他们会认为目标处于离线状态并继续前进。然而,一个熟练的渗透测试人员会使用另一种方法来确定目标的真实状态。
使用 ping 实用程序有两种主要方法:使用 ping 后跟目标 IP 地址,或者使用主机名。如果您 ping 一个主机名并且没有收到任何响应,可能是您的 DNS 设置有问题。如果 DNS 设置正确,目标可能确实处于离线状态。因此,最好使用 IP 地址进行 ping。
好的,让我们做一个练习,看一下 nmap,这是一个你即将非常熟悉的实用工具。
让我们探索一种使用名为 nmap 的新工具来执行 ping 的不同方法。
使用 Nmap
Nmap(网络映射器)就像所有网络扫描工具中的王者。Nmap 具有许多功能,例如使渗透测试人员能够扫描开放端口,确定服务及其版本,检测目标操作系统和版本,以及检测网络嗅探器和漏洞。
NetHunter 为我们提供了几种选项来执行扫描,但在这里我们将专注于可能是最强大和最知名的一个,名为 nmap。由于其灵活性、强大性、易用性和可扩展性,Nmap 已被证明是跨大多数主要操作系统上非常受欢迎的端口扫描实用程序。多年来,许多渗透测试人员和网络管理员已经依赖这款软件应用程序。如果您以前从未使用过它,您可能会在 NetHunter 中使用它后更加依赖它。
NetHunter 预装了 nmap,就像本书中涵盖的所有工具一样。我建议在本节中,您可以从命令行或 NetHunter 应用程序中打开 nmap。
如果您熟悉 Kali Linux 上的 nmap 或在 Microsoft Windows 上使用 nmap,您会发现打开终端允许您发出与您习惯的完全相同的命令。
练习-使用 Nmap 执行 Ping 扫描
在这个练习中,我们将在本地子网上执行 ping 扫描,以检查是否有活动的主机设备:
- 在 NetHunter 中,通过点击应用程序右上角的三条水平线来打开终端或访问 Nmap:
NetHunter 应用程序中的 Nmap
- 从 nmap 菜单中选择以下选项:
注意 Ping 扫描选项,只需点击它以启用扫描类型
-
输入一个 IP 地址(例如
192.168.1.1)或一个 IP 地址范围(例如192.168.1.1-130)。 -
点击扫描按钮,这将打开一个终端窗口并显示执行的命令和结果:
。
扫描完成后,结果将显示在屏幕上。
如果扫描没有执行,可能需要选择一个接口来执行扫描。如果是这种情况,请从接口下拉菜单中选择接口(例如wlan0),如 nmap 窗口中所示:
显示接口下拉菜单窗口
端口扫描
在确定了活跃系统之后,是时候检查目标上是否有任何开放的端口了。
那么,端口是什么?首先,让我们假设我们网络上的每个主机都有一个分配给它的唯一地址,称为 IP 地址。这个地址是分配给主机的唯一数字,用于区分网络上的其他主机。
当信息从系统发送到系统时,我们也需要关注的是计算机如何接受这些信息。答案是端口。我将使用192.168.1.4作为我们的目标系统的 IP 地址:
192.168.1.4:80
那么,系统上有多少个端口可用?有 65,535 个端口号。一些网络服务使用 TCP 端口来确保它们的数据传递给接收方,而其他网络服务使用 UDP 进行快速通信,但不像 TCP 那样保证快速传递。我们使用的端口范围如下:
-
知名端口范围从
1-1024。这些端口最常用,例如端口80用于 HTTP 流量,所有 Web 服务器默认都开放端口80。 -
注册端口范围是
1025-49151。这些端口被分配和保留给特定的供应商和应用程序使用。 -
动态端口范围是
49152-65535。这些端口在通信期间临时使用。
数据包是在正常网络通信期间传输的信息片段。数据包就像一个信封,里面有发送者和接收者的地址信息,而在数据包内部,就像在信封里一样,是要传递的消息。
以下表格是一些常见端口的示例,但实际上还有更多端口没有列在这里:
一些常见端口的示例
在我们之前的讨论中,我们谈到了 TCP/IP 套件的一些具体内容,特别是 TCP 和 UDP。传输控制协议(TCP)和用户数据报协议(UDP)存在于 OSI 参考模型和 TCP/IP 协议套件的传输层中。这些协议的目的是提供一种机制,从一个设备向另一个设备传递数据。
请记住,三次握手是使用 TCP 协议进行的,而不是使用 UDP 协议。
在 TCP 三次握手期间,会发生以下动作:
-
A 发送一个SYN数据包给 B 以初始化一个会话。
-
B 会回复一个SYN+ACK。B 还会回复一个 ACK,并发送一个 SYN 来尝试建立连接。
-
B 会回复一个ACK来确认。以下图显示了 TCP 三次握手的过程:
TCP 三次握手
TCP 为每个数据段提供序列编号。这确保了接收设备能够按顺序重新组装接收到的比特片段并重建数据。
UDP 与 TCP 有些不同。UDP 在网络上发送消息而不提供任何交付保证,并且不提供任何序列编号。因此,有时消息会以无序的方式接收。
我们需要扩展对标志的知识,其中一些我们已经遇到了。标志在每个数据包中设置,以通知接收者有关数据包的特性以及应该如何处理它。
下表显示了各种标志:
| 名称 | 描述 |
|---|---|
| SYN | 用于启动会话 |
| ACK | 用于确认消息 |
| URG | 意味着高优先级 |
| PSH | 立即发送所有数据 |
| FIN | 通知远程设备优雅地结束会话 |
| RST | 重置数据包用于重置连接。 |
因此,让我们把我们对标志和端口的知识结合起来进行一些端口扫描。正如我们之前学到的,端口是连接和传输信息到系统的一种方式,比如网站流量。通过端口扫描,我们试图确定哪些端口是“打开”的,哪些是“关闭”的。那是什么意思呢?简单地说,如果一个服务端口是打开的,它可以接收进入的流量;然而,如果一个端口是关闭的,就像一扇关闭的门,不允许任何流量进入。
您想要了解每种扫描的优缺点。每种扫描都有利有弊;你需要知道它们的优缺点,这样你才能确定何时使用其中一种而不是其他的。
完全打开/TCP 连接扫描
在所有的扫描中,完全打开扫描非常容易可视化和理解,因为我们已经有点看到了。完全打开扫描在执行任何端口扫描之前,与目标系统建立了 TCP 三次握手,目标是确定它们的状态是否打开和关闭。
这种类型的扫描能够快速确定端口是打开还是关闭,因为它与目标建立了 TCP 三次握手。
当发起者不再想与目标通信时,发起者将发送一个 TCP FIN 数据包,以通知目标它希望优雅地结束会话:
关闭和打开端口的响应
如果目标设备上的端口打开,目标会用一个 ACK 数据包回应。如果端口关闭,会发送一个 RST 数据包。
要执行完全连接扫描,请在 NetHunter 应用程序的 nmap 窗口中从列表中选择Connect (),并输入目标 IP 地址:
TCP SYN 选项
隐形扫描
隐形扫描(有时称为半开放扫描)与完全打开扫描非常相似,只是有一个小的区别,使得它在受害者设备上不那么可疑。主要的区别是不会发生完整的 TCP 三次握手。看下面的图表,发起者(设备 A)会向设备 B 发送一个 TCP SYN 数据包,以确定端口是否打开。如果端口打开,设备 B 将向发起者(设备 A)发送一个 SYN/ACK 数据包。接下来,设备 A 将发送一个 RST 来终止连接。如果端口关闭,设备 B 将发送一个 RST 数据包:
隐形扫描显示打开和关闭的服务端口
使用这种类型的扫描的好处是减少被检测到的机会。
要执行隐形扫描,在 NetHunter 应用程序的 nmap 窗口中从列表中选择(TCP SYN),并输入目标 IP 地址:
TCP SYN 的选择
XMAS 扫描
在这种扫描中,ACK,SYN,URG,RST和FIN标志都同时设置在同一个数据包上。问题在于,由于所有标志都被设置,目标系统可能难以解释它收到的数据包。下面的图表显示了这个过程:
XMAS 树扫描
要执行 XMAS 扫描,请从 NetHunter 应用程序中的 nmap 窗口中的列表中选择XMAS,并输入目标 IP 地址:
从下拉菜单中选择 XMAS 扫描
FIN 扫描
FIN 扫描是指攻击者仅启用 FIN 标志的数据包。如果攻击者向目标发送 FIN 数据包,这意味着攻击者请求连接被终止,但没有建立的连接需要关闭。这将使目标感到困惑。如果目标不做出响应,这意味着端口是打开的。如果目标以 RST 数据包回复,则目标上的端口是关闭的。以下图示了这个过程:
FIN 扫描检测到关闭和打开的端口
要执行 FIN 扫描,请从 NetHunter 应用程序中的 nmap 窗口中的列表中选择FIN,并输入目标 IP 地址:
从下拉菜单中选择 FIN 扫描
空扫描
在空扫描中,攻击者向目标发送一个没有设置任何标志的数据包。目标再次会感到困惑,并且不会做出响应。这将表明目标上的端口是打开的。但是,如果目标以RST数据包做出响应,这意味着设备上的端口是关闭的。以下图示了这个过程:
要执行空扫描,请从 NetHunter 应用程序中的 nmap 窗口中的列表中选择TCP Null,并输入目标 IP 地址:
TCP 空扫描从下拉菜单中选择
ACK 扫描
扫描的另一个有趣的方法是在数据包中启用 ACK 标志。这种技术用于确定网络安全设备(如防火墙)可能执行的任何形式的过滤。
虽然我们还没有讨论防火墙,但稍后我们会讨论。但是,就目前而言,我们可以说防火墙会对来自一个网络到另一个网络(例如,从互联网到您的本地局域网)的流量进行过滤。
在渗透测试期间,我们可能位于组织的外部网络,例如互联网。大多数组织在其边界部署防火墙,位于互联网和其本地局域网(LAN)之间,以帮助防止任何威胁进入或离开其网络。
我们可以使用 ACK 扫描来帮助我们确定我们的目标组织是否有防火墙。要执行 ACK 扫描,请从 NetHunter 应用程序中的 nmap 窗口中的列表中选择ACK,并输入目标 IP 地址:
从下拉菜单中选择 ACK 扫描
调整和优化
当然,到目前为止,我们使用 nmap 的只是冰山一角。Nmap 允许对扫描进行非常高度的定制。让我们看看一些选项。
执行空扫描,从 NetHunter 应用程序中的 nmap 窗口中的列表中选择NULL,并输入目标 IP 地址:
Kali NetHunter 上 Nmap 应用程序中的菜单和选项
在此行中,您可以以不同的方式输入要扫描的端口,例如范围;我们使用-p开关来指示我们正在扫描特定端口,然后跟随端口21、22和45以及目标的 IP 地址:
21,22,45
另一个选项是扫描一系列端口,例如端口1到100:
1-100
想要扫描特定端口并检测操作系统和服务吗?Nmap 会向目标设备发送一系列 TCP 和 UDP 数据报;每个响应都会被仔细分析。结果将与 Nmap OS 数据库进行比较,该数据库包含超过 2600 个操作系统指纹。有关使用 Nmap 进行操作系统检测的更多信息,请参阅nmap.org/book/man-os-detection.html。
如下图所示,在 Nmap 窗口中选中复选框:
OS 检测选项
这里显示的开关比实际更多,但知道您可以组合开关以进一步完善扫描,以获得更好和更有效的结果。
UDP 扫描
在本节中,我们将讨论 UDP 扫描的概念及其对渗透测试人员的好处。我们首先需要了解的是,在 UDP 扫描中遇到开放或关闭的端口时会发生什么。答案显示在以下表中:
| 端口状态 | 结果 |
|---|---|
| 开放 | 无响应 |
| 关闭 | ICMP 端口不可达消息返回 |
在 Nmap 中执行基于 UDP 的扫描很容易。为此,我们从 Nmap 窗口中选择 UDP 扫描选项,如下截图所示:
UDP 扫描选项
尽管这些类型的扫描值得尝试,但是网络管理员已知会对基于其感知性能问题的 UDP 扫描付出较少关注,比如不吸引攻击者。
横幅抓取
横幅抓取是一种识别系统上正在运行的服务的技术。例如,假设您对目标进行了基本的端口扫描,发现端口 80 是开放的,这意味着有一个提供 HTTP 服务的 Web 服务器。但是,如果我们想要确定/检索 Web 服务器平台(IIS、Apache 或 Nginx)及其版本号,我们就必须进行横幅抓取。
使用 Telnet 进行横幅抓取练习
在这个练习中,我们将使用 Telnet 来确定目标系统上的 Web 服务器类型。我们将能够看到它是 IIS、Apache 还是 Nginx。让我们开始:
-
打开命令控制台。
-
在控制台中,输入以下命令:
telnet <target IP address> 80
-
按Enter。
-
输入
GET/ http/1.0命令。 -
按Enter。
-
查看结果。
您的目标可能会有所不同,但结果将以类似以下格式呈现:
HTTP/1.1 200 OK
Date: Mon, 30 January 2017 22:10:40 EST
Server: Apache/2.0.46 (Unix) (Red Hat/Linux) Last-Modified: Mon, 25 December 2016 11:20:14 PST ETag: "1986-69b-123a4bc6"
Accept-Ranges: bytes
Content-Length: 1110
Connection: close
Content-Type: text/html
查看输出,您会注意到在标有 server 的行中,有关服务器类型的信息,即在 UNIX 或 Red Hat/Linux 上运行的 Apache/2.0.46。这些信息看似无害,但对于以后针对 Web 服务器或操作系统的行动是有用的,因为我们对两者都有一些信息。
练习-使用 nmap 进行横幅抓取
现在我们将使用 NMap 来帮助我们检索目标设备的横幅:
-
打开命令控制台。
-
在控制台中,输入以下命令:
Nmap -sV <target IP address or hostname>
-
按Enter。
-
查看结果。
您会注意到,与 Telnet 的结果相比,这些结果有些简略,但它们提供了有关开放端口上正在运行的服务的基本信息。如果您想要更深入的结果,可以按以下方式变化命令:
-
更积极的服务检测:
nmap -sV --version-intensity 5 <目标 IP 地址或主机名> -
轻量级横幅抓取检测:
nmap -sV --version-intensity 0 <目标 IP 地址或主机名>
版本强度使用 0-9 之间的值。较低的数字使用探针,往往更有效地对常见服务进行更广泛的测试。较高的数字使用探针,很少或有时有用。但是,使用较高的数字会增加完成扫描所需的时间,但会增加正确识别服务的机会。
还有另一种使用 nmap 获取有关服务的详细信息的方法,即使用以下命令:
Nmap -A <IP address>
这在早些时候被提到过,作为检测操作系统和服务的一种方式,但在这里也应该再次提到。
使用 NetHunter 进行枚举
一旦您从扫描中收集到信息,例如开放端口和有关运行服务的信息,您可以进行枚举。在此过程中,您可以期望获得更多可以稍后采取行动的信息。如果您幸运并且取得了巨大成功,您可能会发现自己拥有用户帐户、设备主机名、网络共享和服务等信息。值得注意的是,您正在增加自己的可见性,并伴随着被检测到的可能性,因此您希望尽量小心行事,并在行动中谨慎。
以下是在枚举过程中收集到的一些信息的列表:
-
网络共享
-
用户和组
-
运行的服务及其横幅
-
DNS 记录
枚举 DNS
由于 DNS 是您可能遇到的任何网络中的核心服务,因此它被列入您潜在目标的清单是有道理的。DNS 对于渗透测试人员来说是一个宝贵的信息来源,因为可以在其中发现信息。请记住,DNS 负责将主机名解析为 IP 地址,反之亦然,分别称为正向查找和反向查找。该服务在许多网络中起着重要作用,因为它简化了管理,并且使得记住主机名而不是 IP 地址成为可能。该服务还对目录服务的正常运行至关重要,例如微软的 Active Directory 产品和其他产品。DNS 中包含的有关主机和服务的信息使其成为渗透测试人员的一个吸引人的目标。幸运的是,NetHunter 提供了一些用于处理该服务的工具。
让我们看一个非常有效且简单的工具 DNSenum,来开始这个过程。DNSenum被创建用于从目标域中收集信息。收集到的信息以 DNS 记录的形式呈现,其中将包括 IP 地址和主机名等信息。此外,该工具还可以为目标收集主机地址,并尝试从服务该域的 DNS 服务器进行区域传输。
要使用该工具,您需要在终端窗口中执行dnsenum命令,但是您需要选择使用哪些开关来自定义结果。
例如,让我们对www.setset.com域运行一个基本查询,并将结果输出到名为dns.xml的文件中:
dnsenum -o dns.xml test.com
or
dnsenum -o <filename.xml> <domain_name>
一旦该命令完成,我们可以在文本编辑器或专门用于读取 XML 文件的应用程序中打开生成的 XML 文件。返回并写入文件的结果将包括以下内容:
-
主机地址
-
名称服务器
-
邮件服务器
-
尝试和成功的区域传输
关于区域传输,其中一些更有用的信息是关于区域传输。如果区域传输成功,您可以期望获得从 DNS 中提取的记录列表,其中将包含有关主机、服务和存储在名称服务器中的其他项目的信息。然而,在您第一次尝试区域传输之前,不要过于兴奋,要意识到在大多数现代环境中,未知主机的区域传输请求将不被允许。为什么呢?首先,端口53 TCP 必须是打开的,DNS 必须存在,才能成功地连接到系统。其次,大多数 DNS 服务器已被配置为默认拒绝未经授权的区域传输请求。即使可能不成功,尝试仍然是值得的,也值得让 DNSenum 做出努力。
另一个可以执行相同类型功能的工具是 DNSrecon。该实用程序可以执行 DNSenum 无法执行的额外步骤,即检索 SRV 或服务记录以及其他一些记录。SRV是最有趣的记录之一,因为许多应用程序使用它,例如微软的 Active Directory,以及即时通讯、电话应用程序和语音/视频服务等服务。这类记录可以帮助渗透测试人员定位和识别许多有用的项目。
要执行 DNSrecon 的基本操作,请在命令行中输入以下内容:
dnsrecon -d <domain_name>
枚举 SMTP
SMTP是用于传输消息的协议,在邮件服务器和邮件客户端中通常使用。该协议的简单性和可靠性导致了它的广泛采用,并自 1982 年首次引入以来进行了一些修订。
在消息系统的上下文中,SMTP 有两种不同的用法。在邮件服务器的情况下,该协议用于将消息从一个服务器传输到另一个服务器,直到它到达收件人邮箱所在的服务器,然后存储以供以后检索。在邮件客户端方面,该协议用于向邮件服务器发送消息,并利用其他协议从服务器检索消息。
对于渗透测试人员来说,SMTP 可以代表一个宝贵的信息来源,特别是用户名和电子邮件地址。我们将在这里使用的技术旨在查询 SMTP 服务并检索用户名以及域名。你可能没有意识到,但你在电子邮件地址中一直看到这些信息,形式为两部分;@之前的部分是用户名,之后的是域名。
这种格式在遵循模式的用户名环境中是标准的,比如名字点姓氏或者其他变体。例如,john.doe 作为@符号前的名称。
那么,我们如何使用 NetHunter 中的工具从 SMTP 中提取电子邮件地址信息呢?嗯,一切都始于我们从 DNS 枚举中获得的邮件交换或 MX 记录。
根据您使用的工具,结果在屏幕上可能会以稍有不同的方式显示,但您要寻找的是一个(或在某些情况下是多个)特别标记为 MX 的记录。一旦找到这些记录,您要查找分配给每个记录的 IP 地址。如果您有多个 MX 服务器,您将想要查看哪一个分配了最低的优先级数字,因为这将是该域的主要服务器。如果主要服务器不起作用,可以尝试枚举的下一个最高优先级。
在实践中,我们通常选择优先级数字最低的服务器,这在这种情况下是第一条记录。MX 优先级数字在 SMTP 的正常操作中用来指示应该首先使用哪个服务器。数字越低,优先级越高,因此两条记录中一个设置为值1,另一个设置为50,将首先尝试1,然后是50。虽然我们可以使用其他的,但按照邮件路由服务的使用顺序使用它们是有意义的。一旦我们有了这个,我们可以转到结果的第二部分并关注这些行。
练习-使用 NMAP 进行枚举
一旦你有了 MX 记录的 IP 地址,我们就可以开始提取信息(或尝试)。我们可以通过使用 nmap 工具以及其内置的脚本能力来做到这一点。我们可以在控制台输入以下内容:
nmap -script smtp-enum-users.nse 65.54.254.145
如果你仔细看这个命令,你会看到-script开关的添加,它指示 nmap 工具运行一个 NSE 脚本。nmap 的 NSE 组件代表 Nmap 脚本引擎,它允许创建自定义脚本,使用预安装的脚本,或者从第三方获取脚本。在这种情况下,选择的脚本是预安装的,并从 SMTP 服务器中提取名称。
一句警告:许多公司不再托管他们的电子邮件服务器,而选择将它们移交给第三方提供商,如谷歌或微软。如果您看到指向客户以外的域名的 MX 记录,请不要瞄准这些服务器。虽然工具可能有效,并为您提供信息,但您可能没有权限侵入这些服务器,因为它们是第三方拥有的。在这些情况下,客户无法授权您对这些资产进行渗透测试,因为他们不拥有这些资产。请与托管提供商联系,评估这些资产的安全性以及如何在获得许可的情况下继续进行。
练习-使用 smtp-user-enum
我们可以使用的第二个工具是smtp-user-enum,这是一个 Perl 脚本,旨在通过 SMTP 确定用户名称,以及其他任务。要运行smtp-user-enum,打开终端并使用所需的开关发出smtp-user-enum命令。让我们看一些脚本命令的示例。
以下示例使用了与之前相同的服务器地址和 nmap(这里我用<IP>标签而不是完整地址来标注地址,以便更清楚):
smtp-user-enum -M VRFY -U names.txt -t <IP>
smtp-user-enum -M EXPN -U names.txt -t <IP>
smtp-user-enum -M RCPT -U names.txt -t <IP>
您应该注意到这些命令中有一系列开关;让我们看看这三个正在使用的命令。首先,-U通知脚本您要使用包含在names.txt文件中的用户列表。下一个开关是-t,它将信息传递给脚本,指定它将瞄准哪个服务器。最后,-M告诉实用程序它正在运行的模式。让我们仔细看看这三种模式:
-
VRFY(默认):此模式仅通过观察 SMTP 服务器返回的响应来验证用户名列表,当返回有效和无效的用户名时。
-
EXPN:此模式选择接受用户名,如果存在,则展开以显示“username@domain”的全名。
-
RCPT:运行此命令时,它将使用预期用户的全名(电子邮件地址)。如果用户存在,服务器将以代码 250 做出响应,否则将返回代码 550。请注意,许多 SMTP 服务器倾向于禁用 VRFY 和 EXPN 命令,因此 RCPT 可能是最佳选项。
那么为什么要使用 SMTP 命令从 SMTP 服务器中提取和验证信息?简单地说,使用这种方法是从运行 SMTP 的目标中提取有效用户名列表的许多方法之一。每个经过验证的用户名都会提供即时反馈,表明我们已经发现了一个活跃的帐户,应该记下以备后续行动。
使用 SMB
**服务器消息块(SMB)**主要用于在计算机、服务器和其他网络设备(如打印机)之间提供网络和文件共享。但是,SMB 是公共互联网文件系统(CIFS)的前身。
练习-使用 enum4linux
enum4linux 是 NetHunter 附带的一个工具,非常适用于从启用 SMB 的系统中提取信息。使用 SMB 的系统主要是 Windows,但也可以是启用 Samba 的系统,如 Linux 和 UNIX。
该工具提供了几个重要的功能:
-
RID 循环
-
用户列表
-
列出组成员
-
列出网络共享
-
检测主机是在工作组还是域中
-
识别远程计算机的操作系统
如果您已对目标进行了端口扫描,并发现以下端口中的任何一个是开放的,您可能希望尝试使用此工具:
-
TCP 端口
445 -
UDP 端口
137,138和 TCP 端口137,139(TCP/IP 上的 NetBIOS)
要执行工具以检索用户列表,请发出以下命令:
enum4linux -U <target IP>
结果将如下所示:
从 enum4linux 返回的用户列表
要执行搜索可用共享的搜索,我们可以发出以下命令:
enum4linux -S <target IP>
以下屏幕截图显示了命令的结果:
enum4linux 中-S 开关的结果
如果您想获取更详细的信息,可以使用-d开关:
enum4linux -S -d <target IP>
但是,如果您想在一个命令中检索所有信息,您可以简单地使用以下命令。
enum4linux <target IP>
期望有大量信息需要整理,但幸运的是,enum4linux呈现得很好,让您可以浏览其中寻找有用的信息。
请注意,enum4linux提供有关打印机、密码策略、域或工作组成员资格以及许多其他项目的信息。所呈现的信息将取决于系统设置和目标环境。
在 Windows 2000 及以后的系统中,使用此工具进行扫描的结果将取决于两个因素:防火墙设置和注册表设置。
首先,如果在 Windows 系统上启用或禁用了防火墙,您将获得不同的结果。其次,如果系统将RestrictAnonymous注册表设置为 1 或 2(可以设置为 0,1 或 2),则某些信息将无法被访问。
还有一件事:如果系统的所有者简单地禁用 SMB 服务和 NetBIOS,这个实用程序将无法工作。
练习-使用 acccheck
如果您已经从运行enum4linux中检索到用户信息,现在可以尝试基本密码破解。在这一点上可以使用的工具称为acccheck,非常适合破解与 SMB 协议相关的密码。虽然我们不会在以后进行更高级的密码破解,但现在至少可以尝试基本的密码破解。
在这个例子中,我将以用户名user为目标;我可以通过发出以下命令来实现这一点:
acccheck -v -t <IP address> -u user -P /usr/share/dirb/wordlists/common.txt
在这个命令中,开关向我们显示了以下内容:
-
-v用于详细信息 -
-t用于目标 IP -
-u后跟指定的用户名 -
-P用于包含要尝试的密码列表的文本文件
在 NetHunter Linux 中,密码字典通常位于usr/share/dirb目录中。在这种情况下,我使用了 common.txt 文件,这是一个流行密码和这些密码变体的列表。
执行此命令后,将继续针对目标系统上的“user”帐户尝试密码,直到运行完文件中的所有名称或找到匹配项。
在某些情况下,您可能会被目标系统上的“帐户锁定”设置所阻止,该设置旨在在一定数量的尝试失败后锁定帐户。
练习-使用 SMBmap
让我们专注于使用 enum4linux 检索到的共享。这些共享(如果您返回了共享信息)可以使用 smbmap 进一步检查。SMBMap 允许您列出共享驱动器和权限,提供上传和下载功能,甚至执行远程命令。
但是,让我们看看如何使用 smbmap 来识别共享的权限。我们可以通过像这样使用 smbmap 来做到这一点:
-
打开终端窗口。
-
输入
smbmap -H <IP 地址>命令。 -
按Enter。
这将显示目标系统上的共享列表以及它们各自的权限。请记住,您在没有远程系统的用户名或密码的情况下查看这些内容,因此您可能看不到所有内容。如果我们想使用或尝试使用一组凭据来查看更多内容,我们可以这样做。让我们通过使用user作为用户名和user作为密码(从我们在 acccheck 尝试中收到的内容)来做到这一点。
在这里,我们将使用前面的命令和这些凭据。
smbmap -u user -p user -H <IP address>
根据帐户的权限,您可能会看到更多信息。正如您可以确定的那样,-u和-p标志用于在执行命令期间定义要使用的用户名和密码。让我们通过向此命令添加更多内容来进一步进行:
smbmap -r -u user -p user -H <IP address>
在这个最后的例子中,-r开关显示了有关每个共享的详细信息,它在磁盘上的位置以及分配给它的权限。再次强调,您用于执行此命令的帐户将决定显示多少信息。
总结
扫描和随后对目标的枚举是入侵系统的重要步骤。通过这个过程,您将了解环境,哪些端口是开放的,以及可能从这些端口背后的服务中提取的信息。这些信息将帮助您比以往更好地和更准确地规划下一步。
扫描将告诉您活动目标的位置,以及哪些端口已经被打开,而枚举则将您移动到尝试提取有用和有意义信息的下一步。使用诸如 nmap、nslookup 和 smtp-user-enum 之类的工具,可以揭示有关主机及其周围网络的用户、组和其他信息。
在下一章中,我们将探讨通过发现漏洞来获取对目标系统的访问权限。
进一步阅读
查看以下链接,了解本章涵盖的主题的更多信息: