深入分析MikroTik RouterOS CVE-2018-14847 & Get bash shell
0×01. 前言
MikroTik路由器在4月份被发现存在目录遍历漏洞CVE-2018-14847,危险程度为中。Tenable Research的专家于10月7日在DerbyCon上发表了题为“Bug Hunting inRouterOS”的演讲,介绍了这项新技术,就是利用该漏洞。目前结合该漏洞的黑客工具已放出,运行RouterOS的MikroTik设备成为恶意代码的目标。
本文从MikroTik RouterOS与客户端的通信协议入手,辅以逆向分析,深入解读了CVE-2018-14847以及内置开发者后门的漏洞原理,最后进行完整的组合拳进阶利用,达到Get bash shell的目的。整体流程图如下:
0×02. 通信协议分析
MikroTik RouterOS是一款基于Linux核心开发,兼容Arm,mips,x86 PC等多种架构网络设备操作系统。通过安装该操作系统可以将标准的PC电脑变成专业路由器,也就是平时常说的软路由。同时,RouterOS提供了丰富的管理配置接口:1)winbox:GUI软件管理; 2)cli:命令配置;3)webfig :网页图形化管理。而Winbox for MikroTikRouterOS是一个用于管理MikroTik RouterOS系统的 GUI客户端应用程序。
RouterOS官方提供了相应的ISO系统镜像包,所以可以像安装正常操作系统一样安装RouterOS,直接在vm中安装一个虚拟机。
通过CliTelnet的方式对RouterOS进行配置,但是要知道以下两点:
•这不是一个osbash shell,不能访问到底层的linux的操作系统
•只能利用内置的一些命令集对RouterOS进行配置和管理
从下图的nmap扫描结果可以看可以看到RouterOS专门提供了8291端口跟winbox通信。
漏洞原理是怎么的呢?要理解漏洞的原理,首先得需要理解Routeros与winbox的通信过程,本文先从webfig和Routeros的通信过程入手。
2.1 通信协议识别
访问webfig,首先请求的一个js文件,下载来美化后看看代码:
代码很多,17000行左右。大致浏览了一下,可以看到webfig与RouterOS之间所有的通信消息都是由这个js文件产生和处理。 初始化相关代码:
登录、认证相关功能,相关的POST数据包都发送到RouterOS的jsproxy处理, 这里的jsproxy就相当于jsp中servlet一样。
但当查看这些数据包的时候,发现POST是加密的,同样返回的数据也是。
而其中的加密算法在js文件中可以找到:
其中的产生56位key的算法采用的是RFC 3079 MS-CHAP-2 。
这是一个很老的PPP协议(存在离线碰撞破解漏洞)
从js代码和数据包可以看到采用的身份认证方式是:提问/应答(Challenge/Response)方式。
2.2 认证过程梳理
至此,笔者来完整地梳理一下整个认证的流程:
客户端首先发送一个空的POST请求给服务器。
0×01. 前言
MikroTik路由器在4月份被发现存在目录遍历漏洞CVE-2018-14847,危险程度为中。Tenable Research的专家于10月7日在DerbyCon上发表了题为“Bug Hunting inRouterOS”的演讲,介绍了这项新技术,就是利用该漏洞。目前结合该漏洞的黑客工具已放出,运行RouterOS的MikroTik设备成为恶意代码的目标。
本文从MikroTik RouterOS与客户端的通信协议入手,辅以逆向分析,深入解读了CVE-2018-14847以及内置开发者后门的漏洞原理,最后进行完整的组合拳进阶利用,达到Get bash shell的目的。整体流程图如下:
0×02. 通信协议分析
MikroTik RouterOS是一款基于Linux核心开发,兼容Arm,mips,x86 PC等多种架构网络设备操作系统。通过安装该操作系统可以将标准的PC电脑变成专业路由器,也就是平时常说的软路由。同时,RouterOS提供了丰富的管理配置接口:1)winbox:GUI软件管理; 2)cli:命令配置;3)webfig :网页图形化管理。而Winbox for MikroTikRouterOS是一个用于管理MikroTik RouterOS系统的 GUI客户端应用程序。 内容来自无奈安全网
RouterOS官方提供了相应的ISO系统镜像包,所以可以像安装正常操作系统一样安装RouterOS,直接在vm中安装一个虚拟机。
通过CliTelnet的方式对RouterOS进行配置,但是要知道以下两点:
•这不是一个osbash shell,不能访问到底层的linux的操作系统
•只能利用内置的一些命令集对RouterOS进行配置和管理
从下图的nmap扫描结果可以看可以看到RouterOS专门提供了8291端口跟winbox通信。
漏洞原理是怎么的呢?要理解漏洞的原理,首先得需要理解Routeros与winbox的通信过程,本文先从webfig和Routeros的通信过程入手。 内容来自无奈安全网
2.1 通信协议识别
访问webfig,首先请求的一个js文件,下载来美化后看看代码:
代码很多,17000行左右。大致浏览了一下,可以看到webfig与RouterOS之间所有的通信消息都是由这个js文件产生和处理。 初始化相关代码:
登录、认证相关功能,相关的POST数据包都发送到RouterOS的jsproxy处理, 这里的jsproxy就相当于jsp中servlet一样。
但当查看这些数据包的时候,发现POST是加密的,同样返回的数据也是。
www.wnhack.com
而其中的加密算法在js文件中可以找到:
其中的产生56位key的算法采用的是RFC 3079 MS-CHAP-2 。
这是一个很老的PPP协议(存在离线碰撞破解漏洞)
从js代码和数据包可以看到采用的身份认证方式是:提问/应答(Challenge/Response)方式。
2.2 认证过程梳理
至此,笔者来完整地梳理一下整个认证的流程: 本文来自无奈人生安全网
客户端首先发送一个空的POST请求给服务器。
内容来自无奈安全网