本文也是分析t00ls表哥的文章后,无意中发现的另一处代码执行漏洞。版本是phpcms v9.5.8 现在官方已经修复了。

poc


根据poc代码所在的url连接,我们可以定位到是phpcms/modules/content/content.php文件中的public_categorys函数,

这段代码是在构造categorys数组,并为下面的操作做准备

从这段代码中可以看出,如果$categorys不为空,则进入if条件语句中,在这里switch语句中,$from无论是什么值,$strs将会一定存在$_GET['menuid’]这个变量的值。并且$tree->get_treeview函数的参数,也就是phpcms/libs/classes/tree.class.php中的get_treeview函数,我们跟入这个函数

上面的是这个函数的介绍,下面是这个函数所存在漏洞的地方

            if($this->get_child($id)){
                eval("\$nstr = \"$str2\";");
                $this->str .= $nstr;
                if($showlevel == 0 || ($showlevel > 0 && $showlevel > $currentlevel)) {
                    $this->get_treeview($id, $effected_id, $str, $str2, $showlevel, $style, $currentlevel+1, TRUE);
                } elseif($showlevel > 0 && $showlevel == $currentlevel) {
                    $this->str .= $placeholder;
                }
            } else {
                eval("\$nstr = \"$str\";");
                $this->str .= $nstr;
            }

在这里,首先判断一下是不是子样式表,如果不是将会通过eval去执行$str2,如果是子样式表,则会执行$str,也就是一定会执行包含恶意代码的字符串。

漏洞修复方案

源链接

Hacking more

...