身为一名铲屎官,撸猫手法可是安身立命之本,要不主子可是要给你脸色看的哦,手法不到位这样的表情就来领教一下吧~~
不过要是告诉你我家主子从不摆脸不挠人,你羡慕嫉妒恨不。
身为安全研究员,能撸的猫还真比别人多一种。不过我们撸的不是折耳也不是布偶,我们撸的是光猫。
不好意思,放错图了。下面这个才是主子真容。
这撸猫看上去简单,但还是很讲究手法的,光猫也一样,需要些套路才能把它身上存在的问题探个究竟。
PS:本次安全测试所发现的漏洞列表见文末,欲知漏洞挖掘详情,还请各位看官一同开启我们的“撸猫”之旅。
拿到光猫之后,信息先来收集一波。比如设备生产厂商、服务商、已知漏洞、开放的服务端口还有默认密码等。
下面是使用nmap对全端口的探测结果,可以看出有哪些端口是开放的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
$ nmap -vv -p1-65535 -A 192.168.1.1 PORT STATE SERVICE REASON VERSION 53/tcp open domain syn-ack ttl 64 dnsmasq 2.52 | dns-nsid: |_ bind.version: dnsmasq-2.52 80/tcp open http syn-ack ttl 64 Boa HTTPd 0.94.13 3456/tcp open vat? syn-ack ttl 64 | fingerprint-strings: | DNSStatusRequestTCP, DNSVersionBindReqTCP, Kerberos, LPDString, NULL, SMBProgNeg, TerminalServer, WMSRequest, afp, oracle-tns: 8080/tcp open http syn-ack ttl 64 Jetty 6.1.x |_http-server-header: Jetty(6.1.x) |_http-title: Error 404 NOT_FOUND 17998/tcp open tcpwrapped syn-ack ttl 64 44401/tcp open unknown syn-ack ttl 64 MAC Address: 1C:25:E1:A0:BF:B2 (China Mobile IOT Company Limited) Device type: general purpose Running: Linux 2.6.X OS CPE: cpe:/o:linux:linux_kernel:2.6 OS details: Linux 2.6.19 - 2.6.36 |
既然光猫在手了,拆开看一下也不是不可以。但是很不幸,在PCB板上发现了预留的硬件调试串口,通过此接口进入设备系统或者提取固件都是有可能的。这暴露的串口虽然方便了后期调试和研究,但确实也为设备安全增添了一份风险。
接入串口后,设备启动Bootloader,上一下常用手段。
看来这个猫还是真的有一套,考虑到了独处的风险。这下难倒了我们安全研究员。先从互联网上查一些资料吧,发现很多人因为存在密码就放弃了。
忽然想到常用的通讯设备超级用户,一试不得了,这里的Bootloader使用的竟然是通用的默认超级口令(刮开可查看刮开也不让你看)。
那么通过Bootloader就可以读取或者写入固件内容,以及开启相关的服务啦!
继续在Bootloader里摸索,发现Bootloader存在开启的http服务,使用该服务可以写入系统固件,页面存在上传绕过漏洞。
因为页面仅限制文件名,且后台仅判断文件的压缩格式,所以如果传送一个较大的文件便可能导致系统拒绝服务。
此外,发现串口登陆系统虽然也需要用户认证,并进行密码出错3次的判断。
但还是存在弱口令问题(刮开可查看刮开也不让你看),登录后执行sh便可切换到 root 权限,至此提取固件不是梦。
硬件固件姑且先摸索到这里,来看看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数据包:
1 2 3 4 |
GET / HTTP/1.1 Host: 192.168.1.1 Cookie: X=a(此处重复N次) Connection: close |
缓冲区溢出程序异常退出:
对该缓冲区溢出漏洞进一步分析利用,构造攻击代码可能获取系统权限,但由于该设备为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数据包:
1 2 3 4 5 6 7 |
POST /cgi-bin/ledmode.asp HTTP/1.1 Host: 192.168.1.1 Content-Length: 1119 Cookie: SESSIONID=boasid777518e7 Connection: close ledmode_flag=1&testmode_flag=a(此处重复N次) |
程序缓冲区溢出异常退出:
此外还发现了一个拒绝服务漏洞,直接上测试POC数据包:
1 2 3 4 5 6 |
POST /gatewayManage.json HTTP/1.1 Host: 192.168.1.1 Content-Length: 1 Connection: close x |
程序异常退出:
“撸猫”至此,最后将发现的所有漏洞汇总如下 ,感觉自己萌萌哒~~:
硬件漏洞 | 调试串口暴露 | 中危 |
Bootloader弱口令登录 | 中危 | |
Bootloader开启HTTP服务 | 中危 | |
串口系统认证弱口令 | 中危 | |
Web漏洞 | rom配置文件读取 | 高危 |
系统日志信息未授权访问 | 低危 | |
telnet账号密码未授权访问 | 中危 | |
wifi配置信息未授权访问 | 低危 | |
普通用户可开启telnet服务 | 高危 | |
系统漏洞 | 缓冲区溢出-cookie | 高危 |
缓冲区溢出-post数据 | 高危 | |
拒绝服务漏洞 | 低危 |
绿盟科技格物实验室专注于工业互联网、车联网、物联网等方面的安全研究,曾发现多款工业物联网设备安全漏洞,协助厂商进行安全修复。多次参与国内外知名安全会议并发表专题演讲。积极与相关的厂商进行合作,共同努力创建和谐、稳定的网络安全生态环境。