某些无线网卡具有监听能力 monitor
,使用工具 iw
、iwconfig
等将模式切换到 monitor
之后,可以使用 tcpdump
、wireshark
等抓包工具抓包进行分析,本文记录各个过程中可能使用到的工具
无线网卡的工作模式
可以使用工具 iw
来确认选定网卡支持那些工作模式
$ iw list
...
Supported interface modes:
* IBSS
* managed
* AP
* AP/VLAN
* monitor
* P2P-client
* P2P-GO
* P2P-device
...
其中 Managed
为托管模式,无线网卡只接受从 WAP
发给自己的数据报文; monitor
为监听模式,可以接收所有的无线通信数据包。
设置网卡为监听模式
iwconfig
iwconfig
可以用来查看无线网卡的状态,或修改无线网卡的模式
$ 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
$ sudo ifconfig wlan0 down
$ sudo iwconfig wlan0 mode monitor
$ sudo ifconfig wlan0 up
aircrack-ng
aircrack-ng
提供了一整套无线工具,每一个都小巧精练,各有春秋,如瑞士军刀一般, airmon-ng
就是其中之一。可以同时上网和监听数据
$ sudo airmon-ng
Interface Chipset Driver
wlan0 Atheros AR9280 ath9k - [phy0]
enx0 Unknown rtl8812au
$ 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)
airmon-ng
新建了一个虚拟网卡 mon0
,并在 mon0
上启用了监听模式,真实的无线网卡 wlan0
保持不变
另外可以使用 airmon-ng check
来检测系统中当前正在运行的进程,分析出哪些进程可能会对无线抓包有影响,并显示出来。可以使用 airmon-ng check kill
直接 kill
掉那些可能有影响的进程。
iw
iw
是 Linux
系统上的另一款无线配置工具,它的出现是为了解决 iwconfig
的很多不足,或者说它完全是为了取代 iwconfig
而开发的。 iw
基于 cfg80211
框架设计,不再像 Wireless-Extensions(Wext)
使用 ioctl
,而是使用 Netlink
$ iw list
$ iw dev
$ iw dev wlan0 info
$ iw dev wlan0 link
$ iw dev wlan0 interface add mon0 type monitor
iw dev wlan0 interface add mon0 type monitor
新增了一个虚拟网卡接口 mon0
,并将 mon0
设置为监听模式。然后需要
$ ifconfig mon0 up
$ iw dev mon0 set freq 2437
扫描无线网络
iw
$ sudo iw dev wlan0 scan
$ sudo iw dev wlan0 scan | egrep "^BSS|SSID"
iwlist
$ sudo iwlist wlan0 scan
$ sudo iwlist wlan0 scan | egrep "Cell|ESSID|Channel"
kismet
kismet
是一款 Linux
下的无线扫描程序,它的功能非常强大,不仅可以用来扫描周边的无线网络,也支持无线数据包的嗅探和破解,它还可以扫描出周围隐藏的无线热点,更厉害的是,它还内置了 IDS(Intrusion Detection System,入侵检测系统)功能
,可以检测出周围是否有无线嗅探器。
需要使用 root
权限运行,其中一步需要添加 interface
,如果输入的 interface
不是监听模式,会自动创建一个 wlan0mon
的监听网卡,然后启动监听模式
airodump-ng
$ sudo airmon-ng start wlan0
$ sudo ifconfig mon0 up
$ sudo airodump-ng mon0
抓包
kismet 抓包
譬如在启动 kismet
的时候, kismet
就会在启动目录生成好几个文件,如下
$ 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
的数据包,譬如下面这样:
sudo kismet --filter-tracker BSSID\(6C:72:20:5D:7F:57\)
airodump-ng 抓包
airodump-ng
默认数据包是不存文件的,可以通过 --write
或 -w
参数将数据包保存到指定文件中:
$ 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
等参数指定:
$ sudo airodump-ng mon0 --bssid 6C:72:20:5D:7F:57
tcpdump
$ sudo tcpdump -i mon0 -n -w wireless.cap
wireshark
使用 filter
: wlan.ta == 6c:72:20:5d:7f:57