zhufucdev

我用Mac、仅通过无线网给CR6609刷了OpenWrt

由Steve Reed发布于昨年1月31日 15:10,语言 中文(中国)

OpenWrt是什么?你问

想象刷机之于Android,就像是软路由之于路由器

氪金可以解决的问题,为什么要搞机呢?不知道

准备

  • 一台M1 Pro的MacBookPro,有你喜欢的http serving环境
  • 一台CR6609,咸鱼一百以内入手(没给我电源,这个逼登
  • 你用了一万年的老路由器
  • 手机,要支持Wi-Fi上网的型号
  • 你的ROM,如果不确定,这儿是一些链接

我不想用原版ROM,你说。那你或许会想看我的这个项目, 用一些Docker来跑LEDE编译器

zhufucdev/lede_compiler

开干

我喜欢先搞软的,准备一些蟒蛇代码

import json from flask import Flask from flask import request app = Flask(__name__) res = { "code": 0, "token": ';nvram set ssh_en=1; nvram commit; sed -i \'s/channel=.*/channel="debug"/g\' /etc/init.d/dropbear; ' '/etc/init.d/dropbear start;' } @app.route('/cgi-bin/luci/api/xqsystem/token', methods=['POST', 'GET']) @app.route('/cgi-bin/luci/api') @app.route('/cgi-bin/luci/api/xqsystem') def hello_world(): if request.method == 'POST': print(request.form) return json.dumps(res) if __name__ == '__main__': app.run(host='0.0.0.0', port=80)

python 代码

我不喜欢蟒蛇。你说

随你,你想用Node Deno还是什么Brainfuck,都可以,开心就行

思路

小米路由器有个一键换机功能,非常实用。通过伪造被换机的路由器,可以注入脚本,解锁SSH

正常情况下,换机的流程大概是

  1. 新机A与旧机B(excuse my language)通过一些方法握手
  2. B关闭DHCP,将网关改为169.254.31.1,提供(serve)数据
  3. A连接B的热点,拉取不知道什么东西,包括一些明文脚本
  4. 等待重启

我们的操作空间在第2、3步

伪造被换机路由器

启动你用了一万年的老路由器,进入后台,关闭Wi-Fi 4 Wi-Fi 5二合一(如果有的话),关闭DHCP,并把网关改成比如169.254.31.11

用马克布克连接,修改静态IP到169.254.31.1

启动你喜欢的http服务器,注意监听0.0.0.0:80,勿自娱自乐

破解

掏出你Wi-Fi上网的手机,连接CR6609,用浏览器访问比如192.168.2.1(或者其他网关,你自己想)

输入管理员密码(写在路由器反面,或许你改过),注意浏览器地址栏,有以http://192.168.2.1/cgi-bin/luci/;stok=开头的东西,=到下一个/中间是明文令牌(非常牛逼的设计btw),记下来

再开一个浏览器标签,编辑地址

http://192.168.2.1/cgi-bin/luci/;stok=∂/api/misystem/extendwifi_connect?ssid=ß&password=µ

不知道是啥语言

其中

标记含义
刚刚记下的明文令牌
ß用了一万年的老路由器的热点ID
µ对应的Wi-Fi密码

过个10s,顺利的话,CR6609就连上了老路由器,页面会显示一坨JSON,其中有"code": 0

如果没有,得再想想DHCP有没有关闭,热点ID、密码错没错,还有没有其他设备连着,试试Wi-Fi 4热点,或许兼容性会好点

接着,编辑地址

http://192.168.2.1/cgi-bin/luci/;stok=∂/api/xqsystem/oneclick_get_remote_token?username=ß&password=ß&nonce=ß

不知道是啥语言

其中,∂还是那个明文令牌,ß无所谓填什么

顺利的话,会显示类似这样的东西(不完全是,但至少有"code": 0

观察Mac的控制台,会有CR6609的访问记录。顺便说一句,蟒蛇代码里,token就是注入的脚本

nvram set ssh_en=1 nvram commit sed -i \'s/channel=.*/channel="debug"/g\' /etc/init.d/dropbear /etc/init.d/dropbear start

shell 代码

这个脚本做的事情,基本就是开个dropbear服务(轻量无头的SSH)。不出意外,丢熊服务已经在运行了,可以SSH进路由器了

恭喜🎉

连接

把马克布克换回DHCP,连上CR6609的热点,运行

$ ssh root@192.168.2.1 # 或者其他什么网关,你知道的

shell 代码

如果出错

Unable to negotiate with 192.168.2.1 port 22: no matching host key type found. Their offer: ssh-rsa

不知道是啥语言

修改~/.ssh/config

$ vim ~/.ssh/config HostKeyAlgorithms ssh-rsa PubkeyAcceptedKeyTypes ssh-rsa :wq

shell 代码

应该可以连接了

root密码,CR6609就写在背面,6606跟6608据说要用什么SN算,我也搞不清楚

刷入

可以把ROM放到http server的static目录下(或许你没有)

看一下马克布克的IP,比如说Ω,再看一下ROM的文件名,比如ß,在路由器执行

cd /tmp curl -O http://Ω/static/ß nvram set boot_wait=on ; nvram set bootdelay=3 nvram set flag_try_sys1_failed=0 ; nvram set flag_try_sys2_failed=1 nvram commit mtd -e firmware -r write ß firmware

shell 代码

大功告成,等待重启,希望你玩得开心🤘

参考

你的观点

留下你的评论,我是不会读的。

拉取请求

写得不咋样?你可以帮助改进这篇文章。

此网站受reCAPTCHA保护,因而Google的隐私权政策服务条款生效。

Copyright zhufucdev 2024