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請求給服務器。
|