环境
- 电脑 Win/Mac/Linux
- 小米路由器4A 千兆版
- Python3 环境
- 网线
工具&固件
下面演示用到的工具和固件都可以在文末打包获取。
-
OpenWRTInvasion
针对多款小米路由器的 root shell 漏洞:4A 千兆、4A 百兆、4C、3Gv2、4Q、miWifi 3C......
-
Breed(不死鸟)
Breed 是由 HackPascal 开发的 Bootloader(引导装载程序),最大的特点是支持通过访问网页刷机,刷机失败后可以直接重置而不会导致机器变砖。
小米路由器4A 使用的 CPU 是 mt7621,可以在 https://breed.hackpascal.net/ 下载,名称为
breed-mt7621-pbr-m1.bin
-
openWRT
准备Python3
去Python官网下载安装Python3,
安装完Python后执行安装pip和需要的依赖
shell
python3 -m pip install --upgrade pip # 升级最新的pip
pip install pycryptodome
pip install requests
刷机
1.开启SSH
需要先开启路由器的 SSH,小米的固件只有开发版支持 SSH,但是现在所有的版本基本都不会放出开发版;所以只能通过破解的方式开启(开启后不支持保修);
因为小米路由器系统存在 CVE-2019-18370 漏洞,所以可以通过该漏洞开启 SSH;需要使用项目 acecilia/OpenWRTInvasion 提供的脚本工具,我已经下载好放链接🔗里了,当然有Git环境也可以自己从项目 acecilia/OpenWRTInvasion 拉取;
- 获取最新工具(直接用博主提供的懒人工具包的可忽略此步)
bash
git clone https://github.com/acecilia/OpenWRTInvasion.git
- 安装依赖
shell
cd OpenWRTInvasion
pip3 install -r requirements.txt
-
执行脚本
通过 WiFi 或有线的方式连接到路由器,然后进入命令行,执行以下命令,运行
remote_command_execution_vulnerability.py
脚本;执行脚本时需要输入路由器的地址和后台访问密码;地址如果没有改动默认就是192.168.31.1
,或者访问miwifi.com
也可以直接访问到;如果选择了离线模式,会在本地启动一个 ftp server -
登录
开启SSH访问权限后我们在命令行执行telnet登录,用户名密码都是root
shell
telnet 192.168.31.1
# 通过ssh也可 ssh root@192.168.31.1
2.备份原厂固件
在开刷之前我们一定要先对设备的原厂固件进行备份,防止后期变砖或者无法刷回小米路由。
shell
cat /proc/mtd&&dd if=/dev/mtd0 of=/tmp/all_backup.bin
#或者依次执行下面命令 自选备份Bootloader和eeprom
cat /proc/mtd
dd if=/dev/mtd0 of=/tmp/all_backup.bin
dd if=/dev/mtd1 of=/tmp/Bootloader.bin
dd if=/dev/mtd3 of=/tmp/eeprom.bin
执行后文件会存在tmp目录,备份all_backup.bin文件,大小约为16M,非常重要,后面如果恢复原厂固件需要用到!!!
3.刷入breed(不死鸟)
上传breed-mt7621-pbr-m1.bin
到ftp://192.168.31.1/tmp/
对比MD5
shell
cd /tmp
md5sum breed-mt7621-pbr-m1.bin
期望MD5:24e62762809c15ba3872e610a37451a3**
,如果不一样请重新上传文件,防止变砖刷不回!
确认以上步骤!至少备份固件 all_backup.bin 16MB
!上传 breed.bin
均完成后!
刷入breed!在telnet中输入 mtd write /tmp/breed-mt7621-pbr-m1.bin Bootloader
这一步完成后会断网,很快。需要用网线,将网线插入wan口(你原来光猫接到路由器的口,拔下来用连电脑的网线插进去)在浏览器中输入 192.168.1.1 ,如果能进入breed后台,就可以随便造了。
如果没能进入breed后台,请将路由器断电,先按住复位键不放,然后路由器通电,等5到10秒钟松开复位键,浏览器输入192.168.1.1就能进入breed后台,以后想换固件也是这样进。
4.刷openWRT
在刷入openwrt前,我们先在固件备份中备份 编程器固件
以及 EEPROM
!然后点固件更新->常规固件,选择固件(你准备好的openwrt.bin固件或其他固件),选择你刚刚备份的 EEPROM 文件,这两个选好后,点上传,等待上传完成后会自动重启,在浏览器输入192.168.31.1等着就行。接下来的用户名和密码大概率为 root/password
如果不对,请询问固件作者。
至此,恭喜你的设备已成功刷完openWRT!!!
刷回官方
将连接电脑的网线插入路由器wan口,将路由器断电,然后按住复位键不放,路由器通电,等5到10秒钟松开复位键,浏览器输入192.168.1.1进入breed后台。选择固件更新->编程器固件,选择上文备份的 all_backup.bin 16MB 确认勾选自动重启
,取消勾选保留现有Bootloader
,取消勾选 保留现有EEPROM
点上传,等待一会后,192.168.31.1会变回原来的小米路由器后台,并且失去breed,如果想再刷需要重新解锁telnet以及重新刷入breed
OpenWRT固件源相关
-
OpenWRT
一般情况都安装 OpenWRT 或者是魔改后的 OpenWRT,小米路由器本身也是魔改的 OpenWRT。
OpenWRT官网下载地址:https://downloads.openwrt.org/releases/21.02.3/targets/ramips/mt7621/
默认账户:root
-
OpenWRT魔改
可以使用 unkaer/Actions-OpenWrt-Xiaomi-R4A 自行构建(需要一个多小时),会预先安装中文和部分常用软件,实测可以正常工作。
-
Padavan
据说小米路由器使用老毛子固件更稳定,我也没有具体去考证,也不知道是不是真的。反正我是比较喜欢用 Padavan,无论是界面还是稳定性都不错(还有个使用老毛子的原因是 2022-07-24 Breed 进行了重大更新,OpenWrt 不再支持直接用底包刷固件了。)!Padavan官网源码:https://bitbucket.org/padavan/rt-n56u/src/master/
Padavan下载地址:https://opt.cn2qq.com/padavan/
默认账户:admin
默认密码:admin
Ps:原厂固件xiaomi_mi-router-4a-gigabit-squashfs-sysupgrade.bin
conf
#版本号改23.05.4成你自己的,在luci状态界面查看版本或者命令: cat /etc/openwrt_*
src/gz openwrt_core http://mirrors.ustc.edu.cn/openwrt/releases/23.05.4//targets/ramips/mt7621/packages
src/gz openwrt_base http://mirrors.ustc.edu.cn/openwrt/releases/23.05.4//packages/mipsel_24kc/base
src/gz openwrt_luci http://mirrors.ustc.edu.cn/openwrt/releases/23.05.4//packages/mipsel_24kc/luci
src/gz openwrt_packages http://mirrors.ustc.edu.cn/openwrt/releases/23.05.4//packages/mipsel_24kc/packages
src/gz openwrt_routing http://mirrors.ustc.edu.cn/openwrt/releases/23.05.4//packages/mipsel_24kc/routing
src/gz openwrt_telephony http://mirrors.ustc.edu.cn/openwrt/releases/23.05.4//packages/mipsel_24kc/telephony
懒人工具包:
链接: https://pan.baidu.com/s/1RyR5qFUYYUDy5fzsmZL1tg?pwd=np9a 提取码: np9a
--来自百度网盘超级会员v8的分享
进阶:
配置zerotier
注册zerotier账号 - 新建network - 复制network id
配置config
config目录:/etc/config/zerotier
内容:
CODE
config zerotier sample_config
option enabled 0
# persistent configuration folder (for ZT controller mode)
#option config_path '/etc/zerotier'
#option port '9993'
# Generate secret on first start
option secret 'generate'
# Join a public network called Earth
list join '8056c2e21c000001'
我们需要改两处内容,option enabled 0
改 1
启用, list join '8056c2e21c000001'
中 80xxxxx
内容改为你的 network id
改好保存后可以重启一次路由,如果你的zerotier network是私有的(Private),需要在zerotier后台勾选上你的设备。
配置网段
在 Interfaces 接口中添加类似 ztr2q3rmku 这样的接口,并新建配置一个防火墙。
将防火墙设置为全部允许,并添加转发目标 wan。
在zerotier后台添加路由表:
你设备的网段 | zerotier分配给设备的ip |
---|---|
192.168.110.0/24 | 172.22.11.22 |
192.168.31.0/24 | 172.22.11.22 |
192.168.41.0/24 | 172.22.11.23 |
以上表有两个 openwrt 设备,ip 分别是 172.22.11.22 / 172.22.11.23 ,而 172.22.11.22
有两个网段,分别是 192.168.110.0/24 / 192.168.31.0/24 那我就可以通过另一个设备,连上zerotier后 直接访问 192.168.110.2,192.168.110.3 这样的设备,以及 192.168.31.1 这两个网段中的所有设备。
结语:
有很多地方都略过了,比如zerotier后台的一些操作,这些网上都有,我以前的文章页写过,这里就不多赘述了。如果后面有空,会再讲讲自构建你的openwrt,因为像这个小米路由器4a千兆版有很多ipk其实都不支持,需要自己编译。