Demostración en vídeo de este post

 

Una de las primeras cosas que hacen falta cuando se está aprendiendo cualquier cuestión relacionada con el Hacking en general, es un entorno para realizar las pruebas y poner en práctica lo que se va aprendiendo. En este sentido, a día de hoy existen muchas alternativas para ello, desde plataformas online con retos preparados para “pegarse” unas horas de entretenimiento como HackTheBox o TryHackMe, hasta máquinas virtuales que ya se encuentran preparadas para casos muy particulares, como las que se encuentran en VulnHub. Te encuentras con entrenamientos prácticos como los que ofrecemos en Securízame  sobre temas como DFIR y Red Team, los cuales te ayudan a mejorar tus habilidades.
Si bien todas ellas son alternativas estupendas y una buena manera de aprender de verdad, en ocasiones lo que se necesita es una aplicación para entender como funciona una vulnerabilidad especifica y en este sentido, hay una buena cantidad de aplicaciones web vulnerables por diseño que ayudan en este objetivo, pero es común encontrarse con el problema de que hay que instalar y configurar de dichas aplicaciones. Por ejemplo, si se trata de una aplicación web con el stack típico basado en Apache+PHP+MySQL, será necesario instalarlo todo y luego, empezar a instalar cada aplicación web de forma independiente. En la medida en la que se vayan metiendo más aplicaciones, poco a poco se va haciendo más difícil la gestión de librerías y otros componentes, ya que si algo tienen algunas de las aplicaciones web vulnerables por diseño más conocidas es que muchas son antiguas y pueden haber problemas de incompatibilidades con librerías entre otras cosas.
Como el tiempo es un bien preciado y muy probablemente no merece la pena desperdiciarlo en la instalación/configuración de aplicaciones web que tienen vulnerabilidades comunes, la mejor alternativa es preparar un entorno completo con Docker para Hacking web.
Como verás en este post, no es una labor compleja y tiene el beneficio de que se puede hacer muy fácil y rápidamente, además, puedes montarlo todo en una máquina virtual. A continuación, detallo los pasos que se pueden seguir para conseguir el objetivo de tener un entorno para hacer pruebas de Hacking web plenamente funcional.

 

Pasos para la construcción

1. Un sistema operativo basado en Linux.

En este punto cualquier distribución que brinde comodidad y potencia a la hora de trabajar es suficiente. Siempre lo he dicho, en mi caso concreto la distribución que siempre uso y que cumple con mis expectativas es Debian, sin embargo hay que reconocer que otras distribuciones basadas en Red Hat también son una estupenda elección.

2. Instalación de Docker.

En este sentido, es un proceso más bien sencillo, ya que Docker se encuentra soportado por múltiples plataformas y distribuciones basadas en Linux, por lo tanto su instalación no requiere mucho esfuerzo y el procedimiento se encuentra bien documentado en la página web oficial.

3. Instalación de Docker-Compose.

En algunos casos las aplicaciones levantan varios contenedores y estos son gestionados por medio de “compose”. Por este motivo también será necesario instalar este componente, aunque es incluso más fácil hacerlo que el propio Docker Engine. Las instrucciones se encuentran disponibles en el siguiente enlace.

4. Selección de las aplicaciones web a instalar.

Evidentemente se deben seleccionar herramientas que se encuentren “Dockerizadas”, es decir, que cuenten con un Dockerfile que se pueda construir con el típico comando “docker build” o que haya una imagen construida en un repositorio público como “Docker Hub”. En este sentido, me he tomado la libertad de generar un listado corto de las aplicaciones web vulnerables por diseño que cumplen con este requisito y que hacen parte del “path” que se sigue cuando se aprende sobre Hacking web.

  1. DVJA (Damn Vulnerable Java Application) -> https://github.com/appsecco/dvja
  2. BodgeIT Store -> https://github.com/psiinon/bodgeit
  3. Damn Vulnerable NodeJS Application -> https://github.com/appsecco/dvna
  4. Juicy Shop (mi favorita) -> https://github.com/bkimminich/juice-shop
  5. Mutillidae -> https://github.com/BLTSEC/mutillidae-docker
  6. Java Vulnerable Lab -> https://github.com/CSPF-Founder/JavaVulnerableLab/
  7. WebGoat -> https://github.com/WebGoat/WebGoat

Hacen falta muchas, está claro. Sin embargo lo bueno que tiene la construcción de un entorno basado en Docker es que se pueden ir añadiendo más aplicaciones web vulnerables en la medida en la que se van necesitando o descubriendo. A lo mejor aparece una aplicación vulnerable que no conocías y quieres probarla rápidamente, montar todo de esta manera es mucho más cómodo y conveniente.

5. Selección de puertos y automatización.

En este punto la propuesta que te haría es definir un conjunto de puertos que estén vinculados específicamente a cada aplicación web vulnerable que tengas en tu entorno. De esta manera, sabrás qué aplicación atacar/probar en un momento determinado. Por otro lado, dada la simplicidad de estas labores, se puede automatizar de varias formas, por ejemplo creando un script en batch que ejecute los comandos de creación y ejecución de contenedores de forma secuencial o utilizando el SDK de Docker, tal como te lo comentaba un par de post sobre cómo controlar Docker desde tus scripts en Python
Por ejemplo, podrías ejecutar algo como lo siguiente en tu programa:

docker run – -rm -p 8081:8080 -it -d – -name bodgeit psiinon/bodgeit
docker run – -rm –name webgoatandwolf -d -p 8082:8080 -p 9090:9090 -e TZ=Europe/Amsterdam webgoat/goatandwolf
docker run – -rm -it -d -p 8083:80 vulnerables/web-dvwa
docker run – -rm -it -d -p 8084:3000 bkimminich/juice-shop
docker run – -name dvna -p 8085:9090 -d appsecco/dvna:sqlite

Si ejecutas las instrucciones anteriores tendrás un entorno con cinco contenedores y ahora, si abres un navegador web y accedes a los siguientes puertos verás lo siguiente:
http://IP:8081/                       ->         BodgeIT
http://IP:8082/WebGoat    ->         WebGoat
http://IP:8083/                       ->         Damn Vulnerable Web Application
http://IP:8084/                       ->         Juice Shop
http://IP:8085/                       ->         Damn Vulnerable Node Application

 



Los puertos se han puesto de forma secuencial pero se puede elegir cualquiera, lo importante es tener un mapeo que permita saber luego con qué puerto se puede acceder a cada aplicación del entorno.
A partir de este punto, ahora es cuestión de ejecutar ataques directos contra las aplicaciones web descritas utilizando las herramientas y conocimientos adquiridos sobre hacking web.
Si este post te ha gustado y quieres saber más sobre explotación en aplicaciones web utilizando herramientas como ZAP te recomiendo que te apuntes a las formaciones disponibles en la plataforma de TheHackerWay, concretamente los cursos de ZAP Básico, ZAP Avanzado y Hacking contra APIs REST te pueden resultar interesantes. Si estás pensando en acceder a las tres formaciones te recomiendo que te adquieras al paquete completo ya que de esa manera te resultará más económico.

Un saludo y Happy Hack!
Adastra.