Wapiti - Escáner de vulnerabilidades web
.. image:: https://img.shields.io/pypi/v/wapiti3?label=PyPI&logo=PyPI&logoColor=white&color=blue
:alt: PyPI version
:target: https://pypi.python.org/pypi/wapiti3
.. image:: https://img.shields.io/pypi/pyversions/wapiti3
:alt: Supported Python versions
:target: https://github.com/wapiti-scanner/wapiti/blob/master/INSTALL.md
.. image:: https://img.shields.io/github/license/wapiti-scanner/wapiti
:alt: License: GPL-2.0
:target: https://github.com/wapiti-scanner/wapiti/blob/master/LICENSE
.. image:: https://img.shields.io/pypi/dd/wapiti3
:alt: Downloads per day on PyPi
:target: https://pypi.python.org/pypi/wapiti3
.. image:: https://codecov.io/gh/wapiti-scanner/wapiti/branch/master/graph/badge.svg?token=GFEIORAFB8
:target: https://codecov.io/gh/wapiti-scanner/wapiti
Wapiti es un escáner de vulnerabilidades web escrito en Python.
http://wapiti-scanner.github.io/
Requisitos
Para funcionar correctamente, Wapiti necesita Python 3.12, 3.13 o 3.14.
Todas las dependencias de módulos de Python se instalarán automáticamente si usas el script setup.py o pip install wapiti3
Consulta INSTALL.md <https://github.com/wapiti-scanner/wapiti/blob/master/INSTALL.md>__ para más detalles sobre la instalación.
Ejecutar Wapiti en Windows se puede lograr mediante el uso de WSL <https://learn.microsoft.com/en-us/training/modules/get-started-with-windows-subsystem-for-linux/>__.
Cómo funciona
Wapiti funciona como un escáner de vulnerabilidades de "caja negra", lo que significa que no estudia el código fuente de las aplicaciones web, sino que funciona como un fuzzer, escaneando las páginas de la aplicación web desplegada, extrayendo enlaces y formularios, y atacando los scripts, enviando payloads y buscando mensajes de error, cadenas especiales o comportamientos anómalos.
Características generales
- Genera informes de vulnerabilidades en varios formatos (HTML, XML, JSON, TXT, CSV, Markdown).
- Puede suspender y reanudar un escaneo o un ataque (mecanismo de sesión usando bases de datos sqlite3).
- Puede darte colores en la terminal para resaltar vulnerabilidades.
- Diferentes niveles de verbosidad.
- Forma rápida y sencilla de activar/desactivar módulos de ataque.
- Añadir un payload puede ser tan fácil como añadir una línea a un archivo de texto.
- Número configurable de tareas concurrentes para realizar peticiones HTTP.
Características de navegación
- Soporte de proxies HTTP, HTTPS y SOCKS5.
- Autenticación HTTP en el objetivo (Basic, Digest, NTLM)
- Autenticación mediante el relleno de formularios de acceso.
- Capacidad de restringir el alcance del escaneo (dominio, carpeta, página, url).
- Eliminación automática de uno o más parámetros en las URLs.
- Múltiples salvaguardas contra bucles infinitos de escaneo (por ejemplo, límite de valores para un parámetro).
- Posibilidad de establecer las primeras URLs a explorar (incluso si están fuera del alcance).
- Puede excluir algunas URLs del escaneo y de los ataques (ej: URL de cierre de sesión).
- Importar cookies desde tu navegador Chrome o Firefox o usando la herramienta
wapiti-getcookie.
- Puede activar / desactivar la verificación de certificados SSL.
- Intenta extraer URLs de javascript (intérprete de JS muy básico).
- Compatible con HTML5 (entiende etiquetas HTML recientes).
- Varias opciones para controlar el comportamiento y los límites del rastreador.
- Omitir algunos nombres de parámetros durante el ataque.
- Establecer un tiempo máximo para el proceso de escaneo.
- Añadir algunos encabezados HTTP personalizados o establecer un User-Agent personalizado.
- Usar un navegador Firefox headless para el rastreo
- Cargar tu propio código Python para casos de autenticación complicados (ver la opción
--form-script)
- Añadir una URL o RUTA personalizada para actualizar la base de datos de Wappalyzer
- Escanear APIs REST proporcionadas por un archivo OpenAPI (swagger)
Ataques compatibles
- Inyecciones SQL (basadas en errores, booleanas, basadas en tiempo) e inyecciones XPath
- Inyecciones LDAP (basadas en errores y booleanas)
- Cross Site Scripting (XSS) reflejado y permanente
- Detección de divulgación de archivos (include, require, fopen, readfile... locales y remotos)
- Detección de ejecución de comandos (eval(), system(), passtru()...)
- Inyección XXE (Xml eXternal Entity)
- Inyección CRLF
- Búsqueda de archivos potencialmente peligrosos en el servidor (gracias a la base de datos de Nikto)
- Bypass de configuraciones htaccess débiles
- Búsqueda de copias (backup) de scripts en el servidor
- Shellshock
- Enumeración de carpetas y archivos (tipo DirBuster)
- Server Side Request Forgery (mediante el uso de un sitio web externo de Wapiti)
- Open Redirects
- Detección de métodos HTTP poco comunes (como PUT)
- Evaluador CSP básico
- Fuerza bruta en formularios de acceso (usando una lista de diccionario)
- Comprobación de encabezados de seguridad HTTP
- Comprobación de flags de seguridad en cookies (flags secure y httponly)
- Detección básica de Cross Site Request Forgery (CSRF)
- Fingerprinting de aplicaciones web usando la base de datos de Wappalyzer, proporciona información de CVE relacionada
- Enumeración de módulos CMS para Wordpress, Drupal, Joomla, Magento, SPIP, Typo3, etc
- Detección de subdomain takeovers
- Detección de Log4Shell (CVE-2021-44228)
- Detección de Spring4Shell (CVE-2022-22965)
- Comprobación de redirecciones https
- Comprobación de vulnerabilidades de subida de archivos
- Detección de dispositivos de red
- Inyecta payloads también en el cuerpo JSON
Wapiti soporta métodos HTTP GET y POST para los ataques.
También soporta multipart y puede inyectar payloads en los nombres de archivo (upload).
Muestra una advertencia cuando se encuentra una anomalía (por ejemplo, errores 500 y timeouts)
Diferencia entre vulnerabilidades XSS permanentes y reflejadas.
Nombres de módulos
Los ataques mencionados están vinculados a los siguientes nombres de módulos:
- backup (Busca copias de scripts y archivos en el servidor web)
- brute_login_form (Fuerza bruta en formularios de acceso usando una lista de diccionario)
- buster (Módulo tipo DirBuster)
- cms (Escaneo para detectar CMS y sus versiones)
- cookieflags (Comprueba los flags Secure y HttpOnly)
- crlf (Inyección CR-LF en encabezados HTTP)
- csp (Detecta falta de CSP o configuración CSP débil)
- csrf (Detecta formularios no protegidos contra CSRF o con tokens anti-CSRF débiles)
- exec (Ejecución de código o inyección de comandos)
- file (Path traversal, inclusión de archivos, etc)
- htaccess (Restricciones htaccess mal configuradas)
- htp (Identifica tecnologías web usando la base de datos HashThePlanet)
- http_headers (Comprueba los encabezados de seguridad HTTP)
- https_redirect (Comprueba las redirecciones https)
- ldap (Detección de inyección LDAP basada en errores y booleana)
- log4shell (Detecta sitios web vulnerables a CVE-2021-44228)
- methods (Busca métodos HTTP disponibles poco comunes como PUT)
- network_device (Busca archivos comunes para detectar dispositivos de red)
- nikto (Busca vulnerabilidades conocidas probando la existencia de URLs y comprobando las respuestas)
- permanentxss (Reescanea todo el objetivo después de la ejecución del módulo xss buscando payloads previamente contaminados)
- printer (Detecta impresoras de red, obtiene información del modelo y del firmware)
- redirect (Open Redirects)
- shellshock (Prueba el ataque Shellshock, ver
Wikipedia <https://en.wikipedia.org/wiki/Shellshock_%28software_bug%29>__)
- spring4shell (Detecta sitios web vulnerables a CVE-2020-5398)
- sql (Detección de inyección SQL basada en errores y booleana)
- ssl (Evalúa la seguridad de la configuración de certificados SSL/TLS, requiere
sslscan <https://github.com/rbsec/sslscan>__)
- ssrf (Server Side Request Forgery)
- takeover (Subdomain takeover)
- timesql (Vulnerabilidades de inyección SQL detectadas con metodología basada en tiempo)
- upload (Vulnerabilidades de subida de archivos)
- wapp (No es un módulo de ataque, obtiene las tecnologías web con versiones y categorías en uso en el objetivo, encuentra los CVE correspondientes)
Los nombres de módulos se pueden indicar como una lista separada por comas usando la opción "-m" o "--module".
Cómo obtener los mejores resultados
Para encontrar más vulnerabilidades (ya que algunos ataques se basan en errores), puedes modificar
la configuración de tu servidor web.
Por ejemplo, puedes establecer los siguientes valores en tu configuración de PHP:
.. code-block::
safe_mode = Off
display_errors = On (recommended)
magic_quotes_gpc = Off
allow_url_fopen = On
mysql.trace_mode = On
Dónde obtener ayuda
En el prompt, solo escribe el siguiente comando para obtener el uso básico:
También puedes echar un vistazo a la página man (wapiti.1 o wapiti.1.html) para más detalles sobre cada opción.
También tenemos una wiki oficial más exhaustiva: https://github.com/wapiti-scanner/wapiti/wiki
Si tienes otra pregunta, primero consulta la FAQ <https://github.com/wapiti-scanner/wapiti/blob/master/doc/FAQ.md>__
Si encuentras un error, abre un issue: https://github.com/wapiti-scanner/wapiti/issues
Cómo ayudar al proyecto Wapiti
Puedes:
- Apoyar el proyecto haciendo una donación ( http://sf.net/donate/index.php?group_id=168625 )
- Crear o mejorar módulos de ataque
- Crear o mejorar generadores y plantillas de informes
- Enviar correcciones de errores, parches...
- Escribir algunas GUIs
- Crear una herramienta para convertir archivos PCAP a archivos de sesión sqlite3 de Wapiti
- Hablar de Wapiti a tu alrededor
Licencia
Wapiti se distribuye bajo la Licencia Pública General de GNU versión 2 (GPL).
El código fuente está disponible en Github <https://github.com/wapiti-scanner/wapiti>__.
Creado por Nicolas SURRIBAS.
Patrocinadores
Cyberwatch https://cyberwatch.com/
Security For Everyone https://securityforeveryone.com/
IP-Nina https://ip-ninja.com/
Aviso legal
Wapiti es un software de ciberseguridad. Realiza evaluaciones de seguridad sobre un objetivo proporcionado, lo que puede provocar fallos y bloqueos en el objetivo, así como una posible pérdida de datos.
El uso de Wapiti para atacar un objetivo sin el consentimiento previo de su propietario es ilegal. Es responsabilidad del usuario final cumplir todas las leyes locales aplicables.
Los desarrolladores y las personas involucradas en el proyecto Wapiti no asumen ninguna responsabilidad y no son responsables de ningún uso indebido o daño causado por este programa.