文章转载至Starsnow安全团队公众号javascript
(最后面有公众号二维码哦!:))php
ClassCMS 官网 :https://classcms.com/
ClassCMS是一款简洁灵活的开源内容管理系统,能够很是方便的经过它来快速开发各类网站应用.java
兼容PHP5.2--PHP8.0,在APACHE、NGINX、IIS上都能使用,默认支持MySQL SQLite两种数据库,支持上百万数据量。ajax
系统没有多余的功能,总体安装包不到1M(去掉编辑器与Layui后不到300KB),拥有完善与灵活的应用插件机制,经常使用功能都可制做成应用插件.shell
系统模板语言简单,只须要懂HTML+CSS便可制做简单的网站模板.数据库
后台页面基于Layui制做,自适应页面,在手机端也有不错的使用体验.json
经过后台模型,能够快速增长栏目,支持无限级栏目,栏目网址支持中文.安全
拥有各种输入框类型,能快速扩展文章字段,栏目变量,用户属性,经过应用插件也可方便的扩展制做各种输入框.服务器
后台有完善的权限体系,可自定义每一个角色的权限,,可自定义栏目与输入框与的查看修改权限.app
ClassCMS下载最新版本 v1.3
程序下载解压事后以下图
搭建环境并启动
配置好配置
打开应用管理--应用商店
随便点击某个应用进行下载
点击下载时进行抓包
获取一下返回包
这个时候会返回一个插件下载地址
继续Forward
POST /admin/?do=shop:downloadClass&ajax=1 HTTP/1.1 Host: 192.168.253.1:8013 Content-Length: 142 Accept: application/json, text/javascript, */*; q=0.01 X-Requested-With: XMLHttpRequest User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36 Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Origin: http://192.168.253.1:8013 Referer: http://192.168.253.1:8013/admin/?do=shop:index&bread=304%E7%BC%93%E5%AD%98%E6%8F%92%E4%BB%B6&action=detail&classhash=cache304 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Cookie: token_43f1a9=53f68d86f94ad3c93551924e77d0e91a; csrf_43f1a9=5f5244ce Connection: close classhash=cache304&url=http%3A%2F%2Fclasscms.com%2Fshop%2F%3Faction%3Ddownload%26version%3D1.0%26classhash%3Dcache304%26token%3D&csrf=5f5244ce
向 /admin/?do=shop:downloadClass&ajax=1 POST 了一个插件地址和插件名称
新建一个小马并压缩
上传到服务器,并可以下载的地方,也能够在网站处寻找文件上传的地方
修改网址为压缩包的地址
而后访问
http://192.168.253.1:8013/class/cache304/index.php
已经成功上传了小马
直接查看/class/shop/shop.php 的第82行
直接调用了this:download函数
function download($url,$filepath) { $curl=curl_init(); curl_setopt($curl,CURLOPT_URL,$url); if(!$fp = @fopen ($filepath,'w+')) { Return false; } curl_setopt($curl,CURLOPT_FILE, $fp); curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,10); curl_setopt($curl,CURLOPT_TIMEOUT,300); curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,FALSE); $info=curl_exec($curl); $httpinfo=curl_getinfo($curl); curl_close($curl); fclose($fp); if($httpinfo['http_code']>=300) {@unlink($filepath);Return false;} Return $info; } }
而后再到92行
if(C('cms:class:unzip',$classfile,$classdir)) { @unlink($classfile); if(C('cms:class:refresh',$classhash)) { echo(json_encode(array('msg'=>"下载完成,请在应用管理页面中安装此应用"))); Return ; }else { echo(json_encode(array('msg'=>"安装包格式错误,请重试",'error'=>1))); Return ; } }else{ @unlink($classfile); echo(json_encode(array('msg'=>"安装包解压失败,请重试",'error'=>1))); Return ; }
调用了/cms/class.php 下面的unzip方法
function unzip($src_file, $dest_dir=false, $create_zip_name_dir=true, $overwrite=true) { if(class_exists('ZipArchive')) { $zip = new ZipArchive; if ($zip->open($src_file) === TRUE) { if(@$zip->extractTo($dest_dir)) { $zip->close(); Return true; } $zip->close(); } }elseif(function_exists('zip_open')) { if(!cms_createdir($dest_dir)) { Return false; } if ($zip = zip_open($src_file)){ if ($zip){ if($create_zip_name_dir){ $splitter='.'; }else { $splitter='/'; } if ($dest_dir === false){ $dest_dir = substr($src_file, 0, strrpos($src_file, $splitter))."/"; } while ($zip_entry = @zip_read($zip)){ $pos_last_slash = strrpos(zip_entry_name($zip_entry), "/"); if ($pos_last_slash !== false) { cms_createdir($dest_dir.substr(zip_entry_name($zip_entry), 0, $pos_last_slash+1)); } if (zip_entry_open($zip,$zip_entry,"r")){ $file_name = $dest_dir.zip_entry_name($zip_entry); if ($overwrite === true || $overwrite === false && !is_file($file_name)){ $fstream = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); @file_put_contents($file_name, $fstream); } zip_entry_close($zip_entry); } } @zip_close($zip); } Return true; } } Return false; }
直接就会将下载的文件进行解压,从而构成后台getshell