@

目录

本系列侧重方法论,各工具只是实现目标的载体。

命令与工具只做简单介绍,其使用另见《安全工具录》。

本文以 kali-linux-2023.2-vmware-amd64 为例。

无线网卡使用 MT7612u 芯片。

无线渗透与其他章节独立,涵盖面广。

无线技术变化快,难度大。

理论是本章最有价值的部分。

1:无线协议栈

1.1:ifconfig

只能查看无线网卡的以太网相关配置信息。

查看所有网卡

ifconfig -a

运行指定网卡或接口

ifconfig <网卡接口> up

禁用指定网卡或接口

ifconfig <网卡接口> down

查看启用的网卡

ifconfig

1.2:iwconfig

查看无线网卡

iwconfig

能查看无线扩展参数

1.3:iw

查看无线网卡

iw list

能详细查看无线网卡的配置与对协议和技术的支持情况。

设置网卡或接口工作信道

iw dev <网卡接口> set channel <信道>

扫描附近 AP

iw dev <网卡> scan

添加侦听接口

iw dev <网卡> interface add <网卡>mon type monitor

删除侦听接口

iw dev <网卡接口> interface del

1.4:iwlist

查看频段带宽

iwlist <网卡> frequency

查看信道

iwlist <网卡> channel

扫描附近 AP

iwlist <网卡> scanning

2:无线网卡配置

2.1:查看无线网卡

方式一

ifconfig

方式二

iwconfig

方式三

iw list

2.2:查看信道频率

方式一

iwlist <网卡> frequency

方式二

iw list

2.3:扫描附近 AP

仅查看 SSID

iw dev <网卡> scan | grep SSID

查看 SSID 与信道

iw dev <网卡> scan | egrep "DS\ Parameter\ set|SSID"

查看 SSID 与信道

iwlist <网卡> scanning | egrep "ESSID|Channel"

2.4:侦听接口添加与删除

添加侦听接口

iw dev <网卡> interface add <网卡>mon type monitor

运行指定网卡或接口

ifconfig <网卡接口> up

删除侦听接口

iw dev <网卡接口> interface del

3:RADIOTAP 头部

RADIOTAP(RadioTap)头是用于无线数据包捕获的通用封装格式,是一种数据链路层协议。

  • 802.11 依赖 RadioTap 完成通信过程,是 802.11 帧发射和接收的事实标准
  • Linux 系统在驱动和 API 中内建支持 RadioTap。
  • 802.11 帧发射之前,网卡驱动在 802.11 头前面添加 RadioTap 头;当网卡接收到无线帧时,驱动通知 MAC 层,此帧头包含 RadioTap 头。
  • RadioTap 为 802.11 帧传递额外信息,厂家可自定义,因此头长度不固定
  • 不破坏原始头结构,增加传递的信息

RADIOTAP 头分为 Header 和 Data。Header 是 RADIOTAP 头的实际部分,Data是数据包的有效载荷部分。

Header 由以下字段组成:

  • Version(1 byte):RADIOTAP 头的版本号。常为 0。
  • Pad(1 byte):未使用,只作为字段占位。
  • Length(1 byte):整个 RADIOTAP 头长度(以字节为单位),可变,作用是确定 802.11 头的开始位置。
  • Present Flags(4 bytes):是一个 32 位的字段,每一位代表一个特定的信息字段。如果某一位为1,则表示该信息字段在当前的 RADIOTAP 头中存在。
  • Fields:实际的信息字段,包含各种无线信息。如:
    • Timestamp:数据包捕获的时间戳。
    • Flags:数据帧的一些标志信息,比如是否加密、是否包含FCS(帧校验序列)等。
    • Rate:数据传输速率。
    • Channel:频道号和频谱宽度。

RADIOTAP 头部的长度可变,具体长度取决于 Present Flags 字段中所包含的信息字段数量。

对于不能理解的头部,网卡将直接忽略。

Data 部分是无线数据包的实际有效载荷。具体的内容取决于数据包所传输的应用层协议和数据类型。

  • 对于 Wi-Fi 数据包,可能是一个 802.11 数据帧。
  • 对于蓝牙数据包,可能是一个蓝牙数据帧。

4:MPDU

4.1:基本知识

在信息传输过程中,数据单元(DU)是最小的数据集合,用于承载信息。

传递过程中,数据会逐层封装(Encapsulation)。

主要涉及的封装单位有服务数据单元(SDU)和协议数据单元(PDU)。

  • DU(Data Unit),数据单元

    是信息传输的最小数据集合。
  • Encapsulation,逐层封装

    数据在传递过程中会按照一定规则逐层封装,以便在不同网络层之间传输。
  • SDU(Service Data Unit),服务数据单元

    是上层向下层传递的数据单元,经过上层协议处理后,成为下层的 PDU。
  • PDU(Protocol Data Unit),协议数据单元

    是网络协议中传递的数据单元,在不同网络层有不同的名称。

无线数据封装过程大致如下:

MSDU(应用层数据)-> 添加 MIC(完整性校验)-> 分帧(将数据分成更小的数据帧)-> 添加 IV(初始化向量,用于加密过程)-> 加密(对数据进行加密)-> 添加 MAC 头部(数据链路层的控制信息)-> MPDU(链路层数据单元)。

继续往下,MPDU 与物理头部结合,形成 PPDU(物理层数据单元),然后进行RF(射频)发射,最终在物理信道上传输。

4.2:MPDU 介绍

MPDU(Mac Protocol Data Unit)是 802.11 标准中的一个重要概念,代表着物理层(PHY)和介质访问控制层(MAC)之间的数据传输单元。

其结构如下:

可分为:

  • Header(MAC 头部)
  • Data(数据部分)
  • FCS(校验部分)

4.3:Header

MAC 头是 802.11 标准中数据帧的组成部分,用于在数据链路层传递控制信息。

802.11 MAC 头的主要结构和字段:

  • Frame Control(帧控制)

    占 2 个字节。包含一些控制信息。

  • Duration / ID(时长 / 标识符)

    占用 2 个字节,用于在多个节点之间传递帧的传输时长或标识符信息。

  • Addressing Fields(地址字段)

    包含四个地址字段,每个字段占用 6 个字节。用于指示帧的发送者和接收者。

  • Sequence Control(序列控制)

    占用2个字节,用于指示数据帧的序列号。

4.3.1:Frame Control

Frame Control(帧控制),占 2 个字节。包含一些控制信息,如帧的类型、子类型、数据帧是否包含帧体(Payload)、帧是否加密等。

  • Protocol Version(2 bit)

    代表 802.11 协议版本。

  • Type(2 bit)

    3 种帧类型,规定帧的具体用途。

    • 管理帧(0)
    • 控制帧(1)
    • 数据帧(2)
  • SubType(4 bit)

    类型对应的子类型,不同类型 / 子类型的帧完成不同功能。

  • To DS(1 bit)/ From DS(1 bit)

    标识帧的传输方向。这两个字段决定着 MAC 头中 4 个 Address 字段的不同定义。

  • More frag(1 bit)

    表示是否还有后续帧。值为 1 时表示有后续分段。只有单播接收地址的帧会被分段。

  • Retry(1 bit)

    值为 1 表示重传。接收端进程使用此值防止帧重复。

  • Power Mgmt(1 bit)

    活动模式(0);省电模式(1)。STA 处于省电模式时,向关联的 AP 发送该值为 1 的帧(AP 从不使用此字段)。省电模式下 STA 不接收数据,发送给它的 Data 帧由 AP 暂时缓存。

  • More Data(1 bit)

    当 AP 缓存了至少一个 MSDU 时,会向省电模式的 STA 发送该值为 1 的帧,表示有数据要传输给 STA。接收到此帧的 STA 唤醒自己并向 AP 发送 PS-Poll 帧,取回由 AP 为其缓存的数据。也被用于 AP 有更多的广播 / 多播帧需要发送的情况。

  • Protected Frame(1 bit)

    可能是 Data 或 Management 帧类型,表示 MSDU 是否被加密;也被用于表示 PSK 身份验证。数据载荷为空时,该字段值为0。

  • Order(1 bit)

    在非 QoS 帧的情况下,值为 1 表示数据必须严格按顺序处理,通常为0。

4.3.1.1:Type / SubType

对于 TypeSubType 字段,类型 / 子类型如下所示:

管理帧(0b00)子类型:

控制帧(0b01)子类型:

数据帧(0b10)子类型:

4.3.1.2:To DS / From DS

标识帧的传输方向。这两个字段决定着 MAC 头中 4 个 Address 字段的不同定义。

DA:Destination Address(目标地址)

RA:Recipient Address(接收地址)

SA:Source Address(源地址)

TA:Transmitter Address(发送地址)

  • 0b00:出现在 IBSS 环境中(可能是 Management 帧或者是 Control 帧类型);或者是 STSL(Station to Station Link)中两个 STA 间通信,这种情况下通信不通过 AP。
  • 0b01:表示 Data 帧从 AP 向 STA 传递。
  • 0b02:表示 Data 帧从 STA 向 AP 传递。
  • 0b03:表示两个 AP 间通信。这是典型的 WDS(Wireless Distribution System)环境下 AP 间的通信,或者表示 Mesh 环境下 MP 间的通信。只有此时才会使用到 Address4 字段。

4.3.2:Duration / ID

所有 Control 帧都使用该字段,其作用随 Type / SubType 变化而有所不同。

例如,帧类型为 PS Poll(type:1,subtype:10)时,该字段表示 STA 关联的 AID(association identity)。

其他情况下该字段作为一种载波侦听机制,表示接收下一帧之前需要保持的时间间隔,用于 NAV(Network Allocation Vector)计算,单位微秒。

4.3.3:Address

前面已经提到了 4 种,这里补充最后一种:Basic Service Set ID(BSSID)。它是 BSS 的 2 层唯一标识,Infrastructure 模式中 BSSID 就是 AP 的 MAC 地址,当 AP 支持多 BSS 时,随机生成每个 BSSID。

4.3.4:Sequence Control

Sequence Control 包含两个子字段:Sequence NumberFragment Number

  • Sequence Number

    是每个帧的编号,数值范围是 0 ~ 4095,以 1 为步长递增。当帧被分段时,同一帧中不同分段的 Sequence Number 相同。

  • Fragment Number

    是被分段的帧用于标识分段位置顺序的编号,数值范围是 0 ~ 15,以 1 为步长递增。

4.4:Data(Frame Body)

数据字段,Frame Body,未加密的最大 MSDU 长度为 2304 字节(其中包含最大 256 字节的上层头信息,和可被传递的数据 2048 字节)。不同的加密方法会增加一定的内容长度。

加密方法 增加的长度 最大长度
WEP 8 bytes 2312 bytes
TKIP(WPA1) 20 bytes 2324 bytes
CCMP(WPA2) 16 bytes 2320 bytes

注:Control 类型的帧没有 Frame Body 内容。

4.5:FCS

发送端对全部 MAC 包头和 Frame Body 内容进行 CRC 计算,计算结果即为 FCS(Frame Check Sequence)值。

接收端进行相应计算,结果一致时,则接收端向发送端返回 ACK,否则丢弃帧(只对单播帧有效,对于 FCS 错误的广播 / 多播帧,则可能被接收)。

注:wireshark 抓包时已经删除了 FCS 值。

5:Control Frame

控制帧(Control Frame)是一些通知设备开始传输、停止传输或连接失败等情况的短消息。

5.1:ACK 帧

ACK(Acknowledgment)帧,用于确认成功接收数据帧。接收端正确接收数据之后向发送端返回 ACK 确认。

  • 每个单播帧需要 ACK 立刻确认。
  • 组播和广播帧不需要 ACK 确认
  • 为了尽快响应,由硬件实现。

5.2:PS-POLL 帧

PS-POLL(Power Save Poll)帧用于实现低功耗模式下的数据传输。

RF 系统放大器(主要耗电组件)

发射前放大信号,接收并放大还原信号

省电模式关闭信号发射器,节省电源耗电(几乎完全关闭)

STA 省电模式唤醒

  • 数据发送至 AP(AP 缓存数据包)
  • AP 通过 Beacon 发送 TIM(traffic indication map),其中包含 AID。
  • STA 对比 AID 后唤醒网卡。
  • STA 发送 PS-Poll 帧,请求从 AP 缓存中取回数据。每个帧都需要 ACK 确认。
  • 传输完毕后 AP 从缓存中删除数据帧。
  • 传输过程中 STA 保持唤醒状态。
  • 传输结束后 STA 恢复省电状态。

AID(Association ID)是是在设备(STA)与接入点(AP)建立关联时分配的一个唯一标识符。

BSSID(Basic Service Set Identifier)用于唯一标识一个无线网络中的基本服务集(BSS)的 MAC 地址。

AP 接收 PS-Poll 帧时,分为立刻响应和延迟响应。如果是延迟响应,则会发送简单响应帧。

5.3:RTS / CTS 机制

RTS / CTS 机制可以在一定程度上解决网络中的隐藏节点问题和冲突问题,减少数据帧碰撞,提高无线网络的吞吐量。

隐藏节点(Hidden Node)是指在一个无线网络中,某些无线设备之间无法直接感知对方的存在。

隐藏节点问题主要发生在基础服务集(BSS)中。

RTS / CTS 是 CSMA / CA 方法的一种补充手段。

  • 降低冲突产生的可能性。
  • 正式通信之前通过请求应答机制,确信通信介质的可用性。
  • 锁定传输介质和预约通信时间。
  • 只有在传输长帧时使用,传输短帧时不会使用。

有线网络访问方式:CSMA / CD

无线网络访问方式:CSMA / CA

如上图,

  • Node1 发送 RTS 包给 Node2。
  • 如果未发生冲突,Node2 返回 CTS 给 Node1。
  • Node1 传输数据。
  • 数据正常接收,Node2 返回 ACK,否则 Node1 什么也不会收到。

CTS(Clear to Send)帧和 RTS(Request to Send)帧是两种控制帧,用于进行基本的媒体访问控制,帮助解决无线网络中的隐藏节点问题和冲突问题。

5.3.1:RTS 帧

RTS(Request to Send)帧是由发送方发送给接收方的请求帧,用于在发送数据前请求媒体的访问权。

5.3.2:CTS 帧

CTS(Clear to Send)帧是接收方发送给发送方的确认帧,用于回应收到的 RTS 帧。接收方在收到 RTS 帧后,会发送一个 CTS 帧作为回应,表示它准备好接收数据。

6:Management Frame

管理帧(Management Frame)用于协商和控制 STA 与 AP 之间的关系。

6.1:Beacon 帧

Beacon 帧,AP 发送的广播帧,用于通告无线网络的存在(BSSID)。

  • 发包频率可变
  • 隐藏 AP 不发 SSID 广播

Beacon 帧包含的部分信息:

  • IBSSI Status

    0:Infrastructure

    1:AD-HOC

  • Privicy(是否启用隐私保护功能,如加密)

  • ESSID

  • 速率

  • 信道

6.2:Probe Requset 帧

Probe Request Frames(探测请求帧)用于 STA 在无线网络中寻找附近的 AP。

可以发现连接过的 AP 与未连接过的 AP。

6.3:Probe Response 帧

Probe Response Frames(探测响应帧)是 AP 对 Probe Request Frames 的回应。

速率和 SSID 相同的 AP 响应。

6.4:Authentication 帧

Authentication Frames(身份验证帧)是用于在 STA 和 AP 之间建立身份验证过程的管理帧。

身份认证由多个帧交换过程组成。

  • Authentication Algorithm(身份认证类型)

    0:开放系统身份验证

    1:共享密钥身份验证

  • Authentication Seq

    每次身份验证过程的 Seq 唯一。(1 ~ 65535)

  • Challenge text

    只有共享密钥方式才有此字段

  • Status Code

    成功 / 失败

6.5:Association / Reassociation

身份验证成功后,STA 执行关联操作,加入无线网络。

  • Association Request(关联请求)
  • Reassociation Request(重新关联请求)
  • Association Response(关联响应)
  • Reassociation Response(重新关联响应)

6.5.1:Association Request 帧

Association Request Frames(关联请求帧),STA 发送,请求关联。

6.5.2:Reassociation Request 帧

Reassociation Request Frame(重新关联请求帧)用于在 STA 已经与一个 AP 关联的情况下,希望与另一个 AP 建立关联的情况。

6.5.3:Response 帧

AP 对 STA 的(重新)关联请求的响应。

  • 状态码:关联成功 / 失败

6.6:Disassociation 帧 / Deauthentication 帧

Disassociation Frame(分离帧)用于终止 STA 与 AP 之间的连接。可由 STA 和 AP 发送。

Deauthentication Frame(去认证帧)用于终止 STA 与 AP 之间的认证。由 AP 发送。

部分 Reason Code 描述:

6.7:ATIM 帧

ATIM(Announcement Traffic Indication Map)帧只在 AD-HOC 网络下使用。作为 AP 的 STA 使用此帧通知接收者有缓存的数据要发送。

7:Data Frame

数据帧(Data Frames)用于在设备之间传输数据。

7.1:Data 帧

Data Frame(数据帧)用于传输用户数据。

7.2:Null Data 帧

Null Data Frame(空数据帧)用于 STA 声明自己将要进入省电模式。

  • 只包含 MAC 头和 FCS。

泪流琼脸,梨花一枝春带雨。

——《倾杯》(宋)柳永

《Kali渗透基础》12. 无线渗透(二)的更多相关文章

  1. Kali Linux渗透基础知识整理(二)漏洞扫描

    Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量 Nmap Hping3 Nessus whatweb DirBuster joomscan WPScan 网络流量 网络流量就是网 ...

  2. Kali Linux渗透基础知识整理(四):维持访问

    Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...

  3. Kali Linux 秘籍/Web渗透秘籍/无线渗透入门

    Kali Linux 秘籍 原书:Kali Linux Cookbook 译者:飞龙 在线阅读 PDF格式 EPUB格式 MOBI格式 Github Git@OSC 目录: 第一章 安装和启动Kali ...

  4. kali linux之无线渗透

    无线技术变化大,难度大,既新鲜刺激,又压力山大.一半协议  一半理论 无线技术特点: 行业发展迅猛 互联网的重要入口 边界模糊 安全实施缺失而且困难 对技术不了解造成配置不当 企业网络私自接入ap破坏 ...

  5. 全能无线渗透测试工具,一个LAZY就搞定了

    近来一直在研究无线安全方面的东西,特别是在无线渗透测试这块,每次渗透测试时总要来回不停的切换操作和挑选利器,很是麻烦.就想看看是否可以有一款功能全面的集合型工具. 正所谓功夫不负有心人,还真有这么一个 ...

  6. 无线渗透之ettercap

    无线渗透之ettercap ettercap命令查看 # ettercap -h Usage: ettercap [OPTIONS] [TARGET1] [TARGET2] TARGET is in ...

  7. 内网渗透之Windows认证(二)

    title: 内网渗透之Windows认证(二) categories: 内网渗透 id: 6 key: 域渗透基础 description: Windows认证协议 abbrlink: d6b7 d ...

  8. kali linux 2.0 web 渗透测试 电子书

    原创 2017-05-31 玄魂工作室 玄魂工作室 打起精神,重新开启订阅号的原创文章写作工作,但是需要点时间,请耐心等待. 求资料的同学,没有及时回复的,请再次留言,我会尽快处理.今天分享两本电子书 ...

  9. 十二. Python基础(12)--生成器

    十二. Python基础(12)--生成器 1 ● 可迭代对象(iterable) An object capable of returning its members one at a time. ...

  10. 无线渗透wep加密路由器

    停掉网络服务 service network-manager stop 检查现在的环境适不适合使用airmon-ng airmon-ng check 杀死可能冲突的进程 开启网卡monitor模式 a ...

随机推荐

  1. vue全家桶进阶之路44:Vue3 Element Plus el_row和el_col组件

    在 Vue 3 中,Element Plus 也提供了 ElRow 和 ElCol 组件,用于实现栅格布局. ElRow 组件的常用属性: gutter:栅格间距,默认为 0. type:布局模式,可 ...

  2. 2023-05-27:给你一个只包含小写英文字母的字符串 s 。 每一次 操作 ,你可以选择 s 中两个 相邻 的字符,并将它们交换。 请你返回将 s 变成回文串的 最少操作次数 。 注意 ,输入数据

    2023-05-27:给你一个只包含小写英文字母的字符串 s . 每一次 操作 ,你可以选择 s 中两个 相邻 的字符,并将它们交换. 请你返回将 s 变成回文串的 最少操作次数 . 注意 ,输入数据 ...

  3. Outlook无法启动一直显示“正在启动”的解决方法

    缘起 今天早上打开电脑以后,就打开Outlook2016了,一直显示这个界面: 我没在意就干别的事了, 可以半个小时过去了,还是这个界面,我慌了. 解决方法 安全模式打开Outlook 按WIN + ...

  4. C++面试八股文:指针占用多少个字节?

    某日小二参加XXX科技公司的C++工程师开发岗位4面: 面试官:memset.memcpy和strcpy的区别是什么? 小二:memset用于将一块内存设置为特定的值, memcpy用于将一块内存从一 ...

  5. FTL潜规则:调优,才是算法精华

    前言 在存储领域中有一个FTL的概念,这是一种Flash的内存管理算法,属于各个厂商的核心机密,每个厂商的处理方式不同,有的处理简单,有的处理复杂. FTL,即Flash Translations l ...

  6. shell编程-文件归档

    需求说明:设置定时任务,每天凌晨1点进行将指定目录(/root/scripts)下文件按照archive_目录名_年月日.tar.gz的格式归档存放到/root/archive 路径下. 1.编写脚本 ...

  7. NameError: name 'List' is not defined

    当在python出现该问题是,使用from typing import List.

  8. Hello Welcome to my blog!

    Hello Welcome to my blog!

  9. 细节决定成败,聊聊JS的类型(上)

    今天我们来讲讲 JavaScript 的内容,在这个部分,我首先想跟你聊一聊类型. JavaScript 类型对每个前端程序员来说,几乎都是最为熟悉的概念了.但是你真的很了解它们吗?我们不妨来看看下面 ...

  10. adb如何做Android ui自动化(这一篇就够了)

    一.简介 我们都知道在做Android ui自动化的时候用的是appium,环境搭建贼难受.如果我们在工作中遇到需要实现简单的自动化功能,可以直接使用adb来完成,无需去搭建繁琐的appium.ADB ...