802.11帧简介
有线网络传输以太网帧而wifi无线网传输802.11帧,802.11帧数是ieee(电气和电子工程协会)定义的wifi标准系列,当我们的设备通过无线接入点(AP)通信的时候,双方并不是直接发送流量包,而是先通过802.11MAC层帧在空中交换信息,这些帧包括控制,管理和数据,共同构成wifi的整个连接和通信过程
802.11 mac帧介绍
这里需要注意mac帧的意思是 **MAC(Media Access Control)**帧翻译过来是介质访问控制,是专用于在介质(网线,光纤,无线电波)中用于控制访问的一种机制,并不是mac地址或者是mac电脑的意思
所有的802.11帧都使用mac帧,此框架适用于客户端和接入点甚至自组织网络中执行工作的通信基础,mac数据帧由9个字段组成
Frame Control(帧控制)
Duration / ID(持续时间/ID)
Address 1(接收地址/RA)
Address 2(发送地址/TA)
Address 3(BSSID 或目标地址)
Sequence Control(序列控制)
Address 4(仅在 WDS 桥接等场景中使用)
Frame Body(数据/管理信息)
FCS(Frame Check Sequence,CRC)
IEEE 802.11帧类型
ieee框架可根据题目的作用和参与的工作分为不同的类别,一般来说会由有以下几种
- Management(00) :用于管理和控制,并允许介入点和客户端控制活动链接
- Control(01) :控制帧用来管理员wifi网络内数据帧的传输和接受
- Data(10) :数据帧用于传输数据
管理帧子类型
对于wifi渗透测试,我们专注于管理管理框架。比较这些帧用于控制连接
如果在wireshark中过滤他们,我们应该指定类型00(指定管理帧)和子类型,如下所示
Beacon Frames 信标框架(1000)
信标帧主要用于接入点用于将其存在传输工作站用的帧,其中包括支持的密码,身份验证类型,ssid以及支持的数据速率等信息
Probe Requests and Responses 探测请求与响应(0100与0101)
探测请求与响应过程的存在是为了允许客户端发现附近的接入点。简单来说,不管一个网络是隐藏的还是不隐藏的,客户端都会发一个“探测请求”,里面写着它要找的 Wi-Fi 名字(SSID)。接入点收到之后,就会回一个“探测响应”,告诉客户端关于自己的信息。
Authentication Request and Response 身份验证请求和响应(1011)
在客户端发出认证请求并完成认证流程之后,它会再给接入点(AP)发一个“关联请求”。AP收到后会回一个“关联响应”,告诉客户端它能不能正式连上自己。
Disassociation/Deauthentication Frames(取消关联/取消身份验证帧)(1010,1100)
关联和认证帧,它们的作用是用来中断接入点(AP)和客户端之间的连接。这类帧里还带有一个叫做“原因码(reason code)”的东西,用来说明为什么客户端会被断开。在 Wi-Fi 渗透测试中,我们经常会伪造这类帧,用来抓取握手包,或者发起拒绝服务攻击(DoS)。
连接周期
当我们理解前面管理帧子帧的时候,我们就可以对其排序来对应wifi连接过程中的典型连接过程(这里介绍的是wpa2身份验证,尽管此过程wifi不同的标准并不会完全一致,但是一般的连接周期遵循这个顺序
Beacon Frames
Probe Request and Response
Authentication Request and Response
Association Request and Response
Some form of handshake or other security mechanism
Disassociation/Deauthentication
接下来我们利用实体wifi环境进行抓包测试
抓包实操
linux连接wifi
接下来的操作我想通过kali操作,所以还需要介绍一下linux中通过命令行进行wifi连接的过程,(需要搞定一张无线网卡,最好具有监听功能,后续学习会运用到
┌──(root㉿kali)-[~]
└─# iwconfig
lo no wireless extensions.
eth0 no wireless extensions.
wlan0 IEEE 802.11 ESSID:off/any
Mode:Managed Access Point: Not-Associated Tx-Power=3 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:on
当我们利用iwconfig列出无线网卡的时候,有网卡回显则是网卡连接成功
接下来我们需要利用nmxli来进行wifi连接的操作,它是linux下网络管理的命令行工具,几乎所有主流发行版都自带,作用主要是用于管理网络接口,wifi连接vpn等
使用方法
nmcli [OPTIONS] OBJECT { COMMAND | help }
常用对象(OBJECT):
dev → 设备(device)
con → 连接配置(connection)
wifi → Wi-Fi 网络相关
比如我们可以在网卡正常使用的时候利用如下命令查看附近ap接入点
nmcli dev wifi list
当列出wifi的ssid后我们就可以进行连接
nmcli dev wifi connect "SSID" password "PASSWORD" ifname wlan0
查看当前连接
nmcli con show --active
断开连接并删除记录
nmcli con down id "SSID"
nmcli con delete id "SSID"
注意,如果我们不删除记录,可能在再次连接wifi的时候出现无法找到加密报错
Error: 802-11-wireless-security.key-mgmt: property is missing.
出现这种报错直接删除此wifi记录,或者手动指定加密方式(我给出的示例是wpa2)
nmcli dev wifi connect "SSID" password "PASSWORD" ifname wlan0 wifi-sec.key-mgmt wpa-psk
wireshark包分析
我们如果自身连接的话,是不允许抓取管理帧内容的,所以我们需要将网卡调整至监听模式,相关命令如下
sudo ip link set wlan0 down #关闭网卡
sudo iw dev wlan0 set type monitor #将网卡设置为监听模式
or
sudo iw dev wlan0 set type managed #将网卡设置为普通模式
sudo ip link set wlan0 up #启动网卡
iwconfig wlan0 #查看当前网卡模式
当我们将网卡切换监听模式后,wireshark会抓到大量数据包
我们可以通过wireshark中的语法以及以上我们学习的帧类型进行查找
查找来自ap的接入帧:(wlan.fc.type == 0) && (wlan.fc.type_subtype == 8)
查找来自ap的探测请求帧:(wlan.fc.type == 0) && (wlan.fc.type_subtype == 4)
查找来自ap的探测响应帧:(wlan.fc.type == 0) && (wlan.fc.type_subtype == 5)
这里我抓包的时候并未请求响应所以显示的包为,所以找了htb文章的图片
可以用以下过滤器查找客户端和接入点之间的身份验证过程:(wlan.fc.type == 0) && (wlan.fc.type_subtype == 11)
请求结束后,可以抓取到关联请求:(wlan.fc.type == 0) && (wlan.fc.type_subtype == 0)
查看关联响应:(wlan.fc.type == 0) && (wlan.fc.type_subtype == 1)
如果网络使用wpa2,可以使用EAPOL查看握手帧
连接完成后,可以通过如下过滤器查看取消关联帧或者身份验证帧:(wlan.fc.type == 0) && (wlan.fc.type_subtype == 12) or (wlan.fc.type_subtype == 10)