建站之星sitestar v2.5文件包含漏洞利用及修复 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

    无意间发现建站之星sitestar 的一鸡肋文件包含漏洞,WVS扫描一朋友的网站,发现提示有以下文件包含漏洞

    index.php?_a=fullist&_m=../../../../../../../../../../etc/passwd%00.jpg

    admin/index.php?_a=admin_list&_m=../../../../../../../../../../etc/passwd%00.jpg

    测试改漏洞影响版本有建站之星sitestar v2.5、sitestar v2.6

    查看index.php文件,代码如下:

   

    define(‘IN_CONTEXT’, 1);

    include_once(‘load.php’);

    ?>

    继续跟进load.php, 变量_m相关语句如下:

    $act =& ParamHolder::get(‘_m’);

    switch ($act) {

    case ‘mod_order’:

    include_once(P_INC.’/china_ds_data.php’);

    break;

    case ‘mod_auth’:

    case ‘mod_message’:

    include_once(P_LIB.’/rand_math.php’);

    break;

    }

    继续跟进 ParamHolder::get是如何实现的,具体漏洞文件是在library\param.php,代码如下:

    193 class ParamHolder {

    194 /**

    195 * Retrieve parameter

    196 *

    197 * @access public

    198 * @static

    199 * @param string $key_path The context path for retrieving data

    200 * @param mixed $value The default data as fallback

    201 * @param int $scope The parameter context

    202 * @return mixed

    203 */

    204 public static function &get($key_path, $default = false, $scope = PS_ALL) {

    205 switch ($scope) {

    206 case PS_GET:

    207 $rs =& ParamParser::retrive($_GET, $key_path, $default); //可输入变量$_GET 可能存在安全威胁

    208 break;

    209 case PS_POST:

    210 $rs =& ParamParser::retrive($_POST, $key_path, $default); //可输入变量$_POST 可能存在安全威胁

    211 break;

    212 case PS_COOKIE:

    213 $rs =& ParamParser::retrive($_COOKIE, $key_path, $default); //可输入变量$_COOKIE 可能存在安全威胁

    214 break;

    215 case PS_FILES:

    216 $rs =& ParamParser::retrive($_FILES, $key_path, $default); //可输入变量$_FILES 可能存在安全威胁

    217 /**

    218 * get upload file type

    219 */

    220 if (isset($rs["tmp_name"]) && !is_array($rs["tmp_name"]) && !empty($rs["tmp_name"])) {

    221 $ftype = ParamParser::file_type($rs["tmp_name"]);

    222 if ($ftype == ‘unknown’) die(__(‘Upload file type error,please retry!’));

    223 }

    224 break;

    225 case PS_MANUAL:

    226 $rs =& ManualParamHolder::get($key_path, $default);

    227 break;

    228 case PS_ALL:

    229 if (ParamParser::has($_GET, $key_path)) { //可输入变量$_GET 可能存在安全威胁

    230 $rs =& ParamParser::retrive($_GET, $key_path, $default); //可输入变量$_GET 可能存在安全威胁

    231 } else if (ParamParser::has($_POST, $key_path)) { //可输入变量$_POST 可能存在安全威胁

    232 $rs =& ParamParser::retrive($_POST, $key_path, $default); //可输入变量$_POST 可能存在安全威胁

    233 } else if (ParamParser::has($_COOKIE, $key_path)) { //可输入变量$_COOKIE 可能存在安全威胁

    234 $rs =& ParamParser::retrive($_COOKIE, $key_path, $default); //可输入变量$_COOKIE 可能存在安全威胁

    235 } else if (ParamParser::has($_FILES, $key_path)) { //可输入变量$_FILES 可能存在安全威胁

    236 $rs =& ParamParser::retrive($_FILES, $key_path, $default); //可输入变量$_FILES 可能存在安全威胁

    237 } else if (ManualParamHolder::has($key_path)) {

    238 $rs =& ManualParamHolder::get($key_path, $default);

    239 } else {

    240 $rs = $default;

    241 }

    242 break;

    243 default:

    244 $rs = $default;

    245 }

    246 return $rs;

    247 }

    248 }

    可以看到没有对输入变量做任何的过滤判断等,导致本地包含漏洞的出现,

建站之星sitestar v2.5文件包含漏洞利用及修复

电脑资料

建站之星sitestar v2.5文件包含漏洞利用及修复》(https://www.unjs.com)。

    针对朋友网站的环境等修复方案如下:

    对$rs进行过滤,return $rs;前加如下代码:

    $rs = str_replace(“.”,”_”,$rs);

    return $rs;

    在对服务器权限进行设置^_^

    菜鸟文章,欢迎拍砖!感谢Seay的代码审计工具,感谢依楼听雨童鞋对漏洞分析和修复建议~

最新文章