bigwolftime / gitmentCommentsPlugin

0 stars 0 forks source link

Redmi AX6000 开启 telnet/SSH #51

Open bigwolftime opened 1 year ago

bigwolftime commented 1 year ago

https://bigwolftime.github.io/Redmi-ax6000-shell/

Redmi AX6000 路由器解锁 SSH 记录, 主要参考了恩山论坛: [小米其它型号路由器] 【解锁SSH】红米Redmi AX6000开启并固化SSH、Telnet的简单方法(RB06) 这篇文章.

一. 刷入指定系统版本

Redmi AX6000 的系统版本分两个系列: 1.2.X 代表开发版本, 1.0.XX 代表稳定版本, 消费者买到时系统版本都为 1.0.XX

下图是我拿到手之后的版本(1.0.67):

根据恩山论坛帖子介绍, 1.0.67 支持解 SSH, 无需刷入其他版本(若有特殊版本需求可以进入固件集合链接下载).

二. 开启调试模式

登录路由管理后台, 通过 url 拿到 stock, 例如链接为: http://192.168.31.1/cgi-bin/luci/;stok=2193ac10ff21f3278dea441e19a94c123/web/setting/upgrade, stock 就是: 2193ac10ff21f3278dea441e19a94c123 .

然后构造请求: http://192.168.31.1/cgi-bin/luci/;stock={token}/api/misystem/set_sys_time?timezone=%20%27%20%3B%20zz%3D%24%28dd%20if%3D%2Fdev%2Fzero%20bs%3D1%20count%3D2%202%3E%2Fdev%2Fnull%29%20%3B%20printf%20%27%A5%5A%25c%25c%27%20%24zz%20%24zz%20%7C%20mtd%20write%20-%20crash%20%3B%20

这条命令利用了路由器设置时区的漏洞, 漏洞详情可以参考 OpenWrt 论坛: add-openwrt-support-for-xiaomi-redmi-ax6000.

路由器收到请求后会执行: zz=$(dd if=/dev/zero bs=1 count=2 2>/dev/null) ; printf '\xA5\x5A%c%c' $zz $zz | mtd write - crash ; 将 \xA5\x5A\x00\x00 写入crash分区.

三. 重启

执行: http://192.168.31.1/cgi-bin/luci/;stok={token}/api/misystem/set_sys_time?timezone=%20%27%20%3b%20reboot%20%3b%20

等待重启完成, 重启完成后路由器指示灯为蓝色闪烁状态.

将 %20%27%20%3b%20reboot%20%3b%20 URL 解码之后得到: ' ; reboot ;.

四. 开启 Telnet

执行: http://192.168.31.1/cgi-bin/luci/;stok={token}/api/misystem/set_sys_time?timezone=%20%27%20%3B%20bdata%20set%20telnet_en%3D1%20%3B%20bdata%20set%20ssh_en%3D1%20%3B%20bdata%20set%20uart_en%3D1%20%3B%20bdata%20commit%20%3B%20

此处执行的命令是: ' ; bdata set telnet_en=1 ; bdata set ssh_en=1 ; bdata set uart_en=1 ; bdata commit ;

五. 重启

将步骤三的命令重新执行即可, 然后等待重启完成.

六. 开启SSH

电脑端使用命令行工具执行: telnet 192.168.31.1, 可以无密码登录到路由器, 如图:

执行以下 shell:

1. 将 root 用户的密码设置为 admin

echo -e 'admin\nadmin' | passwd root

2. 固化 SSH

nvram set ssh_en=1 nvram set telnet_en=1 nvram set uart_en=1 nvram set boot_wait=on nvram commit

3. 永久开启 SSH 登录

mkdir /data/auto_ssh && cd /data/auto_ssh curl -O https://cdn.jsdelivr.net/gh/lemoeo/AX6S@main/auto_ssh.sh chmod +x auto_ssh.sh

uci set firewall.auto_ssh=include uci set firewall.auto_ssh.type='script' uci set firewall.auto_ssh.path='/data/auto_ssh/auto_ssh.sh' uci set firewall.auto_ssh.enabled='1' uci commit firewall

如果不想支持 SSH 永久登录, 仅临时性开启, 可以将上面的第三部分命令替换成这个: sed -i 's/channel=.*/channel=

bigwolftime commented 1 year ago

OpenWrt