0x00產品介紹
影響產品/版本:
極致CMS
=>v 1.5 <=v 1.7
廠商目前已修復
0x01測試過程:
漏洞名稱:存儲xss,前台打后台管理員cookie
黑盒過程:
首先我們在后台創建一個允許用戶發布文章的欄目
前台發表文章,xss在標題位置
成功獲取cookie,因為是本地演示的,所以就不用xss平台來打了
白盒過程:
根據一路追蹤
發現目錄A
是網站目錄的后台文件
,后端文件審計沒問題
來看看前端文件tql
代碼審計發現是問題出現在前端文件article-list.html
內的問題191行
這里這里沒有實體化編碼導致的后台存儲xss漏洞
輸出函數未經過濾沒有實體化編碼
}
,cols: [[ //表頭
{field: 'id', title: 'ID', width:50, sort: true, fixed:'left'}
,{type:'checkbox'}
,{field: 'orders', title: '排序', width: 100, edit:'text',sort: true}
,{field: 'new_tid', title: '欄目', sort: true}
,{field: 'tuijian', title: '推薦', templet: '#tuijian'}
,{field: 'title', title: '標題', edit:'text', sort: true}
,{field: 'new_litpic', title: '縮略圖',templet: '#litpic'}
{foreach $fields_list as $v},{field: '{$v['field']}', title: '{$v['fieldname']}'}{/foreach}
,{field: 'new_isshow', title: '審核',width:100, templet: '#isshow'}
,{field: 'new_addtime', title: '時間'}
{if(checkAction('Article/editarticle') || checkAction('Article/deletearticle') || checkAction('Article/copyarticle'))}
,{field: '', title: '操作',width:280, toolbar: '#rightbar', fixed:'right'}
{/if}
]]
})
文件article-list.html
修復建議 1.去掉該功能,很雞肋。沒鳥用
2.在輸出函數上實體化編碼
3.文章發表那塊增加xss等過濾函數
漏洞2:文件上傳,Getshell
極致cms >=1.5 <= v1.7 版本存在直接Getshell漏洞
黑盒過程:
進入后台發現了一個有意思的東西后台--->系統設置--->基本設置--->高級設置http://localhost/admin.php/Index/index.html
這里可以設置允許前台上傳文件,還可以設置文件類型,如果是加入PHP
后綴的,結果如何?后台拿不到shell,前台不直接打了嗎。
去看看前台上傳點 (http://localhost/login/index.html) 在這里注冊一個用戶登錄進去,點擊發布文章
白盒過程:
在安裝的時候,系統會默認寫入一個允許上傳的文件類型到數據庫,再配合上允許前台上傳這個功能,可直接后台修改,成功上傳php文件/install/db.php
INSERT INTO `jz_sysconfig` (`id`,`field`,`title`,`tip`,`type`,`data`) VALUES ('21','fileType','允許上傳文件類型', NULL,'0','pdf|jpg|jpeg|png|zip|rar|gzip|doc|docx|xlsx');
增加PHP后綴
到后台即可
再看前台用戶上傳處的檢查/Home/c/CommonController.php
//檢測是否允許前台上傳文件
if(!$this->webconf['isopenhomeupload']){
$data['error'] = "Error: 已關閉前台上傳文件功能";
$data['code'] = 1004;
JsonReturn($data);
}
foreach($_FILES[$file]['name'] as $k=>$v){
$pix = explode('.',$v);
$pix = end($pix);
$fileType = webConf('fileType');
if(strpos($fileType,strtolower($pix))===false){
$data['error'] = "Error: 文件類型不允許上傳!";
$data['code'] = 1002;
JsonReturn($data);
}
Ok這里很明了,只與設置的允許上傳類型做了對比