无用的折腾:小米路由器4A刷Openwrt

小米路由器4A刷Openwrt

描述

在国内有傻逼百度还有CSDN这种败类情况下,我基本时时刻刻都会挂着代理,基本每个软件都要用到科学代理,每次用的时候都要重新测一遍连通性,有的需要需要全局,如果是linux需要用全局,就会很麻烦。

硬件部分

我目前有的设备,两个设备均是小米4A千兆版,英文Mi Router 4A (MIR4A) Gigabit Edition
请在折腾前确定你的路由器是否一致,如果不一致,请去google是否有成功方案

最起码你得准备2根网线,最好准备3根网线

关于刷机必须要知道的事

小米路由器4A刷Openwrt是利用2.28.62版本固件的一个shell命令注入的漏洞,所以要想刷机成功就必须得升(降)级到这个版本,github(点击我跳转git)上说2.28.65以及其他有的版本也支持,但是我测了2.28.65不行,所以刷的时候尽量在2.28.62这个固件版本
2.28.62版本的固件可以在这下载,直接点击就行:

https://raw.githubusercontent.com/acecilia/OpenWRTInvasion/master/firmwares/stock/miwifi_r4a_firmware_72d65_2.28.62.bin

下载完管理界面选择手动更新,导入升级包,等待就行。

开始刷机

我们需要利用漏洞攻击程序对路由器进行破解

项目地址

直接把它clone下来

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

代码是python3写的,然后进去用pip3安装依赖

pip3 install -r requirements.txt

攻击成功几个必要的条件:

  1. 你的设备必须和路由同一网段
  2. 路由器必须联网(2.28.62版本必须联网)
  3. 攻击肯定100%成功,但需要很多次,我已经试了N多设备,请耐心尝试

然后,我们执行

python3 remote_command_execution_vulnerability.py
Router IP address [press enter for using the default 192.168.31.1]:
stok:
****************
router_ip_address: 192.168.31.1
stok:
****************
start uploading config file...
start exec command...
done! Now you can connect to the router using several options: (user: root, password: root)
* telnet 192.168.31.1
* ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -c 3des-cbc -o UserKnownHostsFile=/dev/null root@192.168.31.1
* ftp: using a program like cyberduck

几个必要的参数:

  1. 第一个参数是路由器IP,默认都是192.168.31.1,如果你的不是记得修改
  2. stok值,当你登陆路由器管理界面,stok值会出现你的url中,复制填入即可

这个攻击程序的作用理论上是开启路由器的telnet或者ssh,但实际中,我们开启telnet的可能性大,执行成功之后
我们尝试

telnet 192.168.31.1

如果可以通,直接会让你输入密码

user: root
password: root

一次大概率是不会成功的,多试几次,运气好5,6次能成功,运气不好,10多次甚至需要更多

成功之后,如下图:

我们访问openwrt固件网站

https://openwrt.org/toh/views/toh_fwdownload

搜索Gigabit Edition,跳转到该行,划到最后一栏Firmware OpenWrt snapshot Upgrade URL这个栏,复制那一行的链接

https://downloads.openwrt.org/snapshots/targets/ramips/mt7621/openwrt-ramips-mt7621-xiaomi_mi-router-4a-gigabit-squashfs-sysupgrade.bin

类似于这样的链接
我们需要把这个固件传输到路由器上,怎么传输就不讲了,各路大佬可以各显神通
我的操作是,先将固件下载到本机,因为路由器本身不具备科学上网,所以得现在自己电脑上下载完,然后启一个web服务,路由器上无论是通过wget还是curl去下载到路由器

这块有一个坑,路由器本身到存储就不算大,只有/tmp目录存储还算稍微大点,所以你也只能放在tmp,后续你如果想要安装一些其他的软件,也只能把一些安装包或者软件装在tmp

成功把固件传到路由器之后,执行

mtd -e OS1 -r write 固件名称.bin OS1

执行完回车,等着就行了,当路由器两个蓝色的等再次亮起的时候,代表刷机成功了。

这时候,你可以拿根网线,一头接lan口,一头接电脑,如果openwrt安装好了,它的默认地址是192.168.1.1,你配一个和他同网段的地址就行配个192.168.1.11都行

这时候你装完了,是没有gui的,也没有网络,你需要配置网络
openwrt有关网络的配置文件在

/etc/config/network

我们可以通过系统自带的vim进行配置

config interface 'lan'
	option device 'br-lan'
	option proto 'static'
	option ipaddr '10.1.1.1'
	option netmask '255.255.255.0'
	option ip6assign '60'

config interface 'wan'
	option device 'wan'
	option proto 'static'
	option ipaddr '192.168.2.223'
	option netmask '255.255.255.0'
	option gateway '192.168.2.1'
	option dns	'192.168.1.1 114.114.114.114'

我们只需要修改上面的部分,一个是lan口,一个是wan口,如果你是公司网,或者校园网,你可能需要配静态那就按照我这样设置,如果你是直接怼到你家路由器的保持默认就行,上面那个lan口地址,实际上是路由器的地址,所以你不能设置为动态获取,切记。

还有,在你后面每次配置错误,需要重新恢复出厂设置的时候,网络还有你安装的软件,你的/etc下的配置都会一起恢复出厂设置,也就是说你需要重新配置网络。

配置完成之后,我们!wq,保存,然后执行

/etc/init.d/network reload

重启网络
重启之后,更改和路由器同一网段的地址,你就应该能上网了,如果不能,请检查上述步骤,是否一致

接下来,我们配置openwrt的图形界面

opkg update
opkg install luci

装完之后,访问路由器管理地址


此时,你还是只能通过有线,需要你去开启无线功能,怎么开始就不说了,就是点点点。

然后就可以开始装各种插件了,通过小于一周的折腾,发现由于路由器性能太弱了,稍微装一点东西,平时上网就卡的不行,负载很高,实际我也没装太多东西,只装了个shellclash都卡的不行。

很多人都想拿路由器直接openclash,由于存储大小限制,你根本没法成功的装上openclash,全部的clash核心组件需要8.5M,而你的/etc下一共才9.5M,通过我不断百度,发现可以通过扩容来实现,但是由于不熟悉系统结构,你也不知道剩下的几个分区都是什么东西,里边有没有内容,不敢贸然格式化,进行磁盘分配,而且那个磁盘格式是特殊的,mount并不兼容那种格式,啥格式我忘了,可以自己去看一下。

最后一句话,路由器只能当路由器,除非你的路由器配置特别高,要不然还不如直接买个树莓派刷openwrt呢,都比直接拿路由器强。


服务器资源由ZeptoVM赞助

Partners Wiki IRC