freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

IOT安全之Vigor路由器初探(一)
2024-08-13 22:40:48

本文适用于IOT新手,请看完全文再进行实验。

1、前言

在IOT安全中,qemu是必不可少的工具,因为不是每一个人都买得起实体设备的,所以需要qemu对固件进行仿真,而仿真会带来另一个问题,就是相关环境确实,可能你在跑一个web服务时,会发生各种报错,毫无头绪,本文以Vigor3900路由器为实验对象,对其进行固件仿真,并着重复现几个漏洞,这是因为其内部有着大量的栈溢出和命令注入漏洞,适合初次接触IOT的新手学习ヽ( ̄▽ ̄)ノ,同时vigor环境的搭建过程网络上并没有,大多使用的是公网中的设备进行复现,故在在此记录一些环境搭建的过程。

阅读本系列,你可以学到如下:

(1)web服务启动过程中的一些解决方法。
(2)漏洞挖掘过程中的一些思路。
(3)IDA反汇编过程中的相关技巧。

2、vigor3900

Vigor 是由台湾公司 DrayTek 开发的一系列路由器产品。DrayTek 以其专业级的网络设备而闻名,尤其在小型企业和中小企业市场中,Vigor 路由器被广泛使用。Vigor 3900是一款企业级的VPN管理中心,通过灵活、可靠以及高性能的LAN to LAN和远程接入方案,为客户的商务活动提供了安全保障,同时也节省了成本。
近些年也爆出了一些漏洞,CVE-2020-14472、CVE-2020-14473、CVE-2021-43118、CVE-2020-8515等,大多是命令注入和栈溢出等漏洞,并且发现的过程不是很难,很适合新手学习。

3、环境搭建

本文的复现环境如下:

kali2024、vigor39001.4.1、IDA pro 7.7

(1)下载固件

在该网站上可以下载到所有的相关固件 https://fw.draytek.com.tw/
image
我们这边下载vigor3900的1.4.1版本,命令如下

wget https://fw.draytek.com.tw/Vigor3900/Firmware/v1.4.1/Vigor3900_v1.4.1.ota

(2)binwalk提取固件

尝试用binwalk提取一下,发现binwalk提取出来的是一个以ubi结尾的二进制文件。

binwalk -Me Vigor3900_v1.4.1.ota

image

查阅资料可以知道,这是一个ubi格式的文件系统,则可以安装ubi_readerGitHub - onekey-sec/ubi_reader: Collection of Python scripts for reading information about and extracting data from UBI and UBIFS images.,然后里面的ubireader_extract_files脚本可以对二进制文件进行提取(其实如果从源码构建binwalk的时候,binwalk是自带ubireader_extract_files脚本的)
image

然后查看相关架构,是arm小端,一般来说,都是查看busybox,其他二进制文件也可,LSB表示小端,MSB表示大端。
image

(3)firmwalker扫描固件

由于没有实体的设备,直接用nmap扫描端口不现实,一般来说,路由器等设备的漏洞都存在于web服务,可以先跑一下firmwalker_pro,该工具是fiemwalker的加强版,用于搜索固件的文件系统中的敏感信息等内容。当然,也有其他的固件扫描工具开源固件扫描工具对比 - 知冰 - 博客园 (cnblogs.com),尤其是EMBA,据说效果很好,有兴趣的可以试一下,firmwalker的命令如下。

./firmwalker.sh ../ubifs-root/1095410974/rootfs res.txt

image

可以看到,在usr/sbin目录下有lighttpd服务,Lighttpd是一种轻量级的Web服务器,常用于嵌入式系统,因此后面可以着重对该服务进行分析。
image

同时这边也看到了相关的配置文件lighttpd.conf,如下所示。

image
之后可以查看一下init.d目录,init.d目录通常位于/etc目录下,并且包含了一系列的脚本。这些脚本用于在系统启动或关机时启动或停止各种服务和进程,重点查看一下lighttpd服务的启动流程,如下所示。

image

(3)系统模拟

1. qemu启动

确定好分析的目标之后,则可以尝试开始进行系统的模拟,这边介绍一个简单脚本https://github.com/N1nEmAn/Sevnup进行模拟(qemu模拟的具体过程可以查看上一篇博客),执行该脚本可以根据文件系统的信息自行下载相关的内核文件并进行自动的配置ip地址,同时把文件系统打包,命令如下所示。

git clone https://github.com/N1nEmAn/Sevnup.git
cd Sevnup
./run.sh armel ../rootfs

image

该脚本其实就是自动下载一些内核镜像文件,免去了一些麻烦。

image

下载完之后,启动如下所示,需要在qemu中输入一些配置命令,即红色框中框出的命令

image

不过使用qemu的图形化界面不好操作,不如修改一下脚本,将 QEMU 的输出重定向到当前终端,并且可以通过终端直接与虚拟机的控制台进行交互,用如下脚本替换run.sh中的内容。

#!/bin/bash

# Print ASCII art at the beginning
echo "                                                    "
echo "     ███████╗███████╗██╗   ██╗███╗   ██╗██╗   ██╗██████╗ "
echo "     ██╔════╝██╔════╝██║   ██║████╗  ██║██║   ██║██╔══██╗"
echo "     ███████╗█████╗  ██║   ██║██╔██╗ ██║██║   ██║██████╔╝"
echo "     ╚════██║██╔══╝  ╚██╗ ██╔╝██║╚██╗██║██║   ██║██╔═══╝ "
echo "     ███████║███████╗ ╚████╔╝ ██║ ╚████║╚██████╔╝██║     "
echo "     ╚══════╝╚══════╝  ╚═══╝  ╚═╝  ╚═══╝ ╚═════╝ ╚═╝     "
echo "                                                    "
echo "     Welcome to Sevnup firmware analysis script for MIPSel "
echo "   By N1nEmAn - https://github.com/N1nEmAn/Sevnup"
echo "                                                    "

# Display help information
print_help() {
  echo "Usage: $0 [ARCHITECTURE] [ROOT_PATH]"
  echo
  echo "ARCHITECTURE:"
  echo "  mipsel  - MIPS architecture"
  echo "  armel   - ARM architecture"
  echo
  echo "ROOT_PATH:"
  echo "  The path to the root directory of the squashfs-root."
  echo
  echo "Example:"
  echo "  $0 armel /path/to/squashfs-root"
  exit 1
}

# Check for arguments
if [ "$#" -ne 2 ]; then
  echo -e "\033[0;31m[x]\033[0m Invalid number of arguments."
  print_help
fi

# Check for architecture argument
arch="$1"
if [ "$arch" != "mipsel" ] && [ "$arch" != "armel" ]; then
  echo -e "\033[0;31m[x]\033[0m Unsupported architecture: $arch"
  print_help
fi

# Check for root path argument
squashfs_root_path="$2"
if [ ! -d "$squashfs_root_path" ]; then
  echo -e "\033[0;31m[x]\033[0m The provided path is not a directory."
  print_help
fi
sudo chmod 777 $squashfs_root_path/lib/*
su
# 漏洞 # 企业级IoT # IoT安全 # IoT固件
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录