Descargar e instalar el entorno web de pruebas bWAPP en contenedor Docker. Sitio web inseguro deliberadamente para hacer pruebas de penetración y hacking ético. Sitio web con infinidad de vulnerabilidades: HTML Injection, iFrame Injection, LDAP Injection, SQL Injection, OS Command Injection, XML/XPath Injection, Broken Authentication, Session Management, Cross-Site Scripting, Insegure DOR, etc.

Requisitos para desplegar bWAPP en contenedor Docker

Para el despliegue de este sitio web (que incluye bd MySQL), necesitaremos disponer de Docker (en cualquier sistema operativo Linux, Windows o MacOS). En el siguiente artículo explicamos cómo instalar Docker en Linux:

Y en este otro explicamos cómo instalar Docker en Windows:

bWAPP NO debe instalarse en entornos de producción dado que es un sitio web con Apache y MySQL totalmente inseguro y vulnerable. Está desarrollado a propósito con más de 100 vulnerabilidades. Por ello debe instalarse siempre en un entorno aislado (contenedor).

bWAPP incluye las siguientes vulnerabilidades (para su explotación, pruebas, pentesting, etc.), indicamos las más conocidas:

  • HTML Injection.
  • iFrame Injection.
  • LDAP Injection.
  • Mail Header Injection.
  • OS Command Injection.
  • PHP Code Injection.
  • Server-Side Includes (SSI) Injection.
  • SQL Injection.
  • XML/XPath Injection.
  • Broken Authentication.
  • Session Management.
  • Cross-Site Scripting (XSS).
  • Insecure Direct Object References.
  • Security Misconfiguration.
  • Arbitrary File Access (Samba).
  • Cross-Domain Policy File (Flash).
  • Denial-of-Service.
  • Insecure FTP.
  • Insecure WebDAV Configuration.
  • Local Privilege Escalation.
  • Man-in-the-Middle Attack.
  • Robots File.
  • Sensitive Data Exposure.
  • Clear Text HTTP.
  • Directory Traversal.
  • Host Header Attack.
  • Restrict Folder Access.
  • Server Side Request Forgery (SSRF).
  • Buffer Overflow.

Hay muchas más, por lo que bWAPP es una herramienta muy útil para los desarrolladores web y los pentester, para revisar posibles vulnerabilidades que puede tener un sitio web. De esta forma las tendremos en cuenta para evitarlas en nuestros desarrollos.

Descargar, instalar y ejecutar contenedor bWAPP en Docker

Para descargar e instalar la aplicación web vulnerable bWAPP (siempre lo haremos en un contenedor dado que es una aplicación totalmente insegura), desde una ventana de shell de comandos (sea Linux, Windows o MacOS), con Docker iniciado, ejecutaremos el siguiente comando:

Docker localizará el contenedor bwapp en su repositorio, lo descargará y lo desplegará:

Descargar e instalar contenedor bWAPP en Docker

Una vez descargado e instalado en Docker, para ejecutarlo sólo tendremos que introducir el siguiente comando:

Añadimos el parámetro -rm para que, una vez finalizado el contenedor, se eliminen todos los datos. Esto dejará el contenedor tal y como se descargó e instaló la primera vez, se eliminarán todos los datos que hayamos introducido en bWAPP. Si vamos a usar este contenedor con sus datos a menudo, no usaremos el parámetro -rm, es útil porque esta aplicación es insegura (a propósito), para no guardar datos.

El contenedor será accesible desde el puerto 8080 del equipo anfitrión de Docker (como veremos en el siguiente punto).

Se iniciará el contenedor bWAPP y realizará todas las acciones que tenga configuradas para su carga (instalar MySQL, iniciar Apache y PHP, etc.):

Descargar, instalar y ejecutar contenedor bWAPP en Docker

Instalar bWAPP e iniciar para realizar pruebas de pentesting y hacking ético

Una vez descargado, instalado e iniciado el contenedor bWAPP en Docker, podremos acceder a él abriendo un navegador en el equipo anfitrión (el que tiene Docker) o bien (si hemos abierto el puerto 8080 en el cortafuegos) accediendo al equipo que tiene el Docker a través de la red. La URL de acceso al Docker de bWAPP será:

http://localhost:8080/login.php

(cambiaremos «localhost» por la IP del equipo con Docker si estamos accediendo desde fuera)

En el primer acceso nos dará el error:

Connection failed: Unknown database ‘bWAPP’

Esto es correcto porque hay que crear la BD bWAPP en MySQL del Docker de bWAPP. Para ello, introduciremos la URL:

http://localhost:8080/install.php

Nos cargará la página de instalación de bWAPP, pulsaremos en «here»:

Instalar bWAPP e iniciar para realizar pruebas de pentesting y hacking ético

En pocos segundos nos mostrará el mensaje «bWAPP has been installed successfully!» indicando que la aplicación se ha instalado:

Instalar bWAPP e iniciar para realizar pruebas de pentesting y hacking ético

A partir de ahora podremos usar la URL anterior para acceder a la aplicación web insegura bWAPP:

http://localhost:8080/login.php

Para realizar alguna de las pruebas, por ejemplo, podremos crear un usuario. Introduciremos siempre datos no sensibles, dado que la aplicación bWAPP es insegura a propósito. Y aunque estos datos de alta de usuarios y demás no se envía fuera del contenedor de Docker local, no conviene usar datos sensibles. Por ello, pulsaremos en «New user» y crearemos un usuario de pruebas:

Instalar bWAPP e iniciar para realizar pruebas de pentesting y hacking ético

Iniciaremos sesión con este usuario, desde «Login»:

Instalar bWAPP e iniciar para realizar pruebas de pentesting y hacking ético

Y tendremos la aplicación web insegura bWAPP lista para las pruebas. Algunos test de intrusión y vulnerabilidades no necesitan ni siquiera el alta de usuario.

Realizar un test de intrusión aprovechando vulnerabilidad SQL Injection en bWAPP

Un ejemplo de test de intrusión en web bWAPP, aprovechando la vulnerabilidad SQL Injection (no controlada a propósito) se puede encontrar accediendo a «Bug» y eligiendo la vulnerabilidad que queramos explotar, en nuestro caso SQL injection (GET/Search) y pulsando en «Hack»:

Realizar un test de intrusión aprovechando vulnerabilidad SQL Injection en bWAPP

Nos mostrará una página con un posible listado de películas. Si el desarrollador web no ha controlado la vulnerabilidad SQL injection, un atacante podrá poner en el campo «Search for a movie» un primer texto para comprobar si hay control de SQL injection, por ejemplo:

Vemos que nos devuelve un error de MySQL:

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near »’ at line 1

Por lo tanto, da la impresión de que el desarrollador no ha controlado el SQL injection, pues nunca debe aparecer un error MySQL o similar. Esto da «pistas» al atacante del motor de base de datos que estamos usando y, lo que es peor, de que no se está controlando el SQL injection.

Realizar un test de intrusión aprovechando vulnerabilidad SQL Injection en bWAPP

Por lo tanto, ahora un atacante podría intentar obtener todos los registros de una tabla, introduciendo el siguiente texto en el campo de búsqueda:

Realizar un test de intrusión aprovechando vulnerabilidad SQL Injection en bWAPP

Por lo tanto hemos demostrado que esta web es vulnerable a SQL Injection.

Detener el contenedor bWAPP en Docker Desktop

Una vez que hayamos concluido con las pruebas de penetración, si queremos detener el dcker bWAPP, podremos hacerlo desde Docker Desktop, pulsando en el botón «Stop» del contenedor en cuestión (raesene/bwapp):

Detener el contenedor bWAPP en Docker Desktop

Si detenemos el docker bWAPP y hemos usado el parámetro -rm, se eliminarán todos los datos, por lo que si lo volvemos a ejecutar tendremos que volver ha realizar el proceso de instalación (install.php) y el de alta de usuario.