0x01漏洞描述
Pluck是用php编写的一款的小型CMS
影响版本:Pluck CMS Pluck CMS 4.7.10(更新于2019年8月)
官网地址:http://www.pluck-cms.org/?file=home
0x02漏洞分析
目前最新版本为4.7.10,但是这个问题在4.7.1版本时就存在了,虽然经过作者更新版本,文章编辑处参数过滤更加严格了,但是最终同样可以getshell,并且发现4.7.10版本经过多次更新,对关键参数处理仍遗留有相同问题。以下先介绍一下4.7.1版本的问题,便于后面对4.7.10版本快速理解。
v4.7.1分析
入口点在admin.php
admin.php:
进入后台后action=editpage,此时包含进data/inc/editpage.php
可以进行文章编辑,继续跟进
在editpage.php
的35行可以看到此时对post传递的title和content等参数直接调用save_page函数,漏洞正存在于此,跟进save_page函数
在functions.admin.php
的588行,也就是位于save_page函数中,传入的title和content等可控参数直接传入与php代码进行了拼接,这里sanitize函数对单引号进行过滤,防止二次转义绕过,但是后面仍然可以bypass
在functions.admin.php
的612行,此时对title和content内容通过调用save_file函数进行直接写入,这里我们不用关心写入的文件名,因为写入以后将自动包含
在functions.all.php
的178行,此时若content不为数组则直接写到目标文件中
在前面的分析中我们可以看到title,content,hidden三个参数都写到了文件中,但是目前title和content都进行过滤了,但是hidden参数没有进行过滤,所以此时可以直接闭合$data变量拼接时的单引号,从而写入shell
此时将自动跳转到index.php加载我们写入的shell,结果如下
但是如果想通过title和content参数进行shell的写入也是可以的,只需要构造title或content为1\';phpinfo();/*
即可
也可以进一步写入shell即可
v4.7.10分析
这个版本也是在文章编辑处出现了问题,在data\inc\functions.admin.php
的539行处,将可控的POST参数与php代码进行拼接
此时单纯注入或注入反斜杠+单引号都将无法写入shell
但是正如最开始所说,这个最新的版本和4.7.1版本的关键参数hidden参数均未进行过滤,即同样通过hidden参数来写入shell文件
此时写入的文件如下所示,同样可以进一步进行rce,方法与v4.7.1方式相同