Buscar contraseñas tras la intrusión: ficheros, backups y reutilización

Dónde buscar contraseñas cuando ya tienes shell: configuración de la web, bases de datos, historiales, backups cifrados y cómo probar cada una con todos los usuarios.

· 5 min de lectura

Cuando consigues tu primera shell en una máquina de Hack The Box, casi siempre eres www-data o un usuario de servicio. El salto al usuario siguiente rara vez es un exploit: es una contraseña olvidada en un fichero que alguien reutilizó para su cuenta. En el catálogo de PwnAtlas es, con diferencia, la técnica más repetida: aparece en casi un centenar de máquinas.

Esta guía es el método que conviene seguir siempre, en este orden, antes de lanzar exploits de kernel o perderte con linpeas.

Lo mínimo que tienes que saber

  • Las aplicaciones web necesitan la contraseña de su base de datos en claro en algún fichero. Esa contraseña suele ser también la de un usuario del sistema.
  • Las bases de datos guardan los usuarios de la aplicación, normalmente con hashes que puedes crackear.
  • Los backups (.zip, .tar, .7z, .bak, .old) guardan versiones antiguas de todo lo anterior, a veces con contraseñas que ya se cambiaron en el original.
  • Toda contraseña que encuentres se prueba con todos los usuarios y todos los servicios. Es lo que más gente se salta.

Requisitos

Paso 1: quién hay en la máquina

Antes de buscar contraseñas, apunta a quién se las vas a probar:

grep -E 'sh$' /etc/passwd | cut -d: -f1
ls /home
root
mtz

Esos son los usuarios con shell. Guárdalos en un fichero usuarios.txt en tu máquina.

Paso 2: la configuración de la aplicación web

Ve a la raíz de la web (/var/www, /srv, /opt) y busca los ficheros de configuración típicos de cada tecnología:

Tecnología Fichero
WordPress wp-config.php
Laravel y casi todo lo moderno .env
Joomla configuration.php
Drupal sites/default/settings.php
Django settings.py
Spring application.properties o application.yml
Rails config/database.yml
Node config.js, .env, config/default.json
Tomcat conf/tomcat-users.xml

Si no sabes qué aplicación es, busca a lo bruto:

grep -rniE "(pass(word|wd)?|pwd|secret|token)\s*[=:>]" /var/www /opt /srv /etc 2>/dev/null \
  | grep -viE "\.(js|css|svg)|placeholder|example" | head -50
/var/www/chamilo/app/config/configuration.php:20:$_configuration['db_password'] = '...';

El 2>/dev/null es imprescindible: sin él la salida se llena de Permission denied. El segundo grep quita ruido de librerías JavaScript.

Truco

En PermX la contraseña de la base de datos de Chamilo es la del usuario mtz; en Boardlight, la del conf.php de Dolibarr sirve para larissa; y en TwoMillion, la del .env es la de admin por SSH. Tres máquinas, el mismo patrón.

Paso 3: dentro de la base de datos

Con la contraseña de la base de datos, entra y saca los usuarios de la aplicación:

mysql -u chamilo -p -h 127.0.0.1 -e 'show databases;'
mysql -u chamilo -p -h 127.0.0.1 chamilo -e 'select username,password from user;'

Si la aplicación usa SQLite, el fichero suele llamarse *.db, *.sqlite o *.sqlite3:

find / -name "*.db" -o -name "*.sqlite*" 2>/dev/null | grep -v -E "^/(proc|usr/share|sys)"
sqlite3 app.db '.tables'
sqlite3 app.db 'select * from users;'

Los hashes que saques se crackean en tu máquina. Identifica el formato antes de lanzar nada ($2y$ es bcrypt, $6$ es SHA-512 crypt, 32 caracteres hexadecimales suele ser MD5).

Paso 4: historiales y ficheros personales

Mira en cada /home/* al que tengas acceso y en /root si puedes leerlo:

ls -la /home/*/ 2>/dev/null
cat /home/*/.bash_history /home/*/.mysql_history /home/*/.python_history 2>/dev/null
find / \( -name ".git-credentials" -o -name ".netrc" -o -name ".pgpass" -o -name "*.kdbx" \
  -o -path "*/.docker/config.json" \) 2>/dev/null
  • .bash_history a veces tiene un mysql -u root -pContraseña o un sshpass.
  • .git-credentials guarda usuario y token en claro.
  • Un .kdbx es una base de datos de KeePass: keepass2john fichero.kdbx > hash y a crackear.
  • Las claves privadas SSH tienen su propia guía de claves SSH.

Paso 5: backups y comprimidos

Los backups aparecen en /var/backups, /opt, la raíz de la web o el home de alguien. Búscalos por extensión:

find / \( -name "*.bak" -o -name "*.old" -o -name "*.zip" -o -name "*.tar*" -o -name "*.7z" \
  -o -name "*backup*" \) -type f 2>/dev/null | grep -v -E "^/(proc|usr|sys|snap)"

Si un comprimido tiene contraseña, sácalo a tu máquina y crackéalo:

zip2john backup.zip > zip.hash
john --wordlist=/usr/share/wordlists/rockyou.txt zip.hash
admin@it         (backup.zip)

Para 7-Zip usa 7z2john. En Tabby la contraseña del zip de la web es la del usuario ash; en Surveillance un volcado antiguo de la base de datos guarda el hash de matthew; y en Netmon la copia de la configuración de PRTG tiene una contraseña con el año anterior: prueba con el año actual.

Cuidado

Los zip con cifrado AES no se crackean con el formato de ZipCrypto. zip2john lo detecta solo, pero si john dice No password hashes loaded, revisa que el fichero no esté corrupto (un unzip -l backup.zip debe listar el contenido).

Paso 6: probar cada contraseña con todos

Con la lista de usuarios y la de contraseñas encontradas, pruébalas todas. Dentro de la máquina, con su:

su mtz

Desde tu máquina, contra SSH, en bloque:

nxc ssh 10.10.11.23 -u usuarios.txt -p contrasenas.txt --continue-on-success
SSH  10.10.11.23  22  10.10.11.23  [+] mtz:<contraseña>  Linux - Shell access!

En Windows y Active Directory, lo mismo contra SMB y WinRM (nxc smb y nxc winrm). Si hay muchos usuarios de dominio, lee antes la parte de password spraying de la enumeración de Active Directory para no bloquear cuentas.

En Windows

Los equivalentes rápidos, desde PowerShell:

Get-ChildItem C:\inetpub,C:\Users,C:\ -Include *.config,*.xml,*.ini,*.txt,*.kdbx -Recurse -ErrorAction SilentlyContinue | Select-String -Pattern "password" -List
type $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt

El historial de PowerShell, los ficheros unattend.xml y las credenciales guardadas están en la guía de volcado de credenciales en Windows.

Errores típicos

  • su: must be run from a terminal: tu shell no es una TTY. Estabilízala primero.
  • La contraseña funciona con su pero no por SSH: el servidor puede tener PasswordAuthentication no o limitar usuarios con AllowUsers. Entra con su y deja tu clave SSH.
  • grep tarda una eternidad: no busques en / entero; limita a /var/www, /opt, /srv, /home y /etc.
  • Contraseñas con caracteres especiales: ponlas entre comillas simples en la terminal; con $ o ! entre dobles, bash las cambia.
  • El hash no crackea con rockyou: prueba con reglas (--rules=best64 en hashcat) o con variaciones de las contraseñas que ya tienes.

Y después

Marca el apartado de credenciales en la checklist de post-explotación y sigue con la escalada por sudo, SUID y capabilities. Los comandos de búsqueda de linPEAS automatizan buena parte de esto, pero ya sabes qué está mirando.

Practícalo en máquinas reales

Máquinas de Hack The Box donde se usa la técnica. Cada ▶ salta al minuto del vídeo de IppSec donde aparece.

Credenciales en ficheros 99 máquinas

Ver las 99 máquinas →

Reutilización de contraseñas 24 máquinas

Ver las 24 máquinas →

Backups y archivos comprimidos 23 máquinas

Ver las 23 máquinas →

¿Ves un error o echas algo en falta? Cuéntanoslo