6.1 攻击的准备
要攻击一个对我们实施“隔断”策略的网络,对于这个网络,我们是一个“air-gap”主机,所以即使是再高水平的黑客,也是“巧妇难为无米之炊”。但是现在,我们发现了一个可以合法进入这个网络中的客户端,那么“架桥过隙”式攻击就成了当务之急,首先,我们通过某种方法,确定了我们要攻击的客户端就在某个无线热点所在的区域内。然后,我们建立起发动攻击的基础设施,如图6-1所示。在这里,我们(即图中“Attacker”)将在“热点”环境(即图中“AP SSID:POTAGE”)中定位好事先要攻击的主机系统(即图中下边的“Victim”),在这个客户端返回到他自己的公司网络环境(即图中“AP SSID:VOIP”)之前,我们需要在他的电脑上开启一个“远程访问进程”(remote access process),该进程即使在他(即图中左边的“Victim”)回到他们公司的网络环境之后,仍可以与我们(即图中“Hack Server”)连接,并授权我们访问他们公司的内部网络(即图中“AP SSID:VOIP”)和附近的各种资源。
作为我们远程访问的一种方法,我们将利用“Metasploit框架”(Metasploit framework)中“Meterpreter有效载荷”(Meterpreter payload)机制进行攻击。在“被占领主机”(comp-romise computer)的Windows操作系统上,通过手动或自动交互的方式使用“Meterpreter有效载荷”可以显示出巨大威力,在攻击成功后,攻击者可以在“被占领主机”上访问文件系统、注册表,在“命令提示符”中运行shell命令,开启系统进程等操作。在利用“Metasploit框架”中,要使用“Meterpreter有效载荷”机制,仍然还是使用在第5章中已多次使用过的msfconsole工具。在我们的“入侵服务器”(Hack Server)平台上,我们将启动Metasploit的msfconsole工具,并启动Meterpreter处理程序,显示效果如下所示。
♥ 提示
有关Metasploit如何运行和运行中有什么疑问,请参阅第5章的内容。
♥ 提示
在上面Metasploit框架下msfconsole工具的例子中,“LHOST”参数指定所使用的无线网络接口,也就是攻击者的系统将用来从Meterpreter的会话[1]中监听和接受“进接口”的连接。如果该值指定为0.0.0.0,则表示Metasploit将接受攻击系统上任意接口上发来的连接。
msfconsole的提示符停留在最后一行,等待Meterpreter客户端连接到系统。在整个攻击期间,我们都把这个进程放在一边,让它处于运行状态即可。对应于上面的TCP连接,就是服务端处于“监听”状态,一旦有Meterpreter客户端的“连接”,则新建一个线程,在新建线程中“接受”客户端的“连接”,然后进行数据“接收/发送”通信,最后双方“关闭”连接。但整个主线程则一直处于“监听”状态,所以上面的msfconsole只需要放在那里,不再需要用户的干预。
下一步,我们要做的就是准备发动“Meterpreter有效载荷”攻击的“原材料”,即创建Meterpreter客户端中要发送的有效载荷,并最终将这些内容发送给被攻击的目标主机。由于许多“防病毒”(antiviru)软件会把Meterpreter的客户端识别为恶意软件,所以我们需要执行一些额外步骤,把可执行文件重新以另一种形式编码,从而避免”防病毒”软件的检测。一个不错的选择就是使用同为“Metasploit构架”中的另一个程序msfpayload,这个工具所生成的可执行文件中,使用的是另一个由Christopher Truncer所发明的机制,这个机制在躲避“防病毒”软件的检查方面,具有更好的检查效果。除此之外,Veil是一个基于Python菜单驱动(menu-driven)的工具,通过这个工具编码生成的二进制可执行文件中,使用了好几种技术,这些技术都可以较好地躲避“防病毒”软件的扫描。这个Veil的下载地址是https://www.veil-eavsion.com 。也就在本书的写作过程中,Veil系统官方支持还只能用在Kali版的Linux分布式操作系统上(http://www.kali.org),但实际上,该系统还可以在现代较新的Ubuntu版Linux分布式操作系统上使用。
要下载Veil系统,我们使用git下载工具克隆一个GitHub的储存库(repository)。下一步,我们修改Veil的目录,然后运行Veil.py这个脚本文件,这将生成该系统的菜单界面,其显示效果如图6-2所示。
Veil系统在生成可执行的有效载荷方面,为用户提供了好几种选择。每种选择都可以较好地躲避“防病毒”软件的恶意程序扫描,包括将一个可执行文件编码成一个PowerShell的脚本,或者是使用PyInstaller或Py2Exe程序生成Python的可执行文件。在下面的这个案例中,我们将使用Viel生成Python的编码机制。
先在Viel的菜单界面上输入菜单项所代表的那个“有效命令”(available command),然后按回车键。在这里,我们选择其中的list命令列出“可用的‘语言/有效载荷’攻击方式”(list avalialbe Lanauage/playload);我们使用python/AESVirtualVlloc“有效载荷”攻击方式,如图6-3所示。
选择完编码机制之后,Veil提醒我们生成shellcode代码。默认情况下,生成的将是Meterpreter下的reverse_ccp的shellcode有效载荷。我们保持默认的设置,使用IP地址和端口号都是“入侵服务器”所提供的IP地址和端口号,如图6-4所示。
遇到提示的时候,我们输入一个名字,该名字将作为生成编码可执行文件的文件名,该文件名不需要扩展名。假设我们输入“potage”,然后选择PyInstaller作为可执行文件的生成器。在可执行文件创建成功以后,Veil显示了一个编码过程的总结信息,以便提醒用户。在提示信息中包括了exe文件、py文件的输出路径,如图6-5所示。另外,Veil也提醒我们不要上传这些创建好的可执行到任何带有在线杀毒扫描的网站或提交到杀毒软件中进行扫描测试,这也是该软件在每个许可证书(license)中明确限定的。我们按回车返回到Veil的主菜单,然后输入exit命令退出Veil程序。
最后,我们将生成的potage.exe可执行编码文件复制到USB接口的U盘中,这个文件将在后面的“热点攻击”中使用。使用配套基础设施组件,在攻击完成之后,我们将准备开车去的“热点”的位置部署上去,静待目标出现并使用。
6.1.1 利用“热点”环境进行攻击
虽然有好几次机会都可以用来利用“热点”环境进行攻击,不过,这次我们打算把重点放在攻击“客户端下载会话”(HTTP download session)这个漏洞上,通过“I-love my neighbors”虚拟机的环境(详见第5章中的介绍)进行漏洞检测,并准备把上一节中生成的potage.exe可执行文件,以及其他附加的文档,采用“客户端下载会话”攻击的方式,通过HTTP协议“植入”到用户的客户端中。
重新启动I-love-my-neighbors的虚拟机以后,我们需要为我们以后的攻击做一些设置。首先,我们重新配置设备,仍然使用“I-love-my-neighbors”默认的“服务集标识”名称“victor-timko”配置作为“热点”的名称。好了,部署好无线“热点”以后,“热点”覆盖范围内的用户将在漫游的时候自动找到我们这个“热点”,这既取决于我们的信号质量,也取决于他本地无线网卡的质量。如果他们的无线终端在无线连接的配置文件里将连接方式设置为“自动连接”(automatically reconnect),那么当我们的“热点”添加到他的Windows中的“附近无线站点列表”中时,这对我们来说将是一个非常好的状况。不过,需要记住的是,“服务集标识”是区分大小写的,所以如果你要冒充被攻击客户端的热点环境,就一定要输入一个完全相同的“服务集标识”名称。
从I-love-my-neighbors服务器上的shell命令输入框中,我们可以通过vi命令编辑/etc/hostapd/hostapd.conf.def文件,主要修改的内容是,将其中原来默认的“服务集标识”改为新的标识。即将“SSID=victor-timko”改为“SSID=POTAGE”,这就对应于图6-1中下面的那个AP接入点。
为了实施攻击,我们将在I-love-my-neighbors服务器上使用replaceExes.pl服务,每次当客户端访问网页的时候,我们的AP接入点将会偷偷将/var/www/setup.exe文件,在客户端的浏览器通过HTTP协议下载可执行文件的时候,将其注入到客户端的主机里。在最后一步,由于setup.exe文件其实并不是我们真正想要的,所以我们还会用前面准备工作中,用PyInstaller生成的potage.exe文件代替这里的setup.exe文件。具体的操作就是拿出之前保存potage.exe文件的U盘,然后通过如下格式的命令完成替换操作。
下一步,我们运行neighbor.sh脚本,在这个脚本中,会指示程序使用无线网卡的wlan0接口,“I-love-my-neighbors”虚拟机的以太网卡接口eth0,并且服务文件的名字是刚编辑的replaceExes.pl。当我们要攻击的这个客户端漫游到这个冒名顶替的AP接入点时,我们就可以从控制台上看到有状态信息出现。当然这里的客户端还是相对于我们的AP接入点“POTAGE”而言的,其实这是一个完全独立的笔记本电脑主机。
接下来,我们等待这个要攻击的客户端下载并运行我们蓄意专业为他安排的恶意可执行文件,就是上面的那个potage.exe文件。其实,不难想象,我们的“热点”也是冒名顶替的,而且在现在这个“羹美食品”餐馆里,还有一个名正言顺的正牌同名“热点”也在工作,很有可能我们要攻击这个主机因为离那个热点近,而因为那个“热点”的信号更强而实际连接上了正宗的“热点”。所以如果这个时候,你没有耐心这样傻等,那就使用“I-love-my-neighbors”虚拟机上的第二块无线网卡wlan1,利用“拒绝服务”攻击技术让正宗的“热点”暂时“休息一会”,这样可以让被攻击的主机无可选择,从而加速被攻击主机漫游的过程,这个过程如第3章所描述的那样。终于,被攻击主机就范了,它连到了我们的AP接入点“热点”上,并且开始读取网页,借此机会,我们在它通过HTTP下载任何可执行文件的时候,要下载的可执行文件偷偷地被potage.exe文件所取代,整个过程都是透明的,客户端也无从察觉。与此同时,这个“入侵服务器”上,一个Meterpreter会话偷偷地打开了,这之后,我们可以随时连接具体会话。具体过程如下所示。
现在,我们已在被攻击者的客户端上“植入”了Meterpreter工具,并且具有了随时访问它系统的能力。接下来我们要讨论的技术分别是如何控制客户端、在被攻击的电脑上建立一个持久的立足点,然后利用被攻击电脑控制那个我们无法使用,但他却可以访问的远程无线网络,达到“架桥过隙”的初衷。
6.1.2 控制客户端
一旦可以访问到客户端主机上的Meterpreter服务端[2],我们就可以安装一个永久的系统“后门”(backdoor)机制,以后这个客户端系统在离开当前“羹美食品”这个“热点”环境后换到新的网络中,或者重启了系统后,我们仍然可以方便地重新获得系统的访问。Meterpreter系统中,有一个名为persistence.rb的脚本可以让这件事易如反掌。只要运行该脚本,以后只要这个被攻击客户端上网,那么这个后门就会自动连接攻击者的Meterpreter系统。
首先,我们先运行一次不带参数的persistence.rb脚本,在没有参数的情况下,由于脚本不知道要干什么,就只能把当前所有可能的参数选项列出来,以供参考。接下来,我们运行persistence.rb脚本,使用的参数使得用户在登录的时候,会以每30秒一次的频率与攻击者“入侵服务器”建立连接。
通过使用Meterpreter的persistence脚本,被攻击主机会自动反向回连“入侵服务器”的指定端口,端口就是上面参数中指定的nPort值。好了,终于完成了各项工作,这时,我们可以停止“热点”的“模拟攻击”,让这个被攻击的客户端连回合法的“热点”上,进行其原来的正常上网活动。剩下的,就是等待它最终离开“羹美食品”网站,在它回到自己的企业网络后,再进行下一步攻击。
- 这里的会话、监听、接受、连接等都是TCP连接中的专业术语。在TCP连接中,客户端只需要连接、发送/接收、关闭三种主要操作,而服务端则依次监听、接受、发送/接收、关闭四个操作。——译者注
- 在本书中,要攻击的主机相对于无线网络的AP接入点,所以它一直是“客户端”的身份,只有我们完成了对它的恶意攻击,并造成了破坏,才是我们理解的“受害者”,所以本书在翻译的时候,更多的使用“客户端”,而不是“受害者”。但作为网络的客户端,同时为我们提供了服务,所以在我们的视角,它成了服务器,所以这一句说是“客户端上的服务端”。——译者注
本书评论