freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

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

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

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

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

本文适用于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
可试读前30%内容
¥ 19.9 全文查看
9.9元开通FVIP会员
畅读付费文章
最低0.3元/天
# 漏洞 # 企业级IoT # IoT安全 # IoT固件
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 jfkk 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
安全分析与研究
jfkk LV.2
月到天心处,风来水面时。 一般清意味,料得少人知。 github:https://github.com/glkfc
  • 4 文章数
  • 8 关注者
CVE–2019–8985漏洞复现
2024-09-20
漏洞挖掘技术研究
2024-09-05
CVE-2023-44487漏洞复现
2024-08-12
文章目录