【代码审计】BootCMS v1.1.3 文件上传漏洞分析
0x00 环境准备
BootCMS官网:http://www.kilofox.net
网站源码版本:BootCMS v1.1.3 发布日期:2016年10月17日
程序源码下载:http://www.kilofox.net/download-v1-1-3
测试网站首页:

0x01 代码分析
1、漏洞文件位置:/application/classes/controller/manage.php 第2082-2134行:
- public function action_create_media()
- {
- if ($this->request->method() == 'POST')
- {
- $output = new stdClass();
- $output->status = 0;
- $output->title = '操作失败';
- $output->content = '您没有足够的权限进行此项操作。';
- $this->accessLevel = Admin::minimumLevel('create_media');
- 10. if ($this->user->role_id == $this->accessLevel)
- 11. {
- 12. $groupId = (int) $this->request->post('gid');
- 13. $group = Model::factory('media_group')->load($groupId);
- 14. if (!$group->id)
- 15. {
- 16. $output->status = 2;
- 17. $output->title = '操作失败';
- 18. $output->content = '请选择媒体分组。';
- 19. exit(json_encode($output));
- 20. }
- 21. if (isset($_FILES['qqfile']) && $_FILES['qqfile']['name'])
- 22. {
- 23. $file = Validation::factory($_FILES);
- 24. $file->rule('qqfile', 'Upload::not_empty');
- 25. $file->rule('qqfile', 'Upload::valid');
- 26. $file->rule('qqfile', 'Upload::image');
- 27. $file->rule('qqfile', 'Upload::size', array(':value', '2M'));
- 28. if (!$file->check())
- 29. {
- 30. $output->status = 3;
- 31. $output->title = '无效的文件';
- 32. $output->content = '这个文件是无效的。';
- 33. exit(json_encode($output));
- 34. }
- 35. $extension = Functions::nameEnd($file['qqfile']['name'], '.');
- 36. $fileName = date('ymdHis') . mt_rand(10, 99) . $extension;
- 37. $directory = getcwd() . '/assets/uploads/' . $group->slug;
- 38. $filePath = $directory . DIRECTORY_SEPARATOR . $fileName;
- 39. if (!file_exists($filePath))
- 40. {
- 41. $filePath = Upload::save($file['qqfile'], $fileName, $directory);
- 42. }
- 43. else
- 44. {
- 45. $filePath = Upload::save($file['qqfile'], NULL, $directory);
- 46. }
- 47. if ($filePath === false)
- 48. {
- 49. $output->status = 4;
- 50. $output->title = '文件上传失败';
- 51. $output->content = '无法保存上传的文件!';
- 52. exit(json_encode($output));
- 53. }
这段代码中,首先进行权限验证,然后获取qqfile参数,将文件上传到服务器,最后进行调整生成缩略图,注意看红色代码部分,并没有对文件类型进行过滤,可以构造脚本文件上传到服务器,导致程序在实现上存在文件上传漏洞,攻击者可以通过上传脚本木马,控制服务器权限。
0x02 漏洞利用
1、登录网站后台,在媒体—媒体库—添加新媒体—上传图片木马—抓包修改为PHP后缀—成功上传:

2、程序生成缩略图过程报错,直接爆出上传后脚本木马文件的物理路径,通过URL访问:

3、通过菜刀连接,成功控制网站服务器

0x03 修复建议
1、通过白名单限制上传文件后缀
2、禁止上传目录脚本执行权限。
最后
欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。

【代码审计】BootCMS v1.1.3 文件上传漏洞分析的更多相关文章
- 【代码审计】UKCMS_v1.1.0 文件上传漏洞分析
0x00 环境准备 ukcms官网:https://www.ukcms.com/ 程序源码下载:http://down.ukcms.com/down.php?v=1.1.0 测试网站首页: 0x0 ...
- 【代码审计】XYHCMS V3.5文件上传漏洞分析
0x00 环境准备 XYHCMS官网:http://www.xyhcms.com/ 网站源码版本:XYHCMS V3.5(2017-12-04 更新) 程序源码下载:http://www.xyhc ...
- 1.5 webshell文件上传漏洞分析溯源(1~4)
webshell文件上传漏洞分析溯源(第一题) 我们先来看基础页面: 先上传1.php ----> ,好吧意料之中 上传1.png ----> 我们查看页面元素 -----> ...
- 【代码审计】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. ...
- 【代码审计】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.定位功能 下载源码在本地搭建起来后,正常登陆了用 ...
随机推荐
- JS Window对象操作思维导图
- 安卓程序代写 网上程序代写[原]Android之Bluetooth编程
ViewGroup 相关资料 : http://www.incoding.org/admin/archives/199.html http://bbs.csdn.net/topics/37014474 ...
- 自然语言交流系统 phxnet团队 创新实训 项目博客 (十四)
项目技术借鉴报告: 一.服务器端(Server) 1.分词 分词使用的是庖丁分词.使用盘古分词词库和词素作为辅助.其中包括下载Jar包并且使用. 2.人工神经网络 以网上已有的初级网络为蓝图,结合机器 ...
- group by 小结
前提:SQL函数的两个概念 聚敛函数:对多条记录进行操作的函数,如SUM.COUNT.MIN.MAX.AVG. 其他函数:对单条记录进行操作的函数,如ABS.CEIL.SQRT等. 举个例子: SEL ...
- SpringMVC系列(三):REST风格
一.什么叫REST REST:即 Representational State Transfer.(资源)表现层状态转化.是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所 ...
- JAVA对于程序的运行的一种解说
main方法,正如注释所说,这是程序开始执行的第一行.对于一个Java应用程序来说,main方法是必需的,Java解释器在没有生成任何对象的情况下,以main作为入口来执行程序.每个类中可以定义多个方 ...
- ajax 把返回结果作为参数传递
这个涉及到js的异步执行了,程序本身是同步执行的,到了getJSON这里的时候,这个函数是异步的,而 load_val这个函数是同步的,你需要这样来异步返回这个值 function load_val( ...
- Linux set unset命令
Linux unset命令: 功能说明:unset是一个内建的Unix shell命令,在Bourne shell家族(sh.ksh.bash等)和C shell家族(csh.tcsh等)都有实现. ...
- windows server 安装phpVirtualBox web服务
这是我在Windows server 2012 下的安装过程 (1) 安装virtualbox (2) 安装IIS和PHP, 参考: https://msdn.microsoft.com/zh-cn/ ...
- phpmyadmin配置文件权限错误,不应任何用户都能修改
访问phpmyadmin提示“配置文件权限错误,不应任何用户都能修改” 原因:phpmyadmin目录权限过高,设置了777访问权限 解决: $ phpmyadin 转自: http://www.it ...