Para poder hacer uso de esta máquina primero debemos descargar los archivos y así desplegarlo con Docker.
Descargamos el archivo de la página dockerlabs.es/#
Al momento de descargar esta máquina y descomprimir el archivo, en este caso observamos 2 archivos
Para desplegar el laboratorio ejecutamos de la siguiente manera, así también podemos ver que nos indica la dirección que tendremos, así también el que hacer cuando terminemos este.
Realizamos el escaneo y podemos observar que tenemos 2 puertos abiertos y en esta ocasión son el 22 y el 8080.
Al dirigirnos por el navegador a la dirección IP podemos observar lo que parece ser el login del servidor Jenkins.
Al usar Wappalyser
no nos brinda esa información
pero haciendo uso de whatweb
podemos validar que si se trata de un Jenkins con la versión 2.441.
Si escaneamos en busca de algún archivo podemos ver que tenemos varios directorios.
Probando podemos entrar a algunos que nos dan respuestas que nos serían de utilidad, como sería el /people
. Donde podemos observar tanto la versión en la parte inferior como varias opciones de botones.
Al seleccionar el botón de people
podemos observar que tenemos conocimiento de 2 posibles usuarios.
Probamos con credenciales genéricas con ambos usuarios, pero no es posible acceder. Como tenemos la versión buscaremos algún exploit para abusar de este. Revisando en Google podemos observar que tenemos varias opciones.
Para esta ocasión emplearemos de la página exploit-db
el cual descargaremos y es un archivo .py https://www.exploit-db.com/exploits/51993, ejecutamos el exploit y podemos ver que nos mostró la información del archivo que buscábamos.
Sabemos que podemos leer archivos, primero buscaremos credenciales de los usuarios de Jenkins, para ello leeremos el archivo /var/jenkins_home/users/users.xml
porque este archivo contiene los usuarios creados, información de credenciales, así como permisos y roles. Ejecutando el comando podemos observar que id del usuario.
Ya que contamos el identificador de usuario, lo que haremos es aprovecharnos de esto para poder ver su archivo de configuración en la cual se encuentra su password en formato Hash. El directorio sería /var/jenkins_home/users/admin_12889897452908761772/config.xml
una vez ejecutada el exploit podemos observar que obtuvimos el passwordhash.
Para poder romper el hash lo guardamos en un archivo que llamaremos hash probamos el obtener el password, pero no es posible, ya que no se encuentra en el diccionario.
Ya que no es posible obtener acceso de esta manera probaremos por ssh, ya que debemos recordar que al realizar la primera prueba pudimos leer el archivo passwd
y si regresamos a revisarlo tenemos 2 usuarios que nos llaman la atención bobby
y pinguinito
.
Haciendo uso de hydra podemos ver que solo pudimos obtener el password de Bobby.
Nos conectamos por ssh con las credenciales obtenidas y podemos observar que ya somos el usuario Bobby
Al realizar sudo -l
observamos que podemos escalar privilegios como el usuario pinguinito haciendo uso del binario de python3
Para aprovechar esto vamos a la página GTFOBins y buscamos Python y deberíamos ejecutar el código que observamos en la sección de sudo
, pero debemos tener en cuenta otras antes, ya que no es para ser root. https://gtfobins.github.io/gtfobins/python/#sudo
antes de ejecutar el comando completo debemos agregar un -u pinguinito
, porque los permisos los tenemos para ese usuario. Si ingresamos el comando de manera correcta podemos ver que ya somos el usuario pinguinito.
Con el usuario pinguinito volvemos a ejecutar sudo -l
y podemos observar que tenemos el mismo permiso, pero esta vez sí podemos optar por ser root, pero solo se da ejecutando un archivo llamado script.py.
Nos dirigimos a ver el script, podemos observar, que somos los propietarios y cuenta con los permisos de lectura y ejecución, abrimos el archivo y podemos observar que el script tiene la función de copiar el archivo /opt/
script.py
al directorio /tmp
con el nombre script_
backup.py
para luego imprimir un mensaje indicando que el archivo ha sido copiado exitosamente.
Sin olvidar que somos los propietarios, probamos agregarle permisos de escritura y observamos que se ejecutó de manera exitosa, ahora podemos aprovecharnos de eso.
Debido a que ahora cuenta con permisos de escritura, cambiaremos el archivo por uno que nos permita obtener una nueva shell.
echo 'import os; os.system("/bin/sh")' > script.py
Para obtener el acceso como root debemos ejecutar el archivo considerando las condiciones que observamos al realizar el sudo -l
. Lo cual sería de la siguiente manera y si todo está correcto ya tendríamos acceso como root y de esta manera hemos culminado la máquina.