### 简要描述: BiWEB最新企业版绕过过滤注入漏洞打包 ### 详细说明: 看到pandas提交的BiWEB的漏洞 [WooYun: BIWEB企业版多处SQL注入](http://www.wooyun.org/bugs/wooyun-2014-049740) ,在search.php里找到了几个注入漏洞,我也来凑下热闹。去官网下BiWEB企业版最新的5.8.6来看看。 BiWEB对用户输入进行了全局过滤,但是这种过滤方法比较NC,这个漏洞就是来绕过全局过滤的。先来看看这个全局过滤方法吧/config/filtrate.inc.php ``` <?php //过滤GET或POST的值,去除两端空格和转义符号 if ($_SERVER['REQUEST_METHOD'] == 'POST'){ check::filtrateData($_POST,$arrGPdoDB['htmlspecialchars']); }elseif($_SERVER['REQUEST_METHOD'] == 'GET'){ check::filtrateData($_GET,$arrGPdoDB['htmlspecialchars']); } ?> ``` 这个过滤方法中,如果是POST方法就只对通过POST提交的用户数据进行过滤,GET方法同理。突然就想到一个方法,REQUEST_METHOD还是POST,但是在url中带入用户数据(GET方法),然后程序中用$_GET数组来获取数据的话,那就可以获得通过url提交的数据,并且没有经过全局过滤,这样就绕过了全局过滤。 在BiWEB中找到了不少可以这样绕过过滤的,如下 ``` /cases/adminu/modifyinfo.php /download/adminu/modifyinfo.php /emailist/adminu/modifyinfo.php /phonelist/adminu/modifyinfo.php /product/adminu/modifyinfo.php ``` 这里以/cases/adminu/modifyinfo.php中的漏洞为例进行说明 ``` 无关代码 $objWebInit = new cases(); //数据库连接参数...
### 简要描述: BiWEB最新企业版绕过过滤注入漏洞打包 ### 详细说明: 看到pandas提交的BiWEB的漏洞 [WooYun: BIWEB企业版多处SQL注入](http://www.wooyun.org/bugs/wooyun-2014-049740) ,在search.php里找到了几个注入漏洞,我也来凑下热闹。去官网下BiWEB企业版最新的5.8.6来看看。 BiWEB对用户输入进行了全局过滤,但是这种过滤方法比较NC,这个漏洞就是来绕过全局过滤的。先来看看这个全局过滤方法吧/config/filtrate.inc.php ``` <?php //过滤GET或POST的值,去除两端空格和转义符号 if ($_SERVER['REQUEST_METHOD'] == 'POST'){ check::filtrateData($_POST,$arrGPdoDB['htmlspecialchars']); }elseif($_SERVER['REQUEST_METHOD'] == 'GET'){ check::filtrateData($_GET,$arrGPdoDB['htmlspecialchars']); } ?> ``` 这个过滤方法中,如果是POST方法就只对通过POST提交的用户数据进行过滤,GET方法同理。突然就想到一个方法,REQUEST_METHOD还是POST,但是在url中带入用户数据(GET方法),然后程序中用$_GET数组来获取数据的话,那就可以获得通过url提交的数据,并且没有经过全局过滤,这样就绕过了全局过滤。 在BiWEB中找到了不少可以这样绕过过滤的,如下 ``` /cases/adminu/modifyinfo.php /download/adminu/modifyinfo.php /emailist/adminu/modifyinfo.php /phonelist/adminu/modifyinfo.php /product/adminu/modifyinfo.php ``` 这里以/cases/adminu/modifyinfo.php中的漏洞为例进行说明 ``` 无关代码 $objWebInit = new cases(); //数据库连接参数 $objWebInit->setDBG($arrGPdoDB); //smarty参数 $objWebInit->arrGSmarty = $arrGSmarty; //图片上传参数 $objWebInit->arrGPic = $arrGPic; $objWebInit->db(); // 取得文章信息 $arrInfo = $objWebInit->getInfo($_GET['id']); if($arrInfo['user_id']!=$_SESSION['user_id']) check::AlertExit("错误:此信息不是您发布的,您无权修改!",-1); 无关代码 ``` 继续去看看getInfo(),在/web_common5.8/php_common.php ``` public function getInfo($intInfoID,$field = '*',$pass=null,$add=false){ try { if($add) $this->updateClicktimes(" Where id =".$intInfoID); if($pass!=null) $where= " and pass='$pass'"; else $where=''; $strSQL = "SELECT $field FROM $this->tablename1 ". " Where id ='".$intInfoID."'".$where; $rs = $this->db->query($strSQL); $arrData = $rs->fetchall(PDO::FETCH_ASSOC); if(!empty($arrData[0]['structon_tb'])) $arrData = $this->loadTableFieldG($arrData); if($this->arrGPdoDB['PDO_DEBUG']) echo $strSQL.' '; return current($arrData); } catch (PDOException $e) { echo 'Failed: ' . $e->getMessage().' '; } } ``` 可以看出,整个过程中没有其他的过滤,只要可以绕过全局过滤,就可以注入。 如果按正常的情况使用GET提交,单引号被全局过滤编码,如下: [<img src="https://images.seebug.org/upload/201412/032356420d4c7d5fb0b294275f847792f872db40.jpg" alt="单引号被编码副本.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201412/032356420d4c7d5fb0b294275f847792f872db40.jpg) 把GET方法改为POST提交,成功引入单引号,如下: [<img src="https://images.seebug.org/upload/201412/03235723692b1147fa3e25a6b3d82a571a4ec8f4.jpg" alt="单引号被引入副本.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201412/03235723692b1147fa3e25a6b3d82a571a4ec8f4.jpg) 成功注入,管理员用户名及密码如下图中所示: [<img src="https://images.seebug.org/upload/201412/032357394207685d7dd2db13313380198c1ec0e6.jpg" alt="注入成功副本.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201412/032357394207685d7dd2db13313380198c1ec0e6.jpg) ### 漏洞证明: 见 详细说明