深秋's Blog 当时明月在,曾照彩云归

一次小米4A刷入openwrt的失败历程

By 深秋 On Renew
⚠️ 本文最后更新于2023年11月25日,已经过了298天没有更新,若内容或图片失效,请留言反馈
写在前面

很早就想过要在路由中搭建一个透明代理,在局域网下的设备就不用每次都需要开启GUI了,之前尝试过使用手机做旁路由实现网关代理,可是总是会存在各种各样的问题,诸如分流,断网.....于是就不了了之。由于从未接触过openwrt,在脑海中下意识的就觉得它很难,每次都望而却步,今天上班摸鱼时,又又又刷到了透明代理的帖子,于是乎,‘要不就试一把?’。就有了以下文章,在此次刷openwrt前,我也看查找了不少帖子,论坛,本次操作就参考了下面这篇博客,本文的大部分操作都与之无异,在此基础上更新了部分问题的解决方案。

小米路由器4A百兆版刷OpenWRT

远程登录到路由器

  • 更新到存在漏洞的固件版本

查看github社区,可以知道目前刷入无问题的有三个版本:v2.18.51,v2.18.58,v3.0.12,我在论坛以及issue中了解到,目前v2.18.51的反响比较好,所以我使用的版本为v2.18.51,与原帖主不同,这里我同样放上原贴主提供的固件地址。
imgs

小米4A路由器百兆版2.18.51固件:https://pan.baidu.com/s/1DXHZx9puoN9kEY7BDymxqA
小米4A路由器百兆版2.18.58固件:https://pan.baidu.com/s/1DXHZx9puoN9kEY7BDymxqA
提取码:debw

更新固件:192.168.31.1进入路由器->常用设置->系统状态->手动升级,在弹出窗口中手动选择固件包即可

imgs2
  • 使用OpenWRTInvasion脚本通过漏洞远程登录

小米路由器系列路由器存在一个远程执行漏洞:CVE-2019-18370 ,小米魔改的 luci 管理后台有一个接口可以注入 shell 命令执行,我们就可以通过这个漏洞远程执行脚本开启 ssh、telnet 等远程登录服务,或者通过 nc工具配合管道反向shell登录。有人写了一个开放远程登录的脚本:openWRTInvasion,我们可以利用这个脚本来一键登录到路由器上执行我们的刷机命令。

在执行脚本前,请确认你已知路由器的登录密码,如果不知道,是自动保存到浏览器的,那就复制地址栏的stok参数,用于脚本的登录校验

imgs3

创建空白目录,执行以下代码

git clone https://github.com/acecilia/OpenWRTInvasion
cd OpenWRTInvasion

如果clone一直10024,可以尝试在github项目下,手动download zip,解压到空白目录中,运行cmd

# 安装依赖
pip3 install --upgrade pip
pip3 install -r requirements.txt
# 执行脚本
python3 remote_command_execution_vulnerability.py

执行完毕后会提示输入ip地址:Router IP address[press enter for using the default 'miwifi.com']

正常输入192.168.31.1即可

之后会要你输入密码,知道密码就直接输入,不知道就直接留空回车,进入下一步输入上一步骤保存的stok

接下来会让你选择安装方式,保持默认回车即可

然后等待执行完成

尝试远程登录
telnet 192.168.31.1

如果提示telnet不存在,请查看这里进行处理

在这里请注意,由于原贴主使用的脚本比较老了,用户名为root,密码为空已不适用,请查看上一步脚本执行完后反馈的信息为准

imgs4

进入此页面,代表登录成功了

imgs5

获取合适的openwrt版本

前往官网下载地址,获取需要使用的固件包,
截至今日,目前最新的小米4A 100M 的固件包为v23.05,但本着代码能运行,就不修改的原则,这里还是采用原贴主提供的版本,若有需要,可在openwrt刷完后,手动更新固件版本。

imgs6
# 官方源
http://downloads.openwrt.org/releases/19.07.4/targets/ramips/mt76x8/openwrt-19.07.4-ramips-mt76x8-xiaomi_mir4a-100m-squashfs-sysupgrade.bin

#中科大源
http://mirrors.ustc.edu.cn/openwrt/releases/19.07.4/targets/ramips/mt76x8/openwrt-19.07.4-ramips-mt76x8-xiaomi_mir4a-100m-squashfs-sysupgrade.bin
# 切换到 tmp 目录(其他分区空间不够放不下镜像)
cd /tmp

curl -o firmware.bin http://mirrors.ustc.edu.cn/openwrt/releases/19.07.4/targets/ramips/mt76x8/openwrt-19.07.4-ramips-mt76x8-xiaomi_mir4a-100m-squashfs-sysupgrade.bin

mtd -e OS1 -r write firmware.bin OS1

等待烧录完成后,会自动执行reboot,若没有reboot,手动reboot即可

ssh连接后,安装luci,使用web可视化管理openwrt(默认是:http://192.168.1.1

opkg update && opkg install luci

问题点解决

目前大多用户使用光猫拨号,路由器作为二级路由或AP,导致openwrt烧录完成后,openwrt的默认地址与光猫的默认地址192.168.1.1冲突,导致无法进入到openwrt系统中。解决方法如下:

进入光猫的管理页面,手动将光猫的网关地址修改为192.168.1.x,这里以电信光猫为例

imgs7
解决完默认地址冲突后,使用ssh root@192.168.1.1 还是无法连接到路由器?

openwrt烧录完成后,默认wan口会失去网络功能,请将网线插入lan口后,按以下步骤排查:

1.修改电脑ip为静态ip,保证电脑与路由器在192.168.1.x同一网段下

2.打开cmd,ping 192.168.1.1,是否是通路
imgs8

3.使用第三方ssh工具 ssh root@192.168.1.1 22 带端口连接

opkg update执行失败,提示Signature check failed. Remove wrong Signature file

进web页面 系统->software->configure opkg里注释掉option check_signature 即可

路由器已经接上网线,但opkg install 无网络

进入web页面,网络->接口->配置lan口,设置网关为光猫网关,设置DNS解析

## 最终

折腾openwrt的本意就是为了安装openclash用作透明代理的,在完成一系列前置操作,安装好所有依赖后,打算安装openclash luci包时发现,内存不足.....
小米4A 100M的flash只有8M,而安装openclash需要10m+,我为什么没有早一点发现 = _ = !
拔线,关机,索然无味。