6.2 本地的无线侦察

虽然我们之前就试过通过自己电脑上的Meterpreter客户端访问被攻击主机上Meterpreter的服务端,Meterpreter可以偷偷地授权我们访问被攻击主机的本地系统。不过,我们的兴趣不在于这个被攻击的主机本身,而在于借助这个被攻击主机的“桥”,去探索和攻击它所在的网络。那个网络对我们来说是无法访问的,但对于这个被攻击主机来说,却可以合法地访问,所以只要它回到它所在的公司网络环境中,就同时给了我们访问其公司网络的机会。当被攻击主机回到公司,它又恢复了客户端的身份,不同的是,这时的客户端有两层含义:一层是对于它公司的网络,这台主机是个客户端;另一层含义是,对于“入侵服务器”上的Meterpreter服务端,它上面被我们偷偷植入的Meterpreter客户端也让它具有了客户端的身份。

使用Meterpreter工具访问被攻击主机,我们可以运行一个shell命令,并进行无线网络的侦察(reconnaissance)。在这一步里,我们可以列举出被攻占主机上的配置(configuration)和它系统中我们关注的无线参数。如有几个无线接口、每个无线接口的使用情况、现在配置中首选连接的网络(preferred network)是哪一个,以及其他敏感的信息细节。首先,我们依次使用Meterprecer工具中的sysinfo命令、getuid命令以及idletime命令,检查一些关于系统的基本信息。

通过这些远端主机的基本信息,我们可以尝试升级通过getsystem和getprivs命令升级我们的系统权限:

在Meterpreter工具中,权力选项称为“技能”,在这个例子中,选择第1个“技能”,Meterpreter工具的getsystem命令可以让我们获得在Widnows 8上管理员的访问权限。在Windows 8操作系统中,几乎没有什么已知的破解工具可以用一类进行权力升级和躲避“用户账户控制”(User Account Control,UAC)的审查,所以“用户账户控制”在被攻击系统中通常都是禁用的。不过,即使没有访问该主机的特权,我们也可以从被攻击主机上进行各种浏览和获得不少数据信息,但是在改变系统设置,并拿到一些敏感认证证书时,我们的访问权限也受到了部分限制。

接下来,我们可以指导Meterpreter直接使用Windows 8自带的cmd.exe程序,cmd.exe程序本来就是Windows 8的shell程序,所以使用cmd.exe可以使我们能够与系统进行交互操作。

注意

在Meterpreter-spawned工具中,通过shell命令就可以调用cmd.exe。在shell中,所有命令返回到屏幕(console)两次。在下面的例子中,为了使界面清楚,我们忽略了多余显示出来的重复命令。

从shell命令的界面中,我们可以在系统目录间随意转换,从中可以查看目录和基本文件的内容,在查看结束后,在Meterpreter工具中输入“exit”命令就可以下载所需要的文件。

在开始使用被攻击者的无线接口来攻击其他网络之前,我们要先确定一下哪个接口正在使用,以及这个接口的配置是什么。最好的情况是,发现我们所“占领”的这台主机当前正在使用一个有线的接口进行网络的连接操作,并且该主机有无线接口,且无线接口可以使用,但却没在使用。要检测这样的网络连接参数,以及这些网络接口是否在使用,可以通过Windows自带的ipconfig命令。

注意

在本章中使用的命令,其显示结果的例子都已被修改,主要为了显示上的简洁,删除多余的回车换行 [1] (carriage return)。所以你在实际使用中看到的例子,和这里显示的例子会略有不同,除了回车换行之外,在每个标题和随后的数据之间,也会为了清楚起见,加入一些换行符。

在这个例子中,你可以看到无线局域网适配器是在“连接断开”(media disconnected)状态,而以太网适配器配置上配置了一个IP地址,说明被攻击者连接其公司网络所使用的适配器是有线接口,而没有使用无线接口。你可以通过Windows自带的netsh命令搜集关于其无线网卡上的更多信息:

“netsh wlan show interfaces”命令输出的是和被攻击主机有关的一些附加信息。比如接口的“全局唯一标识符”(Globally Unique Identifier,GUID [2] ),以及其他描述信息,通过这些信息,我们可以看出被攻击电脑所用的网卡芯片组是“Intel Centrino Advanced-N 6205”。如果接口正在使用,那么命令输出的“状态”(State)显示的是“已连接”(connected),那么下面的附加信息就会显示出“服务集标识”、“基本服务集标识”、无线协议类型(比如802.lla、b、g或n),以及认证及加密数据包的信息,同时也会显示出信号强度的百分比值以及发送和接收的速率。

我们还可以收集更多与驱动程序相关的详细信息,包括驱动程序的创建日期和能力等:

在上面“netsh wlan show drivers”命令的输出格式中,我们最感兴趣的就是“类型”(Type)那一行中的缩写,这里显示的是“本地Wi-Fi驱动程序”(Native Wi-Fi Driver)。这表示这个无线网卡驱动程序是一个“本地”的Wi-Fi驱动程序,这意味着这个驱动程序是基于NDIS6.2规范(网络驱动程序接口规范)编译的,所包含的重要功能都是基于比较过时的“肥”(fat)驱动程序,并且这种驱动程序也可以在Windows 7或Windows 8上使用。

现在,我们知道了,原来这个被攻击的客户端主机所使用的无线网络接口是“本地Wi-Fi驱动程序”,我们可以在这个被攻击的主机系统中再翻翻看,看是否能从其主机上找到它的“偏爱网络列表”中所有曾经访问过的网络信息。

从“netsh wlan show profiles”命令的输出中,我们可以确定所有的“个人定制”(profile information)信息,这些信息都是通过“组策略”(group policy)继承下来的(这些信息在上面的运行结果中并没有显示出来,读者可以通过在自己的计算机上运行该命令看到实例的效果),每个用户都有自己的“个人定制”文件,并且其文件名一般会与网络的“服务集标识”一样。如果在上面命令中指定了名称,那系统就会显示出这个用户“个人定制”选项里的附加数据。

在这个例子中,“POTAGE”这个SSID的“个人定制”信息显露无遗,从中我们可以看到一个开放的网络环境,连安全密钥也没有配置。下面是一个缩短后的例子,它是使用了加密和认证的另一个无线网络例子,作为参照,其显示结果如下。

在这个例子中,一个叫“somethingclever”的“个人定制”信息表明了这个无线网络配置了“Wi-Fi保护访问下的预共享密钥版本2”(WPA2-PSK)的网络认证,使用的是AES-CCMP加密算法。其实密钥就在这个“个人定制”文件中,但是没有显示出来。只有用管理员账户访问这个Windows主机时,我们才能显示出明文的密码来。显示效果如下。

作为一种手工从“被占领主机”上搜集Wi-Fi数据的替代工具,我们还可以使用Meterpreter工具调用“post-exploitation wlan_profile”模块进行搜集。该模块的开发者网名是“@theLightCosine”。

WPA2-PSK密钥的泄露

在使用WPA-PSK和WPA2-PSK这两种认证方式的网络里,维持“预共享密钥”自身的保密是其重中之重,而对它的威胁之一,就是对“预共享密钥”的挑战。许多安全防护组织都采取了措施,防止网络中的用户泄露“预共享密钥”。比如不允许直接从工作站访问网络,或不能通过客户端管理类似于“活动目录组策略”(Active Directory Group Policy)等软件。

然而,任何一个用户,只要他在他的工作站上可以以本地管理员的身份具有运行一个软件的权限,那么他的工作站就可以在访问网络的时候还原“预共享密钥”,或被动地解密来自网络上的加密数据包。此外,一旦某个管理员用户获得“预共享密钥”,他就可以与本机器上任何其他用户分享这个密钥,甚至包括把该用户的认证信息发布到网上。

即使是嵌入式设备,也很容易泄露“预共享密钥”信息。最终,所有加入到WPA2-PSK或WPA-PSK网络的设备都需要至少保存网络认证证书信息,这个信息可以“从设备”运行的内存或配置文件中提取出来。

获得了本地客户端的信息之后,我们可以继续下一步,那就是攻击那台“我们已成功占领主机”功率覆盖范围内的本地网络。

[1] 在打字机中,“回车”和“换行”是两个完全独立的功能。而计算机中,将二者合二为一,但在一些原始的文字处理软件中,特别是一个文字处理软件处理由另一个文字处理软件生成的文件时,还能看到因二者的处理不同,而导致界面显示混乱的现象。——译者注

[2] GUID,即Globally Unique Identifier(全球唯一标识符),又称UUID(Universally Unique Identifier)。GUID是一个通过特定算法生成的长度为128位的二进制数字标识符,用于唯一地标识某一个产品。——译者注