小米AX9000路由器CVE-2023-26315漏洞复现

新发布小米
2025-02-21 17:50
1757

漏洞概要

受影响版本

  • 固件版本 ≤ 1.0.168

漏洞类型

  • 授权后命令注入漏洞

风险等级

  • CVSS 3.1评分:8.8(High)
  • 影响范围:机密性/完整性/可用性全破坏

漏洞机理

小米AX9000路由器在1.0.168版本及之前存在二进制漏洞(命令注入),该漏洞由于未对非法的appid做出有效限制而引起。已授权登录的攻击者在成功利用此漏洞后,可在远程目标设备上执行任意命令,并获得设备的最高控制权,造成权限提升。

环境搭建

固件下载地址:固件下载

小米AX9000路由器固件是AArch64el架构的,我这里因为使用的mac的m芯片,就是arm64的,加上提前安装了ubuntu、arm的虚拟机,我这里 就直接在虚拟机中模拟起手,

解压后,直接文件夹内进行挂载,

mount --bind /proc proc
mount --bind /dev dev
chroot . /bin/sh

image-20250220121612583.png

启动httpd服务

这里有三个http程序,uhttpd,mihttpd,sysapihttpd。查看/etc/sysapihttpd/sysapihttpd.conf发现就是nginx,并且监听了80端口,

根据openwrt的内核初始化流程,按理说应该先启动/etc/preinit,其中会执行/sbin/init进行初始化,但是在这套固件仿真的时候,这样会导致qemu重启,所以我们首先先执行/sbin/init中最重要的/sbin/procd &,启动进程管理器即可。

image-20250220131918523.png
这里我们直接启动sysapihttpd即可,/etc/init.d/sysapihttpd start

image-20250220132305393.png
Failed to connect to ubus这里有报错这里是用到了ubus总线通信,我们需要启动/sbin/ubusd &再去start http程序,启动成功,且netstat查看web端口也正常对外开放,这里的nvram我们暂时用不到,就先不管,

image-20250220132922528.png

image-20250220133005025.png
访问一下,成功模拟,

image-20250220133046340.png
因为我这里前面已经设置过密码了,所有让我们直接密码登录,

由于该漏洞是需要登录授权的,所以我们得看一下后端的密码校验是怎么写的,这里需要分析一下

身份校验的过程在/usr/lib/lua/luci/dispatcher.luajsonauth函数中,其中调用了checkUser函数根据从POST报文中获取的usernamepasswordnonce(现时)字段进行身份验证。

/usr/lib/lua/xiaoqiang/util/XQSecureUtil.luacheckUser函数中,首先获取了系统uci配置项中存储的密码,这里的XQPreference.get函数在本文的上一节中已经给出,可分析出此处的配置项为account.common.(用户名)。接着,需要POST报文中传入的现时字段nonce与系统中uci存储的password的值拼接后进行sha1哈希的结果等于POST报文中传入的密码字段。

到这里我们清楚了后端的鉴权方式,我们去前端js里看一下是怎么构建登录的用户名和密码的,

image-20250220133821209.png

image-20250220133934159.png
这里可以看到固定的用户名就是admin,

而密码字段是通过oldPwd()函数加密后的结果。这里的oldPwd()函数将用户提交的密码明文与一个固定的key值(a2ffa5c9be07488bbb04a3a47d3c5f6a)拼接后,进行sha1哈希,再将结果继续与现时nonce拼接后,再sha1哈希一次,作为POST请求报文中的密码字段

结合上述分

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

公开时间:2025年2月28日 17:50:11

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

登录解锁全文
分享到

参与评论

0 / 200

全部评论 0

暂无人评论
投稿
签到
联系我们
关于我们