Demostración en vídeo del post
Nuclei es una herramienta que permite ejecutar pruebas de pentesting sobre aplicaciones web y otros servicios pero lo que la convierte en una utilidad realmente interesante es su capacidad de reducir al máximo los falsos positivos. Para conseguir ésto, funciona con un modelo basado en plantillas en las que es necesario declarar cómo se deben realizar las peticiones y qué debería haber en la respuesta devuelta por el servidor para determinar que existe una vulnerabilidad, mala configuración o fuga de información. El binario de Nuclei por si solo «no hace nada», es decir, la potencia de la herramienta se encuentra en las plantillas que se le pasan por parámetro a dicho binario. Se trata de una utilidad que dadas sus capacidades y facilidad de uso, se puede integrar perfectamente en un pipeline orientado al DevSecOps, tal como se explica en el curso de técnicas y herramientas aplicadas a DevSecOps disponible en la plataforma de The Hacker Way
Para crear las plantillas no hace falta aprender un lenguaje de programación ni nada parecido, basta con conocer la sintaxis de una estructura YAML y las posibles secciones/palabras reservadas que componen una plantilla válida. No es un proyecto reciente y de hecho, cuenta con una comunidad de personas que colaboran en la mejora de este framework desde hace algún tiempo, tanto es así que a la fecha de redactar este post existe un repositorio con más de 3600 plantillas que se pueden utilizar libremente.
La instalación de la herramienta consiste en simplemente descargar el binario de Nuclei que se encuentra disponible en la sección de releases y luego, se puede ejecutar con una serie de parámetros en donde como mínimo, se debe indicar una o varias URL que serán los objetivos del ataque y una o varias plantillas en formato YAML, las cuales procesará Nuclei para verificar si las condiciones definidas en ellas se cumplen en las respuestas devueltas por el servidor.
La primera vez que se ejecuta la herramienta, lo primero que hace es descargar las plantillas desarrolladas por la comunidad y almacenar dichos ficheros en $HOME/nuclei-templates. A partir de este punto, se puede lanzar la herramienta utilizando cualquiera de las plantillas ya existentes o con una nueva.
Hay varias opciones que son interesantes a la hora de ejecutar la herramienta y simplemente leyendo la ayuda se pueden entender fácilmente, sin embargo las más importantes son las siguientes:
-target / -u: Permite indicar una URL sobre la que se van a realizar las pruebas.
-list / -l: Permite indicar un listado de objetivos en un fichero de texto, una URL por cada línea en el fichero.
-automatic-scan / -as: Ejecuta un escaneo automático utilizando Wappalyzer para la detección de la arquitectura del objetivo.
-templates / -t: Listado de plantillas o de directorios que contienen plantillas separado por comas.
-tl: Simplemente lista todas las plantillas que detecta nuclei. Si se ejecuta la herramienta sin la opción «-templates» enseñará las plantillas de la comunidad que como se ha indicado antes, se encuentran en el directorio $HOME/nuclei-templates.
-validate: Valida las plantillas que se han enviado con la opción «-templates» para comprobar que los ficheros YAML se encuentran bien formados.
-et / -exclude-templates: Listado de plantillas o de directorios que contienen plantillas que debe ser ignorado por nuclei separado por comas.
-s / –severity: Indica que las plantillas deben ser ejecutadas en función del campo «severity» de la plantilla, en donde los posibles valores pueden ser: info, low, medium, high, critical, unknown
-o / -output: Fichero de salida en donde se almacenan los problemas/vulnerabilidades descubiertos por la herramienta.
-sresp / -store-resp: Almacena todas las peticiones y respuestas que ha gestionado nuclei en el directorio indicado con la opción «-output».
-silent: No enseña trazas, solamente los problemas descubiertos.
-config: Permite indicar un fichero de configuración personalizado para modificar el comportamiento por defecto de la herramienta.
-update: Actualizar la herramienta
-up / -update-templates: Actualizar las plantillas de la comunidad a la versión más reciente.
-duc / -disable-update-check: Por defecto Nuclei verifica si las plantillas locales se encuentran actualizadas, con esta opción se deshabilita este comportamiento.
Existen muchas más opciones disponibles, el listado anterior solamente incluye algunas que son habituales cuando se ejecuta ésta herramienta. En todo caso, al leer la salida que enseña el comando «nuclei -h» se pueden ver todas las opciones disponibles y no es muy difícil entender para qué sirven. Por otro lado, hay que tener en cuenta que las opciones por defecto de la herramienta se pueden personalizar o bien manipulando el fichero de configuración ubicado en $HOME/.config/nuclei/config.yaml o indicando uno nuevo.
A continuación, en las siguientes imágenes se enseñan algunos ejemplos de uso, aunque puedes ver el vídeo en YouTube que se encuentra al principio de este post para ver los resultados que genera.
Modo básico
Filtros basados en la severidad de los defectos
Ejecución en modo «silencioso».
Filtrado de plantillas por severidad y tags
Nuclei pretende cubrir una necesidad que es evidente cuando se realiza pentesting web: personalizar y orientar las pruebas a las características concretas de la aplicación que se está auditando. Hay que tener en cuenta que cada aplicación web tiene sus propios modos de funcionamiento y no se puede pretender que herramientas de uso general sean capaces de detectar defectos específicos que se encuentran expuestos en la lógica de negocio de la aplicación, se hace necesario un enfoque manual para detectar fallos de forma mucho más precisa y esto lo han entendido los creadores de esta herramienta ya que es en ese punto donde precisamente Nuclei puede ser de gran ayuda gracias a la «magia» de las plantillas. No obstante y aunque las plantillas de la comunidad pueden ser de gran utilidad, para sacarle un verdadero provecho a esta herramienta se debe conocer la aplicación web a auditar y crear plantillas dirigidas a ella.
Si este post te ha gustado, deja un comentario y comparte. Si ha sido de vuestro interés, escribiré otro en el que explicaré cómo crear plantillas en Nuclei, algo que te vendrá bien para ejecutar pruebas de pentesting sobre cualquier tipo de aplicación.
Un saludo y Happy Hack!
Adastra.