UEditor編輯器兩個版本任意文件上傳漏洞分析

0x01 前言

UEditor是由百度WEB前端研發部開發的所見即所得的開源富文本編輯器,具備輕量、可定製、用戶體驗優秀等特色 ,被廣大WEB應用程序所使用;本次爆出的高危漏洞屬於.NET版本,其它的版本暫時不受影響。漏洞成因是在抓取遠程數據源的時候未對文件後綴名作驗證致使任意文件寫入漏洞,黑客利用此漏洞能夠在服務器上執行任意指令,綜合評級高危。因爲時間倉促,本文分析不到位的地方還請多多諒解。php

0x02 漏洞利用

筆者本地測試的編輯器是百度官方下載最新的版本1.4.3.3 http://ueditor.baidu.com/website/download.htmlhtml

本地構造一個html,由於不是上傳漏洞因此enctype 不須要指定爲multipart/form-data , 以前見到有poc指定了這個值。完整的poc以下前端

1 <form action="http://xxxxxxxxx/controller.ashx?action=catchimage" enctype="application/x-www-form-urlencoded"  method="POST">
2   <p>shell addr: <input type="text" name="source[]" /></p >
3   <input type="submit" value="Submit" />
4 </form>

需準備一個圖片馬兒,遠程shell地址須要指定擴展名爲 1.gif?.aspxgit

成功返回webshellgithub

 

 

0x03 漏洞分析

在本地IIS中將目錄快速指向到解壓後的目錄,再訪問 controller.ashx 控制器文件。當出現下圖的時候表示編輯器成功運行。web

控制器中存在多個動做的調用,包含了uploadimage、uploadscrawl、uploadvideo、uploadfile、catchimage等等shell

這些動做默認狀況下均可以遠程訪問,不排除還有新的高危漏洞;這篇文章重點來介紹catchimage這個分支條件,因爲它實例化了CrawlerHandler這個類,因此須要跟進這個通常處理程序類數組

第一行就獲取了外界傳入的source[] 數組, 核心調用位於Crawlers = Sources.Select(x => new Crawler(x, Server).Fetch()).ToArray();經過這段lambda表達式來調用類裏的方法執行後的結果 ,以下圖跟進Fecth方法體內服務器

首先經過IsExternalIPAddress方法判斷是不是一個可被DNS解析的域名地址,若是不是就終止運行;邏輯代碼以下app

這句判斷就是 1.5.0開發版本(https://github.com/fex-team/ueditor/blob/dev-1.5.0/net/App_Code/CrawlerHandler.cs)和官方發佈版本1.4.3.3最大的區別,在1.5.0版本中刪除了此處的判斷,致使在任意一個ip地址或域名下均可以執行exp以下圖

相對來講1.5.0版本更加容易觸發此漏洞;而在1.4.3.3版本中攻擊者須要提供一個正常的域名地址就能夠繞過此處判斷;

而後進入第二個條件判斷 : 對文件ContentType的識別

這段代碼很眼熟,通常常見於php文件上傳的時候對文件頭的判斷,這段代碼很容易繞過,只須要構造一張圖片馬兒就能夠繞過它的判斷,或者構造一個gif89的假圖片也能夠繞過;最後編輯器根據配置文件的信息建立對應的目錄結構再保存文件,代碼以下

至此RCE漏洞原理大體已經清楚明瞭,期待官方儘快發佈漏洞補丁程序。

0x04 防護措施

修改CrawlerHandler.cs 增長對文件擴展名的;IPS等防護產品能夠加入相應的特徵;

相關文章
相關標籤/搜索