海洋CMS V6.45 – V6.55前台Getshell 代码执行漏洞

  • 发表于
  • Vulndb

海洋CMS v6.54漏洞

漏洞代码执行

Payload

海洋CMS V6.45 - V6.55前台Getshell 代码执行漏洞

漏洞分析

这个版本只是把order的变量做了限制,但是声明为global变量的不止order,为什么不用其他而用order,在上一篇已经讲过了。

我看了这次构造的POC,我也是佩服这位表哥,因为分析这些代码需要大量的时间。这次通过echoSearchPage函数里面的拼接功能,我们可以在没转换之前输出一下$content的内容,这里我推荐直接用highlight_string($content)直接输出,不用右键查看源代码了。
大家可以先在searchword替换前输出$content,可以看到还没有开始替换。

海洋CMS V6.45 - V6.55前台Getshell 代码执行漏洞

那我们在替换后,输出$content,可以看到已经拼接成型了。

海洋CMS V6.45 - V6.55前台Getshell 代码执行漏洞

156行

又到parseIf处理这里了,我们都可以使用highlight_string($content)var_dump($iar[1])来输出匹配前和匹配后的结果。
匹配前

海洋CMS V6.45 - V6.55前台Getshell 代码执行漏洞

匹配后

海洋CMS V6.45 - V6.55前台Getshell 代码执行漏洞

所以又执行了我们传参进去的代码。

构造POC

其实很简单,每个参数做了限制,传入的字符串个数不能超过20个就行了。

海洋CMS V6.45 - V6.55前台Getshell 代码执行漏洞

9就是$_POST[9]里面的值,可以任意修改只要不超过20个字符。

用Python编写批量Getshell脚本

只是在上一个脚本做下修改就行了,同样支持单个和批量getshell。

海洋CMS V6.45 - V6.55前台Getshell 代码执行漏洞

海洋CMS v6.55漏洞

漏洞代码执行

Payload

海洋CMS V6.45 - V6.55前台Getshell 代码执行漏洞

漏洞分析

这次官方给出的修复是在parseIf函数里面加了黑名单。但是没有做SERVER变量的过滤,所以可以用SERVER变量的性质来达到写入命令。

构造POC

还是利用目标的多重替换,详细步骤见SeaCMS6.54。导致最后写入assert($_SERVER[QUERY_STRING]),因为$SERVER变量默认是不检查数据的安全性的,因而当我们把命令加在url后,$_SERVER[QUERY_STRING]便可以获得我们发送的请求也就是这里传递的要执行的命令。(search.php?whami)这样就执行了assert(whoami)

用Python编写批量Getshell脚本

和上面差不多:

海洋CMS V6.45 - V6.55前台Getshell 代码执行漏洞

参考