Nome do arquivo de pesquisa dentro do arquivo

5

Alguém colocou muitos códigos maliciosos em cada instância do wordpress no meu servidor. Pela segunda vez. (Pelo menos) Todo arquivo js foi modificado. Existe um padrão, o código sempre se parece com isto:

/*[file-name]*/[malicious code]/*file-name*/

Existe alguma maneira que eu poderia usar grep e sed para se livrar desses fragmentos? Um ataque anterior colocou código semelhante nos arquivos, que eu me livrei de usar

grep -rnwl './' -e "[/*]d754948f7cc08347e64716505bd652ae[*/].*[/*]d754948f7cc08347e64716505bd652ae[*/]" | xargs sed -i "s/[/*]d754948f7cc08347e64716505bd652ae[*/].*[/*]d754948f7cc08347e64716505bd652ae[*/]//g"

existe alguma maneira de modificar essa expressão para usar cada nome de arquivo em vez de uma string fixa como "d754948f7cc08347e64716505bd652ae"?

    
por Marvin Pollock 04.03.2016 / 14:04

1 resposta

0

Eu crio o código final de forma incremental, primeiro encontramos todos os arquivos js:

find <project_dir> -type f -name '*.js'

Depois, iteramos esses arquivos:

find <project_dir> -type f -name '*.js' | while read file_path; do
    # Code here run once for every file
done

Em seguida, criamos um padrão usando o nome do arquivo e usamos sed para nos livrarmos do código malicioso no arquivo:

find <project_dir> -type f -name '*.js' | while read file_path; do
    file_name=$(basename "$file_path")
    pattern="/\*$file_name\*/.*/\*$file_name\*/"
    sed -ri "s:$pattern::g" "$file_path"
done

Algumas notas:

  • O passo zero é fazer backup de seus arquivos.
  • No comando sed , usei "s:$pattern::g" em vez de "s/$pattern//g" , porque nosso padrão de pesquisa já tem '/', e isso torna sed confuso.
  • Este nome de arquivo de identificador de código contendo espaço, pelo menos eu tentei lidar com isso.
por 09.03.2016 / 11:00