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!
- Requisitos
- Personalización de la instalación (recomendado)
- Instalación
- Actualización del proyecto
- Errores comunes
- Contribuir
- Cosas para las siguientes actualizaciones
-
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.
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.
IMPORTANTE: Ejecutar el script de instalación con permisos de superusuario.
Para instalar y utilizar la herramienta WebVulnLab, sigue los siguientes pasos:
- 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.
- 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
- 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.
- 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 | http://aws.local/ | En desarrollo, pero se puede empezar a probar |
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.
Puedes utilizar el siguiente script para verificar y aplicar actualizaciones del proyecto desde la consola.
- Abre la terminal y navega hasta el directorio del proyecto:
cd ruta/al/proyecto
- Ejecuta el script update.sh para verificar si hay actualizaciones disponibles:
./update.sh
- 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.
- 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.
Si no puedes resolver la URL de la vulnerabilidad, pueden existir varios factores que contribuyan a este problema. Aquí hay algunas posibles soluciones:
-
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.
- Comprueba si los contenedores están activos ejecutando el comando
-
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).
-
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.).
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:
-
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.
- Utiliza el comando
Si el contenedor no está en ejecución, puedes seguir estos pasos adicionales:
-
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:
-
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.
- Utiliza el comando
-
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.).
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:
-
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 escribiendoexit
. -
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.
- 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.