Artículo · Pentesting a Aplicaciones Web

Instalación y configuración para ambiente de laboratorio de Pentest controlado por vpn y usando Docker Compose

EPElzer Pineda 5 min de lectura

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:

  1. https://medium.com/@crhystamil/laboratorio-de-pentesting-docker-01-79ce41352f36
  2. https://joanesmarti.com/servidor-openvpn-con-docker/
  3. https://github.com/vulhub/vulhub

 

 

 

 

 

¿Quieres aprender estas técnicas en profundidad?

Continúa tu ruta con Web Application Testing.

EP

Escrito por

Elzer Pineda

Consultor de seguridad, Pentester, Threat hunting, Desarrollo, AWS, SOC, Embajador de la Comunuidad Dojo

Sigue leyendo

Sqlmap - ejemplo con metasploitable2
Pentesting a Aplicaciones Web

Sqlmap - ejemplo con metasploitable2

MMartin Frias

Hola, soy Martin Frias y en esta vez hablaré un poco sobre Sqlmap, Sqlmap es una herramienta que permite automatizar las inyecciones sql. La inyección sql es una vulnerabilidad que nos permite la inyección de código sql para que pueda ser ejecutado e interpretado y así obtener información de la base de datos, información a la que normalmente no deberíamos tener acceso, yo recomiendo fuertemente aprender lenguaje sql, para poder saber hacer inyecciones slq de forma manual, de manera que  si vas a usar herramientas automatizadas como sqlmap, por ejemplo, que sea por ahorrar algo de tiempo, porque siempre es mejor saber qué está haciendo un herramienta por detrás, no solo escribir un comando y no saber exactamente qué acabamos de hacer.

Portainer es una herramienta web open-source: Gestor Web para Docker
Pentesting a Aplicaciones Web

Portainer es una herramienta web open-source: Gestor Web para Docker

Javier Candia

En los últimos años, las tecnologias de irutalizacioon de servicios y plataformas ha tomado poder en el mundo de las implementaciones. Uno de ellos es Docker, el cuál nos permite automatizar el despliegue de aplicaciones dentro de contenedores de software. A grandes ragos, Docker permite meter en un contenedor (un entorno cerrado) aquellas cosas que mi aplicación necesita para ser ejecutada (java, Maven, tomcat…) y la propia aplicación. Ese contenedor puede llevarse a cualquier máquina que tenga instalado Docker y ejecutar la aplicación independientemente de qué sistema operativo es, de si son compatibles o no.

Evil Limiter
Pentesting a Aplicaciones Web

Evil Limiter

Erik Garcia

Si se encuentra con un compañero de cuarto que acapara el ancho de banda de datos limitado con videojuegos o descubre que un vecino se ha invitado a su red Wi-Fi, puede recuperar fácilmente el control de su acceso a Internet. Evil Limiter hace esto al permitirle controlar la velocidad de bits de cualquier dispositivo en la misma red que usted, lo que le permite reducir o incluso detener la velocidad de transferencia de datos por completo.