第七章 高级 WLAN 攻击
作者:Vivek Ramachandran, Cameron Buchanan
译者:飞龙
简介
知己知彼,百战不殆。
孙子,《孙子兵法》
作为渗透测试者,了解黑客可以执行的高阶攻击十分重要,即使你可能不会在渗透测试中执行它们。这一章致力于展示黑客如何能够将无线访问用作接入点,执行高级攻击。
这一章中,我们会看到我们如何能够使用所学的知识来执行高级攻击。我们基本上专注于中间人攻击(MITM),它的成功需要大量的技巧和实战。一旦我们完成了它,我们会使用这个 MITM 攻击作为更加复杂的攻击的基础,例如窃听和会话劫持。
7.1 中间人攻击
MITM 攻击可能是 WLAN 系统上最有潜力的攻击之一了。实施攻击可以使用不同的配置,我们会使用最普遍的一个 -- 攻击者使用有线 LAN 连接到互联网,并在客户端的网卡上创建了假的接入点。这个接入点广播的 SSID 和附近的本地热点相似。用户可能碰巧连接到这个假的接入点(或者由于更高的信号强度理论强制连接,我们之前讨论过),并且可能仍旧相信它连接到正常的接入点上。
攻击者现在可以将所有用户流量转发到互联网上,使用它所创建的有线和无线之间的网桥。
在下面的练习中,我们会模拟这个攻击。
实战时间 -- 中间人攻击
遵循以下指南来开始:
-
为了开始中间人攻击,我们首先使用
airbase-ng,在黑客的笔记本上创建软接入点,叫做mitm。我们执行下列命令:airbase-ng --essid mitm –c 11 mon0命令输出如下:
-
要注意
airbase-ng在运行的时候会创建接口at0。把它当做我们基于软件的接入点mitm的有线端的接口。
-
让我们现在在黑客的笔记本上创建网桥,由有线(
eth0)和无线(at0)接口组成。命令如下:brctl addbr mitm-bridge brctl addif mitm-bridge eth0 brctl addif mitm-bridge at0 ifconfig eth0 0.0.0.0 up ifconfig at0 0.0.0.0 up
-
我们可以为这个网桥指定一个 IP 地址,并检查网关的连接性。要注意我们也可以使用 DHCP 来实现。我们可以为网桥接口指定 IP 地址,使用下列命令:
ifconfig mitm-bridge 192.168.0.199 up我们之后尝试 ping 网关
192.168.0.1,来确保我们连接到了网络的剩余部分。 -
我们现在开启内核的 IP 转发,便于封包能够正确转发,使用下列命令:
echo 1 > /proc/sys/net/ipv4/ip_forward命令输出如下:
-
现在让我们将无线客户端连接到我们的接入点
mitm上。它会通过 DHCP 自动获得 IP 地址(服务器运行在有线端的网关上)。这里,客户端主机的 IP 为192.168.0.197。我们可以 ping 有线端的网关192.168.0.1来验证连接性。
-
我们可以看到,主机响应了 ping 请求,像这样:
-
我们也可以验证客户端的连接,通过观察黑客主机上的
airbase-ng终端:
-
这里提一句,非常有趣的是,由于所有流量都从无线接口转发到有线端,我们拥有流量的完整控制。我们可以通过启动 Wireshark 并嗅探
at0接口来验证。
-
让我们现在从客户端主机上 ping 网关
192.168.0.1。我们可以看到, Wireshark 中的封包(使用过滤器 ICMP),即使封包的目标并不是我们。这就是中间人攻击的力量。
刚刚发生了什么?
我们成功执行了中间人攻击的准备工作。我们通过创建伪造接入点并将其桥接到我们的以太网接口上。这确保了任何连接到伪造接入点的无线客户端会感觉到,它通过有线 LAN 连接到互联网。
试一试 -- 纯无线网络上的中间人攻击
在上一个练习中,我们桥接了无线和有线接口。我们之前提到过,这只是 MITM 的连接结构之一,也有其它的组合。我们可以使用两个无线接口,一个用于创建伪造的接入点,另一个接口连接到授权接入点。这两个接口都桥接在一起。所以,当无线客户端连接到我们的伪造接入点的时候,它就通过攻击者的主机连接到了授权接入点上。
要注意,这个配置需要使用攻击者笔记本上的两个网卡。
看看是否能够使用笔记本的内建网卡和外部网卡来执行这个攻击 -- 记住,你可能没有这个练习所需的注入驱动器。这是个很大的挑战。
7.2 通过 MITM 进行无线窃听
在上一个练习中,我们了解了如何为 MITM 进行准备。现在,我们会看一看如何使用它来进行无线窃听。
整个实验围绕一个原则,所有受害者的流量现在都经过攻击者的主机。所以,攻击者可以窃听任何发送并来自受害者主机的无线流量。
实战时间 -- 无线窃听
遵循以下指南来开始:
-
重复上一个实验的所有步骤。启动 Wireshark,有趣的是,即使 MITM 桥接已经建立,这个跟接口仍然允许我们窥视桥接的流量,如果我们想要的话:
-
启动
at0接口上的嗅探,便于我们监控所有由无线网卡发送和接收的流量:
-
在无线客户端,打开任何网页。我这里,无线接入点也连接到 LAN 上,我们使用地址
http://192.168.0.1来打开它:
-
使用你的密码登录,进入管理界面。
5, 在 Wireshark 中,我们应该看到了大量活动:

-
设置过滤器 HTTP 来只查看 Web 流量:
-
我们可以轻易定位用于向接入点发送密码的 HTTP POST 请求。
-
下面是之前封包的详细视图。
-
展开 HTTP 协议头,我们会看到我们所输入的密码并没有以纯文本发送,反之它发送了哈希值。如果我们看一看封包,在上一个截图中标号为 64,我们可以看到,有一个
/md5.js的请求,这使我们怀疑它是密码的 MD5 哈希值。有趣的是,在哈希的创建中,如果没有在每个会话层面加盐,这个技巧容易受到重放攻击。我们将其留做一个练习来发现细节,因为这并不是无线安全的一部分,从而超出了这本书的内容。
-
这展示了在中间人攻击期间,监视器如何轻易窃听由客户端发送的流量。
刚刚发生了什么?
我们准备的 MITM 环境现在允许我们窃听受害者的无线流量,而无需让受害者知道。这是因为在 MITM 中,所有流量都经过攻击者的主机。所以,所有受害者的未加密流量都可被攻击者窃听。
试一试 -- 发现 Google 搜索者
在当今世界,我们都认为我们在 Google 上的搜索都是私密的。很不幸,Google 搜索上的流量都经过 HTTP,并且默认是纯文本。
你可以想出一个智能的过滤器,使你能够使用 Wireshark 来查看受害者所执行的所有 Google 搜索吗?
7.3 无线上的会话劫持
我们可以基于 MITM 执行的另一种有趣的攻击就是应用会话劫持。在 MITM 攻击期间,受害者的封包发往攻击者。攻击者负责将其转发到正常的目的地,并将目的地发回的响应转发给主机。有趣的是,在这个过程中,攻击者可以修改封包的数据(如果没有保护或加密)。这意味着它可以修改、拆解甚至静默丢掉封包。
在下一个例子中,我们会使用准备好的 MITM 环境看一看无线上的 DNS 劫持。之后利用 DNS 劫持,我们将浏览器的会话劫持为https://www.google.com。
实战时间 -- 无线上的会话劫持
-
建立中间人攻击环境。在受害者主机上,让我们启动浏览器并输入
https://www.google.com。让我们使用 Wireshark 来监控流量,你的界面应该像这样:
-
使用 DNS 过滤器,我们可以看到,受害者发出了
https://www.google.com的 DNS 请求:
-
为了劫持浏览器会话,我们需要发送伪造的 DNS 响应,它会将
https://www.google.com的 IP 地址解析为黑客主机的 IP192.168.0.199。我们用户这个目的的工具叫做dnsspoof。它的语法是:dnspoof –i mitm-bridge命令的输出如下:
-
刷新浏览器创建,现在我们可以在 Wireshark 中看到,只要受害者发送了任何主机(包括 Google)的 DNS 请求,Dnsspoof 都会回应。
-
在受害者主机上,我们会看到不能连接的错误。这是因为我们将
google.com的 IP 地址解析为192.168.0.199,这是黑客主机的 IP,但是没有监听 80 端口的服务:
-
让我们在 Kali 上运行 Apache,使用下列命令:
apachet2ctl start命令的输出如下:
-
现在,一旦我们刷新了受害者主机上的浏览器,我们都会收到
It works!,它是Apache 的默认页面。
-
这个示例表明,可以拦截数据并发送伪造的响应,来劫持受害者的会话。
刚刚发生了什么?
我们使用无线 MITM 作为基础执行了应用劫持攻击。所以这背后到底发生了什么?MITM 准备工作确保了我们能够看到受害者发送的所有封包。只要我们看到了来自受害者的 DNS 请求封包,运行在攻击者笔记本上的 Dnsspoof 就会发送 DNS 响应给受害者,将google.com解析为攻击者的主机 IP 。受害者笔记本接受这个响应并且浏览器会向攻击者的 IP 地址的 80 端口发送 HTTP 请求。
在实验的第一个部分,攻击者机器上没有任何进程监听 80 端口,于是 Firefox 返回错误。之后,一旦我们在攻击者主机上的 80 端口(默认端口)开启了 Apache 服务器,浏览器的请求就会收到来自攻击者主机的响应,带有默认的It works!页面。
这个实验表明,一旦我们完全控制了较低的层级(这里是第二层),我们就能轻易劫持运行在较高层级上的应用,例如 DNS 客户端和 Web 浏览器。
试一试 -- 应用劫持挑战
会话劫持的下一步就是修改客户端发送的数据。Kali 上可用的软件叫做 Ettercap。这会帮助你用于网络的创建搜索和替换的过滤器。
这个挑战中,编写一个简单的过滤器,将网络上所有安全的东西变成不安全的。尝试在 Google 上搜索安全,并看看结果是否显示为不安全。
7.4 发现客户端的安全配置
之前的章节中,我们看到了如何创建开放、WEP 和 WPA 接入点蜜罐,但是当我们看到来自客户端的探测请求时,我们怎么知道探测的 SSID 属于哪个网络呢?
这看起来有些棘手,但解决方案很简单。我们需要创建广播相同 SSID 的接入点,但是拥有不同的安全配置。当漫游客户端搜索网络时,它会基于储存的网络配置自动连接到这些接入点之一。
所以,让我们开始吧!
实战时间 -- 客户端的解除验证攻击
-
我们假设无线客户端拥有
Wireless Lab网络配置,在它没有连接到任何接入点时,它发送了这个网络的探测请求。为了发现该网络的安全配置,我们需要创建多个接入点。出于我们的讨论,我们假设客户端的配置时开放网络、WEP、WPA-SPK 或者 WPA2-SPK。所以我们需要创建四个接入点。为了完成它,我们首先创建四个虚拟接口 --mon0到mon3,多次使用airmon-ng start wlan0命令:
-
你可以使用
ifconfig -a命令看到所有新创建的接口:
-
现在我们在
mon0上创建开放 AP:
-
我们在
mon1上创建 WEP 保护的 AP:
-
WPA-PSK 的 AP 在
mon2上:
-
WPA2-PSK 的 AP 在
3上:
-
我们可以在相同频道上执行
airodump-ng来确保所有四个接入点都启动并且运行,像这样:
-
现在让我们打开漫游客户端上的 WIFI。取决于之前连接到哪个
Wireless Lab,它会连接到该安全配置。这里,它连接到了 WPA-PSK 网络,像这样:
刚刚发生了什么?
我们创建了拥有相同 SSID 但是不同安全配置的多个蜜罐。取决于客户端为Wireless Lab网络储存哪个配置,它会连接到相应的那个。
这个技巧十分实用,因为如果你在执行渗透测试,你不知道客户端的笔记本上是哪个安全配置。这会允许你通过引诱客户端来找到合适的那个。这个技巧也叫作 WIFI 钓鱼。
试一试 -- 引诱客户端
在客户端上创建相同 SSID 的不同配置,并检查你的蜜罐是否能检测它们。
要注意,许多 WIFI 客户端可能不探测储存在配置中的网络。这时就不能使用我们讨论的技巧来检测它们。
小测验 -- 高级 WLAN 攻击
Q1 在 MITM 攻击中,谁是中间人?
- 接入点。
- 攻击者。
- 受害者。
- 都不是。
Q2 Dnsspoof 能够:
- 伪造 DNS 请求。
- 伪造 DNS 响应。
- 需要在 DNS 服务器上运行。
- 需要在接入点上运行。
Q3 无线 MITM 攻击可以在 __ 上完成:
- 同时在所有无线客户端上。
- 一次在一个频道上。
- 在任何 SSID 上。
- 3 和 4。
Q4 在我们的 MITN 准备工作中,那个接口离受害者最近?
- At0
- Eth0
- Br0
- En0
总结
这一章中,我们了解了如何使用无线作为基础来实现高级攻击。我们为无线上的 MITM 攻击做了一些准备,之后用它来窃听受害者的流量。之后我们使用相同的准备工作,通过 DNS 毒化攻击来劫持受害者的应用层(Web 流量)。
在下一章中,我们会了解如何按照正确的规划、探索和报告阶段来实施无线攻击。我们也会涉及到保护 WLAN 的最佳实践。












网友评论