Nikto, escáner de vulnerabilidades web

Nikto es una herramienta de escaneo de servidores web que realiza varias tareas, como la detección de configuraciones erróneas y vulnerabilidades en el servidor de destino, la detección de archivos en instalaciones estándar, el listado de la estructura del servidor, las versiones del servidor y las fechas de actualización, la comprobación de vulnerabilidades XSS, los ataques de fuerza bruta mediante informes de diccionario, txt, csv, html, etc.

La parte más importante de un sitio web es el servidor web. El servidor web se encarga de recibir las peticiones de los visitantes, entenderlas y responderlas. Por lo tanto, el servidor web es el primer componente de un sitio web que está expuesto a los ataques. Esto se debe a que los atacantes tienen como objetivo su servidor web debido a las vulnerabilidades de seguridad, la mala configuración y los problemas de seguridad relacionados con los certificados SSL. Cubriremos la herramienta de escaneo del servidor web y cómo usarla.

vulnerabilidades

Características de Nikto

  • Es de uso gratuito, de código abierto y se actualiza con frecuencia.
  • Se puede utilizar para escanear cualquier servidor web (Apache, Nginx, Lighttpd, Litespeed, etc.)
  • Escanea frente a más de 6700 vulnerabilidades conocidas y verificaciones de versión para más de 1250 servidores web (y sigue creciendo)
  • Escaneo de certificados SSL
  • Capacidad para escanear varios puertos en un servidor con varios servidores web en ejecución
  • Opción de escanear a través de un proxy y con autenticación http
  • Capacidad para especificar el tiempo máximo de escaneo, excluir ciertos tipos de escaneos y también se ven encabezados de informes inusuales.

Ventajas de Nikto

Una de las mejores cosas  es que puede exportar los datos a un formato que Metasploit pueda leer al escanear. Para hacer esto, use los comandos siguientes para escanear, pero agregue -Format msf + al final.

El formato nos permitirá relacionar rápidamente los datos con la explotación armada. Esto implica escanear el sitio de destino en busca de vulnerabilidades, primero identificando la superficie de ataque y luego buscando vulnerabilidades que puedan usarse como un exploit armado.

Dado que esta herramienta no es invisible, recomendamos usar esta herramienta con VPN o a través del navegador TOR para permanecer en el anonimato y proteger su identidad. Podemos decir con confianza que agregar esta herramienta al conjunto de herramientas de escaneo de seguridad del servidor web es esencial.

Otra gran ventaja es lo fácil que es instalarlo en múltiples plataformas de diferentes maneras, lo que le permite adaptarse a su caja de herramientas existente con poco esfuerzo. También es una gran herramienta para descubrir todo lo que puede saber sobre su servidor web, desde información sobre certificados SSL hasta vulnerabilidades de seguridad en el software del servidor web, así como para encontrar archivos peligrosos en su servidor web.

Instalación

Para instalarlo, se puede usar uno de los dos siguientes mecanismos: Instalarlo directamente desde la versión disponible en el sitio oficial de Nikto o bajar e instalar directamente con una herramienta como apt con los repositorios adecuados.

La primera alternativa es la mas directa debido a que es posible acceder al sitio oficial de Nikto y descargar la ultima versión disponible.

Para instalar Nikto, en realidad no hace falta nada especial, solamente descargar la ultima versión y tener Perl instalado, lo que viene por defecto en distribuciones basadas en Debian/Ubuntu y con esto será suficiente para acceder a las utilidades “core” de la herramienta.

Para el soporte de SSL es necesario tener instalada la librería OpenSSL y el modulo Net::SSLeay de Perl, ambas librerías se pueden instalar con apt-get:

apt-get install openssl libcrypt-ssleay-perl

Cuando ejecute el comando anterior, Nikto tendrá soporte SSL. Por otro lado, Nikto tiene una configuración local para LibWhishker que utiliza el archivo LW.pm ubicado en el directorio de plugins.

Comandos

A continuación se indica el uso de estas opciones y las técnicas empleadas para un escaneo eficiente.

uso básico

La opción -h es obligatoria y es allí donde se incluyen los objetivos del escaneo, en esta opción se puede especificar los siguientes valores

  • dirección IP: perl nikto.pl -h 127.0.0.1

  • dirección IP, especificando puerto: perl nikto.pl -h 127.0.0.1:80

  • dirección IP especificando puerto(s) y protocolo: perl nikto.pl -h 127.0.0.1 -p 443,80,8080 -ssl

  • dirección virtual host: perl nikto.pl -h localhost

  • dirección virtual host, especificando puerto: perl nikto.pl -h localhost.1:80

  • dirección virtual host, especificando puerto(s) y protocolo: perl nikto.pl -h localhost -p 443 -ssl

  • Especificando múltiples Objetivos: perl nikto.pl -h ficheroObjetivos

    • El fichero de objetivos contiene un objetivo por línea de comandos

  • Utilizando la entrada “greppable” de un comando nmap: nmap -p80 192.168.1.0/24 -oG – | perl nikto.pl -h –

 uso de servidores proxy

Si la máquina donde se ejecuta  pasa por medio de un proxy es posible establecer el puerto y el host del proxy:

perl nikto.pl -h localhost -p 8080 -useproxy proxyIp

Por otro lado, si se desea que esta opción sea persistente, es posible establecer estas características en el fichero de configuración nikto.conf en las entradas PROXY*

actualizando

Es posible actualizarlo con una conexión a Internet, de esta forma se mantiene el software con la ultima versión estable, lo que siempre es deseable y aconsejable:

perl nikto.pl -update

 características interactivas

Durante el proceso de escaneo, permite la interacción del usuario para diferentes acciones sobre la ejecución activa simplemente presionando determinadas teclas mientras se ejecuta el comando, se pueden consultar diferentes resultados que pueden ser útiles para obtener información detallada en un momento dado, las opciones contenidas en el programa para interacción con el usuario en el transcurso del escaneo son:

 Espacio: Estado actual del Escaneo.

./nikto.pl -h localhost -p 80

– Nikto v2.1.4

—————————————————————————

+ Target IP: 127.0.0.1

+ Target Hostname: localhost

+ Target Port: 80

+ Start Time: 2011-04-16 18:04:25

—————————————————————————

+ Server: Apache/2.2.16 (Ubuntu)

+ Apache/2.2.16 appears to be outdated (current is at least Apache/2.2.17). Apache 1.3.42 (final release) and 2.0.64 are also current.

+ ETag header found on server, inode: 2888976, size: 177, mtime: 0x49e4ef92a0de4

+ Allowed HTTP Methods: GET, HEAD, POST, OPTIONS

– STATUS: Completed 650 tests (~10% complete, 18 seconds left: currently in plugin ‘Nikto Tests’)

– STATUS: Completed 1390 tests (~22% complete, 11 seconds left: currently in plugin ‘Nikto Tests’)

 v: Activar o Desactivar el modo Verbose

./nikto.pl -h localhost -p 80

– Nikto v2.1.4

—————————————————————————

+ Target IP: 127.0.0.1

+ Target Hostname: localhost

+ Target Port: 80

+ Start Time: 2011-04-16 18:06:48

—————————————————————————

+ Server: Apache/2.2.16 (Ubuntu)

+ Apache/2.2.16 appears to be outdated (current is at least Apache/2.2.17). Apache 1.3.42 (final release) and 2.0.64 are also current.

+ ETag header found on server, inode: 2888976, size: 177, mtime: 0x49e4ef92a0de4

+ Allowed HTTP Methods: GET, HEAD, POST, OPTIONS

vV:Fri Apr 15 18:06:50 2011 – 404 for GET: /search?NS-query-pat=..\..\..\..\..\..\..\..\..\..\boot.ini

V:Fri Apr 15 18:06:50 2011 – 404 for GET: /..\..\..\..\..\..\temp\temp.class

V:Fri Apr 15 18:06:50 2011 – 400 for GET: /../../../../../../../../../../etc/passwd

V:Fri Apr 15 18:06:50 2011 – 404 for GET: /…/…/…/…/…/…/…/…/…/boot.ini

V:Fri Apr 15 18:06:50 2011 – 404 for GET: /………………/etc/passwd

V:Fri Apr 15 18:06:50 2011 – 404 for GET: /%3f.jsp

……………………………………….

 d: Activa o Desactiva el modo debug

./nikto.pl -h localhost -p 80

– Nikto v2.1.4

—————————————————————————

+ Target IP: 127.0.0.1

+ Target Hostname: localhost

+ Target Port: 80

+ Start Time: 2011-04-16 18:04:25

—————————————————————————

+ Server: Apache/2.2.16 (Ubuntu)

+ Apache/2.2.16 appears to be outdated (current is at least Apache/2.2.17). Apache 1.3.42 (final release) and 2.0.64 are also current.

+ ETag header found on server, inode: 2888976, size: 177, mtime: 0x49e4ef92a0de4

+ Allowed HTTP Methods: GET, HEAD, POST, OPTIONS

D:Fri Apr 15 18:09:45 2011 ‘Result Hash’ = {

‘connection’ => ‘Keep-Alive’,

‘whisker’ => {

‘protocol’ => ‘HTTP’,

‘lowercase_incoming_headers’ => 1,

‘http_space2’ => ‘ ‘,

‘stats_reqs’ => 204,

‘http_space1’ => ‘ ‘,

‘code’ => 404,

‘stats_syns’ => 6,

‘version’ => ‘1.1’,

‘data’ => «\n

\n\n\n

Not foun

\n

The requested URL /cgi-bin/ezboard.cgi was not found on this server.

\n


\n

Apache/2.2.16 (Ubuntu) Server at localhost Port 80

\n\n»,

‘uri’ => ‘/cgi-bin/ezboard.cgi’,

‘message’ => ‘Not Found’,

‘header_order’ => [

‘date’,

‘server’,

‘vary’,

‘content-length’,

‘keep-alive’,

‘connection’,

‘content-type’

],

‘http_data_sent’ => 1,

‘MAGIC’ => 31340,

‘http_eol’ => «\r\n»,

‘socket_state’ => 1

},

‘keep-alive’ => ‘timeout=15, max=96’,

‘date’ => ‘Fri, 15 Apr 2011 16:09:45 GMT’,

‘vary’ => ‘Accept-Encoding’,

‘content-length’ => 292,

‘content-type’ => ‘text/html; charset=iso-8859-1’,

‘server’ => ‘Apache/2.2.16 (Ubuntu)’

};

e: Activar o desactivar mensajes sobre reportes de error

p: Activar o desactivar mensajes sobre progreso de de reportes

r: Activar o desactivar mensajes sobre redirecciones en la pantalla

c: Activar o desactivar mensajes sobre cookies en la pantalla

o: Activar o desactivar mensajes sobre las peticiones correctas (retorno código http 200)

a: Activar o desactivar mensajes sobre intentos de autenticación

q: Finalizar la ejecución del programa

N: Continuar con el siguiente Host, si no existe, finalizar con la ejecución de programa.

P: Pausar la ejecución del comando

OPCIONES DE CONFIGURACION DEL ESCANEO

-config

Permite especificar un fichero de configuración del programa diferente al establecido por defecto en el directorio raíz del programa

./nikto.pl -h localhost -p 80 -config nikto.conf

-dbcheck

Permite validar la consistencia los ficheros de base de datos de nikto, de esta manera si alguno de los ficheros utilizados por el programa tiene un error de sintaxis, esta opción lo valida primero, estos ficheros se encuentran incluidos en el directorio plugins y son fácilmente identificados ya que se abrevian con las iniciales “db_”

./nikto.pl -h localhost -p 80 -dbcheck

–> Nikto Databases

Syntax Check: /home/adastra/UTILITIES/nikto-2.1.4/plugins/db_headers

67 entries

Syntax Check: /home/adastra/UTILITIES/nikto-2.1.4/plugins/db_httpoptions

12 entries

Syntax Check: /home/adastra/UTILITIES/nikto-2.1.4/plugins/db_multiple_index

29 entries

Syntax Check: /home/adastra/UTILITIES/nikto-2.1.4/plugins/db_server_msgs

255 entries

Syntax Check: /home/adastra/UTILITIES/nikto-2.1.4/plugins/db_subdomains

293 entries

Syntax Check: /home/adastra/UTILITIES/nikto-2.1.4/plugins/db_favicon

26 entries

Syntax Check: /home/adastra/UTILITIES/nikto-2.1.4/plugins/db_embedded

15 entries

Syntax Check: /home/adastra/UTILITIES/nikto-2.1.4/plugins/db_404_strings

29 entries

Syntax Check: /home/adastra/UTILITIES/nikto-2.1.4/plugins/db_outdated

1081 entries

Syntax Check: /home/adastra/UTILITIES/nikto-2.1.4/plugins/db_realms

154 entries

Syntax Check: /home/adastra/UTILITIES/nikto-2.1.4/plugins/db_tests

6448 entries

Syntax Check: /home/adastra/UTILITIES/nikto-2.1.4/plugins/db_variables

12 entries

Syntax Check: /home/adastra/UTILITIES/nikto-2.1.4/plugins/db_content_search

9 entries

-Display

Enseña en la salida estándar controles adicionales que habilitan información mas detallada sobre distintos tópicos. Esta opción habilita los mensajes que se han indicado anteriormente sobre los comandos interactivos, con la diferencia que esta vez, en lugar de ser interactivos, se especifican directamente en la ejecución del programa, de la misma forma que cada comando interactivo tenia un parámetro asociado (una letra) esta opción también espera como parámetro uno o varios argumentos que le permita activar o desactivar determinadas configuraciones de mensajes que se enseñan en la consola, estos argumentos son:

1: Activar los mensajes de re direcciones detectados por el programa

2: Activar los mensajes de cookies recibidas por el programa

3: Activar los mensajes de todas las respuestas correctas 200/OK

4: Activar los mensajes de todas las URL’s que requieren autenticación

D: Activar los mensajes relacionados con la ejecución del programa en modo Depuración

E: Activar los mensajes con todos los Errores HTTP

P: Activar los mensajes relacionados con el progreso del escaneo.

V: Activar los mensajes verbose.

Los resultados correspondientes de estos argumentos son equivalentes a los resultados de los comandos interactivos anteriormente detallados.

-evasion

Esta opción permite que el programa utilice la técnica de codificación/evasión de LibWhiskey, para conocer un poco más sobre esta librería, en una siguiente entrada se intentará profundizar un poco más. Esta opción toma como argumento un tipo de evasión que es listado a continuación:

  1. URI aleatoria codificada.

    ./nikto.pl -h localhost -p 80 -Display 1 -evasion 1

  2. Auto-referencia de directorio (/./)

./nikto.pl -h localhost -p 80 -Display 1 -evasion 2

  1. Finalización prematura de URL

./nikto.pl -h localhost -p 80 -Display 1 -evasion 3

  1. Concatenación de una cadena aleatoria larga

./nikto.pl -h localhost -p 80 -Display 1 -evasion 4

  1. Parámetro Falso

    ./nikto.pl -h localhost -p 80 -Display 1 -evasion 5

     

  2. TAB como peticion de Espaciador

    ./nikto.pl -h localhost -p 80 -Display 1 -evasion 6

     

  3. Cambia el tipo de la URL (mayuscula/minuscula)

./nikto.pl -h localhost -p 80 -Display 1 -evasion 7

  1. Usa separador de directorios de Windows (\)

./nikto.pl -h localhost -p 80 -Display 1 -evasion 7

A. Usar un retorno de carro (0x0d) como petición de espaciador
B. Usar un valor binario (0x0b) como petición de espaciador


-findonly / @@NONE

Solamente descubre puertos HTTP(s) y no ejecuta ningún escaneo de seguridad, con esto intentará conectarse por HTTP(S) y reportará sobre la respuesta del servidor. Esta opción se encuentra deprecada desde la versión 2.1.4 en lugar de esto, se debe utilizar la opción -Plugin con el parámetro @@NONE

./nikto.pl -h localhost -findonly

– Nikto v2.1.4

—————————————————————————

+ Server: http://localhost:80 Apache/2.2.16 (Ubuntu)

—————————————————————————

./nikto.pl -h localhost -Plugin @@NONE

– Nikto v2.1.4

—————————————————————————

+ Server: http://localhost:80 Apache/2.2.16 (Ubuntu)

—————————————————————————

 -output -o:

Con esta opción es posible generar un fichero donde se almacenan los resultados del escaneo realizado, de esta forma todo lo que sale por la consola, también es redirigido al fichero especificado como argumento. Esta opción frecuentemente se utiliza en conjunto con la opción -Format

./nikto.pl -h localhost -o /home/texto.txt

 Aunque es valida para generar ficheros de salida, también es empleada para conectarse con MetaSploit, sin embargo requiere especificarse un servicio RPC donde MetaSploit se encontrará esperando conexiones. Para conocer las características basicas de Metasploit ver una entrada anterior sobre este framework: https://thehackerway.wordpress.com/2011/03/11/comandos-y-conceptos-basicos-metasploit-framework/

-no404

Desactiva el chequeo de recursos no encontrados (file not found 404), aunque desactivando esta característica se podrán generar más falsos positivos, es la mejor opción a utilizar en conexiones lentas o dispositivos con capacidades de computo limitadas como por ejemplo un dispositivo móvil.

./nikto.pl -h localhost -no404

 -id

En los casos en los que el servidor web requiera autenticación para algún recurso se recurre a la opción id que incluye un usuario y una clave en el formato id:password en el caso de que se disponga de dicha información, en otro caso, se debe utilizar una técnica de mutación algo de lo que se hablará mas adelante.

 -nolookup

Indica que el programao no debe realizar ningún lookup por nombre de dominio (DNS), lo que en muchos casos es útil para no dejar en evidencia el origen de la petición, en el caso de que el escaneo se este realizando de forma anónima, (como por ejemplo con el uso de Tor). Por esta razón es importante no especificar en la opción -h ningún nombre de dominio, host virtual o nombre de máquina, en cualquier caso, siempre se debe de indicar una dirección IP en otro caso el comando lanzará un error:

./nikto.pl -h localhost -nolookup

– Nikto v2.1.4

—————————————————————————

+ ERROR: -skiplookup set, but given name

./nikto.pl -h 127.0.0.1 -nolookup

– Nikto v2.1.4

—————————————————————————

+ Target IP: 127.0.0.1

+ Target Hostname: 127.0.0.1

+ Target Port: 80

+ Start Time: 2011-04-16 23:52:49

—————————————————————————

-nocache

Desactiva la cache de respuestas

./nikto.pl -h localhost -nocache

 -nointeractive

Desactiva las funciones de interacción con el usuario indicadas en párrafos anteriores.

./nikto.pl -h localhost -nointeractive

 -timeout

Especifica el tiempo en segundos que esperará el programa antes de finalizar una petición por tiempo agotado, por defecto son 2 segundos cuando no se especifica un valor diferente

./nikto.pl -h localhost -timeout 3

 -nossl

Desactiva el uso de SSL para conectarse al servidor objetivo, lo que en algunos casos resulta ser una mala idea.

./nikto.pl -h localhost -nossl

 -ssl

Solo prueba conexiones SSL en los puertos especificados.

./nikto.pl -h localhost -port 443,8080 -ssl

 -vhost

Especifica un virtual host para incluir en el header de cada petición.

./nikto.pl -h localhost -port 80 -vhost google.com

 -Pause

Número de segundos que se deben de esperar entre cada test.

./nikto.pl -h localhost -Pause 10

 -Format

Esta opción nos permite especificar un formato de salida para el reporte generado por el escaneo, esta opción debe de ir acompañada con la opción -o (-output) para especificar un directorio de salida, los argumentos disponibles de la opción Format son:

./nikto.pl -h localhost -Format txt -o /home/texto.txt

./nikto.pl -h localhost -Format csv -o /home/csv.csv

./nikto.pl -h localhost -Format htm -o /home/pagina.html

msf: Conexión con servicio RPC de metasploit y registra los resultados del escaneo allí.

./nikto.pl -h localhost -evasion 1 -Format msf -o msf:password@http://127.0.0.1:55553/RPC2

./nikto.pl -h localhost -Format xml -o /home/report.xml

 -Single

Se trata de una opción interesante que permite ejecutar solamente una petición contra el objetivo, una vez se indica esta opción, el programa comenzará a solicitar argumentos obligatorios para la petición de forma interactiva, asumiendo algunos valores por defecto para dicha petición, una vez, esta es ejecutada, Nikto retornará un informe con: Detalles de la conexión, Headers de la Petición y Contenido de la respuesta.

./nikto.pl -Single

——————————————– Nikto 2.1.4

——————————————– Single Request Mode

Hostname or IP: 127.0.0.1

Port (80):

URI (/):

SSL (0):

Proxy host:

…………………………………………………….

——————————————– Done with questions

Host Name: localhost.localdomain

Host IP: 127.0.0.1

HTTP Response Code: 200

——————————————– Connection Details

Connection: Keep-Alive

Host: 127.0.0.1

User-Agent: Mozilla/4.75 (Nikto/2.1.4

data:

force_bodysnatch: 0

force_close: 1

force_open: 0

host: 127.0.0.1

…………………………………………………….

——————————————– Response Headers

Accept-Ranges: bytes

Connection: Keep-Alive

Content-Length: 177

Content-Type: text/html

Date: Fri, 15 Apr 2011 22:12:24 GMT

ETag: «2c1510-b1-49e4ef92a0de4»

Keep-Alive: timeout=15, max=100

Last-Modified: Sat, 12 Mar 2011 20:32:11 GMT

Server: Apache/2.2.16 (Ubuntu)

Vary: Accept-Encoding

code: 200

——————————————– Response Content

It works!

This is the default web page for this server.

The web server software is running but no content has been added, yet.

 

 -Plugin

Selecciona cuales plugins se ejecutarán en los objetivos especificados, muchas opciones disponibles (como la opción mutate) se han depreciado para ser utilizadas en forma de Plugin. Los plugins son simplemente entradas de texto que indican un conjunto de operaciones realizadas por el programa, todos los Plugins se encuentran incluidos en el directorio Plugins y se pueden consultar por medio del comando –list-plugins, existen dos valores especiales que permiten usar todos los Plugins o ninguno son: @@ALL y @@NONE respectivamente.

./nikto.pl -h localhost -Plugin @ALL

Ciberseguridad en móviles (celulares)
Cursos de Ciberseguridad
Protección en Ordenadores
Ir arriba