This commit is contained in:
wizardforcel 2016-10-31 11:04:35 +08:00
parent e073a7ea9c
commit 89c87def1d
2 changed files with 196 additions and 196 deletions

232
ch7.md
View File

@ -1,48 +1,48 @@
# 第七章 高级 WLAN 攻击
# 第七章 高级 WLAN 攻击
> 作者Vivek Ramachandran, Cameron Buchanan
> 作者Vivek Ramachandran, Cameron Buchanan
> 译者:[飞龙](https://github.com/)
> 译者:[飞龙](https://github.com/)
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
## 简介
## 简介
> 知己知彼,百战不殆。
> 知己知彼,百战不殆。
> 孙子,《孙子兵法》
> 孙子,《孙子兵法》
作为渗透测试者,了解黑客可以执行的高阶攻击十分重要,即使你可能不会在渗透测试中执行它们。这一章致力于展示黑客如何能够将无线访问用作接入点,执行高级攻击。
作为渗透测试者,了解黑客可以执行的高阶攻击十分重要,即使你可能不会在渗透测试中执行它们。这一章致力于展示黑客如何能够将无线访问用作接入点,执行高级攻击。
这一章中我们会看到我们如何能够使用所学的知识来执行高级攻击。我们基本上专注于中间人攻击MITM它的成功需要大量的技巧和实战。一旦我们完成了它我们会使用这个 MITM 攻击作为更加复杂的攻击的基础,例如窃听和会话劫持。
这一章中我们会看到我们如何能够使用所学的知识来执行高级攻击。我们基本上专注于中间人攻击MITM它的成功需要大量的技巧和实战。一旦我们完成了它我们会使用这个 MITM 攻击作为更加复杂的攻击的基础,例如窃听和会话劫持。
## 7.1 中间人攻击
## 7.1 中间人攻击
MITM 攻击可能是 WLAN 系统上最有潜力的攻击之一了。实施攻击可以使用不同的配置,我们会使用最普遍的一个 -- 攻击者使用有线 LAN 连接到互联网,并在客户端的网卡上创建了假的接入点。这个接入点广播的 SSID 和附近的本地热点相似。用户可能碰巧连接到这个假的接入点(或者由于更高的信号强度理论强制连接,我们之前讨论过),并且可能仍旧相信它连接到正常的接入点上。
MITM 攻击可能是 WLAN 系统上最有潜力的攻击之一了。实施攻击可以使用不同的配置,我们会使用最普遍的一个 -- 攻击者使用有线 LAN 连接到互联网,并在客户端的网卡上创建了假的接入点。这个接入点广播的 SSID 和附近的本地热点相似。用户可能碰巧连接到这个假的接入点(或者由于更高的信号强度理论强制连接,我们之前讨论过),并且可能仍旧相信它连接到正常的接入点上。
攻击者现在可以将所有用户流量转发到互联网上,使用它所创建的有线和无线之间的网桥。
攻击者现在可以将所有用户流量转发到互联网上,使用它所创建的有线和无线之间的网桥。
在下面的练习中,我们会模拟这个攻击。
在下面的练习中,我们会模拟这个攻击。
### 实战时间 -- 中间人攻击
### 实战时间 -- 中间人攻击
遵循以下指南来开始:
遵循以下指南来开始:
1. 为了开始中间人攻击,我们首先使用` airbase-ng`,在黑客的笔记本上创建软接入点,叫做`mitm`。我们执行下列命令:
1. 为了开始中间人攻击,我们首先使用` airbase-ng`,在黑客的笔记本上创建软接入点,叫做`mitm`。我们执行下列命令:
```
airbase-ng --essid mitm c 11 mon0
airbase-ng --essid mitm c 11 mon0
```
命令输出如下:
命令输出如下:
![](img/7-1-1.jpg)
2. 要注意` airbase-ng`在运行的时候会创建接口`at0`。把它当做我们基于软件的接入点`mitm`的有线端的接口。
2. 要注意` airbase-ng`在运行的时候会创建接口`at0`。把它当做我们基于软件的接入点`mitm`的有线端的接口。
![](img/7-1-2.jpg)
3. 让我们现在在黑客的笔记本上创建网桥,由有线(`eth0`)和无线(`at0`)接口组成。命令如下:
3. 让我们现在在黑客的笔记本上创建网桥,由有线(`eth0`)和无线(`at0`)接口组成。命令如下:
```
brctl addbr mitm-bridge
@ -54,262 +54,262 @@ MITM
![](img/7-1-3.jpg)
4. 我们可以为这个网桥指定一个 IP 地址,并检查网关的连接性。要注意我们也可以使用 DHCP 来实现。我们可以为网桥接口指定 IP 地址,使用下列命令:
4. 我们可以为这个网桥指定一个 IP 地址,并检查网关的连接性。要注意我们也可以使用 DHCP 来实现。我们可以为网桥接口指定 IP 地址,使用下列命令:
```
ifconfig mitm-bridge 192.168.0.199 up
```
我们之后尝试 ping 网关` 192.168.0.1`,来确保我们连接到了网络的剩余部分。
我们之后尝试 ping 网关` 192.168.0.1`,来确保我们连接到了网络的剩余部分。
5. 我们现在开启内核的 IP 转发,便于封包能够正确转发,使用下列命令:
5. 我们现在开启内核的 IP 转发,便于封包能够正确转发,使用下列命令:
```
echo 1 > /proc/sys/net/ipv4/ip_forward
```
命令输出如下:
命令输出如下:
![](img/7-1-4.jpg)
6. 现在让我们将无线客户端连接到我们的接入点`mitm`上。它会通过 DHCP 自动获得 IP 地址(服务器运行在有线端的网关上)。这里,客户端主机的 IP 为`192.168.0.197`。我们可以 ping 有线端的网关`192.168.0.1`来验证连接性。
6. 现在让我们将无线客户端连接到我们的接入点`mitm`上。它会通过 DHCP 自动获得 IP 地址(服务器运行在有线端的网关上)。这里,客户端主机的 IP 为`192.168.0.197`。我们可以 ping 有线端的网关`192.168.0.1`来验证连接性。
![](img/7-1-5.jpg)
7. 我们可以看到,主机响应了 ping 请求,像这样:
7. 我们可以看到,主机响应了 ping 请求,像这样:
![](img/7-1-6.jpg)
8. 我们也可以验证客户端的连接,通过观察黑客主机上的`airbase-ng `终端:
8. 我们也可以验证客户端的连接,通过观察黑客主机上的`airbase-ng `终端:
![](img/7-1-7.jpg)
9. 这里提一句,非常有趣的是,由于所有流量都从无线接口转发到有线端,我们拥有流量的完整控制。我们可以通过启动 Wireshark 并嗅探`at0`接口来验证。
9. 这里提一句,非常有趣的是,由于所有流量都从无线接口转发到有线端,我们拥有流量的完整控制。我们可以通过启动 Wireshark 并嗅探`at0`接口来验证。
![](img/7-1-8.jpg)
0. 让我们现在从客户端主机上 ping 网关`192.168.0.1 `。我们可以看到, Wireshark 中的封包(使用过滤器 ICMP即使封包的目标并不是我们。这就是中间人攻击的力量。
0. 让我们现在从客户端主机上 ping 网关`192.168.0.1 `。我们可以看到, Wireshark 中的封包(使用过滤器 ICMP即使封包的目标并不是我们。这就是中间人攻击的力量。
![](img/7-1-9.jpg)
### 刚刚发生了什么?
### 刚刚发生了什么?
我们成功执行了中间人攻击的准备工作。我们通过创建伪造接入点并将其桥接到我们的以太网接口上。这确保了任何连接到伪造接入点的无线客户端会感觉到,它通过有线 LAN 连接到互联网。
我们成功执行了中间人攻击的准备工作。我们通过创建伪造接入点并将其桥接到我们的以太网接口上。这确保了任何连接到伪造接入点的无线客户端会感觉到,它通过有线 LAN 连接到互联网。
### 试一试 -- 纯无线网络上的中间人攻击
### 试一试 -- 纯无线网络上的中间人攻击
在上一个练习中,我们桥接了无线和有线接口。我们之前提到过,这只是 MITM 的连接结构之一,也有其它的组合。我们可以使用两个无线接口,一个用于创建伪造的接入点,另一个接口连接到授权接入点。这两个接口都桥接在一起。所以,当无线客户端连接到我们的伪造接入点的时候,它就通过攻击者的主机连接到了授权接入点上。
在上一个练习中,我们桥接了无线和有线接口。我们之前提到过,这只是 MITM 的连接结构之一,也有其它的组合。我们可以使用两个无线接口,一个用于创建伪造的接入点,另一个接口连接到授权接入点。这两个接口都桥接在一起。所以,当无线客户端连接到我们的伪造接入点的时候,它就通过攻击者的主机连接到了授权接入点上。
要注意,这个配置需要使用攻击者笔记本上的两个网卡。
要注意,这个配置需要使用攻击者笔记本上的两个网卡。
看看是否能够使用笔记本的内建网卡和外部网卡来执行这个攻击 -- 记住,你可能没有这个练习所需的注入驱动器。这是个很大的挑战。
看看是否能够使用笔记本的内建网卡和外部网卡来执行这个攻击 -- 记住,你可能没有这个练习所需的注入驱动器。这是个很大的挑战。
## 7.2 通过 MITM 进行无线窃听
## 7.2 通过 MITM 进行无线窃听
在上一个练习中,我们了解了如何为 MITM 进行准备。现在,我们会看一看如何使用它来进行无线窃听。
在上一个练习中,我们了解了如何为 MITM 进行准备。现在,我们会看一看如何使用它来进行无线窃听。
整个实验围绕一个原则,所有受害者的流量现在都经过攻击者的主机。所以,攻击者可以窃听任何发送并来自受害者主机的无线流量。
整个实验围绕一个原则,所有受害者的流量现在都经过攻击者的主机。所以,攻击者可以窃听任何发送并来自受害者主机的无线流量。
### 实战时间 -- 无线窃听
### 实战时间 -- 无线窃听
遵循以下指南来开始:
遵循以下指南来开始:
1. 重复上一个实验的所有步骤。启动 Wireshark有趣的是即使 MITM 桥接已经建立,这个跟接口仍然允许我们窥视桥接的流量,如果我们想要的话:
1. 重复上一个实验的所有步骤。启动 Wireshark有趣的是即使 MITM 桥接已经建立,这个跟接口仍然允许我们窥视桥接的流量,如果我们想要的话:
![](img/7-2-1.jpg)
2. 启动`at0`接口上的嗅探,便于我们监控所有由无线网卡发送和接收的流量:
2. 启动`at0`接口上的嗅探,便于我们监控所有由无线网卡发送和接收的流量:
![](img/7-2-2.jpg)
3. 在无线客户端,打开任何网页。我这里,无线接入点也连接到 LAN 上,我们使用地址`http://192.168.0.1`来打开它:
3. 在无线客户端,打开任何网页。我这里,无线接入点也连接到 LAN 上,我们使用地址`http://192.168.0.1`来打开它:
![](img/7-2-3.jpg)
4. 使用你的密码登录,进入管理界面。
4. 使用你的密码登录,进入管理界面。
5 在 Wireshark 中,我们应该看到了大量活动:
5 在 Wireshark 中,我们应该看到了大量活动:
![](img/7-2-4.jpg)
6. 设置过滤器 HTTP 来只查看 Web 流量:
6. 设置过滤器 HTTP 来只查看 Web 流量:
![](img/7-2-5.jpg)
7. 我们可以轻易定位用于向接入点发送密码的 HTTP POST 请求。
7. 我们可以轻易定位用于向接入点发送密码的 HTTP POST 请求。
![](img/7-2-6.jpg)
8. 下面是之前封包的详细视图。
8. 下面是之前封包的详细视图。
![](img/7-2-7.jpg)
9. 展开 HTTP 协议头,我们会看到我们所输入的密码并没有以纯文本发送,反之它发送了哈希值。如果我们看一看封包,在上一个截图中标号为 64我们可以看到有一个`/md5.js`的请求,这使我们怀疑它是密码的 MD5 哈希值。有趣的是,在哈希的创建中,如果没有在每个会话层面加盐,这个技巧容易受到重放攻击。我们将其留做一个练习来发现细节,因为这并不是无线安全的一部分,从而超出了这本书的内容。
9. 展开 HTTP 协议头,我们会看到我们所输入的密码并没有以纯文本发送,反之它发送了哈希值。如果我们看一看封包,在上一个截图中标号为 64我们可以看到有一个`/md5.js`的请求,这使我们怀疑它是密码的 MD5 哈希值。有趣的是,在哈希的创建中,如果没有在每个会话层面加盐,这个技巧容易受到重放攻击。我们将其留做一个练习来发现细节,因为这并不是无线安全的一部分,从而超出了这本书的内容。
![](img/7-2-8.jpg)
0. 这展示了在中间人攻击期间,监视器如何轻易窃听由客户端发送的流量。
0. 这展示了在中间人攻击期间,监视器如何轻易窃听由客户端发送的流量。
### 刚刚发生了什么?
### 刚刚发生了什么?
我们准备的 MITM 环境现在允许我们窃听受害者的无线流量,而无需让受害者知道。这是因为在 MITM 中,所有流量都经过攻击者的主机。所以,所有受害者的未加密流量都可被攻击者窃听。
我们准备的 MITM 环境现在允许我们窃听受害者的无线流量,而无需让受害者知道。这是因为在 MITM 中,所有流量都经过攻击者的主机。所以,所有受害者的未加密流量都可被攻击者窃听。
### 试一试 -- 发现 Google 搜索者
### 试一试 -- 发现 Google 搜索者
在当今世界,我们都认为我们在 Google 上的搜索都是私密的。很不幸Google 搜索上的流量都经过 HTTP并且默认是纯文本。
在当今世界,我们都认为我们在 Google 上的搜索都是私密的。很不幸Google 搜索上的流量都经过 HTTP并且默认是纯文本。
你可以想出一个智能的过滤器,使你能够使用 Wireshark 来查看受害者所执行的所有 Google 搜索吗?
你可以想出一个智能的过滤器,使你能够使用 Wireshark 来查看受害者所执行的所有 Google 搜索吗?
## 7.3 无线上的会话劫持
## 7.3 无线上的会话劫持
我们可以基于 MITM 执行的另一种有趣的攻击就是应用会话劫持。在 MITM 攻击期间,受害者的封包发往攻击者。攻击者负责将其转发到正常的目的地,并将目的地发回的响应转发给主机。有趣的是,在这个过程中,攻击者可以修改封包的数据(如果没有保护或加密)。这意味着它可以修改、拆解甚至静默丢掉封包。
我们可以基于 MITM 执行的另一种有趣的攻击就是应用会话劫持。在 MITM 攻击期间,受害者的封包发往攻击者。攻击者负责将其转发到正常的目的地,并将目的地发回的响应转发给主机。有趣的是,在这个过程中,攻击者可以修改封包的数据(如果没有保护或加密)。这意味着它可以修改、拆解甚至静默丢掉封包。
在下一个例子中,我们会使用准备好的 MITM 环境看一看无线上的 DNS 劫持。之后利用 DNS 劫持,我们将浏览器的会话劫持为` https://www.google.com`。
在下一个例子中,我们会使用准备好的 MITM 环境看一看无线上的 DNS 劫持。之后利用 DNS 劫持,我们将浏览器的会话劫持为` https://www.google.com`。
### 实战时间 -- 无线上的会话劫持
### 实战时间 -- 无线上的会话劫持
1. 建立中间人攻击环境。在受害者主机上,让我们启动浏览器并输入` https://www.google.com`。让我们使用 Wireshark 来监控流量,你的界面应该像这样:
1. 建立中间人攻击环境。在受害者主机上,让我们启动浏览器并输入` https://www.google.com`。让我们使用 Wireshark 来监控流量,你的界面应该像这样:
![](img/7-3-1.jpg)
2. 使用 DNS 过滤器,我们可以看到,受害者发出了` https://www.google.com`的 DNS 请求:
2. 使用 DNS 过滤器,我们可以看到,受害者发出了` https://www.google.com`的 DNS 请求:
![](img/7-3-2.jpg)
3. 为了劫持浏览器会话,我们需要发送伪造的 DNS 响应,它会将`https://www.google.com `的 IP 地址解析为黑客主机的 IP `192.168.0.199`。我们用户这个目的的工具叫做`dnsspoof`。它的语法是:
3. 为了劫持浏览器会话,我们需要发送伪造的 DNS 响应,它会将`https://www.google.com `的 IP 地址解析为黑客主机的 IP `192.168.0.199`。我们用户这个目的的工具叫做`dnsspoof`。它的语法是:
```
dnspoof i mitm-bridge
dnspoof i mitm-bridge
```
命令的输出如下:
命令的输出如下:
![](img/7-3-3.jpg)
4. 刷新浏览器创建,现在我们可以在 Wireshark 中看到,只要受害者发送了任何主机(包括 Google的 DNS 请求Dnsspoof 都会回应。
4. 刷新浏览器创建,现在我们可以在 Wireshark 中看到,只要受害者发送了任何主机(包括 Google的 DNS 请求Dnsspoof 都会回应。
![](img/7-3-4.jpg)
5. 在受害者主机上,我们会看到不能连接的错误。这是因为我们将`google.com`的 IP 地址解析为`192.168.0.199`,这是黑客主机的 IP但是没有监听 80 端口的服务:
5. 在受害者主机上,我们会看到不能连接的错误。这是因为我们将`google.com`的 IP 地址解析为`192.168.0.199`,这是黑客主机的 IP但是没有监听 80 端口的服务:
![](img/7-3-5.jpg)
6. 让我们在 Kali 上运行 Apache使用下列命令
6. 让我们在 Kali 上运行 Apache使用下列命令
```
apachet2ctl start
```
命令的输出如下:
命令的输出如下:
![](img/7-3-6.jpg)
7. 现在,一旦我们刷新了受害者主机上的浏览器,我们都会收到`It works!`它是Apache 的默认页面。
7. 现在,一旦我们刷新了受害者主机上的浏览器,我们都会收到`It works!`它是Apache 的默认页面。
![](img/7-3-7.jpg)
8. 这个示例表明,可以拦截数据并发送伪造的响应,来劫持受害者的会话。
8. 这个示例表明,可以拦截数据并发送伪造的响应,来劫持受害者的会话。
### 刚刚发生了什么?
### 刚刚发生了什么?
我们使用无线 MITM 作为基础执行了应用劫持攻击。所以这背后到底发生了什么MITM 准备工作确保了我们能够看到受害者发送的所有封包。只要我们看到了来自受害者的 DNS 请求封包,运行在攻击者笔记本上的 Dnsspoof 就会发送 DNS 响应给受害者,将`google.com`解析为攻击者的主机 IP 。受害者笔记本接受这个响应并且浏览器会向攻击者的 IP 地址的 80 端口发送 HTTP 请求。
我们使用无线 MITM 作为基础执行了应用劫持攻击。所以这背后到底发生了什么MITM 准备工作确保了我们能够看到受害者发送的所有封包。只要我们看到了来自受害者的 DNS 请求封包,运行在攻击者笔记本上的 Dnsspoof 就会发送 DNS 响应给受害者,将`google.com`解析为攻击者的主机 IP 。受害者笔记本接受这个响应并且浏览器会向攻击者的 IP 地址的 80 端口发送 HTTP 请求。
在实验的第一个部分,攻击者机器上没有任何进程监听 80 端口,于是 Firefox 返回错误。之后,一旦我们在攻击者主机上的 80 端口(默认端口)开启了 Apache 服务器,浏览器的请求就会收到来自攻击者主机的响应,带有默认的`It works!`页面。
在实验的第一个部分,攻击者机器上没有任何进程监听 80 端口,于是 Firefox 返回错误。之后,一旦我们在攻击者主机上的 80 端口(默认端口)开启了 Apache 服务器,浏览器的请求就会收到来自攻击者主机的响应,带有默认的`It works!`页面。
这个实验表明,一旦我们完全控制了较低的层级(这里是第二层),我们就能轻易劫持运行在较高层级上的应用,例如 DNS 客户端和 Web 浏览器。
这个实验表明,一旦我们完全控制了较低的层级(这里是第二层),我们就能轻易劫持运行在较高层级上的应用,例如 DNS 客户端和 Web 浏览器。
### 试一试 -- 应用劫持挑战
### 试一试 -- 应用劫持挑战
会话劫持的下一步就是修改客户端发送的数据。Kali 上可用的软件叫做 Ettercap。这会帮助你用于网络的创建搜索和替换的过滤器。
会话劫持的下一步就是修改客户端发送的数据。Kali 上可用的软件叫做 Ettercap。这会帮助你用于网络的创建搜索和替换的过滤器。
这个挑战中,编写一个简单的过滤器,将网络上所有安全的东西变成不安全的。尝试在 Google 上搜索安全,并看看结果是否显示为不安全。
这个挑战中,编写一个简单的过滤器,将网络上所有安全的东西变成不安全的。尝试在 Google 上搜索安全,并看看结果是否显示为不安全。
## 7.4 发现客户端的安全配置
## 7.4 发现客户端的安全配置
之前的章节中我们看到了如何创建开放、WEP 和 WPA 接入点蜜罐,但是当我们看到来自客户端的探测请求时,我们怎么知道探测的 SSID 属于哪个网络呢?
之前的章节中我们看到了如何创建开放、WEP 和 WPA 接入点蜜罐,但是当我们看到来自客户端的探测请求时,我们怎么知道探测的 SSID 属于哪个网络呢?
这看起来有些棘手,但解决方案很简单。我们需要创建广播相同 SSID 的接入点,但是拥有不同的安全配置。当漫游客户端搜索网络时,它会基于储存的网络配置自动连接到这些接入点之一。
这看起来有些棘手,但解决方案很简单。我们需要创建广播相同 SSID 的接入点,但是拥有不同的安全配置。当漫游客户端搜索网络时,它会基于储存的网络配置自动连接到这些接入点之一。
所以,让我们开始吧!
所以,让我们开始吧!
### 实战时间 -- 客户端的解除验证攻击
### 实战时间 -- 客户端的解除验证攻击
1. 我们假设无线客户端拥有` Wireless Lab`网络配置在它没有连接到任何接入点时它发送了这个网络的探测请求。为了发现该网络的安全配置我们需要创建多个接入点。出于我们的讨论我们假设客户端的配置时开放网络、WEP、WPA-SPK 或者 WPA2-SPK。所以我们需要创建四个接入点。为了完成它我们首先创建四个虚拟接口 -- `mon0`到`mon3`,多次使用`airmon-ng start wlan0 `命令:
1. 我们假设无线客户端拥有` Wireless Lab`网络配置在它没有连接到任何接入点时它发送了这个网络的探测请求。为了发现该网络的安全配置我们需要创建多个接入点。出于我们的讨论我们假设客户端的配置时开放网络、WEP、WPA-SPK 或者 WPA2-SPK。所以我们需要创建四个接入点。为了完成它我们首先创建四个虚拟接口 -- `mon0`到`mon3`,多次使用`airmon-ng start wlan0 `命令:
![](img/7-4-1.jpg)
2. 你可以使用`ifconfig -a`命令看到所有新创建的接口:
2. 你可以使用`ifconfig -a`命令看到所有新创建的接口:
![](img/7-4-2.jpg)
3. 现在我们在 `mon0`上创建开放 AP
3. 现在我们在 `mon0`上创建开放 AP
![](img/7-4-3.jpg)
4. 我们在`mon1`上创建 WEP 保护的 AP
4. 我们在`mon1`上创建 WEP 保护的 AP
![](img/7-4-4.jpg)
5. WPA-PSK 的 AP 在`mon2`上:
5. WPA-PSK 的 AP 在`mon2`上:
![](img/7-4-5.jpg)
6. WPA2-PSK 的 AP 在`3`上:
6. WPA2-PSK 的 AP 在`3`上:
![](img/7-4-6.jpg)
7. 我们可以在相同频道上执行` airodump-ng `来确保所有四个接入点都启动并且运行,像这样:
7. 我们可以在相同频道上执行` airodump-ng `来确保所有四个接入点都启动并且运行,像这样:
![](img/7-4-7.jpg)
8. 现在让我们打开漫游客户端上的 WIFI。取决于之前连接到哪个` Wireless Lab `,它会连接到该安全配置。这里,它连接到了 WPA-PSK 网络,像这样:
8. 现在让我们打开漫游客户端上的 WIFI。取决于之前连接到哪个` Wireless Lab `,它会连接到该安全配置。这里,它连接到了 WPA-PSK 网络,像这样:
![](img/7-4-8.jpg)
### 刚刚发生了什么?
### 刚刚发生了什么?
我们创建了拥有相同 SSID 但是不同安全配置的多个蜜罐。取决于客户端为`Wireless Lab`网络储存哪个配置,它会连接到相应的那个。
我们创建了拥有相同 SSID 但是不同安全配置的多个蜜罐。取决于客户端为`Wireless Lab`网络储存哪个配置,它会连接到相应的那个。
这个技巧十分实用,因为如果你在执行渗透测试,你不知道客户端的笔记本上是哪个安全配置。这会允许你通过引诱客户端来找到合适的那个。这个技巧也叫作 WIFI 钓鱼。
这个技巧十分实用,因为如果你在执行渗透测试,你不知道客户端的笔记本上是哪个安全配置。这会允许你通过引诱客户端来找到合适的那个。这个技巧也叫作 WIFI 钓鱼。
### 试一试 -- 引诱客户端
### 试一试 -- 引诱客户端
在客户端上创建相同 SSID 的不同配置,并检查你的蜜罐是否能检测它们。
在客户端上创建相同 SSID 的不同配置,并检查你的蜜罐是否能检测它们。
要注意,许多 WIFI 客户端可能不探测储存在配置中的网络。这时就不能使用我们讨论的技巧来检测它们。
要注意,许多 WIFI 客户端可能不探测储存在配置中的网络。这时就不能使用我们讨论的技巧来检测它们。
## 小测验 -- 高级 WLAN 攻击
## 小测验 -- 高级 WLAN 攻击
Q1 在 MITM 攻击中,谁是中间人?
Q1 在 MITM 攻击中,谁是中间人?
1. 接入点。
2. 攻击者。
3. 受害者。
4. 都不是。
1. 接入点。
2. 攻击者。
3. 受害者。
4. 都不是。
Q2 Dnsspoof 能够:
Q2 Dnsspoof 能够:
1. 伪造 DNS 请求。
2. 伪造 DNS 响应。
3. 需要在 DNS 服务器上运行。
4. 需要在接入点上运行。
1. 伪造 DNS 请求。
2. 伪造 DNS 响应。
3. 需要在 DNS 服务器上运行。
4. 需要在接入点上运行。
Q3 无线 MITM 攻击可以在 \_\_ 上完成:
Q3 无线 MITM 攻击可以在 \_\_ 上完成:
1. 同时在所有无线客户端上。
2. 一次在一个频道上。
3. 在任何 SSID 上。
4. 3 和 4。
1. 同时在所有无线客户端上。
2. 一次在一个频道上。
3. 在任何 SSID 上。
4. 3 和 4。
Q4 在我们的 MITN 准备工作中,那个接口离受害者最近?
Q4 在我们的 MITN 准备工作中,那个接口离受害者最近?
1. At0
2. Eth0
3. Br0
4. En0
## 总结
## 总结
这一章中,我们了解了如何使用无线作为基础来实现高级攻击。我们为无线上的 MITM 攻击做了一些准备,之后用它来窃听受害者的流量。之后我们使用相同的准备工作,通过 DNS 毒化攻击来劫持受害者的应用层Web 流量)。
这一章中,我们了解了如何使用无线作为基础来实现高级攻击。我们为无线上的 MITM 攻击做了一些准备,之后用它来窃听受害者的流量。之后我们使用相同的准备工作,通过 DNS 毒化攻击来劫持受害者的应用层Web 流量)。
在下一章中,我们会了解如何按照正确的规划、探索和报告阶段来实施无线攻击。我们也会涉及到保护 WLAN 的最佳实践。
在下一章中,我们会了解如何按照正确的规划、探索和报告阶段来实施无线攻击。我们也会涉及到保护 WLAN 的最佳实践。

160
ch8.md
View File

@ -1,186 +1,186 @@
# 第八章 攻击企业级 WPA 和 RADIUS
# 第八章 攻击企业级 WPA 和 RADIUS
> 作者Vivek Ramachandran, Cameron Buchanan
> 作者Vivek Ramachandran, Cameron Buchanan
> 译者:[飞龙](https://github.com/)
> 译者:[飞龙](https://github.com/)
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
## 简介
## 简介
> 个头越大,摔得越惨。
> 个头越大,摔得越惨。
> -- 谚语
> -- 谚语
企业级 WPA 总是自带不可攻破的光环。多数网络管理员认为它对于无线安全问题是个银弹。在这一章中,我们会看到这个真理不再正确了。
企业级 WPA 总是自带不可攻破的光环。多数网络管理员认为它对于无线安全问题是个银弹。在这一章中,我们会看到这个真理不再正确了。
这一章中,我们会了解如何使用多种 Kali 包含的工具和技巧,来攻击企业级 WPA。
这一章中,我们会了解如何使用多种 Kali 包含的工具和技巧,来攻击企业级 WPA。
## 8.1 配置 FreeRADIUS-WPE
## 8.1 配置 FreeRADIUS-WPE
我们需要 RADIUS 服务器来实施企业级 WPA 攻击。最广泛使用的开源 RADIUS 服务器时 FreeRADIUS。但是它难于配置并且为每次攻击而配置它十分无聊。
我们需要 RADIUS 服务器来实施企业级 WPA 攻击。最广泛使用的开源 RADIUS 服务器时 FreeRADIUS。但是它难于配置并且为每次攻击而配置它十分无聊。
Joshua Wright 是一个知名的安全研究员,他写了一个 FreeRADIUS 的补丁使其易于配置和执行攻击。这个补丁以 FreeRADIUS-WPE 发布。Kali 没有自带 FreeRADIUS-WPE ,所以我们需要执行下列步骤来配置。
Joshua Wright 是一个知名的安全研究员,他写了一个 FreeRADIUS 的补丁使其易于配置和执行攻击。这个补丁以 FreeRADIUS-WPE 发布。Kali 没有自带 FreeRADIUS-WPE ,所以我们需要执行下列步骤来配置。
1. 访问` https://github.com/brad-anton/freeradius-wpe `并且你会找到下载连接:` https://github.com/brad-anton/ freeradius-wpe/raw/master/freeradius-server-wpe_2.1.12-1_i386. deb`。
1. 访问` https://github.com/brad-anton/freeradius-wpe `并且你会找到下载连接:` https://github.com/brad-anton/ freeradius-wpe/raw/master/freeradius-server-wpe_2.1.12-1_i386. deb`。
![](img/8-1-1.jpg)
2. 下载完成之后,在`ldconfig`之后使用` dpkg i freeradius-server-wpe_2.1.12-1_ i386.deb `来安装:
2. 下载完成之后,在`ldconfig`之后使用` dpkg i freeradius-server-wpe_2.1.12-1_ i386.deb `来安装:
![](img/8-1-2.jpg)
我们现在需要快速在 Kali 上配置 Radius 服务器。
我们现在需要快速在 Kali 上配置 Radius 服务器。
### 实战时间 -- 使用 FreeRADIUS-WPE 建立 AP
### 实战时间 -- 使用 FreeRADIUS-WPE 建立 AP
1. 将接入点的 LAN 端口之一连接到你的 Kali 主机的以太网端口。我们这里的接口是`eth0`。启动这个接口并通过运行 DHCP 获得 IP 地址,像这样:
1. 将接入点的 LAN 端口之一连接到你的 Kali 主机的以太网端口。我们这里的接口是`eth0`。启动这个接口并通过运行 DHCP 获得 IP 地址,像这样:
![](img/8-1-3.jpg)
2. 登录接入点,将安全模式设为 WPA/WPA2-Enterprise将`Version`设为 WPA2将`Encryption `设为 AES。之后在` EAP (802.1x) `部分下面,输入 Radius 服务器 IP 地址,就是你的 Kali 的 IP 地址。 `Radius Password `是`test`,像这样:
2. 登录接入点,将安全模式设为 WPA/WPA2-Enterprise将`Version`设为 WPA2将`Encryption `设为 AES。之后在` EAP (802.1x) `部分下面,输入 Radius 服务器 IP 地址,就是你的 Kali 的 IP 地址。 `Radius Password `是`test`,像这样:
![](img/8-1-4.jpg)
3. 让我们现在打开新的终端,访问目录`/usr/local/etc/raddb`。这是所有 FreeRADIUS-WPE 配置文件存放的地方。
3. 让我们现在打开新的终端,访问目录`/usr/local/etc/raddb`。这是所有 FreeRADIUS-WPE 配置文件存放的地方。
![](img/8-1-5.jpg)
4. 让我们打开`eap.conf`。你会发现`default_eap_type`设为了 MD5让我们将它改为`peap`。
4. 让我们打开`eap.conf`。你会发现`default_eap_type`设为了 MD5让我们将它改为`peap`。
![](img/8-1-6.jpg)
5. 让我们打开`clients.conf`。这就是我们定义客户端白名单的地方,它们能够连接到我们的 Radius 服务器。有趣的是,如果你浏览到下面,忽略设置示例,范围`192.168.0.0/16 `的`secret`默认设为`test`,这就是我们步骤 2 中所使用的。
5. 让我们打开`clients.conf`。这就是我们定义客户端白名单的地方,它们能够连接到我们的 Radius 服务器。有趣的是,如果你浏览到下面,忽略设置示例,范围`192.168.0.0/16 `的`secret`默认设为`test`,这就是我们步骤 2 中所使用的。
![](img/8-1-7.jpg)
6. 我们现在使用`radiusd s X `命令启动 RADIUS 服务器。
6. 我们现在使用`radiusd s X `命令启动 RADIUS 服务器。
![](img/8-1-8.jpg)
7. 一旦启动完毕,你会在屏幕上看到一堆调试信息,但是最后服务器会安顿下来并监听端口。太棒了!我们现在可以开始这一章的实验了。
7. 一旦启动完毕,你会在屏幕上看到一堆调试信息,但是最后服务器会安顿下来并监听端口。太棒了!我们现在可以开始这一章的实验了。
![](img/8-1-9.jpg)
### 刚刚发生了什么?
### 刚刚发生了什么?
我们成功配置了 FreeRADIUS-WPE。我们会在这一章的实验的剩余部分使用它。
我们成功配置了 FreeRADIUS-WPE。我们会在这一章的实验的剩余部分使用它。
### 试一试 -- 玩转 RADIUS
### 试一试 -- 玩转 RADIUS
FreeRADIUS-WPE 拥有大量选项。使你自己熟悉它们是个好的主意。花费时间来查看不同的配置文件,以及它们如何协同工作非常重要。
FreeRADIUS-WPE 拥有大量选项。使你自己熟悉它们是个好的主意。花费时间来查看不同的配置文件,以及它们如何协同工作非常重要。
## 8.2 攻击 PEAP
## 8.2 攻击 PEAP
受保护的可扩展的身份验证协议PEAP是 EAP 的最广泛使用的版本。这是 Windows 原生自带的 EAP 机制。
受保护的可扩展的身份验证协议PEAP是 EAP 的最广泛使用的版本。这是 Windows 原生自带的 EAP 机制。
PEAP 拥有两个版本:
PEAP 拥有两个版本:
+ 使用 EAP-MSCHAPv2 的 PEAPv0最流行的版本因为 Windows 原生支持)。
+ 使用 EAP-GTC 的 PEAPv1。
+ 使用 EAP-MSCHAPv2 的 PEAPv0最流行的版本因为 Windows 原生支持)。
+ 使用 EAP-GTC 的 PEAPv1。
PEAP 使用服务端的证书来验证 RADIUS 服务器。几乎所有 PEAP 的攻击都会利用证书验证的不当配置。
PEAP 使用服务端的证书来验证 RADIUS 服务器。几乎所有 PEAP 的攻击都会利用证书验证的不当配置。
下一个实验中,我们会看一看如何在客户端关闭证书验证的时候破解 PEAP。
下一个实验中,我们会看一看如何在客户端关闭证书验证的时候破解 PEAP。
### 实战时间 -- 破解 PEAP
### 实战时间 -- 破解 PEAP
遵循以下指南来开始:
遵循以下指南来开始:
1. 再次检查` eap.conf `文件来确保开启了 PEAP
1. 再次检查` eap.conf `文件来确保开启了 PEAP
![](img/8-2-1.jpg)
2. 之后重启 RADIUS 服务器,使用`radiusd s X`
2. 之后重启 RADIUS 服务器,使用`radiusd s X`
![](img/8-2-2.jpg)
3. 监控由 FreeRADIUS-WPE 创建的日志文件:
3. 监控由 FreeRADIUS-WPE 创建的日志文件:
![](img/8-2-3.jpg)
4. Windows 原生支持 PEAP。让我们确保关闭了证书验证
4. Windows 原生支持 PEAP。让我们确保关闭了证书验证
![](img/8-2-4.jpg)
5. 我们需要点击`Configure `标签页,它在`Secured password`的旁边,并告诉 Windows 不要自动使用我们的 Windows 登录名称和密码:
5. 我们需要点击`Configure `标签页,它在`Secured password`的旁边,并告诉 Windows 不要自动使用我们的 Windows 登录名称和密码:
![](img/8-2-5.jpg)
6. 我们也需要在`Advanced Settings`对话框中选择`User authentication`。
6. 我们也需要在`Advanced Settings`对话框中选择`User authentication`。
![](img/8-2-6.jpg)
7. 一旦客户端连接到了接入点,客户端会提示输入用户名和密码。我们使用`Monster`作为用户名,`abcdefghi `作为密码:
7. 一旦客户端连接到了接入点,客户端会提示输入用户名和密码。我们使用`Monster`作为用户名,`abcdefghi `作为密码:
![](img/8-2-7.jpg)
8. 一旦我们完成了,我们就能在日志文件中看到 MSCHAP-v2 challenge 响应。
8. 一旦我们完成了,我们就能在日志文件中看到 MSCHAP-v2 challenge 响应。
![](img/8-2-8.jpg)
9. 我们现在使用`asleap`来破解它,使用包含`abcdefghi`的密码列表文件,我们能够破解它。(出于演示目的,我们只创建了单行的文件,叫做`list`,其中包含列表。)
9. 我们现在使用`asleap`来破解它,使用包含`abcdefghi`的密码列表文件,我们能够破解它。(出于演示目的,我们只创建了单行的文件,叫做`list`,其中包含列表。)
![](img/8-2-9.jpg)
### 刚刚发生了什么?
### 刚刚发生了什么?
我们使用 FreeRADIUS-WPE 建立了蜜罐。企业客户端配置不当,没有使用 PEAP 证书验证。这允许我们将我们的伪造证书展示给客户端,它被乐意接受了。一旦它发生了,内部验证协议 MSCHAP-v2 开始生效。由于客户端使用我们的伪造证书来解密数据我们能够轻易读取用户名、challenge 和响应元组。
我们使用 FreeRADIUS-WPE 建立了蜜罐。企业客户端配置不当,没有使用 PEAP 证书验证。这允许我们将我们的伪造证书展示给客户端,它被乐意接受了。一旦它发生了,内部验证协议 MSCHAP-v2 开始生效。由于客户端使用我们的伪造证书来解密数据我们能够轻易读取用户名、challenge 和响应元组。
MSCHAP-v2 易于受到字典攻击。我们使用`asleap`来破解 challenge 和响应偶对,因为它看起来基于字典中的单词。
MSCHAP-v2 易于受到字典攻击。我们使用`asleap`来破解 challenge 和响应偶对,因为它看起来基于字典中的单词。
### 试一试 -- 攻击 PEAP 的变体
### 试一试 -- 攻击 PEAP 的变体
PEAP 可以以多种方式不当配置。即使打开了证书验证,如果管理员没有在连接到服务器列表中提到验证服务器,攻击者可以从任何列出的签证机构获得其他域的真实证书。这仍旧会被客户端接受。这个攻击的其他变体也是可能的。
PEAP 可以以多种方式不当配置。即使打开了证书验证,如果管理员没有在连接到服务器列表中提到验证服务器,攻击者可以从任何列出的签证机构获得其他域的真实证书。这仍旧会被客户端接受。这个攻击的其他变体也是可能的。
我们推荐你探索这一章的不同可能性。
我们推荐你探索这一章的不同可能性。
## EAP-TTLS
我们推荐你尝试攻击 EAP-TTLS它类似于这一章我们对 PEAP 所做的事情。
我们推荐你尝试攻击 EAP-TTLS它类似于这一章我们对 PEAP 所做的事情。
## 企业安全最佳实践
## 企业安全最佳实践
我们意见看到了大量的对 WPA/WPA2 的攻击,有个人也有企业。基于我们的经验,我们推荐下列事情:
我们意见看到了大量的对 WPA/WPA2 的攻击,有个人也有企业。基于我们的经验,我们推荐下列事情:
+ 对于 SOHO 和中型公司,使用强密码的 WPA2你总共能输入 63 个字符,好好利用它们。
+ 对于 SOHO 和中型公司,使用强密码的 WPA2你总共能输入 63 个字符,好好利用它们。
+ 对于大型企业,使用带有 EAP-TLS 的企业级 WPA2。这会同时在客户端和服务器使用证书来验证目前没办法攻破。
+ 对于大型企业,使用带有 EAP-TLS 的企业级 WPA2。这会同时在客户端和服务器使用证书来验证目前没办法攻破。
+ 如果你需要带有 PEAP 或者 EAP-TTLS 的 WPA2确保你的证书验证打开选择了正确的签发机构RADIUS 服务器开启了授权,最后,关闭任何允许用户接受新的 RADIUS 服务器、证书或者签发机构的配置。
+ 如果你需要带有 PEAP 或者 EAP-TTLS 的 WPA2确保你的证书验证打开选择了正确的签发机构RADIUS 服务器开启了授权,最后,关闭任何允许用户接受新的 RADIUS 服务器、证书或者签发机构的配置。
## 小测验 -- 攻击企业级 WPA 和 RADIUS
## 小测验 -- 攻击企业级 WPA 和 RADIUS
Q1 FreeRADIUS-WPE 是什么?
Q1 FreeRADIUS-WPE 是什么?
1. 从头开始编写的 RADIUS 服务器。
2. FreeRADIUS 服务器的补丁。
3. 所有 Linux 默认自带的版本。
4. 以上都不是。
1. 从头开始编写的 RADIUS 服务器。
2. FreeRADIUS 服务器的补丁。
3. 所有 Linux 默认自带的版本。
4. 以上都不是。
Q2 下列哪个可以用于攻击 PEAP
Q2 下列哪个可以用于攻击 PEAP
1. 伪造验证信息
2. 伪造证书
3. 使用 WPA-PSK
4. 以上全部
1. 伪造验证信息
2. 伪造证书
3. 使用 WPA-PSK
4. 以上全部
Q3 EAP-TLS 使用了什么?
Q3 EAP-TLS 使用了什么?
1. 客户端证书
2. 服务端证书
3. 1 或者 2
4. 1 和 2
1. 客户端证书
2. 服务端证书
3. 1 或者 2
4. 1 和 2
Q4 EAP-TTLS 使用了什么?
Q4 EAP-TTLS 使用了什么?
1. 只有客户端证书
2. 服务端证书
3. 基于密码的验证
1. 只有客户端证书
2. 服务端证书
3. 基于密码的验证
4. LEAP
## 总结
## 总结
这一章中,我们看到了如何攻破运行 PEAP 或者 EAP-TTLS 的企业级 WPA。它们是两个用于企业的最常见的验证机制。
这一章中,我们看到了如何攻破运行 PEAP 或者 EAP-TTLS 的企业级 WPA。它们是两个用于企业的最常见的验证机制。
下一章中,我们会看一看如何把我们学到的所有东西用于真实的渗透测试。
下一章中,我们会看一看如何把我们学到的所有东西用于真实的渗透测试。