Nmap 6. Nuevas funcionalidades.

Recientemente ha sido publicada Nmap 6 tras tres años de trabajo. Una de las mejoras más importantes ha sido la incorporación de nuevas opciones para Web Scanning aumentando de 6 a 54 el número de scripts NSE para el análisis de servidores Web. Algunos de esos nuevos scripts son los siguientes:

  • http-title: determina el título de la página por defecto de cualquier servidor web detectado durante el escaneo, información que puede ser muy valiosa. Veamos un ejemplo de funcionamiento (las pruebas las he realizado con owaspbwa):
    nmap -sV --script=http-title 172.16.94.129
    PORT     STATE SERVICE     VERSION
    22/tcp   open  ssh         OpenSSH 5.3p1 Debian 3ubuntu4 (protocol 2.0)
    80/tcp   open  http        Apache httpd 2.2.14 ((Ubuntu) mod_mono/2.4.3 
    PHP/5.3.2-1ubuntu4.5 with Suhosin-Patch mod_python/3.3.1 Python/2.6.5 
    mod_perl/2.0.4 Perl/v5.10.1)
    |_http-title: OWASP Broken Web Applications
    139/tcp  open  netbios-ssn Samba smbd 3.X (workgroup: WORKGROUP)
    143/tcp  open  imap        Courier Imapd (released 2008)
    445/tcp  open  netbios-ssn Samba smbd 3.X (workgroup: WORKGROUP)
    5001/tcp open  ovm-manager Oracle OVM Manager
    8080/tcp open  http        Apache Tomcat/Coyote JSP engine 1.1
    |_http-title: Apache Tomcat/6.0.24 - Error report
    
  • http-enum: te muestra los directorios utilizados por las aplicaciones y servidores Web más usados comprobando más de 2000 URI paths. Un ejemplo usando Zenmap también usando owaspbwa:

  • http-grep: busca en un sitio Web las páginas o urls que se ajustan a un patrón determinado. Por ejemplo, podemos buscar las páginas en las que aparecen direcciones de correo:
    nmap 172.16.94.129 --script http-grep --script-args='http-grep.match="
    [A-Za-z0-9%.%%%+%-]+@[A-Za-z0-9%.%%%+%-]+%.%w%w%w?%w?"'
    PORT     STATE SERVICE
    22/tcp   open  ssh
    80/tcp   open  http
    | http-grep: 
    |   (1) http://172.16.94.129/zapwave/
    |     + psiinon@gmail.com
    |   (1) http://172.16.94.129/WackoPicko/
    |     + contact@wackopicko.com
    |   (1) http://172.16.94.129/AppSensorDemo/login.jsp
    |_    + michael.coates@owasp.org
    ...
    

    O buscar páginas en las que aparecen patrones más interesantes como ‘username’,’admin’ o ‘password’, buscar direcciones IP, números de teléfono, números de tarjetas de crédito, posibles nombres de usuarios o contraseñas, etc.

    También podemos usarlo para búsqueda de cadenas para encontrar código malicioso en nuestras páginas como ‘src=’ o ’http://’ (asegurarnos de que todas sus instancias siempre referencien a archivos de tu sitio o sitios externos confiables), ‘unescape’ o ‘eval’ (funciones JavaScript que habitualmente se hallan en el código malicioso, por ejemplo “eval(function(p,a,c,k,e,r))” ) etc.

    En definitiva podemos hacer que nos busque cualquier expresión regular o patrón que queramos que encuentre:

    nmap 172.16.94.129 --script http-grep --script-args='http-grep.match=password'
    PORT     STATE SERVICE
    22/tcp   open  ssh
    80/tcp   open  http
    | http-grep: 
    |   (46) http://172.16.94.129:80/
    |     + password
    |   (4) http://172.16.94.129/jquery.min.js
    |     + password
    |   (2) http://172.16.94.129/AppSensorDemo/login.jsp
    |     + password
    ...
    

    En este ejemplo vemos que en la primera página que nos muestra la cadena ‘password’ aparece 46 veces (lo podemos comprobar mirando el código fuente de la página). Nos puede ser útil para encontrar usuarios/contraseñas fijadas en el código fuente de la página aunque concretamente esta cadena podría darnos muchos falsos positivos.

  • http-email-harvest: busca en un sitio Web las direcciones de correo. Siguiendo con los ejemplos:
    nmap --script=http-email-harvest 172.16.94.129
    PORT     STATE SERVICE
    22/tcp   open  ssh
    80/tcp   open  http
    | http-email-harvest: 
    | Spidering limited to: maxdepth=3; maxpagecount=20; withinhost=172.16.94.129
    |   contact@wackopicko.com
    |   michael.coates@owasp.org
    |_  psiinon@gmail.com
    139/tcp  open  netbios-ssn
    ...
    

    Es importante destacar la incorporación de la librería httpspider que permite hacer crawling de manera recursiva en los sitios Web que se escanean. Por ejemplo los scripts anteriormente mencionados, http-email-harvest y http-grep la utilizan.

  • http-chrono: script que mide el tiempo que tarda una sitio Web en ofrecernos una página y devuelve el tiempo máximo, mínimo y tiempo medio que tarda en recuperar una página. Páginas Web que tarden más tiempo en cargarse pueden ser objeto de ataques de DoS o DDoS debido al hecho de que son propensos a consumir más recursos en el servidor objetivo. Este script nos ayudaría a la identificación de esas páginas Web con algún tipo de problema de carga.

    Veamos un ejemplo con nuestra owaspbw:

    Los tiempos de respuesta inicialmente son los siguientes:

    nmap -p80 --script http-chrono 172.16.94.129
    PORT     STATE SERVICE
    80/tcp   open  http
    |_http-chrono: Request times for /; avg: 5.30ms; min: 2.87ms; max: 8.70ms
    

    Ahora, utilizando la herramienta hping3 intentaré provocar un DoS a través de un SYN Flood Attack y monitorizaré con http-chrono los tiempos de respuesta del sitio Web.

    Para lanzar el SYN Flood Attack:

    hping3 -p 80 -S --flood 172.16.94.129
    

    Observamos ahora que los tiempos de respuesta ofrecidos son considerablemente más elevados:

    nmap -p80 --script http-chrono 172.16.94.129
    PORT   STATE SERVICE
    80/tcp open  http
    |_http-chrono: Request times for /; avg: 610.54ms; min: 8.79ms; max: 3016.61ms
    

Otros scripts interesantes (ya que detectan vulnerabilidades recientemente publicadas) añadidos son:

  • http-vuln-cve2012-1823: detecta si nuestro sitio Web es vulnerable a la vulnerabilidad CVE-2012-183 (sobre PHP-CGI) y de la que ya hablamos en esta entrada y de cómo registrarla y filtrarla en esta otra.
  • rdp-vuln-ms12-020: evalúa si un equipo es vulnerable a las vulnerabilidades de Escritorio remoto en Microsoft Windows (RDP) MS12-020. Un ejemplo de uso:
    nmap -sV --script=rdp-ms12-020 -p 3389 <target>
    

    Solo obtendremos respuesta a la salida del script cuando es vulnerable, en caso de que no lo sea no nos diría que no lo es.

Por último comentar que la nueva versión de Nmap nos proporciona un soporte completo para IPv6, podéis consultar las mejoras al respecto en este enlace.

Estas han sido algunas de las nuevas de las muchas funcionalidades que nos ha traido Nmap 6. Esperamos seguir probándolas y escribiendo sobre ello.

Comments

  1. Maite Moreno says
  2. una gran mejora a esta gran herramienta, ahora se ha vuelto mucho mas interesante de lo que ha sido.

  3. Maite Moreno says

    Si, la verdad es que ha incorporado muchas cosas nuevas e interesantes. Intentaremos seguir contando poco a poco todas estas novedades :)

    Un saludo y gracias por comentar

Trackbacks