lunes, 24 de octubre de 2011

Jugando con VirtualHosts (III): Necromant

Como ya sabéis, los servicios webs tienen la opción de configurar varios hosts virtuales, que contienen diferentes sitios webs en base al nombre de hosts que se utilizó en la URL.

Para que el servicio web sepa que nombre de hosts usamos en la URL, nuestro navegador inserta una cabecera HTTP llamada "Host". Esta cabecera no aparecerá si accedemos directamente a una URL por su IP, pero sí aparecerá si accedemos por ejemplo a http:/www.alcampo.es:

Host: www.alcampo.es

Si un servicio web no tiene configurado ningún host virtual, en ese caso cualquier cabecera host o la ausencia de ella hará que nos devuelva el host por defecto, con lo que en todos los casos devolverá el mismo contenido.

Necromant es una nueva herramienta desarrollada en Pentester.Es para el descubrimiento de hosts virtuales "muertos", de ahí su nombre [Wikipedia], es decir, aquellos hosts virtuales que responden a un nombre de host concreto, pero cuyo nombre DNS no existe o no apunta a su dirección IP, con lo que resultan a priori inaccesibles.

Hay varias situaciones en las que podemos encontrarnos estos hosts virtuales "muertos", como por ejemplo:
  • Servicios web de desarrollo, donde los desarrolladores resuelven manualmente en su ficheros "hosts" local.
  • Servicios web que se encuentran balanceados por algún tipo de dispositivos.
  • Servicios web donde antes se alojaba una web y que se trasladó a otro host, cambiando la resolución DNS, pero sin eliminar el host virtual antiguo.
Encontrar este tipo de hosts virtuales "difuntos" puede ser de mucha utilidad, ya que muchas veces vamos a poder encontrar aplicaciones web antiguas o en desarrollo, saltarnos filtrados por IP utilizando los balanceadores, y mucho más.

Veamos que opciones tiene Necromant:

$ ./Necromant.py 
# Necromant v0.1 - 04/May/2011
# Dead Virtual Host Searcher
# Jose Selvi - jselvi (4.t) pentester (d0.t) es
# http://www.pentester.es
# http://tools.pentester.es/necromant


Usage: ./Necromant.py hostname.list url.list

Como podemos ver, Necromant acepta dos parámetros, una lista de hostnames y otra lista de urls. La información necesaria para completar estos ficheros podemos obtenerla mediante otros métodos, como vimos en anteriores posts [1][2]. La mejor manera de aprender el formato de ambos ficheros es ver un sencillo ejemplo, para ello vamos a elegir un objetivo, por ejemplo la red de hipermercados Alcampo, y vamos a buscar servicios web en sus IPs. La búsqueda real sería mucho más extensa que esta, pero para el ejemplo buscaríamos solo ofrecidos en puertos 80.

# nmap -PN -T4 -open -sS -p 80 -oG alcampo_nmap80.grep 217.140.24.0/24

Tras este escaneo ya podemos crear el fichero alcampo_urls.txt, que tendrá el siguiente contenido:

http://217.140.24.10
http://217.140.24.19
http://217.140.24.23

La herramienta acepta http y https, y acepta también la definición de puertos no estándar, para que podamos incluir los servicios webs en otro tipo de puertos. Ahora solo nos queda crear el fichero alcampo_hosts.txt con los nombres de host que queremos comprobar contra las URLs anteriores:

www.alcampo.com
www.alcampo.es

Ahora que ya tenemos los dos ficheros, solo tenemos que lanzar Necromant y dejarle actuar:

$ ./Necromant.py alcampo_hosts.txt alcampo_urls.txt 
Looking for this HostNames:
- www.alcampo.es
- www.alcampo.com


Looking at this Servers:
- http://217.140.24.10
- http://217.140.24.19
- http://217.140.24.23


Searching hostnames for: http://217.140.24.10
Searching hostnames for: http://217.140.24.19
- www.alcampo.es
- www.alcampo.com
Searching hostnames for: http://217.140.24.23
- www.alcampo.es
- www.alcampo.com


Virtual Hosts Found:
www.alcampo.es:http://217.140.24.19
www.alcampo.com:http://217.140.24.19
www.alcampo.es:http://217.140.24.23
www.alcampo.com:http://217.140.24.23

Como podemos ver, hay dos IPs que responden a los mismos nombres de hosts, a pesar de que el registro DNS solo nos resuelve a uno de ellos:

$ host www.alcampo.es
www.alcampo.es has address 217.140.24.23
$ host www.alcampo.com
www.alcampo.com has address 217.140.24.23

Si configuramos en nuestro fichero de hosts local la resolución de nombres estática apropiada, vamos a poder acceder a estos hosts virtuales en esta IP diferente a la que accederíamos de la forma habitual. A veces puede no aportar ningún tipo de relevancia, y otras veces puede resultarnos MUY útil.

Antes de terminar, me gustaría destacar que la herramienta lo que realiza es un fingerprint del sitio web accedido en base a algunos parámetros, entre ellos el contenido, comparando el resultado del fingerprint entre los nombres de host que buscamos y un hombre de host ficticio. Esto quiere decir que si el único sitio web está configurado como host por defecto, no nos va a detectar ningún nombre de hosts, aunque uno de los que hayamos probado esté ahí, ya que no está "oculto". Quizá en una siguiente versión le añada la posibilidad de que realice un fingerprint accediendo por nombre de host y luego compare, para detectar también donde está cada nombre de host por IP.

Por último, deciros que la herramienta está en estado beta, es decir, puede que os encontréis con algún tipo de falsos positivos. Si os encontráis alguno escribidme un correo, pero antes comprobad verdaderamente que se trata de un falso positivo, porque yo me he encontrado con algunos sitios web que los han configurado por separado y han copiado el contenido del html, pero que han añadido alguna tontería y la web, parece idéntica, pero no lo es.

Como os comentaba, podeis descargar la herramienta de AQUÍ.
Sed buenos.

No hay comentarios :