Сайт PHP Wordpress скомпрометирован, что делает этот запутанный код? - PullRequest
0 голосов
/ 24 марта 2019

Нашли этот код на скомпрометированном сайте Wordpress друга, есть идеи?

Pastebin, поскольку он слишком длинный для SO

$OO_OO0_00_='1515';
$O__OO_00O0='1515';
$O0O0_0_OO_='0';
$O_00OOO0__='1';
$OOO_0O_00_='1';
$O0__O0O_O0=urldecode("see pastebin

https://pastebin.com/WJv1p2uQ

Я вижу ссылки на открытие сокета.

Ответы [ 3 ]

3 голосов
/ 24 марта 2019

Что @ Крис сказал . Но из личного любопытства я расшифровал его достаточно, чтобы понять суть того, что он делает. Этот код делает несколько вещей.

Самое главное, этот код будет принимать произвольные загрузки файлов, которые перезаписывают любой существующий файл (если это разрешено правами доступа к файлам), отправляя запрос с параметрами supfiles, sfilename и sfilecontent. Также нет проверки пути на sfilename, так что этот сценарий может потенциально записывать файлы в любую файловую систему, в которую у пользователя есть разрешение на запись (что может включать или не включать такие полезные расположения, как ~/.ssh/authorized_keys).

Но его основной вид деятельности:

  1. Он проверяет заголовки User-Agent и Referer, чтобы определить, является ли посетитель поисковым движком или кто-то из Bing или с японских сайтов Google и Yahoo. Если это так, он регистрирует детали запроса на удаленном сервере (www50.bcsad.top, но я также видел ссылки на www%d.bcsad.top, который подается в sprintf(), поэтому точное имя хоста, по крайней мере, несколько динамическое)
  2. Если запрос относится к файлу sitemap.xml или его варианту (например, sitemap-video-1-20.xml), он сгенерирует файл, содержащий ссылки на этот удаленный сервер.
  3. Если на зараженном сайте нет файла .htaccess, который перенаправляет несуществующие запросы на зараженный файл, он попытается создать такой, который делает это (в Wordpress такой файл есть, но не во всех подпапках).

На unphp.net ( кешируется , поскольку он в данный момент не работает) есть похожий фрагмент кода , который не идентичен вашему (кажется, что отсутствует опция загрузки файла), но все равно имеет много совпадений, поэтому вы получите общее представление о том, что делает этот код.

2 голосов
/ 24 марта 2019

Это действительно не имеет значения, что это такое.проблема в том, что он там в первую очередь.

У вас есть несколько вариантов, либо удалите сайт и начните заново с последней версии WordPress, надеюсь, эта дыра исправлена.

Или же вам действительно нужно определить, стоит ли это делать (а если не убедить вашего друга начать все сначала).Однако, если вы потеряете слишком много важных данных, вам нужно будет очистить сайт, и это будет нелегко, вам нужно будет проверить каждый файл, включая скрытые файлы, каталоги и т. Д., Проверить базу данных, безопасна ли она?чтобы сохранить его, если нет, вы можете очистить его от каких-либо вредоносных данных.

Однако, на мой взгляд, этот сервер взломан, взломайте его и начните заново.Надеюсь, у хоста есть резервная копия до этого взлома, хотя я подозреваю, что это может быть более желанным.

1 голос
/ 24 марта 2019

Кажется, что расшифровка займет несколько часов.Переменные типа $OO0O_0_O_0 преобразуются в имена функций.

$OO0O_0_O_0 = 'preg_replace_callback';
$O0__O0_OO0 = 'stream_socket_client';
$O0OO0_0__O = 'stream_get_meta_data';
$OO0O_0_0O_ = 'stream_set_blocking';
$OO_00_0O_O = 'stream_set_timeout';
$O0_00OO__O = 'ignore_user_abort';
$OO_00__OO0 = 'file_put_contents';
$O0O0_O_O0_ = 'file_get_contents';
$OOO0__00O_ = 'http_build_query';
$OOO0_00O__ = 'function_exists';
$O_00O_O_O0 = 'error_reporting';
$O_00OO_0_O = 'create_function';
$O_00O__O0O = 'set_time_limit';
$O000O_O__O = 'gethostbyname';
$O__0O_0O0O = 'base64_decode';
$OO0OO_0__0 = 'preg_replace';
$OO00O_0O__ = 'str_replace';
$OO00_O0O__ = 'file_exists';
$O0_0O_0O_O = 'curl_setopt';
$OO_OO00__0 = 'array_shift';
$O0_OO00_O_ = 'preg_match';
$OO0O0__0O_ = 'curl_error';
$OO00__O_0O = 'curl_close';
$O_0O_O00O_ = 'urlencode';
$O_O0O0__0O = 'parse_url';
$O___0OOO00 = 'gzinflate';
$O0_0O_OO_0 = 'curl_init';
$O0_O0__O0O = 'curl_exec';
$O0_0_O0O_O = 'is_array';
$OO00OO_0__ = 'strrpos';
$O__OO00O_0 = 'mt_rand';
$O_00_OO_0O = 'implode';
$O_O00__OO0 = 'gzclose';
$O_00O_0O_O = 'explode';
$O_O0__O00O = 'usleep';
$O0_O_OO00_ = 'unlink';
$O0O__0OO0_ = 'strstr';
$O_0O0O0O__ = 'strpos';
$OO_0_0O_O0 = 'strlen';
$O00___0OOO = 'hexdec';
$O_000OOO__ = 'gzopen';
$O0__0OO_0O = 'fwrite';
$O00OO0_O__ = 'fclose';
$O__0_0OOO0 = 'mkdir';
$OO0OO__0_0 = 'fread';
$OO0O_O0__0 = 'fgets';
$OO_O_O0_00 = 'count';
$O00O_0_O_O = 'chmod';
$O_O00_O0_O = 'trim';
$OO__O00O_0 = 'join';
$O0_OOO__00 = 'feof';
$OOOO___000 = 'date';

Можно написать несколько скриптов для декодирования всего этого барахла (или сделать это руками) ... если у вас есть свободное время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...