前提
许多的网络环境都会进行设备验证,从而二次免验证或者是防止 ARP 攻击来保证内网环境的安全。然而,在这套机制使用的同时也会造成问题。本文将从 mac 地址的使用逻辑和对于不同平台 mac 地址的修改进行探讨。
mac查询方法
- windows平台
win+r输入cmd在终端中输入1
ipconfig /all
- 安卓平台(以荣耀为例)
随意连上任何一个WiFi后在设置-WLAN中打开已经连接的WLAN就可以看到本机的mac。
走近mac
- 在一些需要验证的网络环境中,正常用户登录验证以后会有 DHCP 进行分配 ip 地址,同时将 mac 地址和对应账户进行绑定。当我们访问无密码保护但需要登录验证的网络时,如果抓到了 ARP 包,通过修改本机 mac 地址而不用修改 ip 地址的方法就可以成功免登录连接网络进入内网环境;在实际操作中可以观察到,如果更改 mac 的设备是使用有线连接而被获取 mac 的设备是通过无线连接,那么无线设备并不能够接入网络。相当于 IP 冲突了。
- 在进行网络搭建的时候,对于固定资产,有一种解决方案是使用静态并且对 IP+mac 进行绑定,那么只要是接入设备改成了与之一致的 IP 和 mac 的话,那么无论是什么平台,都可以获得与源主机一致的内网权限来访问内网资源。
- 如果是由于不恰当操作导致设备 mac 遭到服务器的封禁而无法连接网络,一般来说通过修改 mac 的方式也可以重新连接进入网络。
mac获取方法1
此操作无需连接到目标热点
此操作需要具有 monitor 的网卡,一般是外置网卡(淘宝可以搜到一大堆),并且是全程在 kali(有root权限) 中进行的操作。操作大概是:扫描附近WiFi-选择想要获取mac-监听WiFi信号
扫描附件的Wifi
打开终端查看网卡是否支持监听
1 | airmon-ng |
(ps:对于终端字体太小可以 shift和ctrl和+ 进行放大,CTRL和-进行缩小)
可以看到我这里有两个支持 moniter 的网卡
选择一个网卡开启监听功能,这里选择 wlan0
1 | airmon-ng start wlan0 |
要注意开启监听以后网卡的名字可能更改为wlanxmon,具体需要查看
1 | ifconfig |
可以看到,这里的网卡名称改变了,但是有些设备并不会更改名称,要依据实际
扫描附近的热点
1 | airodump-ng wlan0mon |
当目标 WiFi 的名称出现的时候,“CTRL+c”暂停扫描,否则无法保存和复制对于的热点信息
需要记录的是目标热点的 BBSSID(mac) 和 CH(信道)
监听目标热点
输入嗅探握手包命令
此操作不仅可以查找到目标热点下所连接的设备 mac ,还主要是可以获得握手包,可能存在着加密的WiFi密码,在此不与探讨
1 | airodump-ng -c <目标WiFi的信道> --bssid <目标BSSID> -w <储存握手包的文件名不需要文件格式> <网卡名称> |
(ps:命令中不需要“<”,“>”,linux中复制粘贴是“shift+ctrl+c”和”shift+ctrl+v”)
稍等片刻便可以看到连接着热点的设备的 mac
mac获取方法2
此操作需要连接到目标热点
1 | nmap -sn 192.168.3.1/24 |
已知IP时的 mac 获取方法
此操作需要连接到目标热点
Linux
1 | arp 目标IP |
arp 命令与 arping 命令存在本质区别。
- arp 命令是通过查询 arp 映射表,如果表中没有,就会直接返回
no entry
;如果表中有,即使网络中并不存在该设备,也能够返回表中的东西。arp 表的增删改替是通过 ping 这个操作来进行的。ping 成功了,表中就添加,ping 失败了,表中就删除 - arping 命令则是直接发送 arp 包,只要网络中存在该设备,就一定会返回设备的 mac,无论表中有没有。
mac修改方法
分类
1. 硬改
该方法不需要获得软件上的很高的权限,只需要直接修改硬件网卡的 mac 参数,对于安卓手机来说体现为不需要获得 root 权限,但是需要对系统重新修改来适应新的 mac 地址。此操作就相当于是更换了一个全新的网卡,对于安卓设备来说,硬改 mac 以后通常会格式化系统。
2. 软改
系统要调用硬件需要经过内核或者是驱动,那么在驱动层面会对网卡 mac 有一个记录,如果修改这个记录,那么就可以在驱动层面对网卡的mac进行修改达成目的。此项操作一般需要比较高的权限,在安卓手机表现为需要拿到root权限,windows平台表现为需要有管理员权限。需要注意的是:对于realtek品牌的网卡来说,网卡的缓存区是只可以写入而不可以擦除的,这也就意味着realtek的网卡 mac 修改有次数限制,而具体的修改次数则需要看对应具体的网卡。
修改方法(只限于软改)
1. 对于近三年来的绝大多数设备(包括 windows )
直接在 WLAN 设置中找到随机 mac 的选项,打开后便可以修改随机 mac,但局限于不能指定修改 mac ;
2. 对于取得 root 权限的安卓设备
2.1 软件辅助
最简单的便是安装有 nethunter 的设备,需要在配套的F-Droid中安装Nexmon,在 nethunter 主页中直接就有修改 mac 的选项,可以选择是随机产生 mac,也可以指定修改 mac ;注意如果没有安装Nexmon则会被限制修mac,即必须符合国际mac修改标准;
2.2 修改系统文件
先打开飞行模式,使用MT管理器或ES文件浏览器等可以申请并且以及获得超级管理员权限(root 权限)的应用打开一下文件
1 | \data\nvram\APCFG\APRDEB |
并修改其中的WIFI文件,按照里面的数据格式改成想要的 mac 地址,之后关闭飞行模式或者重启手机即可。
3. 对于 windows 平台
3.1 设备管理器修改法
此方法使用的前提是网卡的自带驱动上带了相关的修改接口
打开控制面板→设备管理器→网络适配器→对应网卡→属性
在高级选项中找到 Network Address/MAC Address/网络地址 在设备管理器对网卡mac进行修改
3.2 注册表修改法
此方法为万能方法,但是需要注意前文提及的realtek网卡的限制
win+r 并输入 regedit 打开注册表,并定位到
1 | HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318} |
每一个00xx都代表着一个网卡,但是需要注意的是,一般来说只有一个是真实网卡,其他都是虚拟网卡,具体就需要进入各个项目看看是否有标明对应的网卡型号。
找到物理网卡以后,需要在这个网卡的项目中新建一个字符串,命名为 NetworkAdress ,值就是新的 mac
点击确定后重启网卡或者直接重启电脑再看看 mac 是否修改成功。
介绍通过 cmd 命令来查看和重启网卡:
- 首先进入cmd终端 win+r 键入 cmd ,命令行输入
1 | netsh interface show interface |
此时就可以看到所有的网卡
接着关闭网卡
1 | netsh interface set interface "要操作的网卡名称" disable |
启动网卡
1 | netsh interface set interface "要操作的网卡名称" enable |
通过一开一关即可对网卡实现重启
如果有问题就需要用管理员权限打开cmd
3.2 对于部分系统版本
可以安装软媒魔方,通过软件来对mac进行修改,但是我没能成功复现
逆天改法:修改路由器 mac
连接路由器的 windows 平台上打开 cmd 输入
1 | ipconfig |
查看本机的 IPv4 地址。一般来说路由器的管理 ipv4 地址都是与本机地址在同网段的 1 号
可以看到本机 ipv4 地址为 192.168.3.17 那么可以推测路由器管理地址为 192.168.3.1
在浏览器输入 192.168.3.1 输入管理密码进入路由器后台
在“我要上网”中找到上网方式,选择MAC克隆-手动输入 MAC 地址来达成修改 MAC 地址的目的。
IP获取方式
前提必须是能够连接目标热点
Windows
一般来说已知 mac 是无法获取对应IP的,但是在居于网中通过 arp 可以通过映射关系用 mac 查询到对应设备的IP地址。先 ping 一下获得更多数据后查找 arp 包。先同样是打开cmd,批量ping局域网内ip
1 | #批量ping局域网内网段 |
批量ping网段命令语法
1 for /L %variable in (start,step,end) do command [command-parameters]variable变量名 | start开始 | step步长 | end结束 | command命令 | command-parameters命令参数
1 for /L %d in (1,1,255) do ping 192.168.0.%d >> C:\Users\XXX\Desktop\a.txt
>>
为重定向符号,将代码执行结果保存到文件路径为 C:\Users\XXX\Desktop 的a.txt文件
1 | #查 arp 表 |
就可以看到对应的 mac 和 IP 的对应关系。
可以轻易发现:ping之后的arp表会比ping之前的arp表所含有的数据更多
Linux
扫描 10.8.1.0网段
1 | nmap -sn 10.8.1.0/24 ##发现mac |
通过 arp 映射表查看
1 | cat /proc/net/arp |
wireshark过滤定向查找IP
在过滤中输入
1 | eth.arrd == MAC地址 |
可以在数据包中找到对应的IP