martes, 3 de septiembre de 2013

Conceptos Básicos de Nikto – Técnicas de escaneo de Servidores y Aplicaciones Web



CONCEPTOS BASICOS DE NIKTO

 Nikto es una herramienta de escaneo de servidores web que se encarga de efectuar diferentes tipos de actividades tales como, detección de malas configuraciones y vulnerabilidades en el servidor objetivo, detección de ficheros en instalaciones por defecto, listado de la estructura del servidor, versiones y fechas de actualizaciones de servidores, tests de vulnerabilidades XSS, ataques de fuerza bruta por diccionario, reportes en formatos txt, csv, html, etc.
Nikto es un proyecto robusto que lleva varios años en desarrollo y se encuentra en constante evolución. Unas de las características mas interesantes de esta herramienta son la posibilidad de generar reportes en distintos formatos, la integración con LibWhisker (Anti-IDS), integración con Metasploit, entre otras.
El proyecto se encuentra ubicado en: http://cirt.net/nikto2 y se distribuye bajo licencia GNU/GPL lo que indica que el código se encuentra a disposición publica, para usar, modificar y/o distribuir.

Instalación de Nikto

Para instalar Nikto 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 adecuada, 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, 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
Una vez ejecutado el comando anterior, Nikto tendrá soporte para SSL. Por otro lado, Nikto cuenta con una configuración local para LibWhishker que utiliza el fichero LW.pm ubicado en el directorio plugins.

USO DE NIKTO

Nikto cuenta con la siguiente lista de opciones:
perl nikto.pl -H
Options:
-ask+ Whether to ask about submitting updates
yes Ask about each (default)
no Don’t ask, don’t send
auto Don’t ask, just send
-config+ Use this config file
-Cgidirs+ Scan these CGI dirs: “none”, “all”, or values like “/cgi/ /cgi-a/”
-dbcheck Check database and other key files for syntax errors
-Display+ Turn on/off display outputs:
1 Show redirects
2 Show cookies received
3 Show all 200/OK responses
4 Show URLs which require authentication
D Debug output
E Display all HTTP errors
P Print progress to STDOUT
S Scrub output of IPs and hostnames
V Verbose output
-evasion+ Encoding technique:
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 (\)
A Use a carriage return (0x0d) as a request spacer
B Use binary value 0x0b as a request spacer
-Format+ Save file (-o) format:
csv Comma-separated-value
htm HTML Format
msf+ Log to Metasploit
nbe Nessus NBE format
txt Plain text (default if not specified)
xml XML Format
-host+ Target host
-Help Extended help information
-id+ Host authentication to use, format is id:pass or id:pass:realm
-list-plugins List all available plugins, perform no testing
-mutate+ Guess additional file names:
1 Test all files with all root directories
2 Guess for password file names
3 Enumerate user names via Apache (/~user type requests)
4 Enumerate user names via cgiwrap (/cgi-bin/cgiwrap/~user type requests)
5 Attempt to brute force sub-domain names, assume that the host name is the parent domain
6 Attempt to guess directory names from the supplied dictionary file
-mutate-options Provide information for mutates
-nocache Disables the response cache
-nointeractive Disables interactive features
-nolookup Disables DNS lookups
-nossl Disables the use of SSL
-no404 Disables nikto attempting to guess a 404 page
-output+ Write output to this file
-port+ Port to use (default 80)
-Pause+ Pause between tests (seconds, integer or float)
-Plugins+ List of plugins to run (default: ALL)
-root+ Prepend root value to all requests, format is /directory
-ssl Force ssl mode on port
-Single Single request mode
-timeout+ Timeout (default 2 seconds)
-Tuning+ Scan tuning:
1 Interesting File / Seen in logs
2 Misconfiguration / Default File
3 Information Disclosure
4 Injection (XSS/Script/HTML)
5 Remote File Retrieval – Inside Web Root
6 Denial of Service
7 Remote File Retrieval – Server Wide
8 Command Execution / Remote Shell
9 SQL Injection
0 File Upload
a Authentication Bypass
b Software Identification
c Remote Source Inclusion
x Reverse Tuning Options (i.e., include all except specified)
-useproxy Use the proxy defined in nikto.conf
-update Update databases and plugins from CIRT.net
-vhost+ Virtual host (for Host header)
-Version Print plugin and database versions
+ requires a value
A continuación se indica el uso de estas opciones y las técnicas empleadas para un escaneo eficiente con Nikto.
uso básico de Nikto
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 linea
  • Utilizando la entrada “greppable” de un comando nmap: nmap -p80 192.168.1.0/24 -oG – | perl nikto.pl -h -
 uso de proxys
Si la máquina donde se ejecuta Nikto 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 Nikto
Es posible actualizar Nikto 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, Nikto 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 obtener diferentes resultados que pueden ser útiles para obtener información detallada en un momento dado, las opciones contenidas en Nikto 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\n404 Not Found\n\n

Not Found

\nThe 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 re direcciones 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 de Nikto
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 de Nikto 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 Nikto 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 de Nikto, 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 Nikto
2: Activar los mensajes de cookies recibidas por Nikto
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 de Nikto 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 Nikto 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 depreciada 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 está 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:http://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 Nikto 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á Nikto 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, Nikto 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 en Nikto (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 Nikto, 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.
Miguel

No hay comentarios.: