Web Application Pentest Labs usando Docker

Para aprender y entrenar nuestras habilidades en Pentesting sobre aplicaciones Web existen muchas herramientas distintas. En ocasiones desplegar estos entornos requieren de instalar software que dejan nuestra máquina llena de software que posiblemente no utilicemos para nada más y, lo que es peor, vulnerable a ataques.

Para facilitarnos la vida podemos desplegar todos estos entornos en Containers de Docker sin software de más corriendo en la misma máquina. También podríamos desplegar máquinas virtuales pensadas para este fin, pero con Docker conseguiremos tener lo mismo con un consumo mínimo de recursos en el sistema.

Personalmente, y tras haberlo probado, me parece la forma más limpia y cómoda de poder hacer uso de estas aplicaciones, sin riesgo a fallos en la instalación y dejando la computadora principal limpia de programas innecesarios para su uso diario.

Vamos al lío!!!


Consideraciones previas

Vamos a realizar el despliegue de Containers de Docker en nuestro sistema, pero recuerda, es muy importante no dejar estos encendidos exponiendo sus vulnerabilidades al exterior, y por lo tanto comprometiendo nuestro sistema principal.

Debido a lo anterior, todos los comandos que vamos a ver se ejecutan para para iniciar los Containers en modo interactivo y una vez finalicemos se borrarán del sistema perdiendo cualquier configuración que realicemos. Recomendamos hacerlo así para no dejar expuesto ningún servicio vulnerable, quedando a responsabilidad del lector utilizar otro comando distinto.

Seguramente la versión de Docker que instalamos de los repositorios no es la más actual, pero si la estable para el sistema que vayamos a utilizar. Queda en manos del usuario final decidir cuál instala.


Instalar Docker

Lo primero que debemos de hacer es instalar Docker en nuestro sistema.

Debian

El comando a ejecutar en Debian será:

sudo apt update
sudo apt full-upgrade
sudo apt install docker.io

Confirmamos la instalación consultando su versión:

docker --version

En nuestro caso tenemos la versión 18.09.1, build 4c52b90.

Por defecto en nuestro caso ya estaría arrancado y agregado al inicio del sistema, pero según la distribución utilizada puede no ser así, teniendo que ejecutar los siguientes comandos:

sudo systemctl start docker
sudo systemctl enable docker

Ahora solo nos queda permitir a nuestro usuario del sistema usar el software con todos los permisos, ya que de lo contrario nos dará un error ya en la descarga de un Container. Lo agregamos al grupo de docker con el siguiente comando:

sudo usermod -aG docker $USER

Fedora

En el caso de Fedora no se encuentra en sus repositorios oficiales, por lo que hay que seguir los pasos de la documentación oficial de Docker.

Para no alargar esta entrada del blog os dejo el cómo hacerlo en el enlace anterior, aunque te adelanto que es muy sencillo.


Desplegar aplicaciones

Con Docker podemos desplegar multitud de aplicaciones, pero vamos a ver solo unas pocas a continuación. En el último apartado mostramos una forma alternativa de desplegar estas y muchas otras más mediante un script hecho en Bash.

DVWA

Lar archiconocida Damn Vulnerable Web Application es una aplicación basada en PHP y MySQL, el cual permite aplicar distintos niveles de seguridad y difucultad para nuestra formación y/o entrenamiento.

Podemos buscarlo con el siguiente comando:

$ docker search web-dvwa
NAME                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
vulnerables/web-dvwa   Damn Vulnerable Web App (DVWA) is a PHP/MySQ…   154                                     [OK]

O desde este enlace de DockerHub.

Lo descargamos con el siguiente comando:

docker pull vulnerables/web-dvwa

Y para finalizar lo arrancamos en modo interactivo y para que se borre al finalizar este:

docker run -it --rm -p 80:80 vulnerables/web-dvwa

Ahora podemos abrir el navegador con la url http://localhost.

Agregamos las credenciales por defecto para poder crear o resetear la base de datos:

  • Usuario admin
  • Contraseña password

Abajo del todo tenemos un botón que indica Create / Resete Database. Pulsamos en el y accederíamos a la aplicación con las mismas credenciales que las indicadas anteriormente.

Cuando acabemos con la aplicación podemos pulsar las teclas Ctrl + c para finalizar y borrar todo el Container del sistema.

OWASP Mutillidae II

Es una aplicación enfocada a laboratorios de Pentesting con docenas de vulnerabilidades deliveradamente configuradas, utilizada en multitud de formaciones, incluso para salones de CTF, …

Vamos a instalar el Container de DockerHub más actual en estos momentos para mutillidae 2.

Para buscarla usamos el comando:

$ docker search mutillidae_2
NAME                      DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
santosomar/mutillidae_2   mutillidae_2  Container for Cybersecurity Tr…   0                                       

O desde este enlace de DockerHub.

Lo descargamos con el siguiente comando:

docker pull santosomar/mutillidae_2

Y para finalizar lo arrancamos en modo interactivo y para que se borre al finalizar este:

docker run -it --rm -p 81:80 santosomar/mutillidae_2

Ahora podemos abrir el navegador con la url http://localhost:81.

Nos mostrará un error debido a que tenemos que instalar o reiniciar la base de datos.

Una vez lo hagamos, si no se encuentran errores de PHP y MySQL, ya podremos acceder a la aplicación.

Cuando acabemos con la aplicación podemos pulsar las teclas Ctrl + c para finalizar y borrar todo el Container del sistema.

WebGoat

WebGoat es una aplicación mantenida por OWASP diseñada para el aprendizaje de Pentesting y seguridad sobre aplicaciones web sobre aplicaciones basadas en Java.

Podemos buscarlo con el siguiente comando:

$ docker search webgoat
NAME                           DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
webgoat/webgoat-8.0            Latest development version of WebGoat, see h…   61   

O desde el enlace de DockerHub.

Lo descargamos con el siguiente comando:

docker pull webgoat/webgoat-8.0

Y para finalizar lo arrancamos en modo interactivo y para que se borre al finalizar este:

docker run -it --rm -p 8080:8080 -t webgoat/webgoat-8.0

Ahora podemos acceder a la aplicación en la URL http://localhost:8080/WebGoat/login

Primero debemos de registrar un nuevo usuario y ya tendremos acceso al entorno.

Cuando acabemos con la aplicación podemos pulsar las teclas Ctrl + c para finalizar y borrar todo el Container del sistema.

bWAPP

bWAPP o buggy web application es una aplicación web insegura con más de 100 vulnerabilidades, que cubren la mayoría de los errores conocidos incluidos los Top10 del OWASP project. Basada en PHP y MySQL, es multiplataforma e incluso ofrecen la posibilidad de descargarla en una máquina virtual ya preparada, aunque nosotros la desplegaremos en un Container de Docker.

Podemos buscarlo con el siguiente comando:

$ docker search bwapp
NAME                       DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
...                           
santosomar/bwapp           bwapp container for Cybersecurity training      1                                       

O desde el enlace de DockerHub

Lo descargamos con el siguiente comando:

docker pull santosomar/bwapp

Lo arrancamos con el siguiente comando:

docker run -it --rm -p 8080:80 santosomar/bwapp

Ahora debemos de instalar la aplicación accediendo a la URL http://localhost:8080/install.php

Si no muestra error alguno ya podríamos acceder a la aplicación con las siguientes credenciales por defecto, e indicando en livel de seguridad que queremos aplicar:

Cuando acabemos con la aplicación podemos pulsar las teclas Ctrl + c para finalizar y borrar todo el Container del sistema.


Método alternativo

También podemos utilizar un método alternativo mediante el uso de PentestLab Management Script, el cual nos permite desplegar las aplicaciones explicadas y varias más de forma mucho más sencilla y rápida.

Las aplicaciones disponibles son:

  • bwapp bWAPP PHP/MySQL based from itsecgames.com
  • webgoat7 OWASP WebGoat 7.1
  • webgoat8 OWASP WebGoat 8.0
  • webgoat81 OWASP WebGoat 8.1
  • dvwa Damn Vulnerable Web Application
  • mutillidae OWASP Mutillidae II
  • juiceshop OWASP Juice Shop
  • vulnerablewordpress WPScan Vulnerable WordPress
  • securityninjas OpenDNS Security Ninjas
  • altoro Altoro Mutual Vulnerable Bank
  • graphql Vulnerable GraphQL API

El método de instalación sería el siguiente:

git clone https://github.com/eystsen/pentestlab.git
cd pentestlab

Ubicados en el directorio clonado podemos ejecutar la ayuda del comando:

$ ./pentestLab.sh --help

Local PentestLab Management Script (Docker based)

Usage: ./pentestlab.sh {list|status|info|start|startpublic|stop} [projectname]

 This scripts uses docker and hosts alias to make web apps available on localhost

 Ex.
 ./pentestlab.sh list
 	List all available projects
 ./pentestlab.sh status
    Show status for all projects
 ./pentestlab.sh start bwapp
 	Start project and make it available on localhost
 ./pentestlab.sh startpublic bwapp
 	Start project and make it publicly available (to anyone with network connectivity to the machine)
 ./pentestlab.sh info bwapp
 	Show information about bwapp proejct

 Dockerfiles from:
  DVWA                   - Ryan Dewhurst (vulnerables/web-dvwa)
  Mutillidae II          - OWASP Project (citizenstig/nowasp)
  bWapp                  - Rory McCune (raesene/bwapp)
  Webgoat(s)             - OWASP Project
  Juice Shop             - OWASP Project (bkimminich/juice-shop)
  Vulnerable WordPress   - Custom made from github.com/wpscanteam/VulnerableWordpress
  Security Ninjas        - OpenDNS Security Ninjas AppSec Training
  Altoro Mutual          - Custom made from github.com/hclproducts/altoroj
  Vulnerable GraphQL API - Carve Systems LLC (carvesystems/vulnerable-graphql-api)

Podemos listar las aplicaciones disponibles:

$ ./pentestlab.sh list
Available pentest applications
  bwapp 		- bWAPP PHP/MySQL based from itsecgames.com
  webgoat7		- OWASP WebGoat 7.1
  webgoat8		- OWASP WebGoat 8.0
  webgoat81		- OWASP WebGoat 8.1
  dvwa     		- Damn Vulnerable Web Application
  mutillidae		- OWASP Mutillidae II
  juiceshop		- OWASP Juice Shop
  vulnerablewordpress	- WPScan Vulnerable WordPress
  securityninjas	- OpenDNS Security Ninjas
  altoro		- Altoro Mutual Vulnerable Bank
  graphql		- Vulnerable GraphQL API

Para iniciar una aplicación, por ejemplo altoro, ejecutamos el siguiente comando, el cual descargará el Container y lo arrancará en modo demonio, es decir que lo dejará arrancado en el sistema.

$ ./pentestlab.sh start altoro
Starting Altoro Mutual
Adding altoro to your /etc/hosts
127.14.0.1	altoro was added succesfully to /etc/hosts
not set
Running command: docker run --name altoro -d -p 127.14.0.1:80:8080 eystsen/altoro
Unable to find image 'eystsen/altoro:latest' locally
latest: Pulling from eystsen/altoro
a4d8138d0f6b: Pull complete 
dbdc36973392: Pull complete 
f59d6d019dd5: Pull complete 
aaef3e026258: Pull complete 
5e86b04a4500: Pull complete 
1a6643a2873a: Pull complete 
2ad1e30fc17c: Pull complete 
16f4e6ee0ca6: Pull complete 
928f4d662d23: Pull complete 
b8d24294d525: Pull complete 
02e8abd43b15: Pull complete 
ae46b49889dd: Pull complete 
Digest: sha256:8f9ab500ecb1871f24bed0a9b74f318c8c6bd15c35f0b928181942346552f3a8
Status: Downloaded newer image for eystsen/altoro:latest
be0e2ea77f8abcada9acb8ee00f3a4609bcd339da28dab83e5ce2374f443f2f4
DONE!

Docker mapped to http://altoro or http://127.14.0.1

Sign in with username jsmith and password demo1234 to initialize database.
Second known credential is admin/admin

Ahora podríamos acceder a la aplicación desde cualquiera de las URL que indican http://altoro o http://127.14.0.1

El arrancarlo en modo demonio (-d) genera un problema de seguridad, por lo que recuerda apagar y eliminar, si es posible, el Container una vez finalices con el.

$ docker container ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
be0e2ea77f8a        eystsen/altoro      "catalina.sh run"   3 minutes ago       Up 3 minutes        127.14.0.1:80->8080/tcp   altoro

Para parar el Container usaríamos el comando:

docker container stop altoro

Si queremos eliminarlo:

docker container rm altoro

Conclusiones

Cuidar nuestro aprendizaje y entrenamiento contínuos es muy importante en el mundo de la Ciberseguridad y el Pentesting, y con Docker tenemos a nuestra disposición herramientas muy potentes para poder realizarlo de manera sencilla y límpia para nuestro sistema.

Lo que hay que tener en cuenta es el riesgo que conlleva utilizar estas aplicaciones vulnerables, debiendo tener mucho cuidado en como las utilizamos, dónde y sobre todo como las dejamos desplegadas, ya que podemos estar ofreciendo vías de entrada a nuestro sistema si las descuidamos una vez finalizamos su uso.

Ahora solo toca disfrutar dándoles caña!!!! 😀


Enlaces de interés

Docker
DockerHub
DVWA
DVWA en DockerHub
OWASP Mutillidae II
Mutillidae II en DockerHub
OWASP WebGoat
Github OWASP WebGoat
bWAPP
bWAPP en DockerHub
PentestLab Management Script