小议CVE-2020-8515

2021-09-26 10,643

初步接触物联网设备,很多都是一头雾水,以一个初学者的角度对漏洞 CVE-2020-8515 进行分析,主要从固件的下载、提取、分析这几个方面进行阐述。

官网对漏洞的描述

20210917112510.png

影响型号版本

  • Vigor2960 <v1.5.1

  • Vigor300B <v1.5.1

  • Vigor3900 <v1.5.1

  • VigorSwitch20P2121 <= v2.3.2

  • VigorSwitch20G1280 <= v2.3.2

  • VigorSwitch20P1280 <= v2.3.2

  • VigorSwitch20G2280 <= v2.3.2

  • VigorSwitch20P2280 <= v2.3.2

固件下载提取

我们注意到了漏洞影响的版本和型号,并且在公告页面给出了修补后的固件下载地址

https://www.draytek.com.tw/ftp/Vigor2960/Firmware/v1.5.1/Vigor2960_v1.5.1.zip

找半天没找到老版本的固件下载地址,直接在 url 上面进行操作

https://www.draytek.com.tw/ftp/Vigor2960/Firmware/v1.4.1/Vigor2960_v1.4.1.zip

如此就下载到了老版本的固件

解压下载下来的压缩包,利用 binwalk 先进行分析

binwalk Vigor2960_v1.4.1.all

20210917113331.png

注意到提示是 UBI image 文件系统,先用 binwalk 将其提取出来,再利用 UBI Reader UBIFS Dumper 将系统读取出来

binwalk -Me Vigor2960_v1.4.1.all

20210917114009.png



UBI Reader 的安装及使用

sudo apt install python2
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
sudo python2 get-pip.py -i  https://pypi.tuna.tsinghua.edu.cn/simple

## 安装依赖
sudo apt-get upgrade
sudo apt-get update
sudo apt-get install aptitude
sudo aptitude install build-essential # 一路选 "n" 直到显示相同选 "Y"
sudo apt-get install python-dev libssl-dev libffi-dev libxml2 libxml2-dev libxslt1-dev zlib1g-dev gcc cmake

## 安装 LZO
wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.10.tar.gz
tar -xvzf lzo-2.10.tar.gz
cd lzo-2.10
mkdir build
cd build
cmake ..
make -j4
sudo make install

## 安装 python-lzo
sudo python2 -m  pip install python-lzo
sudo pip install ubi_reader


ubi_reader工具提供了四个脚本:
ubireader_display_info   //获取UBI信息以及布局块等信息
ubireader_extract_images  //提取镜像
ubireader_extract_files  //提取文件内容
ubireader_utils_info  //分析UBI镜像并创建shell脚本和UBI配置文件

后来发现也是可以通过ubi_reader 直接提取出文件的

ubireader_extract_files Vigor2960_v1.4.1.all

20210917171055.png



UBIFS Dumper的安装及使用

git clone git://github.com/nlitsme/ubidump.git
cd ubidump/
sudo python2 -m  pip install python-lzo
sudo python2 -m pip install  crcmod

python ubidump.py -l 20030.ubi  显示镜像内容

20210917163320.png

python ubidump.py -s . 20030.ubi  提取镜像

20210917163552.png

固件分析

我们看到网络上的分析描述大都基于 两个0day漏洞命令注入点是keyPath和rtick,位于/www/cgi-bin/mainfunction.cgi,对应的Web Server程序是/usr/sbin/lighttpd

keyPath 命令注入漏洞分析

20210917164708.png

通过 keypath 传入的参数仅经过了 函数 sub_AD58 的处理

20210917165008.png

发现对传入的字符串进行了处理会将  

;` $ | > 空格  都替换成了  +

要是往常来看的话我会认为此处就没有命令执行了,因为一般都是通过拼接来实现命令执行,但是通过查看 poc ,学到了一种新的思路

POC keyPath=%27%0A%2fbin%2f" + cmd + "%0A%27

'
/bin/" + cmd + "
'

单引号闭合前后的单引号,然后通过换行实现了多命令的执行,同时 {IFS} 可以绕过对空格的过滤


在 1.5.1 版本中对 keypath 字段做了限制,限制长度为30,并做了相应的过滤。

20210917172611.png


20210917172653.png

rtick 命令注入漏洞分析

20210917170106.png

在 1.5.1 版本中对 rtick 字段做了限制,限制仅使用[0-9]。

20210917172005.png

总结

整体看下来漏洞并不是很难,但如果仅仅黑盒测试的话,大概花费更长时间才能发现这些漏洞问题,结合固件提取源代码,对代码进行分析才是王道。



本文作者:Whippet

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/166775.html

Tags:
评论  (0)
快来写下你的想法吧!

Whippet

文章数:16 积分: 370

按时吃饭饭

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号