lunes, 17 de octubre de 2011

Jugando con VirtualHosts (I): theHarvester

Este es el primero de una serie de posts sobre como manejarse con los virtual hosts de un servicio webs, que acabará con la presentación de un pequeño script de cosecha propia, pero que me ha parecido que merecía la pena tomar este tema desde el principio.

Hace algo más de dos años publiqué una herramienta (o pequeño script) en Perl llamado TargetSearch, al que se le pasaba como entrada un dominio y éste buscaba en Google nombres de host cacheados que acabaran en este dominio, con lo que éramos capaces de descubrir nuevos nombres de hosts y rangos de IPs en los que la empresa auditada tiene recursos, aunque las IPs no sean realmente de su propiedad, sino del ISP, o similar.

Hace ya bastante tiempo tuve el impulso de reescribirlo entero en python y cambiar algunas cosas para mejorarlo, ya que con su uso diario me había dado cuenta de bastantes limitaciones, pero tras valorarlo decidí no continuar el desarrollo del script, ya que hay otros desarrollador por otras personas que ofrecen una funcionalidad mayor que este y... ¿para que reinventar la rueda?

De entre las opciones que hay por ahí, a mi la que más me gusta es theHarvester, desarrollada por mi amigo Christian Martorella, y que podéis encontrar tanto en su blog como en distribuciones de seguridad bien conocidas como pueda ser BackTrack.

theHarvester ofrece la posibilidad de buscar subdominios dentro de un dominio a través de Google, al igual que hacía TargetSearch, pero también encuentra otro tipo de información como correos electrónicos, y utiliza más fuentes de datos, como Bing, LinkedIn, y algunos otros. Veamos la ayuda de la herramienta (le quito la cabecera donde pone autor y esas cosas, por claridad):


$ ./theHarvester.py -h
Usage: theharvester options 


       -d: Domain to search or company name
       -b: Data source (google,bing,bingapi,pgp,linkedin,google-profiles,exalead,all)
       -s: Start in result number X (default 0)
       -v: Verify host name via dns resolution and search for vhosts(basic)
       -l: Limit the number of results to work with(bing goes from 50 to 50 results,
            google 100 to 100, and pgp does'nt use this option)
       -f: Save the results into an XML file


Podemos elegir alguna de las fuentes o simplemente elegir "all" para que nos busque en todas las fuentes disponibles. La opción -l nos deja ajustar cuantos resultados va a leer la herramienta antes de parsear los resultados, así que cuanto más alto sea este número más fácil será encontrar la información que buscamos, pero eso se traducirá también en un mayor número de conexiones contra los buscadores, y por lo tanto una mayor lentitud y una mayor probabilidad de ser detectado y/o bloqueado por ellos.

Veamos un ejemplo sencillo de como intentaríamos sacar toda la información posible de, por ejemplo, renfe.es:


$ ./theHarvester.py -d renfe.es -l 200 -b all
Full harvest..
[-] Searching in Google..
Searching 100 results...
Searching 200 results...
Searching 300 results...
[-] Searching in PGP Key server..
[-] Searching in Bing..
Searching 100 results...
Searching 200 results...
[-] Searching in Exalead..
Searching 100 results...
Searching 200 results...
Searching 300 results...


[+] Emails found:
 -------------
SIR@renfe.es
ozramos@renfe.es
antonio.sierra@renfe.es
slozano@renfe.es
Jsagues@renfe.es
internet@renfe.es
grupos@renfe.es
comercial.ext.sir@renfe.es
mdelgadoa@renfe.es
comprasave@renfe.es
jacorral@renfe.es
crodriguez@renfe.es
rgcamus@renfe.es
ciapu17@cosme.renfe.es
cijoua7@cosme.renfe.es
ismiguel@renfe.es
ciapu66@cosme.renfe.es
fgarcia@renfe.es
cigou24@renfe.es
fdelmoral@renfe.es
alorenzo@renfe.es
jvillen@renfe.es
ihorcajo@renfe.es
arocha@renfe.es
didgu01@cosme.renfe.es
vrdid08@renfe.es
@renfe.es


[+] Hosts found
 -----------
80.239.224.25:www.renfe.es
213.144.33.20:w1.renfe.es
213.144.33.35:clubave.renfe.es
213.144.49.9:mail.renfe.es
80.239.224.25:horarios.renfe.es
213.144.49.136:infocer.renfe.es
213.144.33.206:web02.renfe.es
213.144.49.43:dns2.renfe.es
213.144.33.254:ns1.renfe.es
213.144.32.153:ns2.renfe.es
213.144.33.39:w4.renfe.es
213.144.33.20:W1.renfe.es
213.144.34.30:rnessl.renfe.es
213.41.75.72:boletines.renfe.es
213.144.49.35:dns1.renfe.es
213.144.49.59:interesaportal.renfe.es
213.144.33.35:w5.renfe.es
213.144.49.59:tuclubave.renfe.es
213.144.49.59:Tuclubave.renfe.es
80.239.224.25:Www.renfe.es
213.144.50.64:mercancias.renfe.es
213.144.49.9:mail.renfe.es
80.239.224.25:Www.renfe.es
213.144.33.206:web02.renfe.es
213.144.33.35:clubave.renfe.es
80.239.224.25:www.renfe.es
213.144.33.35:w5.renfe.es
213.144.33.206:asista.renfe.es
213.41.75.72:boletines.renfe.es
213.144.33.20:w1.renfe.es
80.239.224.25:Horarios.renfe.es
80.239.224.25:horarios.renfe.es
213.144.49.59:interesaportal.renfe.es


[+] Virtual hosts:
----------------
213.144.33.20:w1.renfe.es
213.144.33.35:clubave.renfe.es
213.144.33.35:w5.renfe.es
213.144.49.9:mail.renfe.es
213.144.49.136:infocer.renfe.es
213.144.33.206:asista.renfe.es
213.144.33.206:web02.renfe.es
213.41.75.72:boletines.renfe.es
213.41.75.72:t.cab09.net
213.41.75.72:grupoplaneta.cab09.net
213.41.75.72:www.help.icrc.org
213.41.75.72:www.tracabilite.org
213.41.75.72:www.initialservices.fr
213.41.75.72:lalettre.promotelec.com
213.41.75.72:dons.lesvillagesdenfants.com
213.41.75.72:info.geoportail.fr
213.41.75.72:gazdefrancedolcevita3.gdfsuez.com
213.41.75.72:don.lesvillagesdenfants.com
213.41.75.72:news.cegid.fr
213.41.75.72:soutenons.fondation-autisme.org
213.41.75.72:info.ign.fr
213.144.49.59:www.enpuntorenfe.es
213.144.49.59:www.enpuntorenfe.com
213.144.49.59:revistaenpunto.com
213.144.49.59:revistaenpunto.es
213.144.50.64:mercancias.renfe.es


De esta salida sacamos diferentes tipos de información:

  1. Listado de cuentas de correo, que nos puede servir tanto para obtener un listado de usuarios válido para posteriormente hacer ataques de diccionario a contraseñas, como para descubrir nuevos dominios desconocidos (un @cosme.renfe.es nos muestra la existencia de este dominio).
  2. Subdominios del dominio que hemos buscado, y algunos otros que estén alojados en los mismos servidores donde se han encontrado. Puede que sean nuevos dominios pertenecientes a la empresa que estamos auditando, o puede que se trate de un hosting compartido y no tengan nada que ver.
  3. Listado de IPs que alojan los nombres de hosts encontrados. A partir de ellos vamos a poder sacar, mediante whois, los rangos completos.

Yo os recomiendo un poco de grepping y awk para separar la información y hacerla más sencilla de manejar:

$ ./theHarvester.py -d renfe.es -l 200 -b all > renfe_theharvester.txt
$ cat renfe_theharvester.txt | grep "@" | grep -v edge-security | awk -F"@" '{print $1}' | sort | uniq > renfe_theharvester_users.txt
$ cat renfe_theharvester.txt | grep "@" | grep -v edge-security | awk -F"@" '{print $2}' | sort | uniq > renfe_theharvester_maildomains.txt
$ cat renfe_theharvester.txt | grep "renfe.es" | grep ":" | awk -F":" '{print $1}' | sort -n | uniq > renfe_theharvester_ips.txt
$ cat renfe_theharvester.txt | grep "renfe.es" | grep ":" | awk -F":" '{print $2}' | sort | uniq > renfe_theharvester_hosts.txt
$ cat renfe_theharvester.txt | grep -v "renfe.es" | grep ":" | grep -v "+" > renfe_theharvester_alternatehosts.txt

Si nos centramos en los rangos de IPs y hacemos whois a alguna de ellas, vemos que podemos reducir la información obtenida a la siguiente:

  • 80.239.224.25 -> 80.239.224.0 - 127 (Akamai)
  • 213.144.32.0 - 213.144.63.255 (Renfe)
  • 213.41.75.72 -> 213.41.75.0 - 255 (Colt)

A pesar de que theHarvester ya nos ha hecho una obtención de hosts virtuales de las IPs encontradas... ¿qué pasa con las IPs de las que no ha encontrado nada pero que están en el mismo rango? Si por ejemplo tuvieramos el dominio renfe.es en una serie de IPs y el dominio renfo.com (inventándomelo) en otra serie de IPs, no encontraríamos nada sobre este dominio.

En el siguiente post veremos como lo haremos.

5 comentarios :

ahervalejo dijo...

Hace algún tiempo estuve probando el harvester que venía con la Backtrack (en otoño de 2009) pero por aquel entonces no funcionaba bien, ya que google no mostraba emails en sus búsquedas. ¿Sabes qué ha podido cambiar en la herramienta de entonces a hoy?

Por otro lado, se puede utilizar la opción "-u" de sort en lugar de "uniq".

Un saludo

Jose Selvi dijo...

@ahervalejo: Que quisquillosos nos levantamos los lunes por la mañana xD. También se puede usar un "cut" en lugar de un "awk", pero cada uno se acostumbra a hacer las cosas de una manera.

En cuanto a lo de BackTrack, hace algunos meses Christian lo reprogramó todo y sacó la versión 2.0, ¿esto que dices te pasó con ésta versión? Si es así, te recomiendo que te lo bajes de los fuentes y te lo instales, porque a mi te aseguro que me funciona perfectamente.

ahervalejo dijo...

Jajajaj si, yo soy mas de cut que de awk, pero el uniq es algo que me ha sorprendido.

Funcionarme me funciona con la versión 2.0 (viene con la BT5 R1) a día de hoy y ha sido una grata sorpresa. :)

Leslie Figueroa dijo...

como puedo evitar que theharvester muestre mi lista de correos?

Jose Selvi dijo...

Hola @Leslie. TheHarvester únicamente muestra la información que se puede encontrar de forma pública en Google, Bing, etc. Si tu email aparece es porque está publicado en algún lado.

Lo que puedes hacer es usar la opción -b con cada una de las diferentes fuentes en lugar de -b all, para ver en cuales ha encontrado la herramienta tu correo, y cuando lo sepas tendrás que buscar a mano donde está publicada y solicitar al dueño del site que la retire. Seguramente también tendrás que solicitarle al buscador que borre de la cache ese contenido.

¡Suerte!