From 3bba7cc504b80cb14ee0d1b25669a6768eb2ab2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=BE=E5=B3=B6=E9=A3=8E=E8=B5=B7=E6=99=82?= Date: Sat, 27 Sep 2025 22:15:00 +0800 Subject: [PATCH] Add files via upload --- Chapter9/9-4.md | 76 +++++++++++++++++++++++++++++++++++++++++++++++++ Chapter9/9-5.md | 32 +++++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 Chapter9/9-4.md create mode 100644 Chapter9/9-5.md diff --git a/Chapter9/9-4.md b/Chapter9/9-4.md new file mode 100644 index 0000000..83dbfb9 --- /dev/null +++ b/Chapter9/9-4.md @@ -0,0 +1,76 @@ +### 说说 PAM 软连接提权 / 后门原理 + +**一、PAM 软连接提权的核心原理** + +PAM 软连接提权攻击并非针对 PAM 框架本身的漏洞,而是针对**某个依赖 PAM 进行认证或配置的**、**以高权限运行的服务或程序** + +**1. 提权攻击的三个关键要素** + +| 要素 | 描述 | +| ---------------------------- | ------------------------------------------------------------ | +| **高权限写入操作** | 存在一个以 **Root 或其他高权限用户** 身份运行的服务或程序,它会在特定时刻对某个文件执行 **写入**、**创建** 或 **修改** 操作 | +| **可预测或可控制的文件路径** | 这个高权限程序操作的文件路径是 **可预测的**,或者攻击者可以 **控制** 该程序操作的路径(例如,写入一个日志文件或临时文件) | +| **软连接(Symlink)** | 攻击者在程序操作之前,用一个 **软连接** 替换掉预期的目标文件。这个软连接指向攻击者希望修改的 **敏感系统文件**(如 `/etc/passwd`、`/etc/shadow` 或 PAM 配置文件本身) | + + + +**2. PAM 相关的攻击流程** + +PAM 相关的软连接提权通常发生在以下场景: + +1. **低权限用户**发现一个**高权限程序**(例如,一个系统服务、一个设置工具,甚至某些 `sudo` 配置允许的命令)在运行时,会以 **高权限**身份在某个**可预测的**路径下创建一个**临时文件**或**日志文件** + +2. 攻击者通过以下步骤发起攻击: + + - **步骤 1:删除/准备**:确保目标临时文件(例如 `/var/tmp/service.log`)不存在,或者可以被低权限用户删除 + + - **步骤 2:创建软连接**:在临时文件的位置,**创建一个软连接**,将其指向受保护的敏感文件,例如 `/etc/passwd` 或 `/etc/shadow` + + ```bash + # 假设高权限程序会写入 /tmp/privileged_log.txt + ln -sf /etc/shadow /tmp/privileged_log.txt + ``` + + - **步骤 3:触发高权限操作**:攻击者触发那个高权限程序运行 + + - **步骤 4:欺骗成功**:高权限程序启动后,尝试以**Root 权限**写入 `/tmp/privileged_log.txt`。但由于软连接的存在,程序实际上将数据写入了**/etc/shadow**(或 `/etc/passwd`) + +3. **最终结果**:攻击者成功地以 Root 权限修改了敏感系统文件,例如在 `/etc/shadow` 中插入了一个新的、拥有 Root 权限的账户或修改了现有账户的密码哈希,从而实现提权 + +**二、PAM 软连接后门原理** + +PAM 软连接提权是利用**文件操作**的缺陷;而 PAM 后门则更直接地针对**PAM 的配置和模块加载机制** + +PAM 的灵活性允许系统管理员通过修改**/etc/pam.d/**目录下的配置文件,来控制每个应用程序(如 `sshd`、`login`、`sudo`)如何进行认证、账户管理、会话启动等 + +PAM 后门的核心原理就是:**修改 PAM 配置文件,或将恶意 PAM 模块植入到配置中** + +**1. 恶意 PAM 模块植入** + +这是最常见的 PAM 后门方式,一旦成功,**任何**经过被修改的 PAM 服务的认证都将被记录或绕过 + +1. **编写恶意模块**:攻击者编写一个恶意的 PAM 模块(一个 `.so` 文件,例如 `pam_evil.so`) + + - 该模块可以实现**无密码登录**(即始终返回 `PAM_SUCCESS`) + - 或实现**凭证记录**(将输入的用户名和密码记录到攻击者可访问的文件中) + +2. **植入配置**:如果攻击者已经以某种方式获得了 Root 权限(例如通过前面提到的软连接提权),他们会修改目标服务的 PAM 配置文件(例如 `/etc/pam.d/sshd`): + + ```bash + # /etc/pam.d/sshd 示例 (被修改后) + auth required pam_permit.so + # 在这里插入恶意模块 + auth sufficient /lib/security/pam_evil.so debug + # ... 其他行 + ``` + +3. **结果**:当用户通过 SSH 登录时,PAM 框架加载 `pam_evil.so`。如果该模块被配置为 `sufficient`,它将立即返回成功,允许攻击者或任何指定用户以该模块设定的方式(例如,使用任何密码)登录系统 + +**2. 软连接在后门中的应用** + +软连接提权可以作为 **实现 PAM 后门** 的 **前置步骤** + +如果攻击者发现某个高权限程序会写入一个文件,且该文件路径位于 `/etc/pam.d/` 目录附近或 `/lib/security/` 目录下(PAM 模块的常见存放位置),攻击者就可以利用软连接欺骗该高权限程序,将: + +- 恶意 PAM 模块(`.so` 文件)写入 `/lib/security/` 目录 +- 或者修改 `/etc/pam.d/` 下的某个服务配置文件 \ No newline at end of file diff --git a/Chapter9/9-5.md b/Chapter9/9-5.md new file mode 100644 index 0000000..9f7afa6 --- /dev/null +++ b/Chapter9/9-5.md @@ -0,0 +1,32 @@ +### 如何不记录执行命令 + +**1. 临时禁用历史记录** + +在执行敏感操作之前,你可以临时修改或禁用 Shell 记录机制: + +| 方法 | 命令示例 | 效果和原理 | +| ------------------------ | --------------------------- | ------------------------------------------------------------ | +| **清除环境变量** | `unset HISTFILE` | **临时移除** 历史文件路径变量。Shell 将无法找到写入历史记录的文件,操作期间的命令不会被记录 | +| **清空历史缓冲区** | `history -c` | 清除当前 Shell 会话 **内存中** 的历史记录缓冲区。在会话结束前执行可确保本次命令不写入文件 | +| **设置历史记录大小为零** | `export HISTSIZE=0` | 将 Shell 内存中可存储的历史命令数量设置为 `0`。如果执行此操作,当前会话中的命令将不会被记录 | +| **组合使用(推荐)** | `export HISTFILE=/dev/null` | 将历史文件重定向到 `/dev/null`(黑洞文件)。这样,所有的历史记录输出都会被丢弃,不会写入任何可追踪的文件 | + +**操作流程:** + +1. 进入 Shell 后执行:`export HISTFILE=/dev/null` +2. 执行你的权限维持命令(例如:植入后门、修改配置) +3. 操作完成后,退出 Shell 或执行 `unset HISTFILE` 恢复正常环境 + +**2. 使用空格或特殊字符** + +Bash Shell 默认有一个配置变量 **`HISTCONTROL`**。如果它被设置为 `ignorespace`(或包含该值,这也是许多发行版的默认设置),那么在命令前面加一个空格,该命令就不会被写入历史文件 + +- **执行示例:** + + ```bash + # 注意,这里的每个命令前都有一个空格 + ls -la + export PATH=/tmp:$PATH + ``` + +- **注意:** 如果 `HISTCONTROL` 被设置为 `ignoreboth`,则包含空格和重复的命令都会被忽略 \ No newline at end of file