本文首发于先知:

https://xz.aliyun.com/t/6486

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方式相同

最新文章

  1. IKAnalyzer
  2. matlab 曲线拟合
  3. TeamCity : 配置第一个工程
  4. JavaScript强化教程 -- cocosjs场景切换
  5. SqlHelper.cs
  6. POJ 3348 - Cows 凸包面积
  7. 关于科台斯k97gprs调试记录(1)
  8. Miller_Rabin素数判断,rho
  9. Work 3(工作类) (2017.07.01)
  10. acm几何
  11. Sql Server服务远程过程调用失败
  12. java对象与Json字符串之间的转化(fastjson)
  13. 我的第一个个人博客网站 -> wizzie.top
  14. 《SQLSERVER2012实施与管理实战指南》前4章节笔记内容
  15. CentOS 7 之 Docker 安装及操作命令
  16. Saltstack配置管理
  17. TextView UI美化-------自适应字体控件
  18. 玩转Masonry JS库来实现瀑布流Web效果
  19. Python制作回合制手游外挂简单教程(中)
  20. 学习笔记1126 - Fib的计算方法,降低了时间复杂度

热门文章

  1. java封装数据类型——Boolean
  2. KVM之virsh管理虚拟机硬盘配置
  3. kafka学习遗留问题
  4. wakelock查看
  5. Flutter中的普通路由与命名路由(Navigator组件)
  6. Const *ptr ptr
  7. Linux下的帮助命令(man/help/info)
  8. 个人推荐-几款好用的App
  9. 【Jenkins】忘记admin密码,可以用此方法帮你解决
  10. 小白学Python | 最简单的Django 简明教程