0×01. 前言
MikroTik路由器在4月份被發(fā)現(xiàn)存在目錄遍歷漏洞CVE-2018-14847,危險(xiǎn)程度為中。Tenable Research的專家于10月7日在DerbyCon上發(fā)表了題為“Bug Hunting inRouterOS”的演講,介紹了這項(xiàng)新技術(shù),就是利用該漏洞。目前結(jié)合該漏洞的黑客工具已放出,運(yùn)行RouterOS的MikroTik設(shè)備成為惡意代碼的目標(biāo)。
本文從MikroTik RouterOS與客戶端的通信協(xié)議入手,輔以逆向分析,深入解讀了CVE-2018-14847以及內(nèi)置開(kāi)發(fā)者后門(mén)的漏洞原理,最后進(jìn)行完整的組合拳進(jìn)階利用,達(dá)到Get bash shell的目的。整體流程圖如下:

0×02. 通信協(xié)議分析
MikroTik RouterOS是一款基于Linux核心開(kāi)發(fā),兼容Arm,mips,x86 PC等多種架構(gòu)網(wǎng)絡(luò)設(shè)備操作系統(tǒng)。通過(guò)安裝該操作系統(tǒng)可以將標(biāo)準(zhǔn)的PC電腦變成專業(yè)路由器,也就是平時(shí)常說(shuō)的軟路由。同時(shí),RouterOS提供了豐富的管理配置接口:1)winbox:GUI軟件管理; 2)cli:命令配置;3)webfig :網(wǎng)頁(yè)圖形化管理。而Winbox for MikroTikRouterOS是一個(gè)用于管理MikroTik RouterOS系統(tǒng)的 GUI客戶端應(yīng)用程序。
RouterOS官方提供了相應(yīng)的ISO系統(tǒng)鏡像包,所以可以像安裝正常操作系統(tǒng)一樣安裝RouterOS,直接在vm中安裝一個(gè)虛擬機(jī)。

通過(guò)CliTelnet的方式對(duì)RouterOS進(jìn)行配置,但是要知道以下兩點(diǎn):
•這不是一個(gè)osbash shell,不能訪問(wèn)到底層的linux的操作系統(tǒng)
•只能利用內(nèi)置的一些命令集對(duì)RouterOS進(jìn)行配置和管理
從下圖的nmap掃描結(jié)果可以看可以看到RouterOS專門(mén)提供了8291端口跟winbox通信。

漏洞原理是怎么的呢?要理解漏洞的原理,首先得需要理解Routeros與winbox的通信過(guò)程,本文先從webfig和Routeros的通信過(guò)程入手。
2.1 通信協(xié)議識(shí)別
訪問(wèn)webfig,首先請(qǐng)求的一個(gè)js文件,下載來(lái)美化后看看代碼:

代碼很多,17000行左右。大致瀏覽了一下,可以看到webfig與RouterOS之間所有的通信消息都是由這個(gè)js文件產(chǎn)生和處理。 初始化相關(guān)代碼:

登錄、認(rèn)證相關(guān)功能,相關(guān)的POST數(shù)據(jù)包都發(fā)送到RouterOS的jsproxy處理, 這里的jsproxy就相當(dāng)于jsp中servlet一樣。

但當(dāng)查看這些數(shù)據(jù)包的時(shí)候,發(fā)現(xiàn)POST是加密的,同樣返回的數(shù)據(jù)也是。

而其中的加密算法在js文件中可以找到:

其中的產(chǎn)生56位key的算法采用的是RFC 3079 MS-CHAP-2 。

這是一個(gè)很老的PPP協(xié)議(存在離線碰撞破解漏洞)

從js代碼和數(shù)據(jù)包可以看到采用的身份認(rèn)證方式是:提問(wèn)/應(yīng)答(Challenge/Response)方式。

2.2 認(rèn)證過(guò)程梳理
至此,筆者來(lái)完整地梳理一下整個(gè)認(rèn)證的流程:

客戶端首先發(fā)送一個(gè)空的POST請(qǐng)求給服務(wù)器。
|