🪬
Gzzcoo Pentest Notes
HomeWalkthroughs
  • Home
  • ACTIVE DIRECTORY PENTESTING
    • Initial Enumeration
      • Enumerating users
    • Abusing Active Directory ACLs/ACEs
      • Shadow Credentials
      • GenericWrite
      • ForceChangePassword
    • Active Directory Certificate Services (ADCS)
    • Attacking Kerberos
    • BloodHound
    • Tools
      • bloodyAD
      • Kerbrute
      • Impacket
      • ldapsearch
      • PowerView.py
  • WINDOWS PENTESTING
    • Windows Privilege Escalation
      • Abusing Tokens
      • AD Recycle Bin Group
      • DnsAdmins to DomainAdmin
      • Dumping credentials
        • Credential Hunting
        • LSASS
        • NTDS.dit
        • SAM and SYSTEM
      • Server Operators Group
  • Windows Lateral Movement
    • Pass the Hash (PtH)
    • Pass the Ticket (PtT)
      • From Windows
      • From Linux
    • Pass the Cert (PtC)
  • File Transfer
    • PowerShell
    • Remote Desktop Protocol (RDP)
    • LOLBAS
    • Protected File Transfers
    • Catching Files over HTTP/S
    • Detection and Evading Detection
  • Reverse Shell
  • PowerShell
  • LINUX PENTESTING
    • Basic Enumeration
    • Linux Privilege Escalation
  • File Transfer
    • Protected File Transfers
    • Catching Files over HTTP/S
    • GTFOBins
  • Shells
  • Reverse Shell
  • Credential Hunting
  • Passwd, Shadow & Opasswd
  • NETWORK SERVICES PENTESTING
    • FTP Port (21)
    • SSH Port (22)
    • DNS Port (53)
    • SMB Port (139, 445)
    • MSSQL Port (1433)
    • MySQL Port (3306)
    • RDP Port (3389)
  • PostgreSQL Port (5432, 5433)
  • Attacking Email Services
  • Pivoting, Tunneling and Port Forwarding
  • WEB PENTESTING
    • Local File Inclusion (LFI)
  • LaTeX Injection
  • Cypher Injection
  • Cross-Site Scripting (XSS)
  • TOOLS
    • John The Ripper
    • NetExec
    • Smbmap
    • Evil-WinRM
  • REVERSING
    • Windows executables and DLL's
    • Android APK
Con tecnología de GitBook
LogoLogo

© 2025 Gzzcoo Corp.

En esta página
  • Passwd File
  • Shadow File
  • Opasswd
  • Cracking Linux Credentials
  • Unshadow
  • Hashcat - Cracking Unshadowed Hashes
  • Hashcat - Cracking MD5 Hashes

¿Te fue útil?

Exportar como PDF

Passwd, Shadow & Opasswd

En las distros Linux se pueden usar varios mecanismos de autenticación, pero uno de los más comunes y estándar es PAM (Pluggable Authentication Modules).

Los módulos principales se llaman pam_unix.so o pam_unix2.so, y en sistemas basados en Debian se encuentran en:

/usr/lib/x86_64-linux-gnu/security/

Estos módulos se encargan de manejar todo lo relacionado con los usuarios: autenticación, sesiones, contraseñas actuales y antiguas.

Por ejemplo, cuando usamos el comando passwd para cambiar la contraseña, PAM se activa, toma medidas de seguridad y gestiona todo el proceso como debe ser.

El módulo pam_unix.so usa llamadas estándar a las librerías del sistema para actualizar la info de la cuenta. Los archivos que maneja directamente son:

  • /etc/passwd

  • /etc/shadow

Además, PAM puede usar otros módulos según lo necesitemos, como para autenticación con LDAP, Kerberos, o incluso para montar recursos.


Passwd File

El archivo /etc/passwd guarda información sobre todos los usuarios del sistema y puede ser leído por cualquier usuario o servicio.

Cada línea del archivo representa un usuario y está formada por siete campos, separados por dos puntos (:), que actúan como una especie de base de datos simple.

Un ejemplo de cómo se ve una entrada típica sería algo así:

Passwd Format

gzzcoo:x:1001:1001:Gzzcoo:/home/gzzcoo:/bin/bash
  • Nombre de usuario → gzzcoo

  • Contraseña (x) → Un x significa que la contraseña está en /etc/shadow

  • UID → Identificador del usuario, por ejemplo 1001

  • GID → ID del grupo principal del usuario

  • Comentario o nombre completo → Gzzcoo

  • Directorio home → /home/gzzcoo

  • Shell por defecto → /bin/bash

El campo más interesante para nosotros en el archivo /etc/passwd es el de la contraseña, porque puede tener diferentes valores.

En sistemas muy antiguos, es raro pero posible encontrar ahí directamente el hash de la contraseña. Si eso pasa, como el archivo es legible por todo el sistema, un atacante podría copiar ese hash y crackearlo fácilmente.

En sistemas modernos, lo normal es que ese campo tenga una x, lo que significa que el hash real está en /etc/shadow, un archivo mucho más protegido.

Ahora bien, si por error el archivo /etc/passwd es escribible, podríamos vaciar el campo de contraseña del usuario root, dejándolo así:

ANTES
root:x:0:0:root:/root:/bin/bash
DESPUÉS
root:0:0:0:root:/root:/bin/bash

Root without Password

[cry0l1t3@parrot]─[~]$ head -n 1 /etc/passwd

root::0:0:root:/root:/bin/bash


[cry0l1t3@parrot]─[~]$ su

[root@parrot]─[/home/cry0l1t3]#

Aunque estos casos no sean tan comunes, igual hay que estar atentos porque pueden aparecer fallos de seguridad por permisos mal puestos. Hay aplicaciones que piden permisos específicos sobre carpetas enteras, y si el admin no tiene mucha experiencia con Linux o con la app, puede terminar dando permiso de escritura al directorio /etc, y olvidarse de corregirlo después.

Eso abre la puerta a que un atacante modifique archivos críticos como /etc/passwd, /etc/shadow o incluso servicios.

Shadow File

Como leer los hashes de contraseñas puede comprometer todo el sistema, se creó el archivo /etc/shadow, que tiene un formato similar al /etc/passwd, pero solo guarda la info de contraseñas y su gestión.

Este archivo contiene los hashes de todas las contraseñas de los usuarios. Si un usuario aparece en /etc/passwd pero no tiene entrada en /etc/shadow, se considera inválido.

Además, solo puede ser leído por usuarios con permisos de administrador.

Shadow Format

cry0l1t3:$6$wBRzy$...SNIP...x9cDWUxW1:18937:0:99999:7:::
  • Nombre de usuario → cry0l1t3

  • Contraseña cifrada (hash) → empieza con $6$ (sha512)

  • Fecha del último cambio de contraseña (en días desde 1970)

  • Edad mínima de la contraseña (días para poder cambiarla)

  • Edad máxima de la contraseña (días antes de caducar)

  • Periodo de aviso (días antes de caducar que se avisa al user)

  • Periodo de inactividad (días después de caducar sin login)

  • Fecha de expiración de la cuenta

  • Campo no usado (vacío)

Shadow File

[cry0l1t3@parrot]─[~]$ sudo cat /etc/shadow

root:*:18747:0:99999:7:::
sys:!:18747:0:99999:7:::
...SNIP...
cry0l1t3:$6$wBRzy$...SNIP...x9cDWUxW1:18937:0:99999:7:::

En el campo de contraseña del archivo /etc/shadow, si vemos un carácter como ! o *, significa que el usuario no puede iniciar sesión con contraseña Unix. Pero sí puede autenticarse con otros métodos como Kerberos o claves SSH.

Si el campo está vacío, no se pedirá contraseña para hacer login, aunque eso puede hacer que ciertos programas le bloqueen funciones.

Los hashes tienen esta estructura:

$<type>$<salt>$<hash>

Con esto, podemos identificar el algoritmo usado:

Tipo
Algoritmo

$1$

MD5

$2a$

Blowfish

$2y$

Eksblowfish

$5$

SHA-256

$6$

SHA-512

En las distros modernas de Linux se usa por defecto SHA-512 ($6$).

En sistemas antiguos aún podemos encontrarnos con MD5, Blowfish, o SHA-256, y ahí es donde es más fácil poder crackear.


Opasswd

El módulo pam_unix.so de la biblioteca PAM permite restringir la reutilización de contraseñas anteriores. Para ello, almacena los hashes de contraseñas previamente utilizadas en el archivo:

/etc/security/opasswd

Este archivo es accesible únicamente por el usuario root, a menos que se hayan modificado sus permisos manualmente.

Reading /etc/security/opasswd

gzzcoo@htb[/htb]$ sudo cat /etc/security/opasswd

cry0l1t3:1000:2:$1$HjFAfYTG$qNDkF0zJ3v8ylCOrKB0kt0,$1$kcUjWZJX$E9uMSmiQeRh4pAAgzuvkq1

Al observar el contenido de este archivo, podemos ver que contiene varias entradas para el usuario cry0l1t3, separadas por comas (,). Otro aspecto crítico a tener en cuenta es el tipo de algoritmo de hash utilizado. En este caso, el algoritmo MD5 ($1$) es considerablemente más fácil de romper que SHA-512.

Esto es especialmente relevante para identificar contraseñas antiguas e incluso posibles patrones, ya que es común que las contraseñas se reutilicen en distintos servicios o aplicaciones. Detectar estos patrones aumenta significativamente la probabilidad de adivinar la contraseña actual.


Cracking Linux Credentials

Una vez que hayamos recopilado algunos hashes, podemos intentar descifrarlos de diferentes maneras para obtener las contraseñas en texto sin cifrar.

Unshadow

gzzcoo@htb[/htb]$ sudo cp /etc/passwd /tmp/passwd.bak 
gzzcoo@htb[/htb]$ sudo cp /etc/shadow /tmp/shadow.bak 
gzzcoo@htb[/htb]$ unshadow /tmp/passwd.bak /tmp/shadow.bak > /tmp/unshadowed.hashes

Hashcat - Cracking Unshadowed Hashes

gzzcoo@htb[/htb]$ hashcat -m 1800 -a 0 /tmp/unshadowed.hashes rockyou.txt -o /tmp/unshadowed.cracked

Hashcat - Cracking MD5 Hashes

gzzcoo@htb[/htb]$ cat md5-hashes.list

qNDkF0zJ3v8ylCOrKB0kt0
E9uMSmiQeRh4pAAgzuvkq1
gzzcoo@htb[/htb]$ hashcat -m 500 -a 0 md5-hashes.list rockyou.txt
AnteriorCredential HuntingSiguienteFTP Port (21)

Última actualización hace 2 meses

¿Te fue útil?