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

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

缺陷编号:wooyun-2014-056869

漏洞标题:Mcms 无视全局转义SQL注入一枚

相关厂商:mcms.cc

漏洞作者: ′雨。

提交时间:2014-04-13 12:46

修复时间:2014-07-09 12:47

公开时间:2014-07-09 12:47

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

过滤不严。

详细说明:

虽然有全局转义 但是在plugins/gov.order/order.php中

function m__save_order(){
global $dbm;
//判断登陆
if(!isset($_SESSION['uid']) || !isset($_SESSION['uname'])) die('{"code":"100","msg":"你还没有登陆,请登入后再购买"}');
$info_id = $_POST['info_id'];
$info_title = urldecode($_POST['info_title']);
$price = isset($_POST['price'])?$_POST['price']:0;
$number = isset($_POST['number'])?$_POST['number']:0;
if(!is_numeric($price)) die('{"code":"100","msg":"价格必须是数字"}');
if(!is_numeric($number)) die('{"code":"100","msg":"数量必须是数字"}');
if(intval($price)<=0) die('{"code":"120","msg":"购买数量不能少于1"}');
if(strlen($_POST['rev_user'])<2) die('{"code":"100","msg":"收货人姓名必须填写"}');
if(strlen($_POST['rev_addr'])<6) die('{"code":"100","msg":"收货人地址必须填写"}');
if(strlen($_POST['rev_phone'])<8) die('{"code":"100","msg":"收货人手机必须填写"}');
$params['order_content'] = '';
$params['pay_total'] = 0;

$params['order_content'] .= $price."元 x ".$number."";
$params['pay_total'] += $number*$price;
//订单数据
$params['uid'] = isset($_SESSION['uid']) ? $_SESSION['uid'] : 0;
$params['uname'] = isset($_SESSION['uname']) ? $_SESSION['uname'] : '';
$params['info_title'] = $info_title;
$params['info_id'] = $info_id;
$params['order_receive'] = preg_replace('~<[^>]*>~','','收货人:'.$_POST['rev_user'].chr(10).'手机:'.$_POST['rev_phone'].chr(10).'收货地址:'.$_POST['rev_addr']);
$params['create_time'] = time();//die(print_r($params));
//入库
if(isset($_SESSION['postdata']['gov_order']) && (time()-$_SESSION['postdata']['gov_order']<30)) die('{"code":"101","msg":"请不要重复提交订单"}');

$res = $dbm->single_insert(TB_PREFIX."order",$params);


可以看到 info_title 是解码来的 所以就无视了全局的转义。、
然后带入了

public function single_insert($table_name, $fields, $type = 0) {
if (!is_array($fields) || count($fields) == 0) return array('sql' => '', 'error' => '插入失败,插入字段为空', 'sql_time' => 0, 'autoid' => 0);
$sql_field = "";
$sql_value = "";
// 遍历字段和值
foreach($fields as $key => $value) {
$sql_field .= ",$key";
$sql_value .= ",'$value'";
}
$sql_field = substr($sql_field, 1);
$sql_value = substr($sql_value, 1);
if ($type == 0) {
$sql = "insert ignore into $table_name ($sql_field) values ($sql_value)"; //组合SQL
} else {
$sql = "replace into $table_name ($sql_field) values ($sql_value)"; //组合SQL
}
echo $sql;
exit;
$result = $this -> query_insert($sql);


组合语句 这里 我直接把语句输出来

漏洞证明:

m1.jpg


M2.Jpg


相等即延时。

修复方案:

过滤。

版权声明:转载请注明来源 ′雨。@乌云


漏洞回应

厂商回应:

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

忽略时间:2014-07-09 12:47

厂商回复:

最新状态:

2014-04-19:已更新