Bienvenidos a un nuevo post en ByteMind. En este caso les traigo un escáner de vulnerabilidades web llamado Nikto.
Índice
¿Qué es Nikto?
Nikto es un escáner de vulnerabilidades Open Source escrito en el lenguaje Perl, siendo publicado por primera vez en el año 2011. Proporciona la capacidad de buscar vulnerabilidades en servidores web. Este escáner busca fichero de configuración visibles, ficheros peligrosos públicos en el servidor e incluso es capaz de capturar e imprimir las cookies obtenidas durante el proceso.
Además es capaz de detectar más de 6700 verificaciones por archivos o scripts potencialmente peligrosos, realiza alrededor de 1250 pruebas para detectar problemas en versiones desactualizadas de servidores y cerca de 300 problemas específicos a versiones concretas de servidores web.
Instalación de Nikto
Para aquellos usuarios que utilicen Kali, como es mi caso, esta herramienta ya viene instalada por defecto. Si no es su caso, puedes instalar la misma en servidores linux basados en debian con el siguiente comando
1 2 3 |
sudo apt-get update sudo apt-get upgrade sudo apt-get install nikto -y |
O, si lo prefieren pueden levantar un contenedor en docker tal como indica en su página de github. Aunque os dejo los comandos para realizarlo
1 2 3 4 5 6 |
# clonamos el repositorio git clone https://github.com/sullo/nikto.git # accedemos a la carpeta recien creada cd nikto # y construimos la imagen docker build -t sullo/nikto . |
Como utilizar nikto
Como en todas las herramientas dispone de una ayuda completa que muestra la información de cada una de las opciones disponibles
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# nikto -h Option host requires an argument -config+ Use this config file -Display+ Turn on/off display outputs -dbcheck check database and other key files for syntax errors -Format+ save file (-o) format -Help Extended help information -host+ target host/URL -id+ Host authentication to use, format is id:pass or id:pass:realm -list-plugins List all available plugins -output+ Write output to this file -nossl Disables using SSL -no404 Disables 404 checks -Plugins+ List of plugins to run (default: ALL) -port+ Port to use (default 80) -root+ Prepend root value to all requests, format is /directory -ssl Force ssl mode on port -Tuning+ Scan tuning -timeout+ Timeout for requests (default 10 seconds) -update Update databases and plugins from CIRT.net -Version Print plugin and database versions -vhost+ Virtual host (for Host header) + requires a value Note: This is the short help output. Use -H for full help text. |
Y ahora vamos a ver como podemos utilizar el mismo.
Para hacer un simple escaneo de una ip y un puerto lo haríamos con el siguiente comando:
1 |
nikto -h <Hostname/IP> -p <port> |
Y podemos verlo en acción en la siguiente captura
CheatSheet
Os dejo a continuación una serie de comando útiles para su uso que puede ser muy útil en según que ocasiones.
Escaneo de varios puertos
1 |
nikto -h <Hostname/IP> -port <port>,<port> |
Especificar un tiempo máximo de escaneo
1 |
nikto -h <Hostname/IP> -maxtime <número en segundos> |
Forzar el uso de ssl
1 |
nikto -h <Hostname/IP> -ssl |
Deshabilitar el uso de ssl
1 |
nikto -h <Hostname/IP> -nossl |
Evitar mostrar errores 404
1 |
nikto -h <Hostname/IP> -no404 |
Ignorar ciertos códigos de estado 30x,40x,50x
1 |
nikto -h <Hostname/IP> -IgnoreCode <Código de estado> |
Especificar la cabecera del host
1 |
nikto -h <Hostname/IP> -vhost |
Exportar los resultados a fichero
1 |
nikto -h <Hostname/IP> -output <filename> |
Escanear a través de un proxy
1 |
nikto -h <Hostname/IP> -userproxy <Proxy IP> |
Indicar los datos de autenticación
1 |
nikto -h <Hostname/IP> -id <id:pass> or <id:pass:realm> |
Actualizar los plugins y la base de datos
1 |
nikto -update |
Comprobar el estado de la base de datos
1 |
nikto -h <Hostname/IP> -dbcheck |
Especificar un fichero de configuración
1 |
nikto -h <Hostname/IP> -config <nikto.conf> |
Deshabilitar la resolución de nombres
1 |
nikto -h <Hostname/IP> -nolookup |
Deshabilitar la respuesta en caché
1 |
nikto -h <Hostname/IP> -nocache |
Deshabilitar características que requieran interacción por parte del usuario
1 |
nikto -h <Hostname/IP> -nointeractive |
Mostrar datos concretos
1 |
nikto -h <Hostname/IP> -Display <Option> |
- Mostrar redirecciones
- Mostrar cookies
- Mostrar respuestas con código 200
- Mostrar URL que requieren autenticación
- Activar el debug en la salida
- Errores HTTP
- Imprimir el progreso en STDOUT
- Salida de depuración de IP y nombre de host
- Salida detallada (modo verbose)
Opciones de evasion
1 |
nikto -h <Hostname/IP> -evasion <Option> |
- codificación aleatoria de URI
- Auto-referencia de directorio /./
- URL final prematura
- Anteponer una cadena aleatoria larga
- parámetro falso
- TAB como espaciador de solicitud
- Cambiar el caso de la URL
- Separador de directorio de Windows usado \
- Utilice un retorno de carro (0x0d) como espaciador de solicitud
- Utilice el valor binario (0x0b) como espaciador de solicitud
Especificar el formato del fichero de salida
1 |
nikto -h <Hostname/IP> -Format <Option> |
- csv -> Comma Separated Value
- htm -> formato HTML
- msf+ -> formato utilizado por Metasploit
- nbe -> formato utilizado por Nessus
- txt -> texto plano
- xml -> formato XML
Tuning
1 |
nikto -h <Hostname/IP> -Tuning <Option> |
- 1 -> archivo interesante
- 2 -> configuración incorrecta
- 3 -> Divulgación de información
- 4 -> Inyección (XSS / Script / HTML)
- 5 -> Recuperación remota de archivos: internal web root
- 6 -> Denegación de servicio
- 7 -> Recuperación remota de archivos: todo el servidor
- 8 -> Ejecución de comandos – Shell remoto
- 9 -> inyección SQL
- 0 -> carga de archivos
- a -> bypass de autenticación
- b -> Identificación del software
- c -> Inclusión de fuente remota
- x -> Opción de sintonización inversa
Mutate
1 |
nikto -h <Hostname/IP> -mutate <Option> |
- Testear todos los ficheros en el directorio raíz
- Adivina los nombres de los archivos con contraseña
- Enumerar nombres de usuario a través de apache
- Enumerar nombres de usuario a través de cgiwrap
- Intento de nombres de subdominios por fuerza bruta
- Intente adivinar los nombres de directorio de un archivo.
Hasta aquí todo por hoy. Espero que les sea útil en sus auditorías y cualquier duda, idea o aportación pueden realizarla en la sección de comentarios.