首页
社区
课程
招聘
2
[原创]一次研究如何获得wifi密码的过程
发表于: 2025-1-28 15:29 9144

[原创]一次研究如何获得wifi密码的过程

Nbc 活跃值
1
2025-1-28 15:29
9144

研究这个的契机是有次跟我的学长@ZIKH26聊智能家居iot安全的时候说的“那不连接wifi怎么去入侵智能家居呢”,然后就引申出这个了,描述概括下核心内容大概是这样

我一听这个牛掰啊:

首先 这样就可以破解任意密码了(错误的,弱口令且字典需要足够强大,后续会说明)

其次 这可以直接让区域内设备都上不了网了,这破坏性多大,直接让邻居上不了网(:

当时学长玩这个的时候用的是aircrack-ng这个工具,说一套下来操作有很多,可以尝试下怎么一键梭哈

在寒假就一起研究了一下原理等的内容

直接get到学长的无线网卡

image-20250127180609755

先用现成的工具体验一下

image-20250124144350637

image-20250124143650486

工具的具体操作过程这里就不写了,网上有很多文章怎么操作,这里探究怎么写出一键梭哈脚本

在用工具进行操作时,过程大概是这样的:启动网卡为监听模式->监听当前环境AP(路由器)->选定AP监听该设备下的连接设备(STA)->发送断开帧->捕获到握手包->破解

这时候就存在疑问点:

打开wireshark选定我们的无线网卡

image-20250124144437747

看到就是一堆包,也看不懂也不知道哪些包是我需要的,所以就要去研究一下原理了

首先是怎么抓包,可以使用Scapy来操作

Scapy 是一个用于 网络数据包处理网络攻击模拟 的强大 Python 库。它允许用户轻松地创建、发送、捕获、解析和修改网络数据包

具体可以看文档

Introduction — Scapy 2.6.1 documentation

我们所使用的模块主要在

scapy.layers.dot11 — Scapy 2.6.1 documentation

IEEE 802协议簇是指IEEE标准中关于局域网(LAN)和城域网(MAN)的一系列标准。IEEE 802中定义的服务和协议限定在OSI七层网络模型的最低两层,即数据链路层和物理层。实际上,IEEE802又将OSI的数据链路层分成了两个子层,逻辑链路控制层(LLC)和媒介访问控制层(MAC)。IEEE802协议簇由IEEE802标准委员会维护。其中最广泛应用的协议有以太网(802.3)和WLAN(802.11)。每一个工作组专注一个方向,每个工作组由数字编号,比如目前从802.1编到了802.24。

image-20250124151955891

所以802.11协议是IEEE802标准委员会下属的无线局域网工作组制定的无线局域网标准。

详细内容可以看IEEE Xplore Full-Text PDF

802.11 MAC帧格式如图

image-20250124153816527

每个MAC帧都包含以下几部分:

主要来看一下帧控制字段

image-20250124155841022

数据帧:负责传输数据报文,包括一种帧主体部分为空的特殊报文(Null帧)。STA可以通过Null帧通知AP自身省电状态的改变。

控制帧:协助数据帧的传输,负责无线信道的清空、信道的获取等,还用于接收数据时的确认。常用的控制帧有:

管理帧:负责对无线网络的管理,包括网络信息通告、加入或退出无线网络,射频管理等。常用的管理帧有:

详尽在第九章节IEEE Xplore Full-Text PDF

关于地址Address n字段:表示MAC地址。4个Address位填法不固定,需要和Frame Control字段中的To DS/From DS位结合来确定。例如,帧从一个STA发往AP,与从AP发往STA,4个Address字段的填法是不一样的。

Address n字段填写规则

image-20250124165457518

到这里我们就可以有个大概的思路了,如果我们想要知道当前环境下有哪些AP的话,就要捕捉到Beacon帧,因为这个帧是AP用于广播其存在和网络信息的方式。而断开就通过发送Deauthentication帧来中断STA和AP的连接。

这里会存在一个疑问,如何去获得STA的MAC地址呢?我是通过捕获AP发送的Beacon帧的目的地址来获取的,也就是add1。因为AP的Beacon帧是广播的,所以目的地址也会存在"ff:ff:ff:ff:ff:ff",过滤掉就行了。

image-20250124184449132

现在我们怎么抓包,抓什么包,发送什么都搞清楚了,那破解关键抓的包是什么呢

我想既然有密码这里肯定是跟无限网络中的认证有关的,查阅一番后发现了802.1X

802.1X认证系统使用可扩展认证协议EAP(Extensible Authentication Protocol)来实现客户端、设备端和认证服务器之间的信息交互。EAP协议可以运行在各种底层,包括数据链路层和上层协议(如UDP、TCP等),而不需要IP地址。因此使用EAP协议的802.1X认证具有良好的灵活性。

EAP数据首先被封装在EAPOL帧中,传输于申请者(Supplicant)和验证者(Authenticator)之间。随后又封装在RADIUS或Diameter,传输于验证者和验证服务器(Authentication server)之间。

image-20250124180256281

到这里要提一下WLAN的安全策略

WLAN安全提供了WEP、WPA、WPA2和WAPI四种安全策略机制。每种安全策略体现了一整套安全机制,包括无线链路建立时的链路认证方式,无线用户上线时的用户接入认证方式和无线用户传输数据业务时的数据加密方式。

现在常用的机制就是WPA/WPA2,在手机中就可以看到

image-20250124194715926

由于WEP共享密钥认证采用的是基于RC4对称流的加密算法,需要预先配置相同的静态密钥,无论从加密机制还是从加密算法本身,都很容易受到安全威胁。为了解决这个问题,在802.11i标准没有正式推出安全性更高的安全策略之前,Wi-Fi联盟推出了针对WEP改良的WPA。WPA的核心加密算法还是采用RC4,在WEP基础上提出了临时密钥完整性协议TKIP(Temporal Key Integrity Protocol)加密算法,采用了802.1X的身份验证框架,支持EAP-PEAP、EAP-TLS等认证方式。随后802.11i安全标准组织又推出WPA2,区别于WPA,WPA2采用安全性更高的区块密码锁链-信息真实性检查码协议CCMP(Counter Mode with CBC-MAC Protocol)加密算法。

为了实现更好的兼容性,在目前的实现中,WPA和WPA2都可以使用802.1X的接入认证、TKIP或CCMP的加密算法,他们之间的不同主要表现在协议报文格式上,在安全性上几乎没有差别。

在802.11i里定义了两种密钥层次模型,一种是成对密钥层次结构,主要用来保护STA与AP之间往来的数据;一种是群组密钥层次结构,主要用来描述STA与AP之间的广播或组播数据。

密钥协商阶段是根据接入认证生成的成对主钥PMK(Pairwise Master Key)产生成对临时密钥PTK(Pairwise Transient Key)和群组临时密钥GTK(Group Temporal Key)。PTK用来加密单播报文,GTK用来加密组播和广播无线报文。

image-20250124183907817

密钥协商包括单播密钥协商和组播密钥协商过程。

密钥协商过程也叫做四次握手过程,是通过EAPOL-Key报文进行信息交互的,如图所示。

image-20250124184013257

组播密钥协商过程也叫做二次握手过程,此过程是在四次握手产生PTK并安装密钥后开始进行的,如图所示

image-20250124184116852

通过对WLAN中的身份认证和访问控制机制了解之后,我们就可以知道加密的数据是封装在EAPOL数据包中的,也就是我们要抓取断开重连之后的四次握手数据包(EAPOL)

在工具抓取的数据包中也可以看到

image-20250124195941209

要想知道密码的关键就在于这个四次握手包中,那这四次握手到底发生了什么呢?

在了解四次握手之前先了解一些术语

PMK (Pairwise Master Key)

PMK 是由 MSK 生成,WPA2/PSK 的情况下,当 supplicant 和 authenticator 身份验证后,PSK 变成 PMK。PMK 会驻留在 AP 和所有 STA,不需要进行 key 交换,用它来生成用于加密单播数据的PTK。

PMK=HMAC−SHA1(ssid,psk)

PSK由ssid和passphrase生成,知道AP名和密码就能得出PSK

GMK (Group Master Key)

GMK 用在四次握手来生成 GTK,GTK 在 AP 端由 MSK 生成,所有连接到该 AP 的 STA 共享。

PTK (Pairwise Transit Key)

PTK 用来加密 AP 和 Station 通讯的单播数据包,AP 与每个 Station 通讯用的 PTK 都是唯一的。我们来看一下生成 PTK 的函数,参数是生成 PTK 需要的信息:

PTK = PRF(PMK + ANonce + SNonce + Mac(AP) + Mac(SA))

PRF是 pseudo-random function 的缩写,表示伪随机函数,PMK、ANonce、SNonce、Mac(AA) 和Mac(SA) 作为它的输入参数;

ANonce是 AP 生成的随机数,A 表示 authenticator;

SNonce是 STA生成的随机数,S 表示 supplicant;

**Mac(AP)**是 AP 的 Mac 地址;

**Mac(SA)**是 STA 的 Mac 地址;

由此可知,生成 PTK 依赖 PMK。

PTK 由多个密钥组成

image-20250126183312152

GTK (Group Temporal Key)

GTK 用来加密 AP 和 STA 通讯的多播/广播数据包,连接该 AP 的所有 STA 共享一个 GTK。生成 GTK 的公式:

GTK = PRF(GMK + ANonce + Mac(AA))

与 PTK 不同的是没有 SNonce 和 Mac(SA),GTK 也依赖 GMK。

MIC(Message Integrity Check)

消息完整性校验,针对一组需要保护的数据计算出的散列值,用来防止数据遭篡改。

KCK (Key Confirmation Key):

PTK 的一部分,用于计算 MIC 验证消息的完整性。

RSN Information

包含有关密码套件 (加密算法) 和使用的身份验证方法的信息。

image-20250126143254177

根据握手包详细分析一下

image-20250126150730456

AP 会发送 Nonce,称之为 ANonce。4 次握手使用 HMAC-SHA1 过程生成 MIC。

关于Nonce:Nonce(Number once)是一个随机数或伪随机数,通常用于一次性用途,确保安全通信中的某些操作不会被重放攻击利用。它的基本特性是 唯一性,即每次通信中使用的 Nonce 都是不同的。

image-20250126164304623

在STA收到AP发来的第一个帧之后,STA就拥有了计算PTK的所有数据:

从术语介绍中可知PMK是由ssid和密码计算出来的

此时STA会计算出PTK,然后截取其中的KCK去计算MIC

最终STA会发送SNonce、MIC、RSN到AP也就是第二个帧

image-20250126180632751

在AP接收到STA发来的第二帧时,AP会计算PTK然后生成KCK,计算出MIC。然后将计算出来的MIC和收到的MIC进行对比,如果相同就证明AP和STA拥有相同的PMK,也就是密码是对的。如果密码是错的,那么就只会有前两个包,后续的包不会出现

Key information:

Install:此位向客户端发出信号以安装其派生的密钥。

Key ACK: 客户端必须确认此帧。

Key MIC: 存在完整性检查


[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!

最后于 2025-1-28 15:37 被kanxue编辑 ,原因:
收藏
免费 2
支持
分享
赞赏记录
参与人
雪币
留言
时间
默NJ
非常支持你的观点!
2025-2-13 08:43
不将、就
+1
感谢你分享这么好的资源!
2025-2-12 21:11
最新回复 (8)
雪    币: 3462
活跃值: (5774)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
为什么用你这个呢?我下本字典直接跑,不可以吗?和你这个效率一样低呀
2025-1-30 11:35
0
雪    币: 1035
活跃值: (30)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
3
zylrocket 为什么用你这个呢?我下本字典直接跑,不可以吗?和你这个效率一样低呀

是这样的师傅,首先,直接跑局限性肯定是比爆破握手包要局限的,直接跑最基本的就起码要一直在设备范围内并且设备一直存活等等条件,而握手包只需要抓到一次后无论在哪都可以爆破,没有其他限制了。其次就是,没有什么信息的“干”爆破确实都挺没效率可言的。师傅如果有什么效率更高的想法,那就更好不过了

2025-2-1 20:59
0
雪    币: 296
活跃值: (166)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
Nbc 是这样的师傅,首先,直接跑局限性肯定是比爆破握手包要局限的,直接跑最基本的就起码要一直在设备范围内并且设备一直存活等等条件,而握手包只需要抓到一次后无论在哪都可以爆破,没有其他限制了。其次就是,没有什 ...
那么是不是可以将抓到的包 给专业的机器 跑呢?! 一次多少米就成?
2025-2-2 11:53
0
雪    币: 1035
活跃值: (30)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
5
chinaye12 那么是不是可以将抓到的包 给专业的机器 跑呢?![em_029] 一次多少米就成?
应该是没问题的,就是有点杀鸡用牛刀了哈哈哈
2025-2-2 19:37
0
雪    币: 28
活跃值: (339)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
chinaye12 那么是不是可以将抓到的包 给专业的机器 跑呢?![em_029] 一次多少米就成?
以前试过可以抓包后用显卡跑,速度挺快的
2025-2-5 19:09
0
雪    币: 296
活跃值: (166)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
左眼憔悴 以前试过可以抓包后用显卡跑,速度挺快的
那还是需要字典啊,字典大了个人PC跑个把月,字典小了个人PC解不开。(ˉ▽ˉ;)...
2025-2-6 18:14
0
雪    币: 4490
活跃值: (6165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
不是可以创建一些钓鱼的热点么,扫一下周围的热点,然后创建同名的热点,改一下密码验证,不管什么密码都验证通过并记录。许多设备都会自动连接热点,这样就会钓到一些密码吧。
2025-2-6 19:25
0
雪    币: 650
活跃值: (595)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我需要的是字典  大佬
2025-2-12 21:05
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册