DockerLabs LittlePivoting

DockerLabs LittlePivoting

Esta es una máquina de DockerLabs de nivel medio

·

8 min read

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 4 archivos.

Para desplegar los laboratorios ejecutamos de la siguiente manera, así también podemos ver que nos indica las direcciones que tendremos, también el que hacer cuando terminemos estos, podemos observar que son varios debido a que se trata de un laboratorio para pivoting.

En este caso ver la descripción sería muy fácil para identificar que maquinas hacer, pero en este caso vamos a identificar cuál es la máquina a la que tenemos acceso, ya que en algún futuro nos encontremos en una situación que no tengamos esta pista.

Para identificar usaremos el comando ip a que nos mostrara todas las interfaces.

Y si vamos buscando las otras redes podemos observar que tenemos otra red que indica up la cual es la 8 y nuestra dirección para esa IP es la 10.10.10.1.

Si comparamos con la que nos indican al ejecutar las máquinas observamos que coinciden.

También para observar las direcciones IP para el segmento 10.10.10.x/24 podemos emplear nmap y tenemos que las direcciones IP activas son 10.10.10.1(Nuestra) y 10.10.10.2(inclusion).

Máquina 1 Inclusion (10.10.10.2)

Para empezar realizaremos un ping para ver si obtenemos respuesta.

Una vez comprobado, procedemos a realizar un escaneo de la dirección IP y podemos observar que tenemos 2 puestos habilitados.

Al ingresar a la dirección web podemos observar que se trata de la página de inicio default del servidor de apache2.

Si escaneamos la dirección para obtener subdirectorios podemos observar que solo identifico uno llamado shop.

Ingresamos al directorio y podemos observar una página muy simple y con un texto que indica "Error de Sistema: ($_GET['archivo']");.

Realizamos un escaneo más profundo para ver si encontramos un archivo adicional, pero no encontramos nada.

El único indicio que tenemos es el _Get y observando el tipo de archivo que es podemos ver que es un PHP. Así que con ello podemos probar usando archivo como parámetro para ver si podemos hacer un directory path traversal. Probamos intentando listar el /etc/passwd y podemos ver que tenemos éxito.

Revisamos algunos directorios que podrían contener archivos sensibles .log, pero no tenemos ningún resultado.

Ya que no tenemos ningún archivo a excepción del passwd debemos tener en cuenta que en este pudimos observar 2 usuarios aparte de root.

Como tenemos nombres de usuario y durante el escaneo de la dirección IP pudimos observar que el servicio SSH estaba habilitado probaremos a realizar fuerza bruta para identificar el password de ambos o uno de los usuarios.

Probando con cada uno de los usuarios, solo pudimos obtener el password de `manchi`.

manchi:lovely

Nos conectamos por SSH y ya estamos dentro de la primera máquina.

Una vez dentro no vamos a escalar privilegios, ya que no es el objetivo principal. Por ello veremos a qué red debemos dirigirnos. Tratamos de usar ifconfig, pero no está habilitado, probamos con hostname -I y podemos observar las 2 redes a la que pertenece.

La primera red 10.10.10.2 es a la que nos podemos conectar y tener interacción directa. La segunda 20.20.20.2 Es una red interna.

Como desconocemos la dirección IP de la siguiente máquina, realizaremos un escaneo para identificar las direcciones IP habilitadas en el rango 20.20.20.x/24. Para ello debemos hacer lo siguiente.

Crearemos un archivo mediante el cual descubriremos los hosts.

#!/bin/bash

function ctrl_c(){
        echo -e "\n\n[!] Saliendo...\n"
        tput cnorm;exit 1
}
trap ctrl_c INT

network=(20.20.20)

tput civis
for net in ${network[@]}; do
        for i in $(seq 1 254); do
                timeout 1 bash -c "ping -c 1 $net.$i" &>/dev/null && echo -e "\t[+] Host $net.$i - Active"&
        done; wait
done
tput cnorm

Luego de crear el archivo podemos observar que la red que estábamos buscando es la 20.20.20.3, ya que nuestra máquina tiene la 20.20.20.2.

Debemos tener en cuenta que:

  • 20.20.20.2 -> Inclusion

  • 20.20.20.3 -> Trust(objetivo)

Máquina 2 Trust (20.20.20.3)

Para poder empezar con esta máquina aplicaremos un Dynamic Port Forwarding. Como ya tenemos las credenciales SSH primero debemos ingresar el comando.

ssh -D 1234 manchi@10.10.10.2

Una vez hecha la conexión, tendremos que aplicar la siguiente configuración desde el fichero /etc/proxychains.conf de nuestra máquina local en la parte final del fichero:

[ProxyList]
# add proxy here ...
# meanwile
# defaults set to "tor"
socks5  127.0.0.1 1234

Con ello hecho ya deberíamos poder tener conectarnos a ese punto. Escaneamos los puertos como lo realizamos, pero para poder observar cuáles tenemos disponibles agregamos al comienzo proxychains y luego de ejecutar el comando tenemos los puertos 80 y 20.

Como tenemos el puerto 80 para poder observar agregaremos el proxy a nuestra extensión de foxyproxy para así tener conectividad en la web.

Luego de activar el proxy.

Podemos observar que ya podemos observar la página de inicio de apache2.

Una vez hecho ello, realizamos una búsqueda con gobuster y agregando el proxy podemos observar que encontramos una página llamada secret.php.

Al ingresar a la dirección podemos observar que nos indica el nombre de un usuario.

Teniendo en cuenta que también tenemos el servicio de SSH usaremos hydra para encontrar su password. Realizamos los siguientes y podemos observar que obtuvimos el password.

mario:chocolate

Ya que obtuvimos las credenciales nos conectaremos a la siguiente máquina(Trust).

proxychains ssh mario@20.20.20.3

Ya que tenemos acceso podemos observar las redes a las que pertenece.

Realizamos un sudo -l y podemos observar que podemos escalar privilegios usando vim.

Para tener idea de como elevar privilegios podemos visitar la página de GFTOBins

Ejecutamos el comando y podemos observar que ya somos root.

Si esta fuera la máquina final, ya hubiéramos terminado, pero aún debemos buscar como acceder a la red (30.30.30.X) que corresponde a la otra máquina.

Ingresamos el siguiente comando y podemos observar que mejora nuestra consola.

script /dev/null -c bash

Para poder identificar que dirección IP existen aparte de la nuestra procedemos a ejecutar el siguiente comando, pero no es posible porque no tenemos el comando ping.

for ip in $(seq 1 254); do ping -c 1 -W 1 10.10.10.$ip & done

Probamos buscando otras herramientas si están instaladas, pero no podemos observar nada.

Por ello usamos un script que identifique podemos observar que encontró:

for i in {1..254}; do
    curl -s --connect-timeout 1 http://30.30.30.$i > /dev/null && echo "30.30.30.$i is up"
done

  • 30.30.30.2 -> Trust
  • 30.30.30.3 -> Upload (objetivo)

Máquina 3 Upload (30.30.30.3)

Para poder acceder al servicio debemos realizar de nuevo un dynamic port forwarding. Para ello nos conectaremos de nuevo pero agregando el proxychains.

proxychains ssh -D 1235 mario@20.20.20.3

Una vez hecha la conexión, tendremos que aplicar la siguiente configuración desde el fichero /etc/proxychains.conf y con nuestro cambio anterior se vería algo así.

[ProxyList]
# add proxy here ...
# meanwile
# defaults set to "tor"
socks5  127.0.0.1 1234
socks5  127.0.0.1 1235

Con ello hecho ya deberíamos poder tener conectividad a ese punto ya deberíamos poder realizar un escaneo en esa dirección.

No olvidando agregar también esa dirección al proxy.

Luego de activar el proxy.

Podemos observar que es una página que nos permite observar una página donde subir archivos.

Ya que validamos la conexión y la página de uploads revisaremos si podemos encontrar el directorio donde se sube. Con ayuda de gobuster y podemos observar que encontramos un directorio llamado /uploads.

Al dirigirnos al directorio podemos observar que está vacío.

Probaremos si podemos subir archivos PHP y si los puede interpretar.

Creamos un archivo test.php.

Subimos un archivo de prueba.

Y podemos observar que el archivo se subió con éxito.

Abrimos el archivo observamos que existe la interpretación de archivos PHP.

Ahora lo que debemos realizar sería obtener una reverse shell. Pero a la shell le daremos la IP de la máquina Trust(30.30.30.2).

Subimos el archivo.

Recargamos el directorio y podemos observar que ya tenemos acceso al archivo.

Con todo esto hecho aún no podemos iniciar el listener en nuestra máquina y obtener acceso.

Lo que debemos hacer primero es montar un servicio con socat para que nos redirija el tráfico del puerto 4455 que es el que asignamos a nuestra reverse shell.

Haremos que primero redirija de la máquina Inclusión(20.20.20.2)

a la nuestra (10.10.10.1).

Como el archivo socat no lo tenemos en la máquina Inclusión debemos enviarla desde nuestra máquina local por ello iniciamos un servidor.

Luego lo descargamos en la máquina Inclusion.

Debemos dar permisos de ejecución y montamos el socat.

Este programa redirigirá el tráfico de la máquina Inclusion(20.20.20.2) por el puerto 4455 a nuestra máquina(10.10.10.1) en el puerto 4455.

Lo mismo debemos realizar, pero de la máquina Trust(30.30.30.2) a la máquina Inclusion(20.20.20.2).

Por ello primero debemos pasar el archivo socat.

Como en la máquina Inclusion también contamos con Python iniciamos el servidor HTTP aquí.

Y descargamos el archivo.

Una vez hecho ello damos permisos de ejecución y montamos el socat aquí también para que redirija de la máquina Trust(30.30.30.2) con el puerto 4455 a la máquina Inclusion(20.20.20.2) con el puerto 4455.

Con ambas redirecciones establecidas podemos iniciar nuestro listener con el puerto 4455.

Luego realizamos un clic en el archivo rvshell.php de la página /uploads.

Podemos observar que ya tenemos acceso a la máquina Upload(30.30.30.3).

Como ya estamos dentro debemos buscar como escalar privilegios.

Si hacemos un sudo -l podemos observar que podemos hacer uso del binario env Buscando en la página de GFTObins podemos observar como hacerlo.

Ingresamos ese comando y podemos observar que ya obtuvimos acceso como root. De esta manera culminando esta máquina.

Para tener una idea más clara esta es la ruta de máquinas que pivoteamos.