lunes, 22 de marzo de 2010

WebSearch: Encuentra Hosts Virtuales

En muchas ocasiones, cuando realizamos un test de intrusión, nos encontramos con la dificultad de tener que auditar servidores web con múltiples virtual hosts con sus respectivas páginas web. Es importante conocer cuantos más virtual hosts de la máquina mejor, puesto que las probabilidades de encontrar algún fallo en la aplicación web que nos permita "empezar nuestra magia" aumentan cuantas más webs encontremos.

Para encontrar estos virtual hosts, así como más dominios diferentes pero pertenecientes a una misma empresa, me hice hace tiempo un script en Pyhton llamado WebSearch, al que se le puede pasar un rango de IPs y consulta con Bing IP a IP para obtener los virtual hosts de la máquina.

Evidentemente, esta aproximación no es perfecta, puesto que un host virtual que no es enlazado desde ningún sitio nunca va a ser encontrado, pero en general una web se pone ahí para que alguien la vea, así que vamos a obtener unos resultados aceptables.

La herramienta la hemos dejado en nuestro (mini) repositorio de herramientas, con el nombre de WebSearch. Si veis la web principal del repositorio, veréis que hay otra herramienta en Perl que hice hace tiempo (y de la que ya hablamos en un par de ocasiones) para encontrar hosts llamada TargetSearch. Podéis usarla también si queréis en combinación con WebSearch, pero os aviso ya de que la tengo en proceso de mejora y de migración a Python, osea que es posible que en poco tiempo retire esa herramienta y publique la nueva.

Bueno, pues ahora que ya están hechas las presentaciones (WebSearch - Lectores de Pentester, Lectores de Pentester - WebSearch) vamos con un pequeño ejemplo práctico:

Imaginaos que estamos haciendo un Pentest y nos dicen el nombre de la empresa: Cisco. Cisco tiene varios dominios y rangos de red, pero por simplicidad vamos a coger uno, por ejemplo cisco.net .Ahora que ya tenemos un dominio a por el que ir, vamos a mirar en que IP está su web principal http://www.cisco.net ,y a partir de ahí vamos a sacar la red, que es lo que necesitamos para empezar a jugar con WebSearch:

# host www.cisco.net
www.cisco.net is an alias for redirect.cisco.com.
redirect.cisco.com has address 198.133.219.23

# whois 198.133.219.23
OrgName: Cisco Systems, Inc.
[...]
NetRange: 198.133.219.0 - 198.133.219.255
[...]

Bueno, pues parece que ya tenemos nuestra primera red perteneciente a Cisco, la comprendida entre 198.133.219.0 y 198.133.219.255 .Ahora solo tenemos que llamar a WebSearch con esta información para que nos empiece a sacar las webs, hosts por host:

# ./WebSearch.py 198.133.219.0-198.133.219.255
Searching hostnames for: 198.133.219.0 (0)
Searching hostnames for: 198.133.219.1 (0)
Searching hostnames for: 198.133.219.2 (0)
Searching hostnames for: 198.133.219.3 (0)
Searching hostnames for: 198.133.219.4 (0)
Searching hostnames for: 198.133.219.5 (0)
Searching hostnames for: 198.133.219.6 (0)
Searching hostnames for: 198.133.219.7 (0)
Searching hostnames for: 198.133.219.8 (0)
Searching hostnames for: 198.133.219.9 (0)
Searching hostnames for: 198.133.219.10 (2)
fed.cisco.com
supportforums.cisco.com
learningnetwork.cisco.com
Searching hostnames for: 198.133.219.11 (0)
[...]

La salida es muy larga (y más lo será cuantas más webs y más grande sea el rango), así que la truncamos solo para que se pueda ver que nos irá comprobando IP por IP y nos irá mostrando las webs de cada IP. Al número entre paréntesis no le hagáis mucho caso, es la cantidad de entradas en la caché que hay, pero no tiene nada que ver con el número de hosts.

La información referente a los hosts que se están chequeando sale por la salida de error, así que tenedlo en cuenta si queréis volcarlo a un fichero. Si por contra lo que queréis es solo una lista de webs ordenada para empezar a jugar, podéis hacer algo así:

# ./WebSearch.py 198.133.219.0-198.133.219.255 2>/dev/null | sort | uniq
ardentcom.com
c1.cisco.com
cio.cisco.com
cisco-al.com
cisco-ar.com
cisco-co.com
cisco.com
conft.com
contact1.cisco.com
developer.cisco.com
download-sj.cisco.com
edelivery.cisco.com
fed.cisco.com
fsx.cisco.com
ftp-sj.cisco.com
hp.cisco.com
ihomealliance.com
investor.cisco.com
learningnetwork.cisco.com
netsolve.com
netsystech.com
networkingacademies.com
newsroom.cisco.com
supportforums.cisco.com
szone.cisco.com
thurisa.com
trailhead-sj.cisco.com
www.builtforbroadband.org
www.c-i-s-c-o.com
www.cciemachine.com
www.cisco-de.com
www.cisco-id.com
www.cisco-la.com
www.cisco-ma.com
www.cisco-mi.com
www.cisco-secure.com
www.cisco-wy.com
www.cisco.biz
www.cisco.com
www.cisco.sh
www.ciscobenefits.net
www.ciscoconnects.net
www.ciscofield.org
www.ciscointernethome.com
www.ciscopark.com
www.ciscopro.com
www.ciscosecure.org
www.ciscosecurity.net
www.ciscosistemi.com
www.ciscosistemi.net
www.ciscosistemi.org
www.ciscostadium.net
www.ciscosysteme.org
www.ciscosystems.com
www.ciscosystemsnetwork.com
www.ciscotechnologyinc.com
www.dagazcomm.com
www.ieng.net
www.iq-magazine.org
www.netimpactstudy.com
www.onbusinessnetwork.com
www.sentientsupport.com
www.summa4.com
www.unity-net.com

Como podeis ver, hemos obtenido un montón de webs y de dominios nuevos asociados a Cisco que podemos utilizar para intentar penetrar a través de ellos en los sistemas. Al ser webs / dominios no principales, probablemente estarán menos securizados que los principales, ya sabeis, la puerta principal suele estar "bien" asegurada, pero igual le pegamos una pedrada a una ventana y por ahí nos colamos.

Por el momento la herramienta solo la he usado yo y algunos amigos de este mundillo, así que está en un estado "beta", si alguien detecta fallos por favor que me lo notifique por correo electrónico.

Espero que os guste la herramienta y que la encontréis de utilidad.
A disfrutarla!

7 comentarios :

Anónimo dijo...

La verdad es que me ha encantado este mini artículo no sabia que se pudiera hacer eso, pero tengo una duda, ¿Si tengo un vhost vulnerable
a algun tipo de ataque ej; SQLI, RFI, LFI como saltaría para atacar desde el vhost al host que realmente quiero atacar como es en este caso cisco.com?

Saludos y gracias!

Jose Selvi dijo...

@Anónimo: Eso depende de como esté configurado el servidor, pero por ponerte un ejemplo...

Muchas veces una web accede a una base de datos con un usuario con privilegios excesivos, eso nos permite acceder a tablas de otras bases de datos, que es posible que nos muestren información de otras webs.

También es posible que una web nos permita ejecutar comandos en el sistema operativo, y aunque estos no sean con grandes privilegios, pueden servirnos para hacer "relay" hacia otros servicios no visibles desde Internet, y que por ser internos pueden estar más descuidados.

Solo son dos ejemplos, cada red es un mundo :)

Gracias por tu comentario.
Un saludo.

ehooo dijo...

Hey he escrito una función qe hace lo mismo que WebSeach dada un IP obtiene los dominios, pero yo uso YouGetSignal. Si te gusta puedes añadirla en siguientes versiones para si es necesario sacar más información.
http://rollanwar.net/?p=484

Jose Selvi dijo...

@Ehooo, gran aportación!

La web que nos comentas tiene muy buena pinta, le pienso pegar un buen vistazo para ver si realmente saca los mismos resultados que Bing o en algún caso los mejora, en cuyo caso no tengo ningún inconveniente en incorporarlo a la herramienta.

También me gustaría leer algo más sobre el servicio de esta web. Si obtiene las correspondencias por Crawling... será parecido a Bing. Si las obtiene a partir de los nombres de dominio registrados... sí que podría mejorar los resultados en muchos casos.

Estoy en ello ;)

Saludos y gracias por el comentario.

Anónimo dijo...

Hola, tengo una duda con la herramienta websearch, ¿Que es lo que tengo que poner en la parte changeme?, ¿Que es un appid?, ¿tengo que poner una cuenta de correo o algo?

Haber si me podeis ayudar porque me gustaría probarla!

Gracias!

Jose Selvi dijo...

@Anónimo: Hay una explicación de como hacerlo en la web de la herramienta: http://tools.pentester.es/websearch

Te resumo: Para poder utilizar el API de Bing, Bing exige que te des de alta como usuario registrado de Bing. Si accedes a la URL http://www.bing.com/developer/ y haces login con tu cuenta PassPort (la del MSN), Bing te proporcionará un código (un churro hexadecimal, si no me falla la memoria). Este churro es el AppID, y es lo que debes poner en el Script para que empiece a funcionar.

Acuerdate de borrar este número si le copias la herramienta a alguien, porque si Bing detecta un uso muy abusivo del mismo AppID podría llegar a bloquearos a todos. Lo mejor es que cada usuario se genere el suyo.

Espero haberte ayudado con mi respuesta. Gracias por tu comentario, y espero que te guste la herramienta. Saludos.

hometrix dijo...

yo trato de configurar esto pero me da el siguiente error

Traceback (most recent call last):
File "./WebSearch.py", line 11, in
from pybing import Bing # http://code.google.com/p/pybing/
ImportError: No module named pybing