天天看点

实战无线网络分析(篇一)无线监听

实战无线网络分析(篇一)无线监听

我一直对无线技术很感兴趣,记得大学里的时候买过好多本《无线电》杂志在寝室里研究,也幻想着搭建一个自己的无线电台,或者在茫茫的虚空中和另一个不知道躲在哪个角落中的家伙通讯。无线的魅力在于它的简洁,不拖泥带水,没有任何多余的部分。仔细想一想两个设备,它们之间不通过任何有形媒介进行通讯,这是一件多么不可思议的事情。

那个时候的自己,对无线技术只是感性的认识,仅仅停留在肤浅的表面,甚至完全不明白工作站(STA)和接入点(AP)之间是如何实现通信的。只知道照着网上的教程,使用 BT3 的工具包,破解了隔壁宿舍的 Wifi 密码,知其然,但不知其所以然。最近心血来潮,重温了一遍很久之前写的那篇破解 Wifi 密码的博客,又回过头来将无线的知识重新梳理了一遍。仅以此博客记录之。

这个博客共有三篇,第一篇介绍如何在我们的笔记本上监听无线通信,第二篇对无线通信的协议和原理进行分析,第三篇通过实例学习我们日常生活中最常见的 WPA/WPA2-PSK 的工作原理,以及如何破解它。

一、无线监听概述

当你使用笔记本在星巴克一边喝咖啡一边浏览网页时,或是使用手机聊着微信看着朋友圈时,你无时无刻不在无线通信。而你不知道的是,可能在不远处的某个角落,某个人正在监听着你的一举一动,因为我们周边的空气中到处都弥漫着无线电磁波,你的无线通信可以被所有人看到。

可能上面的说法有些耸人听闻,但事实就是这样,而现实生活中的窃听、拦截、篡改、钓鱼等等,比这个更有甚者。无线网络和有线网络最大的区别在于它们使用的通信媒介,有线网络使用的是实体的、物理存在的线缆作为传输的媒介,而无线网络则通过不可见的电波进行通信。由于电波通信是广播出去的,任何人都可以看到,所以如何确保无线通信的安全变得格外重要,也更困难。下面我们介绍如何监听无线网络。

二、无线网卡的监听模式

2.1 无线网卡的工作模式

无线网络的特性可能让人联想到古老的集线器(Hub)网络,在集线器网络中,所有通过集线器的数据都会被转发给该集线器所有的接口,也就是说,只要连接在该集线器上的机器,就可以监听该网络上的所有机器的网络通信。默认情况下,网卡只会接受发给自己的数据报文,将其他的报文统统丢弃。当然也可以让网卡接受所有的报文,这就是所谓的混杂模式(promiscuous mode)。

无线网卡跟这个很类似,默认情况下无线网卡和无线接入点(Wireless Access Point,WAP)建立连接后,就处于托管模式(Managed mode),在这个模式下,无线网卡只专注于接受从 WAP 发给自己的数据报文。如果想让无线网卡监听空气中所有的无线通信,则可以将无线网卡设置成监听模式(Monitor mode,也叫 RFMON 模式),然后再使用诸如 Wireshark 之类的软件捕获数据报文进行分析。

无线网卡除了 Managed mode 和 Monitor mode 这两个模式之外,其实还支持好几种其他的模式,譬如:Ad hoc(也叫 IBSS 模式) 和 Master mode ,Linux Wireless 站点上对此有详细的介绍,也可以参考 Chris 的 《Wireshark 数据包分析实战》第 11 章,下面附一张无线网卡的几种工作模式的示意图。

实战无线网络分析(篇一)无线监听

在这里我们最关心的自然是监听模式,下面将介绍几种方法来将无线网卡设置成监听模式。当然,如果你想将无线网卡设置成监听模式,首先你的无线网卡必须得支持,不同的无线网卡启用监听模式的方式可能也各不相同,所以进行后面的操作之前最好先 Google 一下你的网卡型号,参考官方的使用说明。我在上一篇博客中讲到了如何查看自己网卡的型号,以及如何安装无线网卡驱动,可以参考之。aircrack-ng 官网上也有一篇很好的文档介绍如何安装无线网卡驱动:Install drivers 。在确定自己的网卡型号和安装的驱动之后,可以在 Linux wireless 上查看下自己的网卡支持哪些模式。譬如我的无线网卡型号是 Atheros AR9280 ,安装的驱动是 ath9k ,从表格中可以看出它支持监听模式,另外还支持 cfg80211,AP 模式,IBSS 等等高级玩意,由于 ath9k 是一款完全免费并且开源(FOSS)的无线驱动,有时间可以去研究下它的源码。

实战无线网络分析(篇一)无线监听

2.2 使用 iwconfig 设置网卡的监听模式

在 Linux 环境下,有一个命令估计大家都用过:

ifconfig

,它用来显示或配置网络设备,譬如最常见的查看网卡 IP 地址,或者启用禁用某个网卡,修改网卡的 MAC 地址等等。如果要管理无线网卡,另一个命令是 

iwconfig

,可以用来查看无线网卡的状态,或修改无线网卡的模式。最简单的用法是不带任何参数,如下所示:

1

2

3

4

5

6

7

8

9

10

11

$ iwconfig

lo        no wireless extensions.

wlan0     IEEE 802.11bgn  ESSID:"defenceOTA" 

Mode:Managed  Frequency:2.412 GHz  Access Point: 6C:72:20:5D:7F:57  

Bit Rate=130 Mb/s   Tx-Power=16 dBm  

Retry short limit:7   RTS thr:off   Fragment thr:off

Power Management:off

Link Quality=50/70  Signal level=-60 dBm 

Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0

Tx excessive retries:3  Invalid misc:4   Missed beacon:0

可以列出系统中当前正在使用的无线网卡,以及无线网卡的模式,支持的无线协议,ESSID(无线扩展服务设置 ID,Extended Service Set ID),信号强度等。从上面的例子中可以看出,wlan0 为无线网卡,当前网卡的运行模式为托管模式(Managed)。

大多数情况下,都可以使用下面的流程来启用无线网卡的监听模式(注意:必须以 root 身份运行):

1

2

3

4

$ su

# ifconfig wlan0 down

# iwconfig wlan0 mode monitor

# ifconfig wlan0 up

其中第一条命令将无线网卡 wlan0 停用,这一步有时不是必须的,但最好尝试先停用无线网卡,否则很可能报下面这样的错误:Device or resource busy 。

1

2

3

$ sudo iwconfig wlan0 mode monitor

Error for wireless request "Set Mode" (8B06) :

SET failed on device wlan0 ; Device or resource busy.

第二条命令设置 wlan0 的模式,这里是将其设置成 monitor mode,当然也可以设置成其他的模式,譬如 

iwconfig wlan0 mode master

 可以将无线网卡设置成主模式。最后再启用无线网卡,这时无线网卡就是以监听模式运行的了,可以使用 

iwconfig

 命令确认一下。

最后我们还可以使用下面的命令改变监听的信道:

1

# iwconfig wlan0 channel 3

踩坑:为什么使用 iwconfig 将无线网卡设置成监听模式后,过几秒又会自动变成托管模式?

这个问题出现在你的笔记本已经连接上 Wifi 这种情况下,大多数情况下罪魁祸首就是 

Network Manager

 服务。如果无线网卡已经连接了 AP,则 

Network Manager

 会检测无线网卡的模式,自动将其设置为 managed mode。所以你可以尝试断开无线连接,或者使用下面的命令停止 

Network Manager

 服务。

1

# service network-manager stop

2.3 使用 airmon-ng 设置网卡的监听模式

如果你只是想将无线网卡设置成监听模式,使用 

iwconfig

 命令足矣,这时你就可以使用诸如 Wireshark 之类的抓包工具截取无线网络报文了。但是使用 

iwconfig

 有一点不爽的地方在于,抓包时网卡是处于监听模式的,这时不能通过 Wifi 连接互联网,否则网卡又会自动切换回托管模式,这在你想一边抓包一边上网时会非常不便。所以你有另一个选择,也是更好的选择:

airmon-ng

 。

相信很多学习无线破解的同学都是看着 

aircrack-ng

 的破解教程入门的,确实,在无线破解这个领域,

aircrack-ng

 的地位简直是神一般的存在。

aircrack-ng

 提供了一整套无线工具,每一个都小巧精练,各有春秋,如瑞士军刀一般,

airmon-ng

 就是其中之一。

首先不带任何参数直接运行它(必须以 root 身份执行):

1

2

3

4

5

6

$ sudo airmon-ng

Interface   Chipset     Driver

wlan0       Atheros AR9280  ath9k - [phy0]

enx0        Unknown     rtl8812au

可以列出当前所有的无线网卡,每一行显示出每个网卡接口的名字,芯片类型,以及安装的驱动程序。然后使用下面的命令将网卡设置成监听模式:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

$ sudo airmon-ng start wlan0

Found 3 processes that could cause trouble.

If airodump-ng, aireplay-ng or airtun-ng stops working after

a short period of time, you may want to kill (some of) them!

PID Name

12341   NetworkManager

12354   wpa_supplicant

12363   dhclient

Process with PID 12363 (dhclient) is running on interface wlan0

Interface   Chipset     Driver

wlan0       Atheros AR9280  ath9k - [phy0]

(monitor mode enabled on mon0)

和 

iwconfig

 不同的是,

airmon-ng

 新建了一个虚拟网卡 mon0,并在 mon0 上启用了监听模式,真实的无线网卡 wlan0 保持不变,还是运行在托管模式下,这样你就可以上网抓包两不误了。这个命令还有一个有意思的地方在于,它会检测系统中当前正在运行的进程,分析出哪些进程可能会对无线抓包有影响,并显示出来。你可以单独使用 

airmon-ng check

 命令来做检测,还可以使用 

airmon-ng check kill

 直接 kill 掉那些可能有影响的进程。更多用法可以参考 airmon-ng 的官方文档。

2.4 使用 iw 监听无线网络

iw

 是 Linux 系统上的另一款无线配置工具,它的出现是为了解决 

iwconfig

 的很多不足,或者说它完全是为了取代 iwconfig 而开发的。

之所以要新开发一套无线配置工具,还要从无线扩展(Wireless-Extensions)说起。Wireless-Extensions(简称 WE,或者 Wext) 是由 Jean Tourrilhes 1997 年开发并添加到 Linux 内核的,它通过 Linux 的系统调用 

ioctl()

 来实现用户层和内核层之间的通信。由于设计的比较粗糙,使用 WE 开发的程序很难管理,并且由于它年代久远,WE 除了一些基本的 bugfix 之外也无人维护了,所以亟需一种新的无线驱动框架来指导无线程序的开发。于是便出现了 cfg80211 和 nl80211 。需要特别指出的是 cfg80211 不再使用 ioctl 系统调用,而是使用 Netlink(基于 socket 通信)。iw 就是完全基于 cfg80211 框架重新设计并开发的。

使用 iw 不仅可以实现和 iwconfig 完全一样的功能,而且它的用法要更丰富(当然也更复杂),可以先使用 

iw help

 查看它的使用帮助(友情提醒:使用 iw 之前先得有个心理准备,iw 命令的输出大多比较晦涩,而且你可能会被它大片大片的技术信息所吓住,不用急,从上往下慢慢看)。下面的几个命令可能是你想尝试的:

1

# iw list

列出所有的无线设备,以及每个无线设备的详细信息,真的非常详细,非常专业,可能会吓住你,如果要显示的简单点,可以使用:

1

2

3

4

5

6

7

8

9

# iw dev

# iw dev wlan0 info

phy#0

Interface wlan0

ifindex 3

wdev 0x1

addr 00:17:c4:e8:67:20

type managed

channel 1 (2412 MHz), width: 40 MHz, center1: 2422 MHz

这个命令和 iwconfig 类似,显示出无线接口的名称,网卡模式,所处的频道等,这些都是接口的属性,无论有没有连接 AP ,只要你没有修改过它,接口的属性都是固定的,如果你连接了 AP ,还可以使用下面的命令查看跟连接相关的信息(SSID,频率,信号强度等):

1

2

3

4

5

6

7

8

9

10

11

12

# iw dev wlan0 link

Connected to 6c:72:20:5d:7f:57 (on wlan0)

SSID: defenceOTA

freq: 2412

RX: 202000891 bytes (213176 packets)

TX: 11249479 bytes (110592 packets)

signal: -60 dBm

tx bitrate: 108.0 MBit/s MCS 5 40MHz

bss flags:  short-preamble short-slot-time

dtim period:    1

beacon int: 100

当然,我们最关心的,还是将网卡设置为监听模式:

1

2

# iw dev wlan0 interface add mon0 type monitor

# ifconfig mon0 up

上面的命令新增了一个虚拟网卡接口 mon0 ,并将 mon0 设置为监听模式。这个命令和上面的 

airmon-ng

 的效果几乎是一样的,wlan0 仍然保持 managed 模式不变,新增的 mon0 运行在 monitor 模式下。虚拟接口新增之后记得要使用 

ifconfig up

 启用起来,再通过下面的命令设置频率。

1

# iw dev mon0 set freq 2437

三、扫描无线网络

至此,我们已经准备就绪,网卡已经具备了监听周围无线信号的能力,这个时候你可以启动 Wireshark 开始数据分析之路了。但是直接分析,可能会完全没有头绪,找不到方向,因为 Wireshark 会捕获所有流经网卡的数据,如果你周围的无线热点很多,将是一场数据报灾难。所以,我们决定有的放矢,先扫描周围都有哪些无线热点,以及哪些无线设备,然后再有针对性的抓取指定热点的报文。

3.1 iw 和 iwlist

上节中介绍的 

iw

 命令,以及 Linux 自带的另一个无线命令 

iwlist

 可以实现简单的扫描功能,譬如 iw 的扫描命令如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

$ sudo iw dev wlan0 scan

BSS 6c:72:20:5d:7f:57(on wlan0) -- associated

TSF: 1060538844661 usec (12d, 06:35:38)

freq: 2412

beacon interval: 100 TUs

capability: ESS Privacy ShortPreamble ShortSlotTime (0x0431)

signal: -61.00 dBm

last seen: 184 ms ago

Information elements from Probe Response frame:

SSID: defenceOTA

Supported rates: 1.0* 2.0* 5.5* 11.0* 9.0 18.0 36.0 54.0

DS Parameter set: channel 1

ERP: <no flags>

Extended supported rates: 6.0 12.0 24.0 48.0

HT capabilities:

Capabilities: 0x11ee

HT20/HT40

SM Power Save disabled

RX HT20 SGI

RX HT40 SGI

TX STBC

RX STBC 1-stream

Max AMSDU length: 3839 bytes

DSSS/CCK HT40

Maximum RX AMPDU length 65535 bytes (exponent: 0x003)

Minimum RX AMPDU time spacing: 4 usec (0x05)

HT RX MCS rate indexes supported: 0-15, 32

HT TX MCS rate indexes are undefined

HT operation:

* primary channel: 1

* secondary channel offset: above

* STA channel width: any

* RIFS: 0

* HT protection: 20 MHz

* non-GF present: 1

* OBSS non-GF present: 0

* dual beacon: 0

* dual CTS protection: 0

* STBC beacon: 0

* L-SIG TXOP Prot: 0

* PCO active: 0

* PCO phase: 0

WPA:     * Version: 1

* Group cipher: TKIP

* Pairwise ciphers: TKIP CCMP

* Authentication suites: PSK

RSN:     * Version: 1

* Group cipher: TKIP

* Pairwise ciphers: TKIP CCMP

* Authentication suites: PSK

* Capabilities: 1-PTKSA-RC 1-GTKSA-RC (0x0000)

WMM:     * Parameter version 1

* BE: CW 15-1023, AIFSN 3

* BK: CW 15-1023, AIFSN 7

* VI: CW 7-15, AIFSN 2, TXOP 3008 usec

* VO: CW 3-7, AIFSN 2, TXOP 1504 usec

BSS Load:

* station count: 4

* channel utilisation: 164/255

* available admission capacity: 31250 [*32us]

Overlapping BSS scan params:

* passive dwell: 20 TUs

* active dwell: 10 TUs

* channel width trigger scan interval: 300 s

* scan passive total per channel: 200 TUs

* scan active total per channel: 20 TUs

* BSS width channel transition delay factor: 5

* OBSS Scan Activity Threshold: 0.25 %

Extended capabilities: HT Information Exchange Supported

Country: CN Environment: Indoor/Outdoor

Channels [1 - 13] @ 16 dBm

WPS:     * Version: 1.0

* Wi-Fi Protected Setup State: 1 (Unconfigured)

* Response Type: 3 (AP)

* UUID: 28802880-2880-1880-a880-6c72205d7f57

* Manufacturer: Ralink Technology, Corp.

* Model: Ralink Wireless Access Point

* Model Number: RT2860

* Serial Number: 12345678

* Primary Device Type: 6-0050f204-1

* Device name: DIR-816

* Config methods: Label, Display

* RF Bands: 0x1

* Unknown TLV (0x1049, 6 bytes): 00 37 2a 00 01 20

该命令会打印出大量的信息,每个无线热点以及它的详细信息都会被展示出来,可以使用下面的技巧只显示 SSID 和 BSS:

1

2

3

4

5

6

7

$ sudo iw dev wlan0 scan | egrep "^BSS|SSID"

BSS 6c:72:20:5d:7f:57(on wlan0) -- associated

SSID: defenceOTA

BSS 14:75:90:ac:96:98(on wlan0)

SSID: ak

BSS b0:48:7a:77:28:ee(on wlan0)

SSID: TP-LINK_7728EE

使用 

iwlist

 的命令格式如下:

1

$ sudo iwlist wlan0 scan

同样的,这个命令会打印大量的信息。可以使用下面的技巧显示精简信息:

1

2

3

4

5

6

7

8

9

10

11

12

13

$ sudo iwlist wlan0 scan | egrep "Cell|ESSID|Channel"

Cell 01 - Address: 6C:72:20:5D:7F:57

Channel:1

Frequency:2.412 GHz (Channel 1)

ESSID:"defenceOTA"

Cell 02 - Address: 80:89:17:B9:2C:C2

Channel:1

Frequency:2.412 GHz (Channel 1)

ESSID:"wangshiyuan"

Cell 03 - Address: EC:26:CA:CC:9B:9A

Channel:1

Frequency:2.412 GHz (Channel 1)

ESSID:"XIANGLAN\'S FAMILY"

3.2 kismet

虽然 

iw

 和 

iwlist

 命令的输出都不是很友好,但是在缺少其他选择的时候,这两个命令都可以帮上不少忙。当然,如果有更好的选择,我还是推荐使用下面的 

kismet

 和 

airodump-ng

,他们不仅界面上很酷,而且功能上也更强大。我们先介绍 kismet 。

kismet 是一款 Linux 下的无线扫描程序,它的功能非常强大,不仅可以用来扫描周边的无线网络,也支持无线数据包的嗅探和破解,它还可以扫描出周围隐藏的无线热点,更厉害的是,它还内置了 IDS(Intrusion Detection System,入侵检测系统)功能,可以检测出周围是否有无线嗅探器(比如 NetStumbler)。此外,它的插件功能也很优秀,可以支持 GPS和蓝牙的扫描。它被收录在 Kali Tool 里。

在 Ubuntu 系统下可以直接使用 

apt-get install kismet

 来安装,安装完成之后,以 root 身份运行即可(kismet 也可以以非 root 身份运行,但功能会非常有限)。运行 kismet 之后,会弹出几个框框,使用 Tab 键移动焦点位置,选择 OK 一路往下。其中有一步会提供输入网卡接口的名称,上一节的几个命令都可以查看你的无线网卡接口名称,一般来说名称就叫 wlan0 或 ath0 之类的(特别注意的是,kismet 会自动将网卡设置成监听模式,如果你输入 wlan0,会创建出一个 wlan0mon 的监听网卡,所以如果你已经启用了监听模式,譬如使用上面的例子创建了一个 mon0 的监听网卡,可以直接填 mon0)。

完全配置好之后,我们就可以体验 kismet 的强大功能了。在这里我们只关心它的无线扫描功能,kismet 不仅可以扫描出周边所有的无线接入点,而且还可以扫描出每个无线接入点的客户端,这在我们有针对性的嗅探和攻击时非常有用。kismet 的使用界面如下图所示(very cool),具体的使用方法和快捷键参考 kismet 文档。

实战无线网络分析(篇一)无线监听

3.3 airodump-ng

我们要介绍的另一个无线扫描程序是 airodump-ng,看名字就知道,它也和 airmon-ng 一样,是 aircrack-ng 套件中的一个,而且它常常和 airmon-ng 配合使用,像下面这样:

1

2

# airmon-ng start wlan0

# airodump mon0

airodump-ng 的运行界面如下图所示:

实战无线网络分析(篇一)无线监听

可以看到,airodump-ng 的功能和 kismet 可以说是不相上下,在扫描网络这一方面,两个工具都可以扫描到周围所有的无线接入点(包括隐藏的接入点),以及正在连接接入点的工作站(比如手机等)。图中信息量比较大,下面简单总结一下每一行每一列的意义,详细信息可以参考 airodump-ng 的文档。

  • BSSID:表示无线 AP 的 Mac 地址。
  • PWR:信号强度,值越大,表示信号越强。它的值一般都是一个负数,所以上图中除了 -1, -57 是最大的,表示该接入点离的最近,信号最好。PWR 值为 -1,说明不支持信号强度的查看。
  • Beacons:Beacon 是无线数据包中最有用的一种,叫做信号数据包。802.11 的数据包按类型可以分成三类:管理、控制和数据。管理类数据包又可以分为三种子类型:认证(authentication)、关联(association)和信号(beacon)数据包。Beacon 由 WAP 发送,穿过无线信道通知所有无线客户端存在这个 WAP,并定义了连接它必须设置的一些参数。
  • #Data:捕获到的数据分组的数量,包括广播分组。
  • CH:信道号。
  • MB:WAP 所支持的最大速率。
  • ENC:使用的加密算法体系。

    OPN

     表示无加密,

    WEP?

     表示 WEP 或者 WPA/WPA2,

    WEP

     表示静态的或者动态的 WEP,当然,WEP 加密很早就已经遭淘汰了,目前最常见的是 

    WPA

     和 

    WPA2

  • CIPHER:使用的加密算法。常见的算法有:CCMP、WRAAP、TKIP、WEP 等。
  • AUTH:使用的认证协议。常用的有:MGT(WPA/WPA2 使用独立的认证服务器,譬如 802.1x、RADIUS、EAP 等),SKA(WEP 的共享密钥),PSK(WPA/WPA2 的预共享密钥)和 OPN(开放式)。
  • ESSID:所谓的 SSID 号,如果启用隐藏的话,ESSID 可以为空,或者显示为 <length: 0>。
  • STATION:客户端的 Mac 地址,包括连上的和想要连的客户端。如果客户端没有连上 AP,ESSID 列显示成 (not associated)。
  • Probe:被客户端查探的 ESSID,如果客户端正在试图连接一个 AP,但是没有连接上,将会显示在这里。

四、抓包

到这里,万事具备,只欠东风。我们具备了监听无线通信的能力,也可以扫描出周围的无线接入点和客户端信息,下一步就是挑选一个你感兴趣的接入点,开始抓包吧。

4.1 使用 kismet 和 airodump-ng 抓包

上面在介绍 kismet 和 airodump-ng 的时候,都只是展示了它们扫描网络的功能,实际上,从 airodump-ng 的名字也可以看出来,它不仅可以扫描网络,还可以捕获无线数据报文。

譬如在启动 kismet 的时候,kismet 就会在启动目录生成好几个文件,如下。

1

2

3

4

5

6

$ ls -l Kis*

-rw-r--r-- 1 root root       0 8月  15 22:32 Kismet-20160815-22-32-05-1.alert

-rw-r--r-- 1 root root     264 8月  15 22:32 Kismet-20160815-22-32-05-1.gpsxml

-rw-r--r-- 1 root root   25111 8月  15 22:32 Kismet-20160815-22-32-05-1.nettxt

-rw-r--r-- 1 root root   57768 8月  15 22:32 Kismet-20160815-22-32-05-1.netxml

-rw-r--r-- 1 root root 1822733 8月  15 22:32 Kismet-20160815-22-32-05-1.pcapdump

其中,Kismet-***.pcapdump 就是捕获的数据包,可以使用 Wireshark 等数据包分析工具打开。默认情况下,kismet 会捕获所有的无线通信,数据包会变得非常大,可以通过指定 

filter_tracker

 参数来限制 kismet 只捕获特定 BSSID 的数据包,譬如下面这样:

1

$ sudo kismet --filter-tracker BSSID\(6C:72:20:5D:7F:57\)

而 airodump-ng 默认数据包是不存文件的,可以通过 

--write

 或 

-w

 参数将数据包保存到指定文件中:

1

2

3

4

5

6

$ sudo airodump-ng -w pack mon0

$ ls -l pack*

-rw-r--r-- 1 root root  5645 8月  15 23:48 pack-01.cap

-rw-r--r-- 1 root root  1651 8月  15 23:48 pack-01.csv

-rw-r--r-- 1 root root  2457 8月  15 23:48 pack-01.kismet.csv

-rw-r--r-- 1 root root 13460 8月  15 23:48 pack-01.kismet.netxml

其中,xxx-01.cap 就是捕获的数据包文件,可以使用 Wireshark 打开分析。同样的,这个文件也有可能会很大,因为保存了所有的无线数据报文,如果只需要监听某一个接入点,可以通过 

--bssid

 或 

--essid

 等参数指定:

1

$ sudo airodump-ng mon0 --bssid 6C:72:20:5D:7F:57

4.2 使用 Wireshark 和 tcpdump 抓包

通过上面的方法抓包完成之后,我们就可以使用 Wireshark 打开数据包文件来分析了。其实 Wireshark 除了可以分析数据包文件之外,也可以进行抓包。使用 Wireshark 抓包之前,首先将网卡设置为监听模式,然后在 Wireshark 启动界面中选择处于监听模式的网卡接口,这样就可以了。

使用这种方式,界面上没有 kismet 和 airodump-ng 直观,你将会看到大量的数据包迎面袭来,密集恐惧症患者慎用。好在 Wireshark 具有强大的过滤器功能,可以通过设置下面的过滤器来减少那些我们不感兴趣的数据。

实战无线网络分析(篇一)无线监听

我们这里只关心抓包的方法,关于数据包的分析,我们将在下一篇博客中介绍。最后要介绍的一个抓包工具是大名鼎鼎的 

tcpdump

,它可以说是抓包工具的鼻祖,命令如下:

1

$ sudo tcpdump -i mon0 -n -w wireless.cap

同样的,抓包文件可以使用 Wireshark 打开进行分析,这里不再赘述。

我一直对无线技术很感兴趣,记得大学里的时候买过好多本《无线电》杂志在寝室里研究,也幻想着搭建一个自己的无线电台,或者在茫茫的虚空中和另一个不知道躲在哪个角落中的家伙通讯。无线的魅力在于它的简洁,不拖泥带水,没有任何多余的部分。仔细想一想两个设备,它们之间不通过任何有形媒介进行通讯,这是一件多么不可思议的事情。

那个时候的自己,对无线技术只是感性的认识,仅仅停留在肤浅的表面,甚至完全不明白工作站(STA)和接入点(AP)之间是如何实现通信的。只知道照着网上的教程,使用 BT3 的工具包,破解了隔壁宿舍的 Wifi 密码,知其然,但不知其所以然。最近心血来潮,重温了一遍很久之前写的那篇破解 Wifi 密码的博客,又回过头来将无线的知识重新梳理了一遍。仅以此博客记录之。

这个博客共有三篇,第一篇介绍如何在我们的笔记本上监听无线通信,第二篇对无线通信的协议和原理进行分析,第三篇通过实例学习我们日常生活中最常见的 WPA/WPA2-PSK 的工作原理,以及如何破解它。

一、无线监听概述

当你使用笔记本在星巴克一边喝咖啡一边浏览网页时,或是使用手机聊着微信看着朋友圈时,你无时无刻不在无线通信。而你不知道的是,可能在不远处的某个角落,某个人正在监听着你的一举一动,因为我们周边的空气中到处都弥漫着无线电磁波,你的无线通信可以被所有人看到。

可能上面的说法有些耸人听闻,但事实就是这样,而现实生活中的窃听、拦截、篡改、钓鱼等等,比这个更有甚者。无线网络和有线网络最大的区别在于它们使用的通信媒介,有线网络使用的是实体的、物理存在的线缆作为传输的媒介,而无线网络则通过不可见的电波进行通信。由于电波通信是广播出去的,任何人都可以看到,所以如何确保无线通信的安全变得格外重要,也更困难。下面我们介绍如何监听无线网络。

二、无线网卡的监听模式

2.1 无线网卡的工作模式

无线网络的特性可能让人联想到古老的集线器(Hub)网络,在集线器网络中,所有通过集线器的数据都会被转发给该集线器所有的接口,也就是说,只要连接在该集线器上的机器,就可以监听该网络上的所有机器的网络通信。默认情况下,网卡只会接受发给自己的数据报文,将其他的报文统统丢弃。当然也可以让网卡接受所有的报文,这就是所谓的混杂模式(promiscuous mode)。

无线网卡跟这个很类似,默认情况下无线网卡和无线接入点(Wireless Access Point,WAP)建立连接后,就处于托管模式(Managed mode),在这个模式下,无线网卡只专注于接受从 WAP 发给自己的数据报文。如果想让无线网卡监听空气中所有的无线通信,则可以将无线网卡设置成监听模式(Monitor mode,也叫 RFMON 模式),然后再使用诸如 Wireshark 之类的软件捕获数据报文进行分析。

无线网卡除了 Managed mode 和 Monitor mode 这两个模式之外,其实还支持好几种其他的模式,譬如:Ad hoc(也叫 IBSS 模式) 和 Master mode ,Linux Wireless 站点上对此有详细的介绍,也可以参考 Chris 的 《Wireshark 数据包分析实战》第 11 章,下面附一张无线网卡的几种工作模式的示意图。

实战无线网络分析(篇一)无线监听

在这里我们最关心的自然是监听模式,下面将介绍几种方法来将无线网卡设置成监听模式。当然,如果你想将无线网卡设置成监听模式,首先你的无线网卡必须得支持,不同的无线网卡启用监听模式的方式可能也各不相同,所以进行后面的操作之前最好先 Google 一下你的网卡型号,参考官方的使用说明。我在上一篇博客中讲到了如何查看自己网卡的型号,以及如何安装无线网卡驱动,可以参考之。aircrack-ng 官网上也有一篇很好的文档介绍如何安装无线网卡驱动:Install drivers 。在确定自己的网卡型号和安装的驱动之后,可以在 Linux wireless 上查看下自己的网卡支持哪些模式。譬如我的无线网卡型号是 Atheros AR9280 ,安装的驱动是 ath9k ,从表格中可以看出它支持监听模式,另外还支持 cfg80211,AP 模式,IBSS 等等高级玩意,由于 ath9k 是一款完全免费并且开源(FOSS)的无线驱动,有时间可以去研究下它的源码。

实战无线网络分析(篇一)无线监听

2.2 使用 iwconfig 设置网卡的监听模式

在 Linux 环境下,有一个命令估计大家都用过:

ifconfig

,它用来显示或配置网络设备,譬如最常见的查看网卡 IP 地址,或者启用禁用某个网卡,修改网卡的 MAC 地址等等。如果要管理无线网卡,另一个命令是 

iwconfig

,可以用来查看无线网卡的状态,或修改无线网卡的模式。最简单的用法是不带任何参数,如下所示:

1

2

3

4

5

6

7

8

9

10

11

$ iwconfig

lo        no wireless extensions.

wlan0     IEEE 802.11bgn  ESSID:"defenceOTA" 

Mode:Managed  Frequency:2.412 GHz  Access Point: 6C:72:20:5D:7F:57  

Bit Rate=130 Mb/s   Tx-Power=16 dBm  

Retry short limit:7   RTS thr:off   Fragment thr:off

Power Management:off

Link Quality=50/70  Signal level=-60 dBm 

Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0

Tx excessive retries:3  Invalid misc:4   Missed beacon:0

可以列出系统中当前正在使用的无线网卡,以及无线网卡的模式,支持的无线协议,ESSID(无线扩展服务设置 ID,Extended Service Set ID),信号强度等。从上面的例子中可以看出,wlan0 为无线网卡,当前网卡的运行模式为托管模式(Managed)。

大多数情况下,都可以使用下面的流程来启用无线网卡的监听模式(注意:必须以 root 身份运行):

1

2

3

4

$ su

# ifconfig wlan0 down

# iwconfig wlan0 mode monitor

# ifconfig wlan0 up

其中第一条命令将无线网卡 wlan0 停用,这一步有时不是必须的,但最好尝试先停用无线网卡,否则很可能报下面这样的错误:Device or resource busy 。

1

2

3

$ sudo iwconfig wlan0 mode monitor

Error for wireless request "Set Mode" (8B06) :

SET failed on device wlan0 ; Device or resource busy.

第二条命令设置 wlan0 的模式,这里是将其设置成 monitor mode,当然也可以设置成其他的模式,譬如 

iwconfig wlan0 mode master

 可以将无线网卡设置成主模式。最后再启用无线网卡,这时无线网卡就是以监听模式运行的了,可以使用 

iwconfig

 命令确认一下。

最后我们还可以使用下面的命令改变监听的信道:

1

# iwconfig wlan0 channel 3

踩坑:为什么使用 iwconfig 将无线网卡设置成监听模式后,过几秒又会自动变成托管模式?

这个问题出现在你的笔记本已经连接上 Wifi 这种情况下,大多数情况下罪魁祸首就是 

Network Manager

 服务。如果无线网卡已经连接了 AP,则 

Network Manager

 会检测无线网卡的模式,自动将其设置为 managed mode。所以你可以尝试断开无线连接,或者使用下面的命令停止 

Network Manager

 服务。

1

# service network-manager stop

2.3 使用 airmon-ng 设置网卡的监听模式

如果你只是想将无线网卡设置成监听模式,使用 

iwconfig

 命令足矣,这时你就可以使用诸如 Wireshark 之类的抓包工具截取无线网络报文了。但是使用 

iwconfig

 有一点不爽的地方在于,抓包时网卡是处于监听模式的,这时不能通过 Wifi 连接互联网,否则网卡又会自动切换回托管模式,这在你想一边抓包一边上网时会非常不便。所以你有另一个选择,也是更好的选择:

airmon-ng

 。

相信很多学习无线破解的同学都是看着 

aircrack-ng

 的破解教程入门的,确实,在无线破解这个领域,

aircrack-ng

 的地位简直是神一般的存在。

aircrack-ng

 提供了一整套无线工具,每一个都小巧精练,各有春秋,如瑞士军刀一般,

airmon-ng

 就是其中之一。

首先不带任何参数直接运行它(必须以 root 身份执行):

1

2

3

4

5

6

$ sudo airmon-ng

Interface   Chipset     Driver

wlan0       Atheros AR9280  ath9k - [phy0]

enx0        Unknown     rtl8812au

可以列出当前所有的无线网卡,每一行显示出每个网卡接口的名字,芯片类型,以及安装的驱动程序。然后使用下面的命令将网卡设置成监听模式:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

$ sudo airmon-ng start wlan0

Found 3 processes that could cause trouble.

If airodump-ng, aireplay-ng or airtun-ng stops working after

a short period of time, you may want to kill (some of) them!

PID Name

12341   NetworkManager

12354   wpa_supplicant

12363   dhclient

Process with PID 12363 (dhclient) is running on interface wlan0

Interface   Chipset     Driver

wlan0       Atheros AR9280  ath9k - [phy0]

(monitor mode enabled on mon0)

和 

iwconfig

 不同的是,

airmon-ng

 新建了一个虚拟网卡 mon0,并在 mon0 上启用了监听模式,真实的无线网卡 wlan0 保持不变,还是运行在托管模式下,这样你就可以上网抓包两不误了。这个命令还有一个有意思的地方在于,它会检测系统中当前正在运行的进程,分析出哪些进程可能会对无线抓包有影响,并显示出来。你可以单独使用 

airmon-ng check

 命令来做检测,还可以使用 

airmon-ng check kill

 直接 kill 掉那些可能有影响的进程。更多用法可以参考 airmon-ng 的官方文档。

2.4 使用 iw 监听无线网络

iw

 是 Linux 系统上的另一款无线配置工具,它的出现是为了解决 

iwconfig

 的很多不足,或者说它完全是为了取代 iwconfig 而开发的。

之所以要新开发一套无线配置工具,还要从无线扩展(Wireless-Extensions)说起。Wireless-Extensions(简称 WE,或者 Wext) 是由 Jean Tourrilhes 1997 年开发并添加到 Linux 内核的,它通过 Linux 的系统调用 

ioctl()

 来实现用户层和内核层之间的通信。由于设计的比较粗糙,使用 WE 开发的程序很难管理,并且由于它年代久远,WE 除了一些基本的 bugfix 之外也无人维护了,所以亟需一种新的无线驱动框架来指导无线程序的开发。于是便出现了 cfg80211 和 nl80211 。需要特别指出的是 cfg80211 不再使用 ioctl 系统调用,而是使用 Netlink(基于 socket 通信)。iw 就是完全基于 cfg80211 框架重新设计并开发的。

使用 iw 不仅可以实现和 iwconfig 完全一样的功能,而且它的用法要更丰富(当然也更复杂),可以先使用 

iw help

 查看它的使用帮助(友情提醒:使用 iw 之前先得有个心理准备,iw 命令的输出大多比较晦涩,而且你可能会被它大片大片的技术信息所吓住,不用急,从上往下慢慢看)。下面的几个命令可能是你想尝试的:

1

# iw list

列出所有的无线设备,以及每个无线设备的详细信息,真的非常详细,非常专业,可能会吓住你,如果要显示的简单点,可以使用:

1

2

3

4

5

6

7

8

9

# iw dev

# iw dev wlan0 info

phy#0

Interface wlan0

ifindex 3

wdev 0x1

addr 00:17:c4:e8:67:20

type managed

channel 1 (2412 MHz), width: 40 MHz, center1: 2422 MHz

这个命令和 iwconfig 类似,显示出无线接口的名称,网卡模式,所处的频道等,这些都是接口的属性,无论有没有连接 AP ,只要你没有修改过它,接口的属性都是固定的,如果你连接了 AP ,还可以使用下面的命令查看跟连接相关的信息(SSID,频率,信号强度等):

1

2

3

4

5

6

7

8

9

10

11

12

# iw dev wlan0 link

Connected to 6c:72:20:5d:7f:57 (on wlan0)

SSID: defenceOTA

freq: 2412

RX: 202000891 bytes (213176 packets)

TX: 11249479 bytes (110592 packets)

signal: -60 dBm

tx bitrate: 108.0 MBit/s MCS 5 40MHz

bss flags:  short-preamble short-slot-time

dtim period:    1

beacon int: 100

当然,我们最关心的,还是将网卡设置为监听模式:

1

2

# iw dev wlan0 interface add mon0 type monitor

# ifconfig mon0 up

上面的命令新增了一个虚拟网卡接口 mon0 ,并将 mon0 设置为监听模式。这个命令和上面的 

airmon-ng

 的效果几乎是一样的,wlan0 仍然保持 managed 模式不变,新增的 mon0 运行在 monitor 模式下。虚拟接口新增之后记得要使用 

ifconfig up

 启用起来,再通过下面的命令设置频率。

1

# iw dev mon0 set freq 2437

三、扫描无线网络

至此,我们已经准备就绪,网卡已经具备了监听周围无线信号的能力,这个时候你可以启动 Wireshark 开始数据分析之路了。但是直接分析,可能会完全没有头绪,找不到方向,因为 Wireshark 会捕获所有流经网卡的数据,如果你周围的无线热点很多,将是一场数据报灾难。所以,我们决定有的放矢,先扫描周围都有哪些无线热点,以及哪些无线设备,然后再有针对性的抓取指定热点的报文。

3.1 iw 和 iwlist

上节中介绍的 

iw

 命令,以及 Linux 自带的另一个无线命令 

iwlist

 可以实现简单的扫描功能,譬如 iw 的扫描命令如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

$ sudo iw dev wlan0 scan

BSS 6c:72:20:5d:7f:57(on wlan0) -- associated

TSF: 1060538844661 usec (12d, 06:35:38)

freq: 2412

beacon interval: 100 TUs

capability: ESS Privacy ShortPreamble ShortSlotTime (0x0431)

signal: -61.00 dBm

last seen: 184 ms ago

Information elements from Probe Response frame:

SSID: defenceOTA

Supported rates: 1.0* 2.0* 5.5* 11.0* 9.0 18.0 36.0 54.0

DS Parameter set: channel 1

ERP: <no flags>

Extended supported rates: 6.0 12.0 24.0 48.0

HT capabilities:

Capabilities: 0x11ee

HT20/HT40

SM Power Save disabled

RX HT20 SGI

RX HT40 SGI

TX STBC

RX STBC 1-stream

Max AMSDU length: 3839 bytes

DSSS/CCK HT40

Maximum RX AMPDU length 65535 bytes (exponent: 0x003)

Minimum RX AMPDU time spacing: 4 usec (0x05)

HT RX MCS rate indexes supported: 0-15, 32

HT TX MCS rate indexes are undefined

HT operation:

* primary channel: 1

* secondary channel offset: above

* STA channel width: any

* RIFS: 0

* HT protection: 20 MHz

* non-GF present: 1

* OBSS non-GF present: 0

* dual beacon: 0

* dual CTS protection: 0

* STBC beacon: 0

* L-SIG TXOP Prot: 0

* PCO active: 0

* PCO phase: 0

WPA:     * Version: 1

* Group cipher: TKIP

* Pairwise ciphers: TKIP CCMP

* Authentication suites: PSK

RSN:     * Version: 1

* Group cipher: TKIP

* Pairwise ciphers: TKIP CCMP

* Authentication suites: PSK

* Capabilities: 1-PTKSA-RC 1-GTKSA-RC (0x0000)

WMM:     * Parameter version 1

* BE: CW 15-1023, AIFSN 3

* BK: CW 15-1023, AIFSN 7

* VI: CW 7-15, AIFSN 2, TXOP 3008 usec

* VO: CW 3-7, AIFSN 2, TXOP 1504 usec

BSS Load:

* station count: 4

* channel utilisation: 164/255

* available admission capacity: 31250 [*32us]

Overlapping BSS scan params:

* passive dwell: 20 TUs

* active dwell: 10 TUs

* channel width trigger scan interval: 300 s

* scan passive total per channel: 200 TUs

* scan active total per channel: 20 TUs

* BSS width channel transition delay factor: 5

* OBSS Scan Activity Threshold: 0.25 %

Extended capabilities: HT Information Exchange Supported

Country: CN Environment: Indoor/Outdoor

Channels [1 - 13] @ 16 dBm

WPS:     * Version: 1.0

* Wi-Fi Protected Setup State: 1 (Unconfigured)

* Response Type: 3 (AP)

* UUID: 28802880-2880-1880-a880-6c72205d7f57

* Manufacturer: Ralink Technology, Corp.

* Model: Ralink Wireless Access Point

* Model Number: RT2860

* Serial Number: 12345678

* Primary Device Type: 6-0050f204-1

* Device name: DIR-816

* Config methods: Label, Display

* RF Bands: 0x1

* Unknown TLV (0x1049, 6 bytes): 00 37 2a 00 01 20

该命令会打印出大量的信息,每个无线热点以及它的详细信息都会被展示出来,可以使用下面的技巧只显示 SSID 和 BSS:

1

2

3

4

5

6

7

$ sudo iw dev wlan0 scan | egrep "^BSS|SSID"

BSS 6c:72:20:5d:7f:57(on wlan0) -- associated

SSID: defenceOTA

BSS 14:75:90:ac:96:98(on wlan0)

SSID: ak

BSS b0:48:7a:77:28:ee(on wlan0)

SSID: TP-LINK_7728EE

使用 

iwlist

 的命令格式如下:

1

$ sudo iwlist wlan0 scan

同样的,这个命令会打印大量的信息。可以使用下面的技巧显示精简信息:

1

2

3

4

5

6

7

8

9

10

11

12

13

$ sudo iwlist wlan0 scan | egrep "Cell|ESSID|Channel"

Cell 01 - Address: 6C:72:20:5D:7F:57

Channel:1

Frequency:2.412 GHz (Channel 1)

ESSID:"defenceOTA"

Cell 02 - Address: 80:89:17:B9:2C:C2

Channel:1

Frequency:2.412 GHz (Channel 1)

ESSID:"wangshiyuan"

Cell 03 - Address: EC:26:CA:CC:9B:9A

Channel:1

Frequency:2.412 GHz (Channel 1)

ESSID:"XIANGLAN\'S FAMILY"

3.2 kismet

虽然 

iw

 和 

iwlist

 命令的输出都不是很友好,但是在缺少其他选择的时候,这两个命令都可以帮上不少忙。当然,如果有更好的选择,我还是推荐使用下面的 

kismet

 和 

airodump-ng

,他们不仅界面上很酷,而且功能上也更强大。我们先介绍 kismet 。

kismet 是一款 Linux 下的无线扫描程序,它的功能非常强大,不仅可以用来扫描周边的无线网络,也支持无线数据包的嗅探和破解,它还可以扫描出周围隐藏的无线热点,更厉害的是,它还内置了 IDS(Intrusion Detection System,入侵检测系统)功能,可以检测出周围是否有无线嗅探器(比如 NetStumbler)。此外,它的插件功能也很优秀,可以支持 GPS和蓝牙的扫描。它被收录在 Kali Tool 里。

在 Ubuntu 系统下可以直接使用 

apt-get install kismet

 来安装,安装完成之后,以 root 身份运行即可(kismet 也可以以非 root 身份运行,但功能会非常有限)。运行 kismet 之后,会弹出几个框框,使用 Tab 键移动焦点位置,选择 OK 一路往下。其中有一步会提供输入网卡接口的名称,上一节的几个命令都可以查看你的无线网卡接口名称,一般来说名称就叫 wlan0 或 ath0 之类的(特别注意的是,kismet 会自动将网卡设置成监听模式,如果你输入 wlan0,会创建出一个 wlan0mon 的监听网卡,所以如果你已经启用了监听模式,譬如使用上面的例子创建了一个 mon0 的监听网卡,可以直接填 mon0)。

完全配置好之后,我们就可以体验 kismet 的强大功能了。在这里我们只关心它的无线扫描功能,kismet 不仅可以扫描出周边所有的无线接入点,而且还可以扫描出每个无线接入点的客户端,这在我们有针对性的嗅探和攻击时非常有用。kismet 的使用界面如下图所示(very cool),具体的使用方法和快捷键参考 kismet 文档。

实战无线网络分析(篇一)无线监听

3.3 airodump-ng

我们要介绍的另一个无线扫描程序是 airodump-ng,看名字就知道,它也和 airmon-ng 一样,是 aircrack-ng 套件中的一个,而且它常常和 airmon-ng 配合使用,像下面这样:

1

2

# airmon-ng start wlan0

# airodump mon0

airodump-ng 的运行界面如下图所示:

实战无线网络分析(篇一)无线监听

可以看到,airodump-ng 的功能和 kismet 可以说是不相上下,在扫描网络这一方面,两个工具都可以扫描到周围所有的无线接入点(包括隐藏的接入点),以及正在连接接入点的工作站(比如手机等)。图中信息量比较大,下面简单总结一下每一行每一列的意义,详细信息可以参考 airodump-ng 的文档。

  • BSSID:表示无线 AP 的 Mac 地址。
  • PWR:信号强度,值越大,表示信号越强。它的值一般都是一个负数,所以上图中除了 -1, -57 是最大的,表示该接入点离的最近,信号最好。PWR 值为 -1,说明不支持信号强度的查看。
  • Beacons:Beacon 是无线数据包中最有用的一种,叫做信号数据包。802.11 的数据包按类型可以分成三类:管理、控制和数据。管理类数据包又可以分为三种子类型:认证(authentication)、关联(association)和信号(beacon)数据包。Beacon 由 WAP 发送,穿过无线信道通知所有无线客户端存在这个 WAP,并定义了连接它必须设置的一些参数。
  • #Data:捕获到的数据分组的数量,包括广播分组。
  • CH:信道号。
  • MB:WAP 所支持的最大速率。
  • ENC:使用的加密算法体系。

    OPN

     表示无加密,

    WEP?

     表示 WEP 或者 WPA/WPA2,

    WEP

     表示静态的或者动态的 WEP,当然,WEP 加密很早就已经遭淘汰了,目前最常见的是 

    WPA

     和 

    WPA2

  • CIPHER:使用的加密算法。常见的算法有:CCMP、WRAAP、TKIP、WEP 等。
  • AUTH:使用的认证协议。常用的有:MGT(WPA/WPA2 使用独立的认证服务器,譬如 802.1x、RADIUS、EAP 等),SKA(WEP 的共享密钥),PSK(WPA/WPA2 的预共享密钥)和 OPN(开放式)。
  • ESSID:所谓的 SSID 号,如果启用隐藏的话,ESSID 可以为空,或者显示为 <length: 0>。
  • STATION:客户端的 Mac 地址,包括连上的和想要连的客户端。如果客户端没有连上 AP,ESSID 列显示成 (not associated)。
  • Probe:被客户端查探的 ESSID,如果客户端正在试图连接一个 AP,但是没有连接上,将会显示在这里。

四、抓包

到这里,万事具备,只欠东风。我们具备了监听无线通信的能力,也可以扫描出周围的无线接入点和客户端信息,下一步就是挑选一个你感兴趣的接入点,开始抓包吧。

4.1 使用 kismet 和 airodump-ng 抓包

上面在介绍 kismet 和 airodump-ng 的时候,都只是展示了它们扫描网络的功能,实际上,从 airodump-ng 的名字也可以看出来,它不仅可以扫描网络,还可以捕获无线数据报文。

譬如在启动 kismet 的时候,kismet 就会在启动目录生成好几个文件,如下。

1

2

3

4

5

6

$ ls -l Kis*

-rw-r--r-- 1 root root       0 8月  15 22:32 Kismet-20160815-22-32-05-1.alert

-rw-r--r-- 1 root root     264 8月  15 22:32 Kismet-20160815-22-32-05-1.gpsxml

-rw-r--r-- 1 root root   25111 8月  15 22:32 Kismet-20160815-22-32-05-1.nettxt

-rw-r--r-- 1 root root   57768 8月  15 22:32 Kismet-20160815-22-32-05-1.netxml

-rw-r--r-- 1 root root 1822733 8月  15 22:32 Kismet-20160815-22-32-05-1.pcapdump

其中,Kismet-***.pcapdump 就是捕获的数据包,可以使用 Wireshark 等数据包分析工具打开。默认情况下,kismet 会捕获所有的无线通信,数据包会变得非常大,可以通过指定 

filter_tracker

 参数来限制 kismet 只捕获特定 BSSID 的数据包,譬如下面这样:

1

$ sudo kismet --filter-tracker BSSID\(6C:72:20:5D:7F:57\)

而 airodump-ng 默认数据包是不存文件的,可以通过 

--write

 或 

-w

 参数将数据包保存到指定文件中:

1

2

3

4

5

6

$ sudo airodump-ng -w pack mon0

$ ls -l pack*

-rw-r--r-- 1 root root  5645 8月  15 23:48 pack-01.cap

-rw-r--r-- 1 root root  1651 8月  15 23:48 pack-01.csv

-rw-r--r-- 1 root root  2457 8月  15 23:48 pack-01.kismet.csv

-rw-r--r-- 1 root root 13460 8月  15 23:48 pack-01.kismet.netxml

其中,xxx-01.cap 就是捕获的数据包文件,可以使用 Wireshark 打开分析。同样的,这个文件也有可能会很大,因为保存了所有的无线数据报文,如果只需要监听某一个接入点,可以通过 

--bssid

 或 

--essid

 等参数指定:

1

$ sudo airodump-ng mon0 --bssid 6C:72:20:5D:7F:57

4.2 使用 Wireshark 和 tcpdump 抓包

通过上面的方法抓包完成之后,我们就可以使用 Wireshark 打开数据包文件来分析了。其实 Wireshark 除了可以分析数据包文件之外,也可以进行抓包。使用 Wireshark 抓包之前,首先将网卡设置为监听模式,然后在 Wireshark 启动界面中选择处于监听模式的网卡接口,这样就可以了。

使用这种方式,界面上没有 kismet 和 airodump-ng 直观,你将会看到大量的数据包迎面袭来,密集恐惧症患者慎用。好在 Wireshark 具有强大的过滤器功能,可以通过设置下面的过滤器来减少那些我们不感兴趣的数据。

实战无线网络分析(篇一)无线监听

我们这里只关心抓包的方法,关于数据包的分析,我们将在下一篇博客中介绍。最后要介绍的一个抓包工具是大名鼎鼎的 

tcpdump

,它可以说是抓包工具的鼻祖,命令如下:

1

$ sudo tcpdump -i mon0 -n -w wireless.cap

同样的,抓包文件可以使用 Wireshark 打开进行分析,这里不再赘述。