
Artículo · Pentesting a Aplicaciones Web
Instalación y configuración para ambiente de laboratorio de Pentest controlado por vpn y usando Docker Compose
En la actualidad para desarrollar un laboratorio de pentesting debes contar con una infraestructura propia, por lo general en todos los cursos de pentesting o ethical hacking hacen referencia a máquinas virtuales utilizando virtualbox, vmware o algún otro hypervisor lo que requiere de equipos físico o hierro y sino involucra la compra de diversas membresías en sitios famosos como Hack The Box o vulnhub y otros, para luego bajar a máquina virtual en tú laboratorio local e importarla para poder añadirla a tú infraestructura virtual, esto es sumamente tedioso pero principalmente involucra que solo podrás tener tu ambiente de práctica para trabajar localmente.
Durante un par de talleres y cursos surgió la idea de realizar un laboratorio portátil y estoy seguro no fue la única persona que se le ha ocurrido, sin embargo en este artículo lo que se busca es definir la implementación de una laboratorio portable utilizando el vps que tengamos a disposición para ellos es importante saber que no todos los vps le permiten para esta finalidad y por ello los ataques y pruebas realizadas solo afectan los contenedores utilizados y por medio de una vpn sin el objetivo de afectar la infraestructura del vps.
A continuación, presentamos los siguientes pasos para la instalación del ambiente mediante accesos con vpn.
Para crear un ambiente de pentest privado se requiere crear una red privada a la cual tendremos acceso desde una VPN.
Creando VPN docker
En búsqueda del desarrollo de este proyecto encontré un repositorio de como instalar openvpn en docker y poder conectarnos a nuestra VPN muy explicado. Adjunto la dirección sobre el sitio.
https://joanesmarti.com/servidor-openvpn-con-docker/
Los siguientes pasos son importantes para contruir nuestra vpn y usuarios específicos que se conectaran al servidor.
git clone https://github.com/kylemanna/docker-openvpn.git
cd docker-openvpn
docker build -t vpn1 .
Generando el fichero de configuración de OpenVPN
Generando los PKI y el CA
Iniciamos el contenedor
Añadiendo usuarios
Exportamos nuevo archivo ovpn para conectarnos a la VPN.
Descargamos el archivo para el usuario con formato .ovpn y conectarnos remotamente a nuestro ambiente de pentest.
Una vez tengamos nuestra vpn y usuarios configurados podemos crear nuestro docker compose para crear nuestros contenedores vulnerables.
Podemos ir adecuando el ambiente en base a contenedores de momento que queramos realizar nuestras pruebas. Imágenes vulnerables para el desarrollo de estas pruebas se pueden descargar del sitio propio de vulnhub (https://github.com/vulhub/vulhub) donde se desarrollan imágenes de dockers vulnerables para poner a pruebas nuestros conocimientos en pruebas de pentest.
A continuación presentamos el detalle del contenido de los contenedores vulnerables utilizando nuestra vpn en docker-compose:
version: '3'
services:
dojo1:
image: docker-vpn ---------------> Imagen VPN.
volumes:
- /root/vpn-data:/etc/openvpn
cap_add:
- NET_ADMIN
ports:
- "3000:1194/udp"
networks:
lab_cpp:
ipv4_address: 172.21.0.2
glassfish_4:
image: vulhub/glassfish:4.1
environment:
- ADMIN_PASSWORD=glassfish
networks:
lab_cpp:
ipv4_address: 172.21.10.4
coldfusion:
image: vulhub/coldfusion:11u3
networks:
lab_cpp:
ipv4_address: 172.21.10.6
drupal_8:
image: vulhub/drupal:8.5.0
networks:
lab_cpp:
ipv4_address: 172.21.10.8
lab_db:
drupal_db:
image: mysql:5.5
hostname: drupal_db
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=test
networks:
- lab_db
phpmyadmin_web:
image: vulhub/phpmyadmin:4.4.15.6
volumes:
- ./vulhub/phpmyadmin/CVE-2018-12613/config.inc.php:/var/www/html/config.inc.php
links:
- phpmyadmin_db
depends_on:
- phpmyadmin_db
networks:
lab_db:
lab_cpp:
ipv4_address: 172.21.10.7
phpmyadmin_db:
image: mysql:5.5
hostname: mysql
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=test
networks:
- lab_db
pentesterlabdb:
image: mysql:5.5
environment:
MYSQL_ROOT_PASSWORD: rootpasswd
MYSQL_DATABASE: exercises
MYSQL_USER: admin
MYSQL_PASSWORD: admin
networks:
- lab_db
apache_basic_auth:
image: crhystamils/apache_basic_auth
networks:
lab_cpp:
ipv4_address: 172.21.20.5
pentesterlab01:
image: crhystamils/pentesterlab01
links:
- pentesterlabdb
depends_on:
- pentesterlabdb
networks:
lab_cpp:
ipv4_address: 172.21.20.6
lab_db:
mutillidae_web:
image: crhystamils/mutillidae
links:
- mutillidae_db
depends_on:
- mutillidae_db
networks:
lab_cpp:
ipv4_address: 172.21.20.7
lab_db:
mutillidae_db:
image: mysql:5.5
environment:
MYSQL_ROOT_PASSWORD: mutillidae
MYSQL_DATABASE: mutillidae
MYSQL_USER: admin
MYSQL_PASSWORD: admin
networks:
- lab_db
juice_shop:
image: bkimminich/juice-shop
networks:
lab_cpp:
ipv4_address: 172.21.20.8
web_dvwa:
image: vulnerables/web-dvwa
networks:
lab_cpp:
ipv4_address: 172.21.20.9
networks:
lab_cpp:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.21.0.0/16
lab_db:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.22.0.0/1
NOTA: Antes de iniciar nuestro docker-compose debemos detener el primer contenedor que se creó para la vpn.
Para iniciar nuestro docker-compose configurado con vpn y docker vulnerables utilizamos el siguiente comando:
- docker-compose up -d
He de asegurarse que los contenedores se encuentren ejecutándose dentro el sistema con el comando docker ps.
Ahora podemos escanear nuestras redes configuradas en el docker-compose 172.21.20.0, 172.21.10.0 para encontrar nuestros contenedores vulnerables.
Para automatizar nuestros dominios podemos utilizar traefik, un moderno reverse proxy. En esta primera prueba hemos utilizado owasp juice shop para crear varios ambientes vulnerables con sus dominios asignados.
Si quieres conocer un poco mas de traefik: https://docs.traefik.io/
Agregamos las siguientes líneas de código a nuestro docker compose para configurar nuestro multijuice shop.
owasp:
image: bkimminich/juice-shop:v8.7.2
environment:
NODE_ENV:
labels:
- traefik.backend=owasp
- traefik.frontend.rule=Host:juice1.fisc.online
- traefik.docker.network=web
- traefik.port=3000
networks:
- web
owasp2:
image: bkimminich/juice-shop:v8.7.2
environment:
NODE_ENV:
labels:
- traefik.backend=owasp2
- traefik.frontend.rule=Host:juice2.fisc.online
- traefik.docker.network=web
- traefik.port=3000
networks:
- web
owasp3:
image: bkimminich/juice-shop
environment:
NODE_ENV:
labels:
- traefik.backend=owasp3
- traefik.frontend.rule=Host:juice3.fisc.online
- traefik.docker.network=web
- traefik.port=3000
networks:
- web
En próximos artículos se tocará el uso de juiceshop para CTF utilizando traefik.
Referencias:
- https://medium.com/@crhystamil/laboratorio-de-pentesting-docker-01-79ce41352f36
- https://joanesmarti.com/servidor-openvpn-con-docker/
- https://github.com/vulhub/vulhub
¿Quieres aprender estas técnicas en profundidad?
Continúa tu ruta con Web Application Testing.
Escrito por
Elzer PinedaConsultor de seguridad, Pentester, Threat hunting, Desarrollo, AWS, SOC, Embajador de la Comunuidad Dojo



