Intro al escáner de web Nikto (I)

Nikto, ahora llamado “nikto2”, ya que va por su versión 2.1.5, es un escáner gratuito de vulnerabilidades web, de tipo Open Source, con licencia GPL. Entre otras características:

    Soporta SSL y una configuración para usarlo a través de un proxy. Comprueba la existencia de elementos desfasados en un servidor.
    Tiene la posibilidad de exportar un informe en formato csv, html, xml etc…
    Permite escanear los puertos de un servidor a través de nmap
    El tipo de escaneado se puede modificar o “tunear” para excluir las vulnerabilidades que no nos interesen.
    A pesar de que la última versión estable salió en diciembre de 2012, es un escáner que se sigue usando por sus ventajas y utilidades.

Existen variaciones como MacNikto para mac y wikto para Windows. En este artículo se usa la versión de Linux. Lo podemos descargar en el siguiente enlace.

Primero veremos la información de configuración del programa, obtenida parcialmente de la ayuda de Nikto y de otros recursos como el Manual de Nikto para Kali. En la siguiente entrada pasaremos a ver un ejemplo de ejecución.

Requisitos:

-perl
-openssl
-libnet-ssleay-perl
-nmap

Instalamos los paquetes necesarios:

apt-get  install perl libnet-ssleay-perl openssl nmap

Descargamos y se descomprimimos nikto:

wget http://www.cirt.net/nikto/nikto-2.1.5.tar.gz
tar -xvf nikto-2.1.5.tar.gz
cd nikto-2.1.5

Una vez dentro del directorio, antes de ejecutar nikto debemos ver las opciones del archivo de configuración. Editamos el archivo nikto.conf, que es el archivo de configuración que usa nikto por defecto, y dentro hay diferentes variables:

  • SKIPPORTS=21 111

    Indicamos los puertos que nunca van a ser escaneados (por defecto ya incluye el 21 (ftp) y el puerto 111 (Sun RPC)

  • DEFAULTHTTPVER=1.0

    Esta variable indica la versión HTTP que nikto usará, en principio con la versión 1.0 es suficiente, pero se puede cambiar a la versión 1.1

  • UPDATES=no

    Esta variable al estar habilitada hace que se envíe información no sensible al servidor web de cirt.net, consultando la base de datos de nikto para verificar la versión del servidor web que se está escaneando. Si la versión es superior a la que está en el fichero db_outdated o ni si quiera está incluida, se enviarán estos datos al servidor oficial de nikto, para incluir estos datos en nuevas versiones.

En el caso de que queramos usar un proxy:

  • PROXYHOST=127.0.0.1

    Se especifica la dirección IP del proxy.

  • PROXYPORT=8080

    Se especifica el Puerto del proxy.

  • PROXYUSER=proxyuserid

    Se especifica el usuario del proxy.

  • PROXYPASS=proxypassword

    Se especifica la contraseña del proxy.

  • STATIC-COOKIE= cookie1=cookie1value; cookie2=cookie2value

    Establece las cookies de forma estática en las peticiones realizadas, si se quieren usar varias se separan con; es útil para un sitio donde se requiera autenticación web.

  • CHECKMETHODS=HEAD GET

    Nikto intenta detectar objetivos, como servidores web mediante el envío de peticiones donde se busca una URL, gracias a métodos HTTP usados. A veces si el servidor web que se escanea no usa estos métodos, puede dar problemas en la búsqueda, en tal caso podemos dejar solo la opción HEAD.

  • RFIURL=http://cirt.net/rfiinc.txt?
    Completa en un archivo de inclusión de archivos remotos. Este archivo debe contener una llamada a phpinfo (), donde Nikto buscará la salida de ese comando para determinar que el RFI tuvo éxito. Si se usa el archivo de cirt.net defecto, debe haber conectividad desde el servidor de destino a cirt.net
  • USERAGENT=Mozilla/5.00 (Nikto/@VERSION) (Evasions:@EVASIONS) (Test:@TESTID)

    Determina el user agent de nikto, una buena idea es cambiarlo, ya que la mayoría de los IDS, detectaría el escaneo con facilidad. Se puede cambiar por ejemplo a:

    USERAGENT=Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/4.0; InfoPath.2; SV1; .NET CLR 2.0.50727; WOW64)

    Se puede ver una lista de User-Agents en http://www.user-agents.org/

Opciones de uso:

  • -maxtime

    Máximo tiempo de ejecución por host, expresado en segundos (lo podemos cambiar a un valor más alto).

  • -config

    Si tenemos otro archivo de configuración, le podemos indicar la ruta.

  • -Cgidirs

    Escanea los directorios CGI. Con “all” escanea todos los directorios, o “none” para ninguno.

  • -Display

    Muestra las diferentes salidas por pantalla de nikto:

    • 1 – Mostrar las redirecciones. Esto mostrará todas las solicitudes que provocan una respuesta de “reorientar” desde el servidor.
    • 2 – Mostrar las cookies recibidas. Esto mostrará todas las cookies que fueron enviados por el host remoto.
    • 3 – Mostrar todas las respuestas 200/OK.
    • 4 – Mostrar URLs que requieren autenticación.
    • D – Salida de depuración. Mostrar resultados de depuración, que muestra la salida detallada e información adicional, como el contenido variable.
    • E – Muestra todos los errores HTTP. Mostrar detalles de cualquier error HTTP encontrado.
    • P – Imprimir el progreso a STDOUT. Mostrar informe de estado para STDOUT durante la prueba (set interval en nikto.conf).
    • V – Salida detallada. Mostrar resultados detallados.
  • -evasion

    Habilita la detección de intrusos mediante técnicas de evasión (se pueden usar varias opciones a la vez):

    • 1 – Random URI encoding (non-UTF8)
    • 2 – Directory self-reference (/./)
    • 3 – Premature URL ending.
    • 4 – Prepend long random string.
    • 5 – Fake parameter.
    • 6 – TAB as request spacer.
    • 7 – Change the case of the URL.
    • 8 – Use Windows directory separator (\).
  • -Format

    Define el formato de salida, en un archivo concreto con las diferentes extensiones:

    • csv – una lista separada por Separado.
    • htm – un informe HTML.
    • msf – Ingresar a Metasploit.
    • txt – un informe de texto.
    • xml – un informe XML.
  • -mutate

    Especifica una técnica de mutación. Una mutación se usa para combinar las pruebas o intentar adivinar valores. Estas técnicas pueden causar una enorme cantidad de acciones contra el objetivo. Cada número de referencia específica una acción:

    • 1 – Análisis de todos los archivos con todos los directorios raíz. Esto toma cada prueba y la divide en una lista de archivos y directorios. Una lista de exploración es creada mediante la combinación de cada archivo en cada directorio.
    • 2 – Adivina los nombres de archivo de contraseña. Toma una lista de nombres comunes de archivos de contraseñas como “passwd”, “pasar”, “contraseña” y extensiones de archivos como “txt”, “pwd”, “bak”, etc., y genera una lista de archivos para comprobar.
    • 3 – Enumera los nombres de usuario a través de Apache (/ ~ peticiones de tipo de usuario). Explota una mala configuración de UserDir de la configuración de Apache que permite descubrir a los nombres de usuario válidos.
    • 4 – Enumera los nombres de usuario a través de cgiwrap (/ cgi-bin/cgiwrap/ ~ peticiones de tipo usuario). Explota un fallo en cgiwrap que permite adivinar los nombres de usuario válidos.
    • 5 – Intento de forzar los nombres de subdominios. Tratará por fuerza bruta de conocer los nombres de dominio y se asumirá que el host dado (sin www) es el dominio principal.
    • 6 – Descubrimiento de nombres de directorio por fuerza bruta. Esta es la única opción de mutar que requiere un archivo para ser ejecutado y se pasa como parámetro a la opción
  • -mutate-options

    Se usará el fichero dado para tratar de adivinar los nombres de directorio. Las listas de los directorios comunes se pueden encontrar en el proyecto DirBuster OWASP.

  • -nocache

    Desactivar la caché de respuesta

  • -nossl

    No utilizar SSL para conectarse al servidor.

  • -no404

    Desactivar la comprobación 404 (archivo no encontrado)

  • -port

    Se especifica el puerto a escanear, se pueden usar varios: 80,443.

  • -list-plugins

    Listará todos los plugins que Nikto puede ejecutar contra objetivos y luego se cerrará sin realizar un análisis.

    perl nikto.pl -list-plugins |more
    
    Plugin: clientaccesspolicy
     clientaccesspolicy.xml - Checks whether a client access file exists, and if it 
    contains a wildcard entry.
     Written by Sullo, Dirk, Copyright (C) 2012 CIRT, Inc. and Dr. Wetter IT-Consulting
    
    Plugin: dictionary
     Dictionary attack - Attempts to dictionary attack commonly known directories/files
     Written by Deity, Copyright (C) 2009 CIRT Inc
    
    Plugin: httpoptions
     HTTP Options - Performs a variety of checks against the HTTP options returned 
    from the server.
     Written by Sullo, Copyright (C) 2008 CIRT Inc.
    […]
  • -Plugins

    Selecciona el plugin que se va a ejecutar: plugin-name [( parameter name [: parameter value ], [ other parameters ])]

  • -root

    Antepone el valor especificado al principio de cada solicitud. Esto es útil para aplicaciones de prueba o servidores web que tienen todos sus archivos bajo un directorio determinado.

  • -ssl

    Sólo probar SSL en los puertos especificados..

  • -Single

    Único modo de respuesta

  • -Tuning

    Se puede utilizar para reducir el número de pruebas realizadas contra un objetivo. Los tipos de prueba pueden ser controlados a nivel individual, especificando su identificador con -T (-Tuning opción). Por ejemplo, usamos las opciones 3 y 4 de tuning:

    nikto -h 192.168.1.2 -T 34
    

    Si se pasa una “x” como parámetro entonces esto va a negar todas las pruebas de los tipos siguientes a la x. Por ejemplo se hace la opción 3 y 4 pero no la opción 7 ni la b:

    nikto -h 192.168.0.1-T 34x7b
    

    Las opciones de Tuning son:

    • 0 – Subir Archivo. Exploits que permiten que un archivo sea cargado en el servidor de destino.
    • 1 – Archivo interesante / Visto en los registros. Un archivo o un ataque desconocido que se ha visto en los registros del servidor web.
    • 2 – Configuración errónea / Default File. Por defecto los archivos mal configurados o protegidos con una contraseña errónea.
    • 3 – Divulgación de información. Un recurso que revela información sobre un objetivo. Esto podría ser una ruta de sistema de archivos o un nombre de cuenta.
    • 4 – Inyección (XSS / Guión / HTML). Cualquier forma de inyección, incluyendo cross site scripting (XSS) o de contenido (HTML). Esto no incluye la inyección de comandos.
    • 5 – Recuperación de archivos remotos – Inside Root Web. Recursos que permite a los usuarios remotos recuperar los archivos no autorizados en el directorio raíz del servidor web.
    • 6 – Denegación de servicio. Recursos que permiten una denegación de servicio contra la aplicación de destino, el servidor web o el host.
    • 7 – Recuperación de archivos remoto. Permite a los usuarios remotos recuperar archivos no autorizados desde cualquier punto.
    • 8 – Ejecución de comandos / Shell remoto. Recursos permite al usuario ejecutar un comando del sistema o iniciar una shell.
    • 9 – Inyección SQL. Cualquier tipo de ataque que permite inyección SQL.
    • a – Bypass de Autenticación. Permite al cliente acceder a un recurso que no tiene acceso.
    • b – Identificación de Software. Software o programas instalados podrían ser identificados positivamente.
    • c – la inclusión de origen remoto. El software permite la inclusión remota de código fuente.
    • x – Invertir Opciones de optimización. (excluye las opciones a partir de la “x”)
  • -update Actualización de los plugins y bases de datos directamente desde cirt.net.
  • -vhost Especifica el encabezado de host que se enviará.

Una vez vistas las múltiples opciones de configuración, se recomienda jugar con las diversas opciones, siempre dentro de la legalidad y sobre recursos propios. En la próxima entrada veremos un pequeño ejemplo de funcionamiento.

Comments

  1. Me parece estupenda la herramienta, gracias!

Trackbacks

  1. […] jugar de forma casual contra desconocidos o entrenar contra una máquina | Visto en Incognitosis.Intro al escaner de web Nikto Breve manual en dos partes (la segunda aquí) para empezar a manejar uno de los escáneres de […]