操作原理
小米路由器的一键换机功能会尝试从上级路由器的指定URL上获取宽带信息,然后执行指定指令设置这一信息。设置信息的过程中没有对输入字符串转义,导致其可能被shell注入,从而执行任意命令。
根据原理可知,我们需要一个能够提供这一信息的设备。在大多数教程中,这里使用的是另一台OpenWrt的路由器。我手上没有另一台带Wifi的路由器,也不想改现有路由器的设置,所以在这里我使用了一个ESP32模块作为这一信息的提供者。
准备
在刷机前,我们要:
1. 准备好root密码
2. 准备好Openwrt固件。访问Openwrt 官方下载站,输入你的路由型号,选择”Firmware“类型的固件下载。
三种型号的区别如下:
型号 | CR6606 | CR6608 | CR6609 |
---|---|---|---|
运营商 | 联通(公开版) | 移动 | 电信 |
管理IP | 192.168.31.1 | 192.168.10.1 | 192.168.2.1 |
root密码 | 根据SN计算 | 背面标签 | 背面标签 |
操作步骤
- 准备好你的信息提供设备。这里我用的是ESP32模块,固件见此。
- 将你的CR660x路由器使用网线连接到你的电脑(不要用Wifi连了)。如果你的路由是新的,请完成全部的初始化工作。
- (可选)将你的电脑连接到解锁信息提供的设备。由于解锁信息提供的设备关闭了DHCP,你需要手动设定电脑的IP地址为 169.254.31.x/24,网关为 169.254.31.1。
- 如果你是使用了上面提到的ESP32模块:
- 访问 169.254.31.1,你现在应该能看到一个帮助页面。
- 点击第一步的链接,确认模块工作正常。
- 连接到你的CR660x路由器,登录到管理后台,然后将管理后台的URL复制并粘贴到第二步的输入框中。
帮助页面会自动解析你提供的URL获取STOK和管理IP,然后拼合需要的URL。 - 点击第三步的链接,将路由器连接到ESP32的Wifi
- 点击第四步的链接,在路由器上执行Shell注入
- 如果你使用的是其他设备,或无法看到帮助页面
- 连接到你的CR660x路由器,登录到管理后台。记录下后台管理页面的地址和STOK。
例如,你的地址为http://192.168.10.1/cgi-bin/luci/;stok=ABCDabcd1234/web/home#router
,仅留下http://192.168.10.1/cgi-bin/luci/;stok=ABCDabcd1234
,这里记为${HOST}
- 访问
${HOST}/api/misystem/extendwifi_connect?ssid=${SSID}&password=${PASSWORD}
,将路由连接到解锁信息提供的Wifi。其中,${SSID}
是你的wifi名字,${PASSWORD}
是你的wifi密码。 - 访问
${HOST}/api/xqsystem/oneclick_get_remote_token?username=xxx&password=xxx&nonce=xxx
,执行注入指令。
- 连接到你的CR660x路由器,登录到管理后台。记录下后台管理页面的地址和STOK。
- 使用SSH连接到路由器,账号为root,密码为上面提到的密码。
- 执行以下命令开启UART,防止刷机错误后无法刷回
nvram set boot_wait=on nvram set bootdelay=3 nvram commit
- (可选)备份原厂系统,以备不时之需。包括分区 “Bootloader” “Nvram” “Bdata” “crash” “crash_log” “firmware” “firmware1” “overlay” “obr” 等。
- 刷OpenWrt
- 将固件上传到到路由器的 /tmp 文件夹
- 执行以下命令启用uboot的fallback启动
nvram set flag_try_sys1_failed=0 nvram set flag_try_sys2_failed=1 nvram commit
- 执行
mtd -r write /tmp/squashfs-firmware.bin firmware
刷机。(请自行替换你的固件文件名)
1 条评论
小米CR6609路由器刷OpenWRT – 极客IT网 · 2023 年 10 月 3 日 下午 1:54
[…] 小米 CR660x 刷 Openwrt 教程 […]