Como substituir / excluir código HTML de centenas de arquivos?

1

Nosso servidor foi atacado e eu preciso excluir um código malicioso que foi injetado em muitos arquivos php e html.

Qual é uma boa maneira de substituir o código de vários arquivos? Eu tentei usar este script: link mas não consigo fazer isso funcionar. Por favor ajude!

    
por ooops 27.01.2011 / 20:57

5 respostas

0

O script que você vinculou parece bastante simples. Você pode fazer algo parecido com o seguinte one-liner:

find $DIRS -print0 | xargs -0 perl -p -i.bak -e 's/\Qcode to be removed\E//'

Aqui $DIRS representa os diretórios nos quais você tem seus arquivos e code to be removed representa o código malicioso. O \Q irá citar todos os caracteres especiais até o \E . Os arquivos originais são copiados em .bak files. Se você não quiser, remova o .bak , ou seja, somente -i , mas não combine com -e , ou seja, -i -e não -ie .

TENHA CUIDADO QUE VOCÊ PODERÁ EXCLUIR AS OBRAS IMPORTANTES SE VOCÊ O FAZ ERRADO! FAÇA BACKUPS POR SI MESMO PRIMEIRO!

Atualização:

Versão do script:

#!/usr/bin/env perl -i.bak
use strict;
use warnings;

my $code = <<'END-OF-MALICIOUS-CODE';
xo=new Date(2010,11,3,2,21,4);t=xo.getSeconds();var huur=[36/t,36/t, ....
END-OF-MALICIOUS-CODE
chomp $code; # remove trailing newline

while (<>) {
    s/\Q$code\E//;
    print;
}

Mas isso em um arquivo, melhor com uma extensão .pl , por exemplo %código%. Opcionalmente, torne-o executável ( remcode.pl ), caso contrário, você terá que chamá-lo com chmod +x file.pl explicitamente:

find $DIRS -print0 | xargs -0 perl remcode.pl

Você pode fazer a parte 'find' e o código perl, mas isso não é necessário.

Sem garantias! Teste em alguns arquivos primeiro!

    
por 27.01.2011 / 21:08
2

Sed, Perl, etc. podem fazer o que você quiser. No entanto ...

Eu não assumo que alguém conseguiu injetar código malicioso em muitos scripts e não possuiu totalmente a caixa. Claro, você se livra de códigos maliciosos no HTML, mas e a botnet que está sendo executada na sua caixa?

O procedimento padrão é retirar a caixa da rede e fazer um post-mortem completo antes de conectá-la novamente. No mínimo, se você estiver mantendo checksums com seus backups, execute as somas de verificação de todo o sistema de arquivos.

Provavelmente, seria mais seguro restaurar de seus últimos backups válidos conhecidos, mas isso é somente se você puder identificar positivamente a data e a hora do comprometimento inicial dos logs arquivados, etc.

    
por 28.01.2011 / 03:24
1

Existem muitas maneiras de encontrar e substituir texto em vários arquivos. O Sed é um dos favoritos, mas se é a ferramenta certa ou não depende muito do que seus arquivos parece. Você pode nos dar um exemplo do código malicioso no contexto?

    
por 27.01.2011 / 21:07
1

Ultra Edit é uma das melhores ferramentas de edição. Você pode google e baixar uma versão de teste para experimentá-lo. Se houver um backup para seu servidor, recomendo usar o Beyond Compare para analisar e restaurar os arquivos. por favor note que estas ferramentas que eu menciono não são mercadorias grátis.

    
por 28.01.2011 / 01:51
0

Você pode corrigir facilmente (ou manipular completamente) muitos arquivos com isso:

sudo perl -pi.prev -e 's/bad string/new string/g' /path/to/folder/of/bad/files

Claro, agora você precisa de um regex para combinar com o código ruim, então você tem dois problemas.

Ele fará uma cópia de cada arquivo com .prev no final e substituirá conforme mostrado no arquivo original.

**

  • TESTE SEU REGEX CUIDADOSAMENTE PRIMEIRO !!!

**

    
por 27.01.2011 / 21:40