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

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

缺陷编号: WooYun-2014-65479

漏洞标题: phpshe最新版无需登录前台getshell

相关厂商: phpshe.com

漏洞作者: xfkxfk认证白帽子

提交时间: 2014-06-19 15:56

公开时间: 2014-09-17 15:58

漏洞类型: 命令执行

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

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

Tags标签: 第三方不可信程序 php源码审核 任意文件写入利用

2人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-06-19: 细节已通知厂商并且等待厂商处理中
2014-06-20: 厂商已经确认,细节仅向厂商公开
2014-06-23: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2014-08-14: 细节向核心白帽子及相关领域专家公开
2014-08-24: 细节向普通白帽子公开
2014-09-03: 细节向实习白帽子公开
2014-09-17: 细节向公众公开

简要描述:

PHPSHE最新版无需登录Getshell

详细说明:

此问题由于phpshe系统可以重装,加上install时存在任意代码写入导致代码执行。

install/index.php

code 区域
<?php
/**
* @copyright 2008-2012 简好技术 <http://**.**.**.**>
* @creatdate 2012-1111 koyshe <koyshe@**.**.**.**>
*/
error_reporting(E_ALL ^ E_NOTICE);
date_default_timezone_set('PRC');
header('Content-Type: text/html; charset=utf-8');

//改写不安全的register_global和防sql注入处理
if (@ini_get('register_globals')) {
foreach($_REQUEST as $name => $value){unset($$name);}
}

$pe['host_root'] = 'http://'.str_ireplace(rtrim(str_replace('\\','/',$_SERVER['DOCUMENT_ROOT']), '/'), $_SERVER['HTTP_HOST'], str_replace('\\', '/', dirname(__FILE__))).'/../';
$pe['path_root'] = str_replace('\\','/',dirname(__FILE__)).'/../';
include("{$pe['path_root']}/include/class/cache.class.php");
include("{$pe['path_root']}/include/function/global.func.php");

if (get_magic_quotes_gpc()) {
!empty($_GET) && extract(pe_trim(pe_stripslashes($_GET)), EXTR_PREFIX_ALL, '_g');
!empty($_POST) && extract(pe_trim(pe_stripslashes($_POST)), EXTR_PREFIX_ALL, '_p');
}
else {
!empty($_GET) && extract(pe_trim($_GET),EXTR_PREFIX_ALL,'_g');
!empty($_POST) && extract(pe_trim($_POST),EXTR_PREFIX_ALL,'_p');
}

switch ($_g_step) {
//#####################@ 配置信息 @#####################//
case 'setting':
if (isset($_p_pesubmit)) {
$dbconn = mysql_connect("{$_p_db_host}:{$_p_db_port}", $_p_db_user, $_p_db_pw);
if (!$dbconn) pe_error('数据库连接失败...数据库ip,用户名,密码对吗?');
if (!mysql_select_db($_p_db_name, $dbconn)) {
mysql_query("CREATE DATABASE `{$_p_db_name}` DEFAULT CHARACTER SET utf8", $dbconn);
!mysql_select_db($_p_db_name, $dbconn) && pe_error('数据库选择失败...数据库名对吗?');
}
mysql_query("SET NAMES utf8", $dbconn);
mysql_query("SET sql_mode = ''", $dbconn);

$sql_arr = explode('/*#####################@ pe_cutsql @#####################*/', file_get_contents("{$pe['path_root']}install/phpshe.sql"));
foreach ($sql_arr as $v) {
$result = mysql_query(trim(str_ireplace('{dbpre}', $_p_dbpre, $v)));
}
if ($result) {
mysql_query("update `{$_p_dbpre}admin` set `admin_name` = '{$_p_admin_name}', `admin_pw` = '".md5($_p_admin_pw)."' where `admin_id`=1", $dbconn);
$config = "<?php\n\$pe['db_host'] = '{$_p_db_host}'; //数据库主机地址\n\$pe['db_name'] = '{$_p_db_name}'; //数据库名称\n\$pe['db_user'] = '{$_p_db_user}'; //数据库用户名\n\$pe['db_pw'] = '{$_p_db_pw}'; //数据库密码\n\$pe['db_coding'] = 'utf8';\n\$pe['url_model'] = 'pathinfo'; //url模式,可选项(pathinfo/pathinfo_safe/php)\ndefine('dbpre','{$_p_dbpre}'); //数据库表前缀\n?>";
file_put_contents("{$pe['path_root']}config.php", $config);
pe_goto("{$pe['host_root']}install/index.php?step=success");
}
else {
pe_error('数据库安装失败!');
}
}
if (is_writeable("{$pe['path_root']}data/")) {
$mod_data = '<strong class="cgreen num">Yes</strong>';
$mod_data_result = true;
}
else {
$mod_data = '<strong class="cred num">No</strong>';
$mod_data_result = false;
}
if (is_writeable("{$pe['path_root']}config.php")) {
$mod_config = '<strong class="cgreen num">Yes</strong>';
$mod_config_result = true;
}
else {
$mod_config = '<strong class="cred num">No</strong>';
$mod_config_result = false;
}
$menucss_2 = "sel";
$seo = pe_seo($menutitle='配置信息 -> PHPSHE商城系统安装向导', '', '', 'admin');
break;
//#####################@ 安装成功 @#####################//
case 'success':
$menucss_3 = "sel";
$seo = pe_seo($menutitle='安装成功 -> PHPSHE商城系统安装向导');
break;
//#####################@ 安装协议 @#####################//
default :
$menucss_1 = "sel";
$seo = pe_seo($menutitle='安装协议 -> PHPSHE商城系统安装向导');
break;
}
include('install.html');
pe_result();
?>



整个过程都没有判断安装后的install.lock文件,导致可以任意重装漏洞!



再来看,安装时,传输数据时没有过滤,导致任意文件内容写入:

code 区域
if ($result) {
mysql_query("update `{$_p_dbpre}admin` set `admin_name` = '{$_p_admin_name}', `admin_pw` = '".md5($_p_admin_pw)."' where `admin_id`=1", $dbconn);
$config = "<?php\n\$pe['db_host'] = '{$_p_db_host}'; //数据库主机地址\n\$pe['db_name'] = '{$_p_db_name}'; //数据库名称\n\$pe['db_user'] = '{$_p_db_user}'; //数据库用户名\n\$pe['db_pw'] = '{$_p_db_pw}'; //数据库密码\n\$pe['db_coding'] = 'utf8';\n\$pe['url_model'] = 'pathinfo'; //url模式,可选项(pathinfo/pathinfo_safe/php)\ndefine('dbpre','{$_p_dbpre}'); //数据库表前缀\n?>";
file_put_contents("{$pe['path_root']}config.php", $config);
pe_goto("{$pe['host_root']}install/index.php?step=success");
}
else {
pe_error('数据库安装失败!');
}



这里的配置信息没有任何处理,进入了config文件,导致代码执行。

漏洞证明:

首先完整安装一次

然后再次安装,完全无限制。

在安装时,我们在数据表前缀写入:');phpinfo();//

1.png



安装后我们来看config.php文件:

2.png



我们的代码成功写入文件

最后访问首页就可证明:

3.png

修复方案:

强制安装后,删除install内容。

过滤输入内容。

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:5

确认时间:2014-06-20 13:47

厂商回复:

感谢@xfkxfk。 提供代码审计,安装文档及安装完成有提示删除install目录,新版会再强制lock下安装文件,加强过滤!

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):
登陆后才能进行评分

评价

  1. 2014-06-19 18:20 | quanxian ( 实习白帽子 | Rank:32 漏洞数:2 | This is QuanXian.)
    1

    这。。。。。吊

  2. 2014-06-19 18:24 | 发条橙子 ( 路人 | Rank:19 漏洞数:6 | ∑(っ °Д °;)っ)
    1

    已经被黑产

  3. 2014-09-17 19:58 | jgjsfgv ( 普通白帽子 | Rank:106 漏洞数:10 | www.baidu.com)
    1

    这。没有数据库密码怎么破?

  4. 2014-09-17 20:05 | jgjsfgv ( 普通白帽子 | Rank:106 漏洞数:10 | www.baidu.com)
    1

    好像get不了啊? 求解最后访问首页?访问首页之前有何要求?

登录后才能发表评论,请先 登录