sábado, 6 de septiembre de 2008

HTTP Headers III : Banner Grabbing

Saludos!

Este va a ser el último paper que haga por separado acerca de técnicas de explotación y enumeración a través del protocolo HTTP. En esta ocasión quiero brindarles un breve paper sobre banner Grabbing. Digo lo de breve, porque estos tres papers que he publicado son sólo para abrir boca: Sknight me ha confirmado la creación en conjunto de un paper. La idea original de este paper es la de hacer uno en español que abarque el máximo posible de información sobre el tema, ya que por lo que hemos visto no hay casi ninguna publicación de esta índole (y de calidad) en nuestro idioma. Espero que os sea de utilidad ;).

Bueno, tras este paréntesis explicativo de porqué este paper va a ser algo corto y no va abarcar todo lo que debería (como por ejemplo el spoofing de banners), pongamonos manos a la obra.

Si alguna persona lee mi blog (cosa que dudo bastante XD) y se ha leido los anteriores capítulos (HTTP Headers I y II) sabrá que hasta ahora hemos tirado de utilidades tales como Live HTTP headers entre otras, las cuales nos han simplificado la vida bastante, y esto a la larga atrofia nuestro cerebro. Lo ideal a veces es usar cosas más antiguas y utilidades programadas por nosotros, así que hoy vamos a hacer las cosas... lo más a mano posible, para ir emancipandonos poco a poco de las utilidades de terceros. Así que hoy lo único que vamos a usar es algún programa que realice negociaciones por TCP (Netcat, CryptCat, Telnet, Putty, etc.) y un intérprete de perl ;).


Empecemos a ver las definiciones... ¿A qué estamos llamando banner? Estamos llamando banner a la informacion (como el programa, la versión, entre otras) de trasmite un servicio cuando trabajamos con él. Por ejemplo, cuando nosotros nos conectamos a un FTP:


Microsoft Windows XP [Versión 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

Fl4mm1ng 0ur Sk1llZ: ftp Host.com.ar
Conectado a Host.com.ar.
220 vserver-vpvseu1 Microsoft FTP Service (Version 5.0).
Usuario (HOST.com.ar:(none)):


La parte coloreada en rojo sería el banner que informa acerca del servicio que corre por el puerto 21 (FTP). Al igual que con esto, los servidor, versiones de PHP, etc aparecen cuando hacemos alguna negociación por el puerto 80, o lo que traducido del geek común al idioma de las personas, cada vez que nos conectamos a una web.

Esta info la optenemos en las cabeceras cuando realizamos alguna petición a un servidor. Ahora os voy a enseñar como mandar una cabecera a través de netcat.

Para hacer una negociación con netcat para el envío de cabeceras, únicamente teneis que poner nc host 80 Si la conexión se ha producido correctamente, podreis escribir. Una cosa importantísima es que se deben de escribir las cabeceras acorde con el estandar, o si no tendremos errores. Bueno, entonces si hacemos:



Fl4mm1ng 0ur Sk1llZ: nc ficticio.com 80
GET / HTTP/1.0




Hay que tener encuenta que tras escribir GET / HTTP/1.0, para señalizar la finalización de la cabecera tendremos que pulsar dos veces enter (los dos CR/LF de fin de cabecera). Y el servidor nos responde con:


HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0 MicrosoftOfficeWebServer: 5.0_Pub
X-Powered-By: ASP.NET
Content-Location: http://200.49.155.214/index.html
Date: Sat, 06 Sep 2008 00:21:03 GMT
Content-Type: text/html
Accept-Ranges: bytes
Last-Modified: Thu, 06 Dec 2007 03:28:15 GMT
ETag: "eab1b49b837c81:1669"
Content-Length: 66



Vemos en el campo Server el banner. Bien ya sabemos a qué nos referimos cuando hablamos de "banners" pero... ¿Qué es el banner grabbing? El banner grabbing es una técnica de enumeración, para buscar un posible vector de ataque, que trata de usar la información del banner como referencia para saber los servicios que corre... Haciendo que nuestra auditoría se focalice más atendiendo a esos datos. Antes que nada decir que no debemos de fiarnos únicamente de los banners, puestos que estos son spoofeables[1]. Para hacer una correcta enumeración del servidor atacar se recomienda el uso de técnicas de fingerprinting[2] para obtener una info verídica.


Como ir haciendo esto constantemente puede convertirse en una tarea muy monótona, podemos codearnos un sencillo programa en PERL que haga esta función:


#!/usr/bin/perl

# Banner Grabber Example by Vengador de las Sombras (F.O.S TeaM)
# Permitida su distribución y editaje siempre y cuando guarden créditos

# Www.ArgeniversoHack.com.aR || RemoteExecution.orG || 0verl0ad.blogspot.com


unless ($ARGV[0]){
&uso
}

use IO::Socket::INET;

$host = $ARGV[0];
$port = $ARGV[1];
$size = "1000";

$peticion = "HEAD / HTTP\/1.0"
$peticion .= "\r\n\r\n"; #Concatenamos un doble CR/LF para indicar el final del Header

print "[+] Conectando con $host ...\n";

$socket = new IO::Socket::INET(
PeerAddr => $host,
PeerPort => $port,
Proto => 'tcp') || die "[-] No se ha podido conectar a $host";

print $socket $peticion; #Mandamos la cabecera
read $socket, $respuesta, $size; # Leemos la salida del Socket

@salida = split(/\n/, $respuesta);
foreach $linea (@salida){
if ($linea =~ /Server/){
$banner = $linea;
}
}

$_ = $banner; #Con todo esto
s/<ADDRESS>*//; #Lo que hacemos es
s/<\/ADDRESS>//; #Limpiar la línea de nuestro banner
$banner = $_; #Para que salga únicamente los datos qeu nosotros queremos

print "Banner de $host => $banner";
exit(1);

sub uso {
print "Uso: Banner <<HOST> <PORT>";
exit(0);

#Fin del programa


Con este sencillo code que os he dejado para que estudien y vean la sencillez de PERL (ahí promocionando XD). He comentado las líneas para que no haya ningun tipo de problema, de todas formas cualquier duda la pueden publicar que estaré encantado de resolverla.

En la actualidad estoy betatesteando junto con Seth una herramienta para realizar un fingerprint a un host remoto, basándose en cuatro tests[2] diferentes (HEAD, DELETE, improbe protocol version y Improbe Protocol).

Para finalizar sólo pediros que no me crucifiqueis por no haber extendido más sobre el tema y sólo arañar la superficie, pero no tenía qué publicar hoy, y me pareció bien hacer una introductoria al tema. Así que si quereis ver sobre este tema más a fondo, no os perdais el paper que vamos a preparar Sknight y yo ;).



Referencias:
[1] El poder de los Banners.. (Banner Grabbing) por C1c4tr1Z
[2] An Introduction to HTTP fingerprinting por Saumil Shah
5 0verl0ad Labs: HTTP Headers III : Banner Grabbing Saludos! Este va a ser el último paper que haga por separado acerca de técnicas de explotación y enumeración a través del protocolo HTTP....

1 comentario:

KnxDT dijo...

No te preocupes, tú sigue posteando, yo seguiré leyendo. Interesantes posts, curiosos.

Saludos.

< >