“撸猫”记

身为一名铲屎官,撸猫手法可是安身立命之本,要不主子可是要给你脸色看的哦,手法不到位这样的表情就来领教一下吧~~

不过要是告诉你我家主子从不摆脸不挠人,你羡慕嫉妒恨不。

身为安全研究员,能撸的猫还真比别人多一种。不过我们撸的不是折耳也不是布偶,我们撸的是光猫。

不好意思,放错图了。下面这个才是主子真容。

这撸猫看上去简单,但还是很讲究手法的,光猫也一样,需要些套路才能把它身上存在的问题探个究竟。

PS:本次安全测试所发现的漏洞列表见文末,欲知漏洞挖掘详情,还请各位看官一同开启我们的“撸猫”之旅。

收集信息

 

拿到光猫之后,信息先来收集一波。比如设备生产厂商、服务商、已知漏洞、开放的服务端口还有默认密码等。

下面是使用nmap对全端口的探测结果,可以看出有哪些端口是开放的:

硬件安全测试

既然光猫在手了,拆开看一下也不是不可以。但是很不幸,在PCB板上发现了预留的硬件调试串口,通过此接口进入设备系统或者提取固件都是有可能的。这暴露的串口虽然方便了后期调试和研究,但确实也为设备安全增添了一份风险。

接入串口后,设备启动Bootloader,上一下常用手段。

看来这个猫还是真的有一套,考虑到了独处的风险。这下难倒了我们安全研究员。先从互联网上查一些资料吧,发现很多人因为存在密码就放弃了。
忽然想到常用的通讯设备超级用户,一试不得了,这里的Bootloader使用的竟然是通用的默认超级口令(刮开可查看刮开也不让你看)

那么通过Bootloader就可以读取或者写入固件内容,以及开启相关的服务啦!

继续在Bootloader里摸索,发现Bootloader存在开启的http服务,使用该服务可以写入系统固件,页面存在上传绕过漏洞。


因为页面仅限制文件名,且后台仅判断文件的压缩格式,所以如果传送一个较大的文件便可能导致系统拒绝服务。

此外,发现串口登陆系统虽然也需要用户认证,并进行密码出错3次的判断。

但还是存在弱口令问题(刮开可查看刮开也不让你看),登录后执行sh便可切换到 root 权限,至此提取固件不是梦。

Web漏洞挖掘

硬件固件姑且先摸索到这里,来看看Web。首先,使用设备提供的信息用 user用户登录设备,尝试访问一些文件。当访问到/romfile.cfg 时发现了新大陆,这里读取的配置文件中包含了相当敏感的信息:
a. 超级管理员的账号密码
b. telnet账号密码
c. telnet服务的开放端口
d. ftp/console账号密码

访问/****/getGateWay.cgi同样可以获取到telnet系统账号密码。

访问/GET_WLAN_GUEST_CFG_INFO.json,在未授权情况下获取到了Wifi密码。

除了账号信息泄露外,系统日志文件也可在未授权情况下被访问到。

想想,这用户名密码都已经掌握了,接下来能搞点什么事情呢。目标锁定到telnet上,一番尝试后发现,身为普通用户的我竟然可以直接在telnet功能链接里开启服务,而且操作及其简单。用普通用户(user)通过Web登录设备,然后访问url(/****/telnet.asp),配置开启telnet服务即可(默认应该是关闭状态)。


之后使用收集到的账号信息(用户名/密码/端口)登录,登录成功后执行sh便获取了完整的系统后台权限。

基于发现的这些问题多和权限控制不当有关,于是用普通账号和超级管理员账号进行了对比测试。
a. 普通账户

b. 高权限的超级账户(从泄露的信息中获取)

发现该设备系统存在严重的垂直越权问题,也就是说普通用户可以直接通过访问相关管理接口(对应的cgi文件),对设备进行配置管理(这里问题比多,就不一一列举了)。之所以会出现这样的问题,详见后续对Web服务层的分析。

系统漏洞挖掘

因为之前已经通过串口提取到完整的文件系统了(操作系统/Web源码/系统服务程序),接下来就在此基础上进行Web服务架构的分析和漏洞的挖掘。
首先分析一下Web服务程序(/userfs/bin/boa),Web服务层主要包含两套服务框架,分别用于处理普通用户(user)和超级管理员(CMCCAdmin)的访问请求,如下图所示:

其中Boa Web Server主要负责登录认证、用户身份识别,会根据登录用户身份将请求路由到对应的系统服务中:


cfg_manager负责处理超级管理员的Web访问请求,主程序代码中直接实现了部分管理功能,还有部分功能是通过调度/usr/script/*.sh脚本来实现的:

osgid则负责处理普通用户的Web访问请求(user)。

从架构上来看,系统其实为普通用户和超级管理员开了两扇不同的门,走进不同的门能获得的东西自然不一样,只是这大门的守卫玩忽职守了,让普通用户也能够进入超级管理员专属的房间,如此的权限控制不当便导致了之前种种未授权漏洞。

接下来主要以cfg_manager服务作为目标进行漏洞挖掘,选择这个服务主要是考虑到下面这两方面因素:
a. cfg_manager是厂商根据业务需求定制开发的服务程序;
b. cfg_manager负责处理超级管理员Web请求,其提供的功能更丰富,相应的可测试点比较多,也更容易发现问题。

果不其然,boa程序在处理Web请求Cookie时,就未对数据长度进行校验,从而导致了缓冲区溢出。

测试POC数据包:

缓冲区溢出程序异常退出:

对该缓冲区溢出漏洞进一步分析利用,构造攻击代码可能获取系统权限,但由于该设备为MIPS架构的嵌入式设备,没有自带调试分析环境,调试环境搭建也比较繁琐,这里就介绍两个环境搭建的思路:
1. 利用交叉编译生成该平台下的调试工具,通过U盘挂载到系统中,进行调试分析;
2. 将整套应用服务移植到有调试环境的系统中进行分析。
测试发现,缓冲区溢出不止一处,boa程序在处理POST数据的过程中就还有一例。
boa程序处理POST数据的过程如下:
1. boa::TCWebApi_set通过调用libtcapi的tcapi_set函数将待处理的数据传递到底层服务。

2. libtcapi::tcapi_set将数据复制到申请的固定大小的缓冲区中,之后调用libtcapi:: send2CfgManager函数完成后续操作;

3. libtcapi::send2CfgManager函数将POST数据写到/tmp/tcapi_sock中。

4. cfg_manager通过调用tcapi_get来获取传入的POST数据并进行处理。
以上是POST数据流的简单分析,缓冲区溢出漏洞就存在于tcapi_set函数中,那么要利用该漏洞,先要找到一个能够调用TCWebApi_set功能的页面,这里以ledmode.asp为例(见下图),此外还需要一个有效的SESSIONID。

测试POC数据包:

程序缓冲区溢出异常退出:

此外还发现了一个拒绝服务漏洞,直接上测试POC数据包:

程序异常退出:

“撸猫”至此,最后将发现的所有漏洞汇总如下 ,感觉自己萌萌哒~~:

硬件漏洞 调试串口暴露 中危
Bootloader弱口令登录 中危
Bootloader开启HTTP服务 中危
串口系统认证弱口令 中危
Web漏洞 rom配置文件读取 高危
系统日志信息未授权访问 低危
telnet账号密码未授权访问 中危
wifi配置信息未授权访问 低危
普通用户可开启telnet服务 高危
系统漏洞 缓冲区溢出-cookie 高危
缓冲区溢出-post数据 高危
拒绝服务漏洞 低危

绿盟科技格物实验室专注于工业互联网、车联网、物联网等方面的安全研究,曾发现多款工业物联网设备安全漏洞,协助厂商进行安全修复。多次参与国内外知名安全会议并发表专题演讲。积极与相关的厂商进行合作,共同努力创建和谐、稳定的网络安全生态环境。

发表评论