某米路由器命令执行漏洞分析

新发布0daylua脚本命令执行
2025-06-28 16:41
6610

固件分析与解包

使用binwalk 命令先看看固件相关的信息,可以看他是一个ubi镜像,我们得使用专门ubi提取固件的工具进行提取,看到ubi那可以判断他是nand类型的闪存

image.png

我们使用binwalk进行解包,发现有一个2B4.ubi镜像,使用下面的教程就可以解压出来。

binwalk -Me miwifi_ra70_firmware_cc424_1.0.168.bin

image.png

安装工具:

pip install ubireader

提取:

ubireader_extract_images 2B4.ubi

image.png

解包发现有个ubifs文件,我们只有需要去解密最核心的rootfs文件,即可得到里面的SquashFS文件系统。

image.png

image.png

✅ 总结流程图

固件.bin
↓ binwalk
发现 UBI 结构 (0x2B4 等)

提取 UBI 镜像 (dd 或 binwalk)

用 ubireader_extract_images

提取出 UBIFS 镜像

用 ubireader_extract_files 解包 或者binwalk

得到文件系统内容

unluac_miwifi的使用

某米的前端是使用是lua脚本,是编译后luac文件, 且是魔改后的luac, 那么还需要对其进行反编译

<font style="color:rgb(36, 41, 47);">专门针对某米固件的反编译工具</font><font style="color:rgb(9, 105, 218);">unluac_miwifi</font>

git clone https://github.com/NyaMisty/unluac_miwifi.git
cd unluac_miwifi
mkdir build
javac -d build -sourcepath src  src/unluac/*.java
jar -cfm build/unluac.jar src/META-INF/MANIFEST.MF -C build  .

解密

java -jar ./unluac.jar /home/iotsec-zone/xiaomi/ubifs-root/miwifi_r2100_all_7d7b2_2.0.743.bin/squashfs-root/usr/lib/lua/luci/controller/api/xqdatacenter.lua > ./xqdatacenter.lua

某米后端逻辑

米使用是openwrt框架下cgi的主要逻辑在usr/lib/lua/luci/controller/目录下, 此外还有一个某米自己常用的库在路径usr/lib/lua/xiaoqiang/, 我们关注的主要也就是这两部分

漏洞存在位置

web路径cgi-bin/luci/;stok={token}/api/xqdatacenter/request,需要我们传入payload 字段包含的是一段 JSON 数据,JSON数据中包含api,pluginID等字段。

漏洞利用链分析

在反编译的/usr/lib/lua/luci/controller/api/xqdatacenter.lua中,可以看到 URL /api/xqdatacenter/request 相关的handler函数是tunnelRequest函数,且访问/api/xqdatacenter这个节点是需要鉴权的,我们使用ai让我们代码具有可读性。

local L0, L1, L2, L3, L4, L5
L0 = module
L1 = "luci.controller.api.xqdatacenter"
L2 = package
L2 = L2.seeall
L0(L1, L2)
function L0()
  local L0, L1, L2, L3, L4, L5, L6
  L0 = node
  L1 = "api"
  L2 = "xqdatacenter"
  L0 = L0(L1, L2)
  L1 = firstchild
  L1 = L1()
  L0.target = L1
  L0.title = ""
  L0.order = 300
  L0.sysauth = "admin"
  L0.sysauth_authenticator = "jsonauth"
  L0.index = true
  L1 = entry
  L2 = {}
  L3 = "api"
  L4 = "xqdatacenter"
  L2[1] = L3
  L2[2] = L4
  L3 = firstchild
  L3 = L3()
  L4 = _
  L5 = ""
  L4 = L4(L5)
  L5 = 300
  L1(L2, L3, L4, L5)
  L1 = entry
  L2 = {}
  L3 = "api"
  L4 = "xqdatacenter"
  L5 = "request"
  L2[1] = L3
  L2[2] = L4
  L2[3] = L5
  L3 = call
  L4 = "tunnelRequest"
  L3 = L3(L4)
  L4 = _
  L5 = ""
  L4 = L4(L5)
  L5 = 301
  L1(L2, L3, L4, L5)
module("luci.cont

试读结束,发布七天后转为公开

公开时间:2025年7月5日 16:41:27

提前解锁全文,需花费 50 积分

登录解锁全文
分享到

参与评论

0 / 200

全部评论 2

rew1X的头像
2025-06-28 21:23
李克用的头像
2025-06-28 16:54
投稿
签到
联系我们
关于我们