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!!!
Tabla de contenidos
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:
- URL login http://localhost:8080/login.php
- Usuario bee
- Contraseña bug
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