lunes, 4 de enero de 2010

WhatWeb: Fingerprinting de aplicaciones web

Muchas veces a la hora de realizar una auditoría de una web nos encontramos con que los desarrolladores usan gestores de contenidos o aplicaciones web OpenSource ya conocidas para aplicar modificaciones sobre ellas y conseguir acelerar el desarrollo. Sin embargo, desde el otro lado, cuando nos encontramos con una aplicación de este tipo al realizar un pentest, nos podría resultar muy útil conocer sobre que versión de que producto ha sido construida la aplicación web, ya que dicha versión podría contener vulnerabilidades que hayan sido publicadas pero no corregidas en este desarrollo "pseudo-a-medida" (algo muy habitual).

Para realizar este reconocimiento de la versión, llamado comúnmente Fingerprinting, vamos a utilizar una herramienta llamada WhatWeb, de la que he tenido constancia recientemente y que me encuentro en la actualidad probando.

Para utilizar la herramienta solo hay que descargarla e instalarla y llamarla de la siguiente manera:

# cd /opt/whatweb
# ./whatweb http://www.web.com/aplicacion/

Por supuesto, este es el funcionamiento básico, pero existen multitud de opciones que podemos usar para ajustar su funcionamiento, para pedirle que sea menos exahustivo, etc:

# ./whatweb
WhatWeb - Next generation web scanner.
Version 0.3 by Andrew Horton aka urbanadventurer, MorningStar Security
www.morningstarsecurity.com

Usage: whatweb [options]

--input-file=FILE, -i Identify URLs found in FILE
--aggression, -a 1 passive - on-page
2 polite - follow on-page links if in the extra-urls list (default)
3 impolite - try extra-urls when plugin matches (smart, guess a few urls)
4 aggressive - try extra-urls for every plugin (guess a lot of urls)
--recursion, -r Follow links recursively. Only follows links under the path (default: off)
--depth, -d Maximum recursion depth (default: 3)
--max-links, -m Maximum number of links to follow on one page (default: 25)
--list-plugins, -l List the plugins
--run-plugins, -p Run comma delimited list of plugins. Default is to run all
--info-plugins, -I Display information about a comma delimited list of plugins. Default is all
--example-urls, -e Add example urls for each plugin to the target list
--colour=[WHEN],
--color=[WHEN] control whether colour is used. WHEN may be `never', `always', or `auto'
--log-full=FILE Log verbose output
--log-brief=FILE Log brief, one-line output
--user-agent, -U Identify as user-agent instead of WhatWeb/VERSION.
--max-threads, -t Number of simultaneous threads identifying websites in parallel (CPU intensive). Default is 5.
--help, -h This help
--verbose, -v Increase verbosity (recommended), use twice for debugging.


Ahora que ya tenemos la herramienta instalada y ya sabemos como usarla, vamos a hacer una pequeña prueba sobre algunas aplicaciones web que me rondan por la cabeza, a ver que tal detecta...

Aunque entiendo que tampoco debería haber ningún problema si pusiera las webs reales, pero comprendiendo que hay gente que no le gusta ver los datos de su web expuestos a todo Internet (sorpresa! es un servidor web, YA lo tienes expuesto a todo Internet), he cambiado los nombres de las webs y demás información que pudiera resultar identificativa de una web por asteriscos, pero podeis ver exactamente lo que saldría viendo la primera prueba (sobre este mismo blog).

Vamos a ello:

1) # ./whatweb www.pentester.es
http://www.pentester.es [200] Blogger, Google-Analytics-GA[6141658], md5[a367e7be8d94a46c85cbb7ed7e73259b], server-header[GFE/2.0], title[Pentester.es], uncommon-headers[x-frame-options,x-content-type-options,x-xss-protection]

De momento al cosa va bien, pentester.es está en Blogger, evidentemente.

2) # ./whatweb www.*****.com
http://www.*****.com [200] Google-Analytics-GA[*****], JQuery[1.3.2], Mailto, WordPress[2.8.4], md5[*****], meta-generator[WordPress 2.8.4], server-header[Apache], title[*****], uncommon-headers[x-pingback], x-powered-by-header[PHP/5.2.0-8+etch4]

La web de una empresa del mundo de la seguridad que utiliza un WordPress. Correcto.

3) # ./whatweb *****.com
http://*****.com [200] md5[*****], server-header[Apache], title[*****]

De este la aplicación no saca nada, pero es comprensible, es un gestor de contenidos de una compañía Española y que no está muy extendido pero con el que me he encontrado recientemente.

4) # ./whatweb http://www.*****.org
http://www.*****.org [301] md5[*****], redirect-location[http://www.*****.org/web/*****/], server-header[Apache]
http://www.*****.org/web/*****/ [200] md5[*****], server-header[Apache], title[*****], uncommon-headers[liferay-portal]

Gestor de contenidos LifeRay. Este no lo ha reconocido como tal, pero ha reconocido cabeceras extrañas que nos proporcionan el nombre del gestor de contenidos. Este SI ha sido modificado para ser adaptado.

5) # ./whatweb http://www.*****.org
http://www.*****.org [301] md5[*****], redirect-location[http://www.*****.org/wiki/Main_Page], server-header[Apache], uncommon-headers[x-vary-options], x-powered-by-header[PHP/5.2.10]
http://www.*****.org/wiki/Main_Page [200] Google-Analytics-GA[*****], probably index-of, md5[*****], meta-generator[MediaWiki 1.15.1], server-header[Apache], title[*****], uncommon-headers[x-vary-options], x-powered-by-header[PHP/5.2.10]

Un conocido Wiki del que saco información sobre análisis forense. Correctamente detectado.

6) # ./whatweb http://*****.*****.org/
http://*****.*****.org/ [200] Google-Analytics-GA[*****], md5[*****], server-header[Apache/2], title[*****], vbulletin[3.8.3], x-powered-by-header[PHP/5.2.8]

Esta es una conocida web con temas de seguridad. Parece correctamente detectado.

Lamentablemente no me vienen a la cabeza un gran número de webs que recuerde que usan gestores de contenidos o aplicaciones similares modificadas, así que si lo quereis probar y notificarnos los resultados... nosotros encantados, ya que hace muy poco tiempo que utilizamos esta herramienta y todavía no podemos hacer una valoración de su funcionamiento con más profundidad.

Disfrutadlo con salud!

4 comentarios :

Anónimo dijo...

Quizás os resulte útil esta otra herramienta:
http://www.dragonjar.org/detecta-la-version-de-una-aplicacion-web.xhtml

Jose Selvi dijo...

Gracias @Anónimo, la tenía en la lista de webs "por leer" para pegarle un ojo, pero muchas gracias por el aporte.

Cuando podamos la trastearemos un poco y haremos una pequeña comparativa con la que hemos probado aquí a ver cual de las dos da mejores resultados.

Muchas gracias por la aportación! ;)

Emilio Casbas dijo...

Creo que fue a través de este blog donde descubrí esta herramienta. La he estado probando y tiene algunas funcionalidades que me interesan. :-)
Para probar, he desarrollado un plugin para sistemas opencms que no tenía, y últimamente tanto se había oido hablar.

Saludos y gracias!

Jose Selvi dijo...

@Emilio, me alegra mucho que conocer una herramienta a través de nosotros te haya animado a mejorarla añadiendo plugins.

Por qué no lo envías a los desarrolladores de la herramienta? :)

Saludos y gracias por el comentario.