漏洞概要 关注数(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标签: 无
漏洞详情
披露状态:
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
看上面的代码是这么处理$username的:$usernames=preg_split('/[\s\,]+/',$_POST['username']);
也就是用一个正则表达式来分隔字符串,而这个正则表达式会匹配逗号,也就是说在写payload时,逗号肯定是不能用的了,因为payload中的逗号会被用作分隔符。除了使用preg_split处理了一下$username,就没有别的处理了,带入了SQL。因此,这里存在注入。
Kingcms本来是可以报错注入的,但是我不知道如何能写出不使用逗号的报错注入的payload,所以,这里我只能使用盲注了。使用case when then来避免使用逗号,payload见下
Payload:(注册一个前台用户登陆后即可测试)
当猜测管理员用户名的第一个字母是a时,若正确,则延迟
若错误,不延迟
漏洞证明:
见 详细说明
修复方案:
过滤
版权声明:转载请注明来源 路人甲@乌云
漏洞回应
厂商回应:
未能联系到厂商或者厂商积极拒绝