Mostrando entradas con la etiqueta information gathering. Mostrar todas las entradas
Mostrando entradas con la etiqueta information gathering. Mostrar todas las entradas

viernes, 23 de septiembre de 2011

Enumeración de direccionamiento IP mediante NTP


El protocolo NTP (Network Time Protocol) está diseñado para permitir sincronizar los relojes de los distintos dispositivos de red mediante su uso. Utiliza el protocolo de transporte UDP y el puerto 123.

Entre las distintas consultas que se pueden realizar a un servidor NTP tenemos la consulta monlist, pensada como herramienta de diagnóstico y que nos proporciona información de las últimas 600 direcciones IP que consultaron al servidor NTP.
Desde el punto de vista del atacante, o a la hora de hacer un pentest, podemos aprovecharnos de dicho comportamiento para realizar una enumeración de direcciones de red y obtener direcciones IP de los equipos de la empresa, internos o externos, que utilicen dicho servidor NTP.

Antes de empezar a realizar las pruebas conviene tener en mente que, en el caso por ejemplo de 0.europe.pool.ntp.org, detrás de dicho nombre de host existen varias direcciones IP y que, dependiendo de la que resuelva cuando uséis los programas, tendrán o no activada dicha consulta.

Entradas A para 0.europe.pool.ntp.org
Para realizar dicha enumeración disponemos de distintos métodos, el primero de ellos es utilizar el cliente ntp de linux “ntpdc”, tal y como vemos en la siguiente imagen (si da un error de timeout hay que repetir la petición).

Consulta monlist mediante ntpdc
También podemos utilizar el módulo de metasploit auxiliary/scanner/ntp/ntp_monlist para ello, aunque a mí me da algunos problemas y me muestra basura al final...

Nmap tiene también un script para realizar esto, ntp-monlist.nse , el cual presenta la ventaja de separarnos los clientes con direccionamiento público de aquellos que utilicen direccionamiento privado.

Script ntp-monlist de Nmap
La última herramienta que voy a comentar es de sensepost y se llama ntp_monlist.py que, además de realizar dicha consulta, nos genera también un fichero para maltego.
Para ejecutarlo basta con hacer lo siguiente: z0mbiehunt3r@ph0b0s:/$ ./ntp_monlist.py 0.europe.pool.ntp.org y luego comprobar el fichero NTP.txt.

Resultados obtenidos por ntp_monlist.py
Comentar también que HD Moore, quien hizo público este “uso alternativo” del comando monlist, comentó también la posibilidad de utilizar una lista de servidores que permitan realizar dicho comando para realizar un ataque de tipo DdoS ya que, con una única petición, obtenemos múltiples respuestas hasta completar el listado completo de los últimos 600 clientes. Esto, unido al uso de UDP como capa de transporte, hace trivial la falsificación de dirección IP de origen para hacer que un servidor objetivo reciba gran cantidad de respuestas NTP no solicitadas.

Por último, y para aquellos que queráis buscar servidores NTP con los que trastear, deciros que podéis hacerlo fácilmente con Nmap de la siguiente manera:

root@ph0b0s:~/nmap-svn# ./nmap -sU -pU:123 -Pn -n -iR 10000 --reason -v -oA /tmp/ntp-happyhunting –min-hostgroup=500

Con ello, estáis diciendo que escanee sólo el puerto UDP 123, que no realice ping primero ni resolución DNS (ahorramos bastante tiempo y ancho de banda), que genere 10000 direcciones IP aleatorias a escanear, que nos muestre el motivo por el cual Nmap establece el estado del puerto, que muestre más información del estado del escaneo, que nos guarde la salida en /tmp/ntp-happyhunting (en tres formatos distintos con sus correspondientes extensiones) y que realice el escaneo de forma paralela con grupos de 500 host.
Una vez acabado sólo tenéis que buscar en los ficheros de salida el texto udp-response que nos indica que ha habido respuesta, lo que significa que el puerto está abierto.
También podéis buscar en los listados de servidores NTP públicos pero, admitámoslo, no es tan divertido.... ;)

Espero que os haya resultado interesante y que os acordéis de ello si algún día estáis haciendo un pentest y os encontráis con un servidor NTP.

Saludos y hasta otra.




miércoles, 22 de diciembre de 2010

Scripts para Nmap - Más allá del -T4 -A

Buenas a todos, esta vez quería escribir algo acerca de una funcionalidad de Nmap bastante menos conocida comparada con otras como los tipos de escaneos.
Dicha funcionalidad no es más que el uso de los scripts NSE (nmap scripting engine), dichos scripts los podéis encontrar en http://nmap.org/nsedoc/scripts/ y están programados en LUA.

Hay bastantes scripts (actualmente unos 160) divididos en distintas categorías según el tipo de servicio, si son intrusivos o no, de DoS, etc
Su uso es muy sencillo, basta con especificar las categorías de scripts a pasar o indicar directamente los que queramos pasar de forma concreta, por ejemplo:

nmap -sS -sV -p21 --script=ftp-anon.nse SUBRED/MASCARA nos comprobará en ese rango de direcciones IP si existe un servicio FTP a la escucha, en caso de ser así intentará conectarse como un usuario anónimo y nos mostrará un simple listado de directorios en caso de que sea posible usar el usuario anónimo.

He puesto un ejemplo sencillo y concreto, pero podrían combinarse varios para realizar cosas muy interesantes, buscar bases de datos, ssh, ftp y demás en el rango de la empresa que estamos auditando etc.

Por último, comentar que para usar correctamente los scripts lo mejor es tener el nmap actualizado directamente del SVN, para ello se usan los siguientes comandos:

Para copiarlo: svn co --username guest --password "" svn://svn.insecure.org/nmap/ nmap-svn
Para actualizarlo: svn up.
Para compilarlo: /configure && make
Y para instalarlo (como root): make install

Así nos evitamos cualquier posible problema a la hora de usar los scripts.

Un saludo a todos y espero que echéis un ojo a los scripts disponibles y empecéis a usarlos los que no los usáseis ya.

martes, 16 de noviembre de 2010

Detectando balanceadores de carga

A la hora de realizar un pentest o auditoría, y antes siquiera de escanear equipos, debemos intentar detectar e identificar posibles balanceadores de carga. Esto tiene una explicación muy sencilla y es la siguiente: podemos realizar un escaneo de puertos y darse la situación de que, por ejemplo, unas peticiones han sido asignadas a un servidor concreto y otras peticiones a otras, por lo que se obtendrán resultados incosistentes.
Lo mismo pasará a la hora de realizar un escaneo de vulnerabilidades, podemos encontrar un servidor vulnerable, lanzarle un exploit y que el exploit se dirija a un host no vulnerable. Por el contrario, puede darse el caso de no encontrar una vulnerabilidad por haber auditado sólo un host.

Antes de pasar a ver los principales métodos de detección de balanceadores vamos a ver las principales técnicas usadas para balancear:

  • Basado en DNS: basado en algoritmo round robin, cada petición es respondida con una IP distinta. Ello no quiere decir ni que sea el servidor con menos carga ni que dicho servidor esté accesible.
  • Least connections: Se redirigen las peticiones al servidor con menos conexiones.
    • Dicho balanceo se puede configurar para dar "pesos" a cada servidor según sus capacidades.
  • Persistencia por cookie: En casos como una tienda online o un portal que se requiera un constante chequeo de credenciales se puede marcar mediante cookie una conexión "persistente" para que, una vez autenticado, tus peticiones vayan al mismo servidor y así no tener problemas con las sesiones.
  • Los sistemas anteriores pueden complementarse con mecanismos como la latencia de un ping para intentar entregar el recurso solicitado desde el servidor más cercano geográficamente para intentar conseguir un mejor rendimiento.

Dicho esto vamos a ver un par de formas para detectar balanceadores de carga:

Mediante consulta DNS
Para ello bastará con realizar una consulta de tipo A y ver si se nos devuelven múltiples entradas.
z0mbiehunt3r@d3im0s:~$ dig www.tuenti.com A
;; ANSWER SECTION:
www.tuenti.com. 860 IN A 95.131.168.193
www.tuenti.com. 860 IN A 95.131.168.194
www.tuenti.com. 860 IN A 95.131.168.195
www.tuenti.com. 860 IN A 95.131.168.196



Como vemos se nos devuelven dos entradas de tipo A que corresponden a dos host de la red Akamai.


hping3
Con la herramienta hping3 podemos crear paquetes "al gusto", para realizar esta comprobación vamos a crear paquetes con la flag SYN establecida y el puerto de destino 80, para intentar abrir una conexión con el/los host remotos.
root@d3im0s:~# hping3 -S -p 80 www.f5.com
HPING www.f5.com (eth1 65.61.115.222): S set, 40 headers + 0 data bytes
len=46 ip=65.61.115.222 ttl=239 DF id=30681 sport=80 flags=SA seq=0 win=1608 rtt=221.1 ms
len=46 ip=65.61.115.222 ttl=239 DF id=34470 sport=80 flags=SA seq=1 win=1608 rtt=222.5 ms
len=46 ip=65.61.115.222 ttl=238 DF id=35460 sport=80 flags=SA seq=2 win=1608 rtt=229.4 ms
len=46 ip=65.61.115.222 ttl=239 DF id=36912 sport=80 flags=SA seq=3 win=1608 rtt=218.5 ms
len=46 ip=65.61.115.222 ttl=239 DF id=37908 sport=80 flags=SA seq=4 win=1608 rtt=223.8 ms
len=46 ip=65.61.115.222 ttl=240 DF id=38775 sport=80 flags=SA seq=5 win=1608 rtt=219.7 ms
len=46 ip=65.61.115.222 ttl=238 DF id=40694 sport=80 flags=SA seq=6 win=1608 rtt=219.9 ms
len=46 ip=65.61.115.222 ttl=239 DF id=43097 sport=80 flags=SA seq=7 win=1608 rtt=226.0 ms


Podemos observar que el IP ID devuelto no es sólo incremental o establecido a 0 siempre, sino que tenemos varios que son menores que el IP ID anterior, cosa imposible salvo que sean servidores distintos.


Load Balancing Detector
root@bt:/pentest/enumeration/lbd# ./lbd.sh www.microsoft.com

lbd - load balancing detector 0.1 - Checks if a given domain uses load-balancing.
                                    Written by Stefan Behte (http://ge.mine.nu)
                                    Proof-of-concept! Might give false positives.

Checking for DNS-Loadbalancing: FOUND
lb1.www.ms.akadns.net has address 207.46.170.10
lb1.www.ms.akadns.net has address 207.46.170.123

Checking for HTTP-Loadbalancing [Server]: 
 Microsoft-IIS/7.5
 FOUND

Checking for HTTP-Loadbalancing [Date]: 21:23:54, 21:23:55, 21:23:55, 21:23:56, 21:23:56, 21:23:56, 21:23:57, 21:23:58, 21:23:58, 21:23:59, 21:23:59, 21:24:00, 21:24:00, 21:24:01, 21:24:01, 21:24:01, 21:24:03, 21:24:03, 21:24:04, 21:24:04, 21:24:05, 21:24:05, 21:24:05, 21:24:06, 21:24:06, 21:24:07, 21:24:07, 21:24:08, 21:24:08, 21:24:09, 21:24:09, 21:24:09, 21:24:11, 21:24:11, 21:24:12, 21:24:12, 21:24:13, 21:24:13, 21:24:14, 21:24:14, 21:24:14, 21:24:14, 21:24:16, 21:24:16, 21:24:16, 21:24:17, 21:24:17, 21:24:18, 21:24:18, 21:24:19, NOT FOUND

Checking for HTTP-Loadbalancing [Diff]: FOUND
< VTag: 279850942700000000
> VTag: 791860011400000000

www.microsoft.com does Load-balancing. Found via Methods: DNS HTTP[Server] HTTP[Diff]

En este caso se ha identificado balanceo de carga gracias a las diferencias introducidas en las cabeceras HTTP por cada servidor.


Cookie
z0mbiehunt3r@d3im0s:~# telnet communities.vmware.com 80
Trying 92.123.78.41...
Connected to a1005.g.akamai.net.
Escape character is '^]'.
HEAD / HTTP/1.1
HOST: communities.vmware.com

HTTP/1.1 500 Internal Server Error
Server: Apache-Coyote/1.1
Content-Type: text/html
Expires: Tue, 16 Nov 2010 22:02:49 GMT
Cache-Control: max-age=0, no-cache, no-store
Pragma: no-cache
Date: Tue, 16 Nov 2010 22:02:49 GMT
Connection: keep-alive
Set-Cookie: JSESSIONID=5CFA78E5C5959F0298E0AAFFEAF17589; Path=/
Set-Cookie: BIGipServercommunities-prod-pool=1396601098.36895.0000; expires=Tue, 16-Nov-2010 23:02:49 GMT; path=/

Connection closed by foreign host.

Como podemos observar en la imagen, a parte de usar la red Akamai, se utilizan appliances F5 BIG-IP. Existe un fallo de information disclosure que nos permite sacar las direcciones IP internas de los servidores a través de la cookie para comprobarlo usamos el plugin 20089 de Nessus.

Plugin Output
The first column is the original cookie, the second the IP address and
the third the TCP port:

  BIGipServercommunities-prod-pool=1396601098.36895.0000 10.113.62.83 8080
  BIGipServercommunities-prod-pool=1379823882.36895.0000 10.113.62.82 8080
  BIGipServercommunities-prod-pool=1363046666.36895.0000 10.113.62.81 8080

Bueno, y hasta aquí llegó la breve introducción a la detección de balanceadores de carga, espero que os haya gustado y os haya despertado el gusanillo de comprobar distintos sitios.

Saludos!

viernes, 10 de septiembre de 2010

Information Gathering - DNS Cache Snooping

Como ya hemos visto en alguna ocasión, a la hora de realizar una auditoría o una prueba de pentest lo primero y más importante es reunir cuanta información sea posible acerca del objetivo, es la fase que se denomina "information gathering".

Probablemente nos interese saber qué clase de webs visitan los usuarios de dicha empresa, quizá para realizar un ataque de ingeniería social relacionado con alguno de los dominios cacheados, o realizar un ataque de evilgrade para comprometer equipos. La mejor manera de saber los dominios visitados es comprobar si se puede realizar un "snooping" sobre la caché del servidor DNS.
¿Y cómo sabemos si se puede realizar? Muy fácil, debido al funcionamiento jerárquico del protocolo DNS si nosotros realizamos una consulta DNS e indicamos al servidor que es una consulta no recursiva (el servidor DNS no intentará escalar la consuta) y se nos devuelve la entrada de dicha consulta querrá decir que el servidor permite realizar consultas a la caché y que dicho dominio ya se ha solicitado con anterioridad.

Hace un tiempo cree un pequeño script en python para poder realizar dicho trabajo de una forma sencilla. Para obtener una lista de dominios que probar lo más fácil es acudir a Alexa y extraer los dominios que nos interesen, incluso tienen un csv con el top 1 millón de webs en el ránking. Dependiendo de la finalidad buscada se pueden usar distintas categorías:
  • Direcciones de actualización para realizar ataques de evilgrade
  • Dominios de malware para saber si algún equipo está contactando con un servidor de malware (existen multitud de dominios de malware, pero puede ser útil para comprobar algunos en concreto)
  • Un atacante con fines lucrativos podría buscar ciertos dominios "para adultos" con el fin de chantajear
  • Búsqueda de redes sociales y profesionales. Por ejemplo, para buscar en ellas más información acerca de los empleados.
  • Para buscar tus propios dominios y saber si la empresa se ha interesado por tí. Por ejemplo, una entidad de gestión visitando páginas p2p o de detectives privados :)
  • Y un sinfín de posibilidades, os animo a comentar más posibilidades.
A continuación os dejo unos pantallazos del script:

El script al ejecutarse sin parámetros y la ayuda del mismo


El script al ejecutarlo con el parámetro -c que comprueba si los servidores DNS correspondientes a un dominio permiten resolución no recursiva.

La forma en la que comprueba si un servidor es susceptible de dicha enumeración es pidiendo primero unas direcciones muy comunes como puedan ser google, youtube, facebook, etc.
(He quitado el dominio por si acaso a alguien se le ocurre tirarle la lista de Alexa entera o algo así...)

Aquí el programa con el parámetro -s y los primeros resultados de la lista de Alexa

Bueno, aquí os dejo el código, espero que os sirva.

Un saludo a todos y hasta la próxima!