【代码审计】XYHCMS V3.5文件上传漏洞分析
0x00 环境准备
XYHCMS官网:http://www.xyhcms.com/
网站源码版本:XYHCMS V3.5(2017-12-04 更新)
程序源码下载:http://www.xyhcms.com/Show/download/id/2/at/0.html
测试网站首页:
0x01 代码分析
1、漏洞文件位置:/App/Common/Lib/YunUpload.class.php 第231-271行:
- public function _upload() {
- $ext = ''; //原文件后缀
- foreach ($_FILES as $key => $v) {
- $strtemp = explode('.', $v['name']);
- $ext = end($strtemp); //获取文件后缀,或$ext = end(explode('.', $_FILES['fileupload']['name']));
- break;
- }
- $upload = new \Think\Upload(); //new Upload($config)
- //修配置项
- 10. $upload->autoSub = true; //是否使用子目录保存图片
- 11. $upload->subType = 'date'; //子目录保存规则
- 12. $upload->subName = array('date', 'Ymd');
- 13. $upload->maxSize = get_upload_maxsize(); //设置上传文件大小
- 14. $upload->exts = $this->allowType; //设置上传文件类型
- 15. $upload->rootPath = $this->rootPath; //上传根路径
- 16. $upload->savePath = $this->subDirectory; //上传(子)目录
- 17. $upload->saveName = array('uniqid', ''); //上传文件命名规则
- 18. $upload->replace = true; //存在同名是否覆盖
- 19. $upload->callback = false; //检测文件是否存在回调函数,如果存在返回文件信息数组
- 20. if ($info = $upload->upload()) {
- 21.
- 22. //判断是添加水印--有缩略的才添加水印
- 23. if ($this->thumFlag) {
- 24. $this->_doWater($info);
- 25. }
- 26. //是否有缩略图
- 27. if ($this->thumFlag) {
- 28. $this->_doThum($info);
- 29. }
- 30. return $info;
- 31. } else {
- 32. //$str = array('err' =>1 ,'msg' => $upload->getError() );
- 33. return $upload->getError();
- 34. }
- 35. }
这段图片上传函数中对上传参数进行设置,然后上传。文件上传类型是客户端参数可控的,导致攻击者可以修改文件上传类型,上传恶意脚本,上传完还得去保存,继续去看一下程序如何处理保存:
文件位置:/App/Manage/Controller/SystemController.class.php,第194-217行中:
- public function site() {
- if (IS_POST) {
- $data = I('config', array(), 'trim');
- foreach ($data as $key => $val) {
- if (stripos($val, '<?php') !== false) {
- $data[$key] = preg_replace('/<\?php(.+?)\?>/i', '', $val);
- }
- 10. }
- 11.
- 12. $data['CFG_IMGTHUMB_SIZE'] = strtoupper($data['CFG_IMGTHUMB_SIZE']);
- 13. $data['CFG_IMGTHUMB_SIZE'] = str_replace(array(',', 'X'), array(',', 'X'), $data['CFG_IMGTHUMB_SIZE']);
- 14. if (empty($data['CFG_IMGTHUMB_SIZE'])) {
- 15. $this->error('缩略图组尺寸不能为空');
- 16. }
- 17.
- 18. if (!empty($data['CFG_IMAGE_WATER_FILE'])) {
- 19. $img_ext = pathinfo($data['CFG_IMAGE_WATER_FILE'], PATHINFO_EXTENSION);
- 20. $img_ext = strtolower($img_ext);
- 21. if (!in_array($img_ext, array('jpg', 'gif', 'png', 'jpeg'))) {
- 22. $this->error('水印图片文件不是图片格式!请重新上传!');
- 23. return;
- 24. }
- 25. }
这段函数在全局配置存储过程中进行检测,注意看红色代码部分,检测图片文件格式是否是'jpg', 'gif', 'png', 'jpeg',否则提示重新上传,但是仅仅只是提示,并没有删除文件,也就是我们如果上传脚本文件,已经成功保存在服务器上面。
程序在实现上对文件上传过程处理不当,导致可以被绕过,通过该漏洞上传脚本木马,获取服务器控制权限。
0x02 漏洞利用
1、登录后台,在系统设置—网站设置—上传配置,修改文件上传类型,然后上传文件:
2、点击保存时,发现程序提示不是图片格式,请重新上传
3、继续去访问刚才成功上传的脚本,发现脚本文件依然在服务器上,并没有被删除。
4、通过菜刀链接,控制网站服务器
0x03 修复建议
1、重新梳理文件上传过程,通过白名单限制上传文件后缀;
2、禁止上传目录脚本执行权限。
最后
欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。
【代码审计】XYHCMS V3.5文件上传漏洞分析的更多相关文章
- 1.5 webshell文件上传漏洞分析溯源(1~4)
webshell文件上传漏洞分析溯源(第一题) 我们先来看基础页面: 先上传1.php ----> ,好吧意料之中 上传1.png ----> 我们查看页面元素 -----> ...
- 【代码审计】UKCMS_v1.1.0 文件上传漏洞分析
0x00 环境准备 ukcms官网:https://www.ukcms.com/ 程序源码下载:http://down.ukcms.com/down.php?v=1.1.0 测试网站首页: 0x0 ...
- 【代码审计】JTBC(CMS)_PHP_v3.0 任意文件上传漏洞分析
0x00 环境准备 JTBC(CMS)官网:http://www.jtbc.cn 网站源码版本:JTBC_CMS_PHP(3.0) 企业版 程序源码下载:http://download.jtbc. ...
- 【代码审计】QYKCMS_v4.3.2 任意文件上传漏洞分析
0x00 环境准备 QYKCMS官网:http://www.qykcms.com/ 网站源码版本:QYKCMS_v4.3.2(企业站主题) 程序源码下载:http://bbs.qingyunke. ...
- 【代码审计】BootCMS v1.1.3 文件上传漏洞分析
0x00 环境准备 BootCMS官网:http://www.kilofox.net 网站源码版本:BootCMS v1.1.3 发布日期:2016年10月17日 程序源码下载:http://w ...
- 【代码审计】CLTPHP_v5.5.3 前台任意文件上传漏洞分析
0x00 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chich ...
- UEditor编辑器两个版本任意文件上传漏洞分析
0x01 前言 UEditor是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器,具有轻量.可定制.用户体验优秀等特点 ,被广大WEB应用程序所使用:本次爆出的高危漏洞属于.NET版本,其它的 ...
- [转]UEditor编辑器两个版本任意文件上传漏洞分析
0x01 前言 UEditor是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器,具有轻量.可定制.用户体验优秀等特点 ,被广大WEB应用程序所使用:本次爆出的高危漏洞属于.NET版本,其它的 ...
- 关于finecms v5 会员头像 任意文件上传漏洞分析
看到我私藏的一个洞被别人提交到补天拿奖金,所以我干脆在社区这里分享,给大家学习下 本文原创作者:常威,本文属i春秋原创奖励计划,未经许可禁止转载! 1.定位功能 下载源码在本地搭建起来后,正常登陆了用 ...
随机推荐
- arcgis pro行列转换
行转列 列转行
- 最近IOS10.2.1 iphone6 无法通过appStore 来更新 下载任何APP。好烦啊。
今天打开爱思助手,查看事实日志,发现了原因: Mar :: iPhone6 appstored(StoreServices)[] <Notice>: SSSQLiteDatabase: C ...
- tensorflow之数据读取探究(2)
tensorflow之tfrecord数据读取 Tensorflow关于TFRecord格式文件的处理.模型的训练的架构为: 1.获取文件列表.创建文件队列:http://blog.csdn.net/ ...
- python 进程池pool简单使用
平常会经常用到多进程,可以用进程池pool来进行自动控制进程,下面介绍一下pool的简单使用. 需要主动是,在Windows上要想使用进程模块,就必须把有关进程的代码写if __name__ == ‘ ...
- Python中文转拼音代码(支持全拼和首字母缩写)
本文的代码,从https://github.com/cleverdeng/pinyin.py升级得来,针对原文的代码,做了以下升级: 1 2 3 4 1.可以传入参数firstcode:如果为 ...
- ThinkPhp 使用PhpExcel导出导入多语言文件
在ThinkPHP 里已经实现了多语言功能,只要在指定的目录下创建对应的语言文件并填充内容,即可实现多语言功能 而多语言的翻译却是一个很麻烦的事情,因为客户特定的行业问题导致我们翻译可能是不准确的 于 ...
- 使用go语言操作db2
操作系统 : CentOS7.3.1611_x64 go语言版本:1.8.3 linux/amd64 db2版本: db2_v101_linuxx64_expc 问题描述 怎么使用go语言在CentO ...
- Redis server went away的解决方案
Redis server went away出现的问题如下: 1.看redis服务是否启动,包括端口 2.看是否是服务器端的防火墙引起的,iptables和selinux 3.看是否是redis.co ...
- Unity3d中的属性(Attributes)整理
Attributes属性属于U3D的RunTimeClass,所以加上以下的命名空间是必须的了.其它倒没什么需要注意的.本文将所有运行属性过一遍罢了. using UnityEngine; using ...
- Asp.Net 合并图片(二维码和其他图片合并)
需求:根据网址生成二维码,然后再把二维码生成到背景图片上,然后显示在网页中 pic.ashx <%@ WebHandler Language="C#" Class=" ...