5.3 攻击连到AP接入点上的客户端
作为一个AP接入点,由于向客户端提供网络服务,这个时候,如果你要攻击客户端,似乎也不是很难的事。换个角度,如果你加入到一个网络中,你的身份和其他的客户端一样,你也只是一个普通的客户端,那么这个时候难度就大很多了。然而事实上,有很多技术都可以仅仅是通过应用,就达到在网络上攻击其他的客户端的效果。这些技术比如设置DHCP服务器,再比如透明地通过iptable作为代理服务器等等。所以在这种情况下,应用这些技术,你可以滥用权力,与合法的服务提供者争夺资源。还可以针对你的目标主机发动各种类型的攻击,以使和你处于竞争地位的服务器处于“拒绝服务”(denial of service)的状态。
在这一节中,我们将在基于Ubuntu的操作系统上,使用wlan0无线网络接口,攻击那些连接到“all you base”网络上,在第4章中提到的那些使用WPA密钥认证的客户端计算机。
5.3.1 连接上网
首先,我们要将我们的无线网卡连接到目标网络上。完成这样的操作,我们可以使用图形化的“网络管理”(NetworkManager)工具进行连接,也可以从命令行配置网络接口。我们可以把所有可能会干扰我们连接网络过程的程序都停掉,这包括“网络管理”程序本身、dhclient程序和wpa_supplicant程序:
下一步,我们创建一个小的配置文件,该配置文件可以让wpa_supplicant程序运行连接到缺乏抵抗力的网络上。该配置文件在最小配置内容的情况下,如下所示。
下一步,运行wpa_supplicant程序,该程序将关联并认证我们的无线网卡。
现在,作为该网络上一个正常的客户端,我们也得到了一个由使用DHCP授予客户端的客户租约(lease)。虽然这个操作方便,但这会在DHCP服务器的日志文件中留下一个访问记录,通过这个记录,网络的管理员就知道曾有黑客光临过。要避免这种情况发生,我们可以手工地设置我们的IP地址以及默认的路由,并且通过ping命令拿到一个公共的DNS服务器,然后通过这个DNS服务验证互联网上的连接可用性。
⚡ “骗子”DHCP服务器
在同一个局域网中,如果你试图入侵一个客户端,那么最好做的事情莫过于你建立你自己的DHCP服务器。虽然每个人都知道DHCP服务器可以通过输出指派客户端的IP地址,但并不是每个人都会意识到,DHCP服务器还可以做另一件隐密的事情,那就是以“推送”(push)的方式主动指派客户端的默认路由器的IP地址和DNS服务器的IP地址。从表面看,这对我们来说是件方便的好事情,但问题在于这种“推送”出来的数据是没有经过认证的(unauthenticated),并且客户端都会无条件地接受。这意味着,如果你在合法的DHCP服务器旁边,再搭建一个DHCP服务器,那么对于客户端来说,通常哪一个DHCP服务器首先对它的申请进行了响应,那么客户端就采纳该DHCP服务器作为自己的配置。
鉴于上面的说法,在这一节中,我们就在Kali版的Linux操作系统上,通过再搭建一个相同的ISC DHCP服务器。这里的ISC指的是“互联网系统协会”(Internet Systems Consortium),搭建这一系统的工具是“I-heart-my-neighbors”工具包[1]中的“虚拟机”VM程序。由于这是一个新程序,所以在使用之前需要先安装。
在你搭建你的“骗子”DHCP服务器之前,在有关网络的背景常识中,你至少需要知道4个关键的信息。
·子网 (subnet) 你需要选择的子网,必须得和下面你要攻击的那个客户端的子网匹配。这样,任何新的客户端,只要是通过这个DHCP服务器分配到的IP地址信息,都可以与这个已配置好的客户端主机进行通信。
·网关 (gateway) 你要掌控这个网络上所有用户在数据通信上的路由吗?这样做的好处很明显,那就是你会看到网上所有客户端与互联网的数据通信,并且可以基于iptable完成很多种透明代理(transparent proxying)和数据修改等操作。这一点和前面所说的功能和过程一样。但是这样做也是有风险的,如果你突然有急事必须要立刻断开这个网络,比如你的电池突然停止供电,再比如安全警卫突然向你追来,那么你配置的所有客户端都将被临时地踢下网络,稍加怀疑,他们就会发现这中间有人在捣鬼。
·域名服务器 (domain server) 我们知道,在配置无线网络信息的时候,需要同时提供两个DNS服务器IP地址,如果配置了“主域名解析服务”DNS服务器(primary DNS server)指向的是你的攻击系统,这样你就可以完成上述掌控和修改的各种操作,但同时也应该配置“备域名解析服务”DNS服务器(secondary DNS server)指向的是一个有效的DNS服务器地址。这样,万一你遇上上述所说的那种需要立刻断开这个网络的时候,连在这个网络上的客户端仍然还可以继续与互联网进行通信。
·lP地址的范围 这里的“范围”指的是你要分发给客户端的一组IP地址。理想情况下,这个范围应该与你所要“附着”的网络所使用的子网具有一样的范围,但你所“附着”的网络有自己正常的路由器,有正常的子网,所以如果你的路由器也采用同样的配置,就会因为冲突而无法使用。不过,事实上还是有章可循的,比如,许多家庭网络IP地址分配的范围是X.Y.Z.100~X.Y.Z.200,给我们留下了足够剩余IP地址分配空间,则我们可以使用X.Y.Z.20~X.Y.Z.50的范围。
在下面的例子中,我们假设在10.0.1/24子网范围内。网络原来真正的路由器IP地址是10.0.1.1,我们引导这个无线网络中所有客户端的“主域名解析服务”DNS服务器指向自己的IP地址为10.0.1.9的计算机上。
创建一个合适的配置文件,并保存为“./dhcp_pwn.conf”。操作完成后,打开一个新的终端,然后按如下的命令方式启动DHCP服务器:
在使用DHCP服务的网络中,无论是无线客户端向DHCP服务器申请关联,还是有线客户端在开机连网的时候,都会向DHCP服务器提出“DHCP租约”(DHCP lease)申请的操作。现在,如果一个客户端请求子网的“DHCP租约”,那么你的DHCP服务器和原来这个网络中合法的DHCP服务器就会产生竞争。经验表明,相比其他操作系统来说,Linux操作系统相对会更强劲,并最终赢得这场比赛。这可能是因为大多数以小型办公室或家庭式办公室为主的SOHO(Small Office and Home Office)路由器电源的功率相对较低,或者在广域网WAN的连接中,这些路由器在与DHCP服务器进行通信时,数据在二者之间往返的时间(roundtrip time)较长。所以,如果有朝一日你发现你在这场比赛中总是败北,那就优化DHCP服务器、减少快速响应时间,总之,你这些在时间上的投资,都将是有价值的。
✔ 对“骗子”DHCP服务器的应对措施
不幸的是,对于一个网络管理员来说,像DHCP和“引导程序协议”(Bootstrap Protocol,BOOTP)这样的协议,其数据通信都不需要认证,否则拒绝针对这些协议的攻击就不会束手无策了。唯一真正有效的对策是时刻监视恶意DHCP服务器,一旦发现有就快速做出反应。对于勇猛无比的网络管理员,可能还需要将整个网络系统基于IPv4的IP方案向基于IPv6的IP方案做迁移操作,因为在IPv6的方案中,DHCP服务器所担任的角色已明显不再是一个举足轻重的重要成员了。
⚡ 用Metasploit运行“骗子”DNS服务器
既然我们已经配置好了DHCP服务器,下面就需要配置一个DNS服务器。在使用哪款DNS服务器上,你有许多选择,最简单的一款就是Metasploit软件中的fakedns模块。
下面的命令可以将fakedns服务器配置成查询模式。对于每一个不在程序中标为“TARGETDOMAINS(目标域名)”列表中的查询,该服务器都可以返回正确的答案。在下面的例子中,“TARGETDOMAINS(目标域名)”列表主要是*.cacheheavyindustried.com 网站和www.wired.com 网站上的列表。
现在,我们需要做的是等待客户端续订一个DHCP租约。一旦有客户端续订DHCP租约,我们就可以在DHCP服务器窗口中看到和下面内容类似的信息显示。
如果随后再看这些内容时,那么我们就可以看到一些DNS的查询,就像下面显示的一样。
到目前为止,所有的结果看起来都还不错。但当用户浏览到www.wired.com 网站时,会发生什么呢?不幸的是,这里的查询戛然而止,内容一下子变少了。为了分析原因,我们理一下思路,当通过DNS服务器查询www.wired.com 网络的IP地址时,查询的数据被重定向到我们预设的攻击系统Squid所在的IP地址10.0.1.9上。根据以前的内容,我们知道这是一件好事,因为我们的攻击系统就在那里,但放在这里的攻击系统并没在从80端口上监听到任何东西,这又成了一件坏事。找找原因,原来部署在这里的Squid监听的是3128端口,而现在要监听的却是80端口。由于Metasploit已经处于运行中了,如果不想停掉Metasploit,我们还可以使用其中的http_capture模块,下面我们就展示如何在Metasploit中开启http_capture模块,并在模块中指定攻击系统的IP地址。
⊗ 注意
如果你已经开始了一个msfconsole程序新的会话(session),那就像在本章前面所说的那样,可以启动一个autopwn模块,这个模块也可以与hup_capture模块一起使用。
现在,当客户端用户用浏览器浏览到目标列表中的某个域名时,该浏览器的所有数据包都将被重定向到攻击者的系统中,http_capture模块将回送这个客户端浏览器一个页面,该页面包括以下内容:
·一个定位到data/exploits/capture/http/index.html文件的模板;·一个指向AUTOPWN模块的HTML语言的<iframe>页面帧数据;·一系列<iframe>形式的表单提交页面:http://www.someservice.com:80/forms.html 。
♥ 提示
这个http_capture模块在窃取用户的cookie、定制网页显示广告商标等方面,有许多先进的功能。想了解更多关于这方面的内容,可以从data/exploits/capture/http/index.html文件中进行详细查看。
当前模板重定向后会显示黑底白字的“载入中(Loading)”提示信息,如图5-4所示。如果你想换成别的内容,有两种方法,一种方法是通过编辑软件修改index.html文件,还有一种方法就是设置软件中“TEMPLATE(模板)”选项,将其修改指向别的页面文件。在AUTOPWN模块中的iframe项,其主要作用是在那个被我们黑掉的客户端浏览器上进行显示的同时,暗地里做一些其他的事,在“data/exploits/capture/http/”目录中,随后的这一系列iframe帧,可以绕过“HTTP Same Origin Policy”(简称为SOP)软件,在被黑浏览器上显示的同时,可以偷偷地将这个被黑主机上许多浏览器作为访问记录的cookie文件[2]偷偷地拿到,回传到我们的AP接入点(就是我们那个Squid攻击服务器)上。
✔ 对“骗子”DNS服务器的应对措施
要避免“骗子”DNS服务器式的攻击,最实际的办法是取消由DHCP服务器动态分配DNS服务器的IP地址,改为自己动手静态设置DNS服务器的IP地址。虽然这种技术不一定会阻止一个黑客进入网络,但它将使其攻击的速度慢下来。当对方意识到你的DNS请求是到一个固定IP的服务器时,对方也会相应地调整他的网络设置。关于静态DNS服务器的好处是:静态DNS服务器不像静态ARP的设置(它在很大程度上是不可行的)那样,这种设置通常不会引起很多麻烦。
- 注意,名称已由原来的“love”,转换成“heart”。——译者注
- cookie本意是“饼干”,但其作用与饼干毫不相关,并且所有的计算机书对本词也都不作翻译,所以本书也仍然采用原称。cookie文件是浏览器在用户的客户端上留下的访问记录。想想我们上某个网,可以让浏览器“记住”以前曾输入过的密码,下次使用的时候不需要再重新输入,其原理就是密码保存到了cookie文件里,可见该文件的作用和重要性。——译者注
本书评论