小米路由器固件仿真模拟方案
字数 1633 2025-08-19 12:41:22
小米路由器固件仿真模拟方案教学文档
前言
IoT固件仿真是漏洞挖掘的重要环节,本文详细介绍了小米路由器AX9000固件的仿真模拟方法。该方案同样适用于其他型号的小米路由器,最后将通过CVE-2023-26315漏洞验证来展示仿真环境的有效性。
环境准备
1. 获取内核与文件系统
小米AX9000采用AArch64el架构,需要自行提取内核与磁盘镜像:
- 安装AArch64虚拟机
- 从中提取内核与磁盘镜像
2. 网络配置
QEMU启动后网络配置步骤:
ip add add 192.168.192.132/24 dev enp0s1
ip link set enp0s1 up
验证宿主机与QEMU虚拟机间的网络连通性
基础仿真步骤
1. 文件系统挂载
将解压后的固件文件系统传入QEMU虚拟机后执行:
mount --bind /proc proc
mount --bind /dev dev
chroot . /bin/sh
2. 启动关键服务
启动进程管理器:
/sbin/procd &
HTTP服务启动与调试
1. 识别HTTP服务
小米路由器包含多个HTTP服务:
- uhttpd
- mihttpd(监听8198端口)
- sysapihttpd(基于nginx,监听80端口)
2. 启动sysapihttpd
执行:
/etc/init.d/sysapihttpd start
3. 解决依赖问题
常见报错及解决方案:
-
缺失
/var/lock/procd_sysapihttpd.lock- 创建对应目录和文件
-
"Failed to connect to ubus"
- 启动ubus服务:
/sbin/ubusd &
- 启动ubus服务:
-
"usock: No such file or directory"
- 创建
/var/run/ubus.sock文件
- 创建
4. 崩溃排查
使用strace跟踪进程:
strace -p <pid>
常见崩溃原因:
- 缺失
/etc/TZ文件- 解决方案:
echo "WAUST-8WAUDT" > /etc/TZ
- 解决方案:
- getsockopt错误导致重定向崩溃
- 修改
/usr/sbin/sysapihttpd二进制文件 - 将CBZ指令patch为CBNZ
- 修改
系统配置绕过
1. 跳过初始化配置
方法一(不推荐):
- 修改
/usr/lib/lua/luci/view/web/sysauth.htm - 注释掉重定向代码
方法二(推荐):
uci set xiaoqiang.common.INITTED=1
uci commit
2. 设置登录密码
密码存储机制:
- 密码存储在
account.common.<用户名>配置项 - 存储值为
sha1(密码明文 + "a2ffa5c9be07488bbb04a3a47d3c5f6a")
设置密码示例(密码为"winmt"):
uci set account.common.admin=b264db0fca361ef8eca919fa28e70d7a57d4c2db
uci commit
API访问权限问题
1. 503错误分析
/api/xqdatacenter/request访问报错原因:
_noinitAccessAllowed函数校验失败- 需要满足以下条件之一:
xqsys.getInitInfo()返回true(即xiaoqiang.common.INITTED=1)- entry flag包含0x08
2. 解决方案
推荐方案:
uci set xiaoqiang.common.INITTED=1
uci commit
替代方案:
- 修改
xqdatacenter.lua源码 - 在对应entry添加flag位0x08
- 使用固件自带的
luac重新编译
漏洞验证环境
1. 启动额外服务
/usr/sbin/datacenter &
/usr/sbin/plugincenter &
验证9090和9091端口是否正常监听
2. 验证CVE-2023-26315
使用相应exp验证漏洞,获取shell
关键知识点总结
-
固件仿真核心原则:不断解决报错,只要问题不涉及外设硬件,通常都有解决方案
-
小米路由器特有机制:
- 多HTTP服务并存(uhttpd/mihttpd/sysapihttpd)
- UBUS总线通信机制
- Lua实现的Web管理界面
- UCI配置系统存储关键参数
-
调试技巧:
- 使用strace跟踪进程崩溃原因
- 分析二进制文件定位关键报错点
- 修改二进制指令绕过问题代码
-
权限系统:
- 初始化状态检查(INITTED标志)
- API访问flag位控制(0x08表示允许未初始化访问)
-
认证机制:
- 双重SHA1哈希的密码存储方式
- 固定key值参与哈希计算
- Token认证机制
本方案为小米路由器固件仿真提供了完整指导,通过解决各类报错和系统限制,最终构建出可用于漏洞分析和验证的仿真环境。