Wapiti — comprobación de vulnerabilidades del sitio por cuenta propia

Wapiti — comprobación de vulnerabilidades del sitio por cuenta propia
En el anterior el artículo hemos hablado de Nemesida WAF Free — una herramienta gratuita para proteger sitios web y API de ataques cibernéticos, y en esta ocasión hemos decidido hacer una reseña sobre un popular escáner de vulnerabilidades Wapiti.

El escaneo de un sitio web en busca de vulnerabilidades es una medida necesaria que, junto con el análisis del código fuente, permite evaluar el nivel de su protección contra amenazas de compromisos. El escaneo de un recurso web se puede realizar utilizando herramientas especializadas.

Nikto, W3af (escrito en Python 2.7, cuyo soporte ha finalizado) o Arachni (que no se apoya más desde febrero) son las soluciones más populares disponibles en el segmento gratuito. Por supuesto, hay otras, como Wapiti, en la que hemos decidido enfocarnos.

Wapiti trabaja con los siguientes tipos de vulnerabilidades:

  • divulgación de archivos (locales y remotos, fopen, readfile);
  • inyecciones (PHP / JSP / ASP / inyecciones SQL y inyecciones XPath);
  • XSS (cross-site scripting) (reflejado y persistente);
  • detección y ejecución de comandos (eval(), system(), passthru());
  • inyecciones CRLF (división de respuestas HTTP, fijación de sesión);
  • inyección XXE (XML external entity);
  • SSRF (falsificación de solicitudes en el servidor);
  • uso de archivos potencialmente peligrosos conocidos (gracias a la base de datos de Nikto);
  • configuraciones débiles de .htaccess que pueden ser eludidas;
  • la existencia de archivos de copia de seguridad que revelan información confidencial (divulgación de código fuente);
  • Shellshock;
  • redirecciones abiertas;
  • métodos HTTP no estándar que pueden estar permitidos (PUT).

Características:

  • soporte para proxy HTTP, HTTPS y SOCKS5;
  • autenticación utilizando múltiples métodos: Basic, Digest, Kerberos o NTLM;
  • posibilidad de limitar el ámbito de escaneo (dominio, carpeta, página, URL);
  • eliminación automática de uno de los parámetros en la URL;
  • múltiples medidas de precaución contra ciclos de escaneo infinitos (ejemplo: ifor, límite de valores para el parámetro);
  • posibilidad de establecer prioridad para explorar URLs (incluso si no están en el ámbito de escaneo);
  • posibilidad de excluir algunas URLs del escaneo y ataques (por ejemplo: URL de cierre de sesión);
  • importación de cookies (obteniéndolas con la herramienta wapiti-getcookie);
  • posibilidad de activar/desactivar la verificación de certificados SSL;
  • posibilidad de extraer URLs de JavaScript (intérprete JS muy simple);
  • interacción con HTML5;
  • varios métodos para controlar el comportamiento y las limitaciones del crawler;
  • configuración del tiempo máximo para el proceso de escaneo;
  • adición de algunos encabezados HTTP personalizables o configuración de un User-Agent personalizado.

Características adicionales:

  • generación de informes de vulnerabilidades en varios formatos (HTML, XML, JSON, TXT);
  • suspensión y reanudación del escaneo o ataque (mecanismo de sesión utilizando bases de datos SQLite3);
  • resaltado en la terminal para destacar vulnerabilidades;
  • diferentes niveles de registro;
  • una forma rápida y sencilla de activar/desactivar módulos de ataque.

Instalación

La versión actual de Wapiti se puede instalar de 2 maneras:

  • descargar la fuente desde el sitio oficial del sitio web y ejecutar el script de instalación, tras haber instalado Python3;
  • usando el comando pip3 install wapiti3.

Después de esto, Wapiti estará listo para funcionar.

Trabajo con la herramienta

Para demostrar el funcionamiento de Wapiti, utilizaremos un entorno especialmente preparado: sites.vulns.pentestit.ru (recurso interno), que contiene varias vulnerabilidades (Inyección, XSS, LFI/RFI) y otros defectos de aplicaciones web.

La información se proporciona exclusivamente con fines informativos. ¡No infrinja la ley!

El comando base para ejecutar el escáner:

# wapiti -u <target> <options>

Hay una ayuda bastante detallada con una enorme cantidad de opciones de ejecución, por ejemplo:

—scope — área de aplicación
Si se indica el parámetro scope junto con la URL para escanear, se puede regular el ámbito del escaneo del sitio, especificando tanto una página individual como todas las páginas que se puedan encontrar en el sitio.

-s y -x — parámetros para agregar o eliminar URL específicas. Estos parámetros son útiles cuando es necesario agregar o eliminar una URL específica del proceso de escaneo.

—skip — el parámetro especificado con esta clave será escaneado, pero no será atacado. Es útil si hay algunos parámetros peligrosos que es mejor excluir durante el escaneo.

—verify-ssl — habilitar o deshabilitar la verificación del certificado.
El escáner Wapiti es modular. Sin embargo, para activar módulos específicos, de los que se conectan automáticamente durante el funcionamiento del escáner, se debe usar la clave -m y enumerarlos a través de comas. Si no se utiliza la clave, todos los módulos estarán activos por defecto. En la opción más simple, se verá de la siguiente manera:

# wapiti -u http://sites.vulns.pentestit.ru/ -m sql,xss,xxe

Este ejemplo de uso significa que solo utilizaremos los módulos SQL, XSS y XXE al escanear el objetivo. Además, se puede filtrar el funcionamiento de los módulos según el método deseado. Por ejemplo -m “xss: get, blindsql: post, xxe: post”. En este caso, el módulo xss se aplicará a las solicitudes enviadas mediante el método GET, mientras que el módulo blibdsql se aplicará a las solicitudes POST, etc. Además, si algún módulo que se incluyó en la lista no fue necesario durante el escaneo o tarda demasiado en ejecutarse, al presionar Ctrl+C se puede omitir el uso del módulo actual, eligiendo la opción correspondiente en el menú interactivo.

Wapiti admite el envío de solicitudes a través de un servidor proxy usando la clave -p y la autenticación en el sitio objetivo a través del parámetro -a. También se puede especificar el tipo de autenticación: Basiс, Digest, Kerberos y NTLM. Para los últimos dos puede ser necesaria la instalación de módulos adicionales. Además, se pueden insertar en las solicitudes cualquier encabezado (incluyendo un User-Agent) y mucho más.

Para utilizar la autenticación se puede emplear la herramienta wapiti-getcookie. Con ella formamos cookies, que Wapiti usará durante el escaneo. La formación cookies se realiza con el comando:

# wapiti-getcookie -u http://sites.vulns.pentestit.ru/login.php -c cookie.json

Durante el trabajo en modo interactivo, respondemos a preguntas e indicamos la información necesaria, como: inicio de sesión, contraseña y demás:

Wapiti — comprobación de vulnerabilidades del sitio por cuenta propia

Al final, recibimos un archivo en formato JSON. Otra opción es agregar toda la información necesaria a través del parámetro -d:

# wapiti-getcookie - http://sites.vulns.pentestit.ru/login.php -c cookie.json -d "username=admin&password=admin&enter=submit"

El resultado será similar:

Wapiti — comprobación de vulnerabilidades del sitio por cuenta propia

Al considerar la funcionalidad principal del escáner, la solicitud final para realizar pruebas en la aplicación web en nuestro caso fue:

# wapiti --level 1 -u http://sites.vulns.pentestit.ru/ -f html -o /tmp/vulns.html -m all --color -с cookie.json --scope folder --flush-session -A 'Pentestit Scans' -p http://proxy.office.pentestit.ru:3128

donde, entre otros parámetros:

-f y -o — formato y ruta para guardar el informe;

-m — conexión de todos los módulos — no recomendado, ya que afectará el tiempo de prueba y el tamaño del informe;

—color — resaltar las vulnerabilidades encontradas según su criticidad según la versión de Wapiti;

— el número de paquetes, después de los cuales — uso de un archivo con cookies, generado con ayuda de wapiti-getcookie;

—scope — elección del objetivo para el ataque. Al elegir la opción folder se escaneará y atacará cada URL, comenzando por la base. La URL base debe tener una barra inclinada (sin el nombre del archivo);

—flush-session — permite realizar un nuevo escaneo, el cual no tomará en cuenta los resultados anteriores;

-A — propio User-Agent;

-p — dirección del servidor proxy, si es necesario.

Un poco sobre el informe

El resultado del escaneo se presenta en forma de un informe detallado sobre todas las vulnerabilidades encontradas en formato de página HTML, de manera clara y fácil de entender. En el informe se indicarán las categorías y el número de vulnerabilidades encontradas, su descripción, solicitudes, comandos para curl y consejos sobre cómo cerrarlas. Para facilitar la navegación, se añadirá un enlace a los nombres de las categorías, haciendo clic en el cual se puede acceder a ellas:

Wapiti — comprobación de vulnerabilidades del sitio por cuenta propia

Una desventaja significativa del informe es la falta de un mapa del aplicativo web, sin el cual no se entenderá si todas las direcciones y parámetros han sido analizados. También existe la posibilidad de falsos positivos. En nuestro caso, en el informe aparecen «archivos de respaldo» y «archivos potencialmente peligrosos». Su cantidad no corresponde a la realidad, ya que no había tales archivos en el servidor:

Wapiti — comprobación de vulnerabilidades del sitio por cuenta propia

Es posible que los módulos que no funcionan correctamente se corrijan con el tiempo. También se puede considerar como una deficiencia del informe la ausencia de coloración de las vulnerabilidades encontradas (dependiendo de su criticidad), o al menos su separación por categorías. La única manera en la que podemos entender indirectamente la criticidad de la vulnerabilidad encontrada es aplicando el parámetro —color durante el escaneo, y así las vulnerabilidades encontradas se colorearán de diferentes colores:

Wapiti — comprobación de vulnerabilidades del sitio por cuenta propia

Pero en el propio informe no se prevé tal coloración.

Vulnerabilidades

SQLi

El escáner logró encontrar parcialmente SQLi. Al buscar vulnerabilidades SQL en páginas donde no se requiere autenticación, no surgen problemas:

Wapiti — comprobación de vulnerabilidades del sitio por cuenta propia

No se pudo encontrar una vulnerabilidad en páginas accesibles solo después de la autenticación, incluso utilizando válidos cookies, ya que lo más probable es que después de una autenticación exitosa se «salga de la sesión» y cookies se vuelvan inválidos. Si la función de desautenticación se hubiera implementado como un script separado que se encarga de procesar este procedimiento, podría haberse excluido completamente a través del parámetro -x, y así evitar que se activara. De lo contrario, no se podrá excluir su procesamiento. Este es un problema no específico de un módulo, sino de la herramienta en general, pero debido a este matiz no se pudo detectar varias inyecciones en el área restringida del recurso.

XSS

El escáner cumplió perfectamente la tarea y encontró todas las vulnerabilidades preparadas:

Wapiti — comprobación de vulnerabilidades del sitio por cuenta propia

LFI/RFI

El escáner encontró todas las vulnerabilidades ocultas:

Wapiti — comprobación de vulnerabilidades del sitio por cuenta propia

En general, a pesar de las falsas alarmas y las omisiones de vulnerabilidades, Wapiti, como herramienta gratuita, muestra resultados bastante buenos. En cualquier caso, hay que reconocer que el escáner es bastante potente, flexible y multifuncional, y lo más importante, es gratuito, por lo que merece ser utilizado, ayudando a administradores y desarrolladores a obtener información básica sobre el estado de seguridad de aplicaciones web.

¡Manténgase sano y seguro!

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster