seacms v6.61 审计深入思考

阅读量    66618 | 评论 1   稿费 300

分享到: QQ空间 新浪微博 微信 QQ facebook twitter

前几天跟了一下有关cve-2018-14421,seacms最新版后台getshell,发现整个漏洞利用的核心,是绕过了一个黑名单过滤,后续发现很多地方都使用了这个函数,又发现了一条可以利用的攻击链,这里简单分析一下。

 

核心过滤代码

有关cve-2018-14421的具体分析可以看我之前在安全客发的文章,文章地址.
其实这个cve的核心就是绕过了在/include/main.class.php里面的parseif函数,这段代码原来的作用是在渲染模板的时候,处理一些简单的if逻辑,但是过滤却没有写好,导致了只要有任何一个在模板中的变量可控,就可以导致任意代码执行。

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

 

在原来的利用场景寻找可控的模板变量

在原来的输出点,将所有的模板变量打印出来以后,可以看到所有需要渲染的模板变量。
然后就可以参照变量的输入过滤流程,来一步步分析,但是经过简单的分析,除了上个cve使用的pic变量,其余的变量都不可控,所以这个页面的利用链失败。

 

寻找新的利用点

首先全局搜索了一下调用了parseif这个函数的位置,在找有关的模板变量。
进过一番查找,我们发现了video/index.php这个文件。
还是一样,先将所有的模板变量全都打印出来,方便我们查找。
然后就依次对每个模板变量进行溯源,但是在直接可控的变量中,并没有发现可以注入代码的地方,因此思路转向了间接注入代码
最后找到了一个关键的模板变量{playpage:from}

 

变量追踪

他在video/index.php中是这么处理的:
由上图可以看出,这个变量间接来自于数据库中的v_playdata这个字段的值
然后可以直接去后台添加影片的地方,具体查看这个值是如何被加入数据库的
可以看到这个变量是根据v_playfrom和v_playurl两个变量处理得来的
然后我们具体去查看这两个变量具体是什么
发现是播放来源,这个是个多选列表,于是思路变成添加一个带有恶意代码的播放来源,然后选择这个来源,从而注入恶意代码


来源名称为注入的代码:

{if:1)$GLOBALS['_G'.'ET'][a]($GLOBALS['_G'.'ET'][b]);die();//}{end if}

其余的参数可以随便写

然后发现并没有过滤,完全可以直接注入恶意代码
然后我们在添加影片的时候,选择这个来源,并且抓包

发现前端进行了过滤,v_playfrom[1]截取了部分内容,我们用payload将其补充完整

{if:1)$GLOBALS['_G'.'ET'][a]($GLOBALS['_G'.'ET'][b]);die();//}{end if}

 

漏洞利用

先在管理影片页面,查看刚才添加的影片id,然后访问页面

seacms/video/index.php?6-0-0.html&a=assert&b=phpinfo();

(其中的6为影片id)

可以看到代码已经执行,从而完成漏洞利用

 

数据流梳理

 

总结

感觉这种攻击利用链可能还存在,核心函数过滤不好确实会导致很多问题,这也给我们在平时开发敲响了警钟,一些复用很多的关键过滤函数必须要做好。

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
|发表评论
|评论列表
加载更多