Saltearse al contenido

Enumeración de Linux

Tras conseguir una shell en un host Linux (normalmente de bajo privilegio), el primer trabajo es entender dónde estás antes de intentar escalar. Quién eres, qué permisos tienes, qué corre, qué hay mal configurado y qué credenciales andan sueltas. Una enumeración ordenada revela el vector de escalada casi siempre; disparar exploits a ciegas es ruidoso e innecesario.

¿quién soy y qué puedo? → ¿qué hay explotable local? → ¿a qué más llego (red/credenciales)?

id ; whoami ; groups # usuario, UID/GID, grupos (¿docker? ¿sudo? ¿adm?)
sudo -l # qué puedo ejecutar como root (¡clave! ver lin-sudo)
cat /etc/passwd # usuarios del sistema (shells válidas)
cat /etc/group # grupos (pertenencias interesantes)
history ; cat ~/.bash_history # comandos previos (a veces credenciales)

Grupos jugosos: sudo, wheel, docker (=root, ver Escape de contenedores y Docker), lxd, adm (logs), disk.

uname -a # kernel y arquitectura (para kernel exploits, ver lin-kernel)
cat /etc/os-release # distro y versión
hostname ; cat /etc/hosts

Cruza la versión del kernel con exploits conocidos (Dirty COW, Dirty Pipe, PwnKit…).

ps aux --forest # procesos y como quién corren (¿root con binarios débiles?)
ss -tulpn # puertos en escucha (servicios internos, pivoting)
systemctl list-units --type=service
cat /etc/crontab ; ls -la /etc/cron.* # tareas (¿scripts escribibles? ver lin-cron)
cat /etc/fstab # montajes (NFS, discos)

Permisos y ficheros interesantes (vectores de privesc)

Sección titulada «Permisos y ficheros interesantes (vectores de privesc)»
# binarios SUID/SGID (ver lin-suid)
find / -perm -4000 -type f 2>/dev/null
find / -perm -2000 -type f 2>/dev/null
# capabilities (ver lin-caps)
getcap -r / 2>/dev/null
# ficheros/directorios escribibles por todos
find / -writable -type d 2>/dev/null
find / -perm -o+w -type f 2>/dev/null
# archivos de configuración con credenciales
grep -riE 'password|secret|api_key' /etc /var/www /opt 2>/dev/null
cat ~/.ssh/id_rsa ~/.ssh/authorized_keys 2>/dev/null # claves SSH
cat ~/.aws/credentials ~/.config/* 2>/dev/null
find / -name "*.conf" -o -name "*.env" 2>/dev/null | xargs grep -l pass 2>/dev/null
cat /var/www/html/wp-config.php /var/www/*/config* 2>/dev/null # configs web
mysql/psql history, .netrc, .git-credentials
ip a ; ip route ; arp -a # interfaces, rutas, vecinos (¿otras subredes? ver net-pivot)
ss -tulpn # servicios internos no expuestos fuera
linpeas.sh # el enumerador todo-en-uno de referencia (lo marca todo en colores)
LinEnum.sh / linux-smart-enumeration (lse.sh)
pspy # espiar procesos/cron sin ser root (ver procesos que lanza root)

linpeas es casi obligatorio: automatiza todo lo anterior y resalta los vectores probables. pspy es oro para ver tareas cron/procesos de root sin privilegios.

Reducir la enumerabilidad y los vectores: mínimo privilegio (sin SUID/sudo innecesarios), sin credenciales en ficheros/configs (usar secretos gestionados), permisos estrictos, logging de ejecución (auditd), kernel y paquetes al día, y EDR que detecte la ejecución de linpeas/pspy y cadenas de recon post-explotación.

  • id, sudo -l, grupos (docker/lxd/sudo/adm)
  • Kernel y distro → mapear kernel exploits (Exploits de kernel en Linux)
  • SUID/SGID y capabilities (Binarios SUID/SGID, Linux capabilities)
  • Cron y servicios con scripts/binarios escribibles (Cron jobs y timers)
  • Ficheros/directorios escribibles por todos
  • Credenciales en configs, historiales, claves SSH/AWS
  • Red: otras subredes alcanzables (pivoting)
  • Correr linpeas + pspy para no dejarse nada