某些无线网卡具有监听能力 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