Skip to content

Latest commit

 

History

History
266 lines (196 loc) · 17 KB

README.md

File metadata and controls

266 lines (196 loc) · 17 KB

WebVulnLab (2.0v)

English Version

IMPORTANTE: Este proyecto actualmente sólo está disponible en español. Estamos trabajando en una traducción al inglés y otros idiomas.

¿Te gustaría aprender a detectar y explotar vulnerabilidades web de forma segura y divertida? ¿Quieres poner a prueba tus habilidades de hacking ético con retos reales y variados? Entonces no te pierdas la segunda versión de la herramienta de contenedores con vulnerabilidades web, creada por un apasionado de la seguridad informática.

En esta nueva versión, encontrarás una interfaz más atractiva y fácil de usar, así como nuevas funcionalidades que te permitirán desplegar y configurar los contenedores a tu gusto. Aunque todavía está en desarrollo, ya puedes descargarla y probar las primeras características. ¡Te sorprenderás!

Contenido

Requisitos

  • docker (comando para instalar docker en Kali Linux: sudo apt-get install docker.io)

  • docker (comando para instalar docker en Kali Linux: sudo apt-get install docker-compose)

  • php

  • Git: Asegúrate de tener Git instalado en tu sistema. Puedes verificar si Git está instalado ejecutando el siguiente comando en la terminal:

    git --version

    Si Git no está instalado, puedes seguir las instrucciones de instalación en este enlace.

Personalización de la instalación

En el archivo install.sh, encontrarás tres arrays que contienen información sobre los contenedores a instalar: containers, database, y otros. Cada elemento de estos arrays tiene el siguiente formato:

  • containers
nombre_del_contenedor;$RUTA_DEL_DIRECTORIO;PUERTO_DE_PUBLICACIÓN:PUERTO_DEL_CONTENEDOR;imagen_del_contenedor
  • database
nombre_del_contenedor_de_la_base_de_datos;$RUTA_DEL_DIRECTORIO;PUERTO_DE_PUBLICACIÓN:PUERTO_DEL_CONTENEDOR;imagen_del_contenedor
  • otros
Descripción del comando;comando_a_ejecutar

Puedes comentar las líneas de los contenedores que no deseas instalar. Por ejemplo:

database=(
#   "sqli_db_v2;$PWD/sqli;8005:80;sqli_v2"
#   "blindsqli_db_v2;$PWD/blindsqli;8014:80;blindsqli_v2"
#   ...
)

Esto te permite instalar solo los contenedores que necesites para evitar problemas de rendimiento en tu sistema. Una vez comentados los contenedores que no quieres que se instalen, ya puedes pasar al paso siguiente. Después de que hayas resuelto y utilizado los contenedores que instalaste, puedes desinstalarlos si así lo deseas. Puedes hacerlo utilizando comandos como docker-compose down o docker rm, según corresponda. Si deseas instalar más contenedores, simplemente vuelve a comentar las líneas de los contenedores no deseados en el archivo install.sh y ejecuta el script nuevamente.

Este proceso te permite instalar y resolver los contenedores de forma selectiva, lo que puede ser útil para gestionar los recursos de tu sistema de manera más eficiente.

Instalación

IMPORTANTE: Ejecutar el script de instalación con permisos de superusuario.

Para instalar y utilizar la herramienta WebVulnLab, sigue los siguientes pasos:

  1. Descarga el repositorio de GitHub usando el siguiente comando en tu terminal:
git clone -b dev https://github.com/sil3ntH4ck3r/WebVulnLab.git

Si aún no tienes Git instalado, descárgalo e instálalo desde su página oficial

Para instalarlo en Ubuntu/Debian, puedes utilizar este comando:

sudo apt-get install git

Una vez descargado, el proyecto no requiere conexión a internet, ya que está diseñado para su uso en un entorno local.

  1. Navega hasta el directorio donde clonaste el repositorio y da permisos de ejecución al script de instalación:

Nota: El archivo install.sh no es compatible con Arch Linux (se esta trabajando en un nuevo script de instalación).

cd WebVulnLab
chmod +x install.sh
  1. Ejecuta el script de instalación:
sudo ./install.sh

Este script descargará e instalará todas las dependencias necesarias, creará los contenedores de Docker y configurará la herramienta para que puedas comenzar a utilizarla.

  1. Una vez finalizada la instalación, podrás acceder a los diferentes contenedores a través de los siguientes enlaces:
Docker Enlace Estatus
Tablero http://tablero.local/ Funcional
Servidor Principal http://menu.local/ Funcional
LFI http://lfi.local/ Funcional
Padding Oracle Attack http://paddingoracleattack.local/ Funcional
Type Juggling http://typejuggling.local/ Funcional
Remote File Inclusion http://rfi.local/ Funcional
XSS http://xss.local/ Funcional
XXE http://xxe.local/ Funcional
XPath Injection http://xpathinjection.local/ Funcional
LaTeX Injection http://latexinjection.local/ Funcional
ShellShock http://shellshock.local/ Funcional
SQL Injection (Error) http://sqli.local/ Funcional
Blind SQL Injection (Time) http://blindsqli.local/ Funcional
Domain Zone Transfer http://domainzonetransfer.local/ Funcional
CSRF http://csrf.local/ Funcional
SSRF http://ssrf.local/ Funcional
Blind XXE http://blindxxe.local/ Funcional
Blind XSS http://blindxss.local/ Funcional
HTML Injection http://htmlinjection.local/ Funcional
PHP Insecure Deseralization http://insecuredeseralizationphp.local/ Funcional
Insecure Direct Object Reference (iDOR) http://idor.local/ Funcional
Server-Side Template Injection (SSTI) http://ssti.local/ Funcional
Client-Side Template Injection (CSTI) http://csti.local/ Funcional
NoSQL Injections http://nosqlinjection.local/ Funcional
LDAP Injections http://ldapinjection.local/ Funcional
API's Abuse y Mass-Asignament Attack http://apiabuse.local/ Funcional
File Upload Abuse http://fileuploadabuse.local/ Funcional
Prototype Pollution http://prototypepollution.local/ Funcional
Open Redirect http://openredirect.local/ Funcional
WebDAV http://webdav.local/ Funcional
SquidProxies http://squidproxy.local/ Funcional
Intercambio de recursos de origen cruzado (CORS) http://localhost:8029 Semifuncional
Nota: la vulnerabilidad CORS se debe practicar utilizando localhost:8029, ya que no hemos logrado que funcione a través de cors.local.
SQL Truncation http://sqltruncation.local/ Funcional
Session Puzzling / Session Fixation / Session Variable Overloading http://sessionpuzzling.local/ Funcional
Json Web Token http://jwt.local/ Funcional
Race Condition http://racecondition.local/ Funcional
CSS Injection http://cssi.local/ Funcional
Python Deserelization (DES-Yaml) http://yamldeseralization.local/ Funcional
Python Deserelization (DES-Pickle) http://pickledeseralization.local/ Funcional
GraphQL Introspection, Mutations http://graphql.local/ Funcional
OAuth / Werkzeug Debugger Console Abuse http://oauth_gallery.local
http://oauth_printing.local/ Funcional
SNMP Abuse + IPv6 http://snmp.local/ Funcional
AWS Lambda Abuse http://aws.local/ Funcional
HTTP smuggling - Trabajando en ello
Active Directory - Trabajando en ello

Cabe destacar que aún está en desarrollo, y que no todos los contenedores están funcionando correctamente. Este repositorio se actualiza a menudo.

Actualización del proyecto

Puedes utilizar el siguiente script para verificar y aplicar actualizaciones del proyecto desde la consola.

Pasos para actualizar el proyecto

  1. Abre la terminal y navega hasta el directorio del proyecto:
cd ruta/al/proyecto
  1. Ejecuta el script update.sh para verificar si hay actualizaciones disponibles:
./update.sh
  1. Si hay actualizaciones disponibles y deseas instalarlas, sigue las instrucciones proporcionadas por el script. Por ejemplo, puedes ingresar s y presionar Enter para realizar la actualización. Si decides no instalar las actualizaciones, puedes ingresar n y presionar Enter.

NOTA: Asegúrate de leer atentamente las instrucciones y los mensajes que muestra el script antes de tomar cualquier acción. El script verificará si hay nuevas versiones disponibles y te mostrará un mensaje indicando si hay actualizaciones.

  1. Si la actualización se completa con éxito, el script mostrará un mensaje indicando que la actualización ha sido exitosa. En caso de algún problema durante la actualización, se mostrará un mensaje de error correspondiente.

Errores comunes

Error al resolver la URL de la vulnerabilidad

Si no puedes resolver la URL de la vulnerabilidad, pueden existir varios factores que contribuyan a este problema. Aquí hay algunas posibles soluciones:

  1. Contenedores no iniciados correctamente:

    • Comprueba si los contenedores están activos ejecutando el comando docker ps en la línea de comandos. Si los contenedores están en funcionamiento, es posible que el problema esté relacionado con la configuración de Apache.
    • Si los contenedores no aparecen en la lista o se muestra un estado de "exited" al ejecutar el comando docker ps -a, es probable que haya un problema con el inicio de los contenedores. Asegúrate de seguir las instrucciones de configuración y los comandos de inicio adecuados para los contenedores.
  2. Configuración de Apache inactiva:

    • Verifica que la configuración de Apache esté activa y correctamente configurada. Revisa los archivos de configuración relevantes, como el archivo de configuración principal de Apache (/etc/apache2/sites-available/WebVulnLab.conf), para asegurarte de que todos los ajustes necesarios estén presentes y sean correctos.
    • Asegúrate de haber reiniciado Apache después de realizar cambios en la configuración o despues de encender el equipo. Puedes hacerlo ejecutando el comando adecuado según tu sistema operativo (sudo service apache2 restart en Linux, por ejemplo).
  3. Solicitar ayuda a través de la sección "Issues" del proyecto:

    • Si has intentado las soluciones anteriores y aún no puedes resolver el problema, puedes pedir ayuda a través de la sección de "Issues" en el repositorio de GitHub del proyecto. Describe detalladamente el problema que estás enfrentando, incluyendo cualquier mensaje de error relevante, y proporciona información sobre tu entorno de ejecución (sistema operativo, versiones de software, etc.).

Servicio no disponible al ingresar el dominio

Si al ingresar el dominio te muestra el mensaje "Service Unavailable", es probable que el contenedor correspondiente no esté encendido. Aquí hay algunas posibles soluciones:

  1. Verificar estado del contenedor:

    • Utiliza el comando docker ps en la línea de comandos para verificar si el contenedor necesario está en ejecución.
    • Si el contenedor no aparece en la lista o muestra un estado de "exited" al ejecutar el comando docker ps -a, es posible que haya ocurrido un problema durante el inicio del contenedor. Asegúrate de seguir las instrucciones adecuadas para iniciar correctamente el contenedor.

Si el contenedor no está en ejecución, puedes seguir estos pasos adicionales:

  1. Reiniciar el contenedor a través de la API REST de Docker:

    • Accede al dominio tablero.local en tu navegador. Este dominio está habilitado para interactuar con la API REST de Docker y te permite controlar los contenedores.
    • Utiliza las funcionalidades provistas por el tablero para reiniciar el contenedor específico que no está en funcionamiento.
    • Verifica si el reinicio del contenedor a través de tablero.local resuelve el problema y permite el acceso al dominio.

    NOTA: Si no puedes acceder al dominio tablero.local, te recomiendo seguir los pasos mencionados en la sección anterior de "Errores Comunes" del README, puede clicar aquí. Puedes encontrar información sobre cómo solucionar si la configuración de Apache esta inactiva, entre otros.

Si después de reiniciar el contenedor aún enfrentas el error "Service Unavailable", considera estas posibles soluciones adicionales:

  1. Revisar los registros del contenedor:

    • Utiliza el comando docker logs <nombre_del_contenedor> para ver los registros del contenedor y buscar posibles errores o problemas durante la ejecución.
    • Examina los registros en busca de mensajes de error o advertencias que puedan proporcionar información sobre el motivo detrás del servicio no disponible.
  2. Solicitar ayuda a través de la sección "Issues" del proyecto:

Si has intentado las soluciones anteriores y aún no puedes resolver el problema, puedes pedir ayuda a través de la sección de "Issues" en el repositorio de GitHub del proyecto. Describe detalladamente el problema que estás enfrentando, incluyendo cualquier mensaje de error relevante, y proporciona información sobre tu entorno de ejecución (sistema operativo, versiones de software, etc.).

Error de Proxy

Si al ingresar el dominio te muestra el mensaje "Proxy Error", es probable que el contenedor correspondiente no tenga el servicio Apahce encendido. Aquí hay algunas posibles soluciones:

  1. Encender servicio Apache

    • Dentro del contenedor, ejecuta el siguiente comando para verificar si el servicio Apache está en funcionamiento:

      service apache2 status
      
    • Si el servicio está detenido, puedes iniciarlo ejecutando:

      service apache2 start
      

    NOTA: Para ejecutar comandos dentro de un contenedor y obtener una consola interactiva, puedes utilizar el comando docker exec -it <nombre_del_contenedor> /bin/bash. Cuando hayas terminado de ejecutar los comandos en el contenedor, puedes salir de la consola interactiva escribiendo exit.

Contribuir

Si deseas contribuir al desarrollo de WebVulnLab, ¡eres bienvenido! Puedes hacerlo de varias maneras:

  • Informando de bugs o problemas que encuentres en la herramienta a través de la sección de "Issues" en el repositorio de GitHub.
  • Proponiendo nuevas características o mejoras.
  • Ayudando a solucionar problemas o desarrollando nuevas vulnerabilidades.

Cosas para las siguientes actualizaciones

  • Añadir más vulnerabilidades.
  • Ver en el tablero que máquinas están encendidas y que máquinas están apagadas.
  • Uso de Traefik para poner subdominios, y que no sea por IP
    • Al final no se ha echo con Traefik, sino que se ha aplicado Virtual Hosting. Ahora los enlaces a los contenedores son más fáciles de recordar.
  • Mejorar la estética.
  • Añadir la posibilidad de reiniciar los contenedores.
  • Añadir alguna máquina CTF
  • En cada máquina, añadir la opción de aprender, donde podrás descubrir más sobre dicha vulnerabilidad.
  • Hacer este mismo proyecto (WebVulnLab), pero para Windows.
  • Mejorar la documentación para que sea más fácil de entender y seguir.
  • Refactorizar el código para hacerlo más legible y mantenible.