前言
漏洞详情:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-14993
参考poc链接
固件获取
前往官网获取1.5.1版本的固件。
参考这篇文章对固件进行解包。
可以使用 ubi_reader
和 ubidump
工具。经过尝试,最后使用到 ubidump
工具
使用如下命令对固件进行解包:python ubidump.py -s . image.ubi
,可以得到rootfs文件夹
漏洞分析
根据公布的漏洞公告,可以定位到漏洞函数位于sub_2802C
函数中
IDA分析可以知道获取了一些参数,主要引发漏洞的地方在于strcpy(&v33,src)
的位置。
由于程序在运行的过程中会执行许多命令,其中uci get general_conf.base.status
若返回结果不为enable
则会直接返回,为了调试漏洞,我才用qemu-system-arm
来模拟运行。
在调试前需要将一些动态库和运行时需要的程序复制到指定位置,写成一个脚本如下:
#! /bin/sh
cp usr/lib/libcgi.so.1 /lib/
cp lib/libuci.so.0.7 /lib/
cp usr/lib/libjansson.so.0 /lib/
# bypass execve "uci get general_conf.base.status" command
cp sbin/uci /bin/
# bypass execve "cfg_restore "
cp ./sbin/cfg_restore /sbin/
# To start lighttpd
cp usr/lib/libpcre.so