0x01漏洞描述Pluck是用php编写的一款的小型CMS 0x02漏洞分析目前最新版本为4.7.10,但是这个问题在4.7.1版本时就存在了,虽然经过作者更新版本,文章编辑处参数过滤更加严格了,但是最终同样可以getshell,并且发现4.7.10版本经过多次更新,对关键参数处理仍遗留有相同问题。以下先介绍一下4.7.1版本的问题,便于后面对4.7.10版本快速理解。 v4.7.1分析入口点在admin.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分析这个版本也是在文章编辑处出现了问题,在 |