kali-linux-wireless-pentest/ch10.md

221 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 第十章 WPS 和 探针
> 作者Vivek Ramachandran, Cameron Buchanan
> 译者:[飞龙](https://github.com/)
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
## 简介
> 太阳底下无新事。
> -- 谚语
这一章由新的技巧组成,包括攻击 WPS 和探针监控,也包含了使无线测试更简单的 pineapple 工具。这些攻击和工具在本书第一版的发布过程中出现,我们要确保这本书尽可能全面。
## 10.1 WPS 攻击
无线保护设置WPS在 2006 年被引入,用于帮助没有无线知识的用户保护网络。其原理是它们的 WIFI 拥有单一隐藏的硬编码值,它可以允许密钥记忆来访问。新的设备可以通过按下 WIFI 路由上的按钮来验证。在房子外面的人不能解除设备,就不能获得访问权。所以这个问题被降解为记住 WPA 密钥或者设置更短的密钥。
2011 年末,爆破 WPS 验证系统的安全漏洞被公开。协商 WPS 交换所需的流量易于被一篇,并且 WPS Pin 本身只有 0~9 的 8 个字符。最开始,这可以提供 100,000,000 中可能性与之相比8 个字符的 azAZ09 密码拥有 218,340,105,584,896 种组合。
但是,这里存在进一步的漏洞:
+ 在 WPS Pin 的八个字符中,最后一个是前七个的校验和,所以它可以预测,选择就只剩下 10,000,000 种了。
+ 此外,前四个和后三个字符分别验证,这意味着一共有 11,000 种选择。
虽然验证机制中要判断两次,但是我们已经从 100,000,000 个可能的组合降到了 11,000。这相当于爆破算法时的六个小时的差异。这些判断使 WPS 更易受攻击。
在下一个实验中,我们会使用 Wash 和 Reaver 识别和攻击 WPS 漏洞配置。
### 实战时间 -- WPS 攻击
遵循以下步骤来开始:
1. 在我们攻击开启了 WPS 的接入点之前:我们首先要创建它。我们所使用的 TP-LINK 拥有这个也行,默认开启,它非常麻烦还是便捷。为了再三检查它,我们可以登入我们的路由并点击 WPS。它看起来是这样
![](img/10-1-1.jpg)
2. 现在我们确认它准备好了。我们需要启动我们的目标。我们需要配置我们的测试环境。我们打算使用 Wash 工具,并且 Wash 需要监控器接口来生效。就像我们之前做的那样,我们需要使用下列命令来启动:
```
airmon-ng start wlan0
```
输出是这样:
![](img/10-1-2.jpg)
3. 我们拥有了监控接口,设置为`mon0`,我们可以使用下列命令调用 Wash
```
wash --ignore-fcs -i mon0
```
`ignore fcs`选项是由于`wash`导致的已知请求格式的问题:
![](img/10-1-3.jpg)
4. 我们会展示所有附近 支持 WPS 的设备。以及它们是否开启或解锁了 WPS以及它们的版本
![](img/10-1-4.jpg)
5. 我们可以看到`Wireless Lab `支持 WPS。它使用版本 1 并且没有锁住。太好了。我们注意到 MAC 地址,它在我这里是`E8:94:F6:62:1E:8E`,这会作为下一个工具`reaver`的目标。
6. Reaver 尝试爆破给定 MAC 地址的 WPS Pin。启动它的语法如下
```
reaver -i mon0 -b <mac> -vv
```
输出是这样:
![](img/10-1-5.jpg)
7. 启动之后,这个工具执行所有可能的 WPS 组合,并尝试验证。一旦它完成了,它会返回 WPS 码和密码,像这样:
![](img/10-1-6.jpg)
8. 得到 WPA-PSK 之后,我们可以正常验证了。我把匹配 WPS Pin 的默认的 WPA-PSK 留给我的设备,你可以通过在`reaver`中指定 Pin 来实现,使用下列命令:
```
reaver -i mon0 -b <mac> -vv -p 88404148
```
将我的 Pin 换成你的。
### 刚刚发生了什么?
我们使用 Wash 成功识别了带有 WPS 漏洞实例的无线网络。之后我们使用 Reaver 来恢复 WPA 密钥和 WPS Pin。使用这个信息我们之后能够验证网络并继续网络渗透测试。
### 试一试 -- 速率限制
在之前的联系中,我们攻击了整个未加密的 WPS 安装。我们可以使用多种方法来进一步探索安全的安装,不需要移除 WPS。
尝试将 WPS Pin 设置为任意值并再次尝试,来看看 Reaver 是否能够快速破解。
获得允许你限制 WPS 尝试速率的路由器。尝试和调整你的攻击来避免触发锁定。
## 10.2 探针嗅探
我们已经谈到了探针,以及如何使用它们来识别隐藏的网络,和执行有效的伪造接入点攻击。它们也可以将个体识别为目标,或者在大范围内以最少的努力识别它们。
当设备打算连接网路是,它会发送探测请求,包含它自己的 MAC地址和想要连接的网络名称。我们可以使用工具例如`airodump-ng`来跟踪它们。但是,如果我们希望识别个体是否在特定位置特定时间内出现,或者在 WIFI 使用中发现趋势,我们就需要不同的方式。
这一节中,我们会使用 tshark 和 Python 来收集数据。你会收到代码和完成了什么的解释。
### 实战时间 -- 收集数据
遵循下列指南来开始:
1. 首先,我们需要寻找多个网络的设备。通常,普通的安卓或者 iPhone 智能收集就足够了。台式机通常不是良好的目标,因为它们只能待在一个地方。新的 iPhone 或安卓设备可能禁用了探测请求,或者不清楚,所以在你放弃之前检查一下。
2. 一旦你搞定了设备,确保打开了 WIFI。
3. 之后启动你的监控接口,像之前那样。
![](img/10-2-1.jpg)
4. 下面要完成的事情就是使用`tshark`寻找探测请求,通过下列命令:
```
tshark -n -i mon0 subtype probereq
```
命令的截图如下:
![](img/10-2-2.jpg)
5. 你这里的输出会有些混乱,因为`tshark`的默认输出没有为可读而涉及,只是尽可能展示很多信息。它看起来应该是这样:
![](img/10-2-3.jpg)
6. 你已经可以看到 MAC 地址和探测请求的 SSID。但是输出还可以更好。我们可以使用下列命令来使其更加可读取
```
tshark n i mon0 subtype probereq T fields e separator= -e wlan.sa e wlan_mgt.ssid
```
命令的截图如下:
![](img/10-2-4.jpg)
7. 输出会变得更加可读:
![](img/10-2-5.jpg)
8. 所以现在我们获得了可读格式的输出,下面呢?我们要创建 Python 脚本,执行命令并记录输出用于之后的分析。在执行代码之前,你需要确保你准备好了监控接口,并在目录中创建了`results.txt `文件。Python 脚本如下:
```py
import subprocess
import datetime
results = open("results.txt", "a")
while 1:
blah = subprocess.check_output(["tshark n i mon0 subtype probereq T fields e separator= -e wlan.sa e wlan_mgt.ssid c 100"], shell=True)
splitblah = blah.split("\n")
for value in splitblah[:-1]:
splitvalue = value.split("\t")
MAC = str(splitvalue[1])
SSID = str(splitvalue[2])
time = str(datetime.datetime.now())
Results.write(MAC+" "+SSID+" "+time+"\r\n")
```
让我们简单看一看 Python 脚本:
+ `import subproces`库和`datetime `库:这允许我们引用子进程和日期时间库。`subprocess `允许我们从 Linux 命令行监控接口,而`datetime`库允许我们获得准确时间和日期。
+ `while 1`:这行代码在停止之前一直执行。
+ `results = open("results.txt", "a")`:这使用附加模式打开了文件,并将其赋给`results`。附加模式只允许脚本添加文件的内容,这会防止文件被覆写。
+ `blah = subprocess.check_output(["tshark n I mon0 subtype probereq T fields e separator= -e wlan.sa e wlan_mgt.ssid c 100"], shell=True)`:这打开了 shell 来执行我们之前侧事故的`tshark`命令。这次唯一的区别就是`-c 100`。这个选项所做的就是将命令限制为 100 个查询。这允许我们将节骨哦返回给我们自己,而不需要停止程序。因为我们说过在写入结果之后永远运行,这个脚本会再次启动。
+ 这行代码从 shell 获得输出,并将其赋给变量`blah`。
+ `splitblah = blah.split("\n")`:接收变量`blah`并按行分割。
+ `for value in splitblah[:-1]`:对输入的每一行重复下面的操作,忽略包含头部的第一行。
+ `splitvalue = value.split("\t")`:将每一行拆分成更小的片段,使用`tab`字符作为分隔符。
+ 下面的三行接收每个文本段并将其赋给变量:
```py
MAC = str(splitvalue[1])
SSID = str(splitvalue[2])
time = str(datetime.datetime.now()
```
+ `results.write(MAC+" "+SSID+" "+time+"\r\n")`:接收所有这些值,将其写到文件中,由空格分隔,为了整洁最后附带回车和换行符。
写到文件的输出是整洁的文本行。
## 刚刚发生了什么?
我们从探测请求接收输入,并将其使用 Python 输出到文件中。
你可能会问自己它的目的是什么。这可以仅仅通过执行原始的`tshark`命令并添加`>> results.txt`来完成。你是对的,但是,我们创建了集成其它工具,可视化平台,数据库,以及服务的框架。
例如,使用 WiGLE 数据库,将 SSID 映射为位置,你就可以添加新的代码行接受 SSID 变量并查询 WIGLE 数据库。
作为替代,你也可以建立 MySQL 数据库并将输出保存到这里来执行 SQL 命令。
这一节向你提供了创建你自己的探测监控攻击的第一步。通过这个实验,并使用这个简单的代码作为第一步,就可以创建多数实用的工具。
### 试一试 -- 扩展概念
研究什么工具可用于可视化和数据分析,并易于集成到 Python。例如 Maltego 的工具拥有免费版本,可以用于绘制信息。
为你自己建立 MySQL数据库来记录数据和重新调整之前的 Python 脚本,将结果输出到数据库。之后,构建另一个脚本(或在相同文件中)来获得数据并输出到 Maltego。
重新调整脚本来查询 WIGLE之后从探测请求中收集地理位置数据。通过 Maltego 来输出数据。
尝试通过 Flask、Django 或 PHP 建立 Web 前端来展示你的数据。为展示数据研究现有的解决方案,并尝试通过与它们的创建者交谈来模拟和改进它们。
## 总结
这一章中,我们谈论了针对 WPS 的攻击,它在本书第一版的发布过程中出现。同时也初步尝试了将无线工具使用 Python 集成。我们已经到达了本书的末尾,我希望它充实而又有趣。七年后的第三版再见吧。